SmarterTravel.Module.BBDN=Class.create({fetchUrl:"/ajax/st-bbdn.php",dealCount:7,deals:$H(),fetcher:false,defaultMode:"air",validRequestParameters:["stm_destination_id","placement","auto_backfill"],requestParameters:$H(),tabsReady:false,clientReady:false,container:null,deal_template:new Template('<tr><td class="sd_price">#{price}</td><td><a href="#{url}" onclick="#{click_code}" target="_blank" rel="nofollow">#{title}</a><br />#{source}</td></tr>'),initialize:function(a,b){this.container=$(a);this.loadOptions(b);STLibraryJS.Tabs.observeStartup(this.handleTabsReady.bind(this));STLibraryJS.Tabs.observeTabClicks(this.handleTabClick.bind(this),a)},handleTabClick:function(c,a){var b=c.findElement("li");var d=b.identify().replace(/sd_([^_]+)_nav/,"$1");this.selectMode(d)},selectMode:function(b){if(this.fetcher&&(this.fetcher.transport.readyState<4)){this.fetcher.transport.abort()}if(this.hasContent(b)){return}var a=this.deals.get(b);if(Object.isArray(a)&&a.length>0){this.insertDeals(b,a)}else{this.fetchDeals(b)}},handleTabsReady:function(){this.tabsReady=true;this._show()},show:function(){this.clientReady=true;this._show()},_show:function(){if(this.tabsReady&&this.clientReady){this.container.show();var a="sd_"+this.defaultMode+"_nav";STLibraryJS.Tabs.forceActiveTab(a);this.selectMode(this.defaultMode)}},loadOptions:function(b){b=$H(b);var d=b.get("deals");if(!Object.isUndefined(d)){this.deals=$H(d)}var c=b.get("requestParameters");if(!Object.isUndefined(c)){this.loadRequestParameters(b.get("requestParameters"))}var a=b.get("defaultMode");if(a){this.defaultMode=a}},loadRequestParameters:function(e){if(!e){return false}e=$H(e);for(var c=0,d=this.validRequestParameters.length;c<d;c++){var b=this.validRequestParameters[c];var f=e.get(b);if(!Object.isUndefined(f)){this.requestParameters.set(b,f)}}var a=this.requestParameters.get("auto_backfill");if(Object.isUndefined(a)||a===null){this.requestParameters.set("auto_backfill",true)}return true},fetchDeals:function(b,c,a){if(!this.clientReady){return}b=Object.isUndefined(b)?this.defaultMode:b;a=a||this.requestParameters.clone();c=Object.isFunction(c)?c:this.handleResponse.bind(this);a.set("deal_type",b);this.fetcher=new Ajax.Request(this.fetchUrl,{onSuccess:c,onFailure:this.handleFailure.bind(this),parameters:a})},handleFailure:function(b){var a=$H(b.request.parameters).get("deal_type");this.error(a,0)},handleResponse:function(e){var a=e.responseText.evalJSON(true);var c=$H(e.request.parameters);var d=c.get("deal_type");if(Object.isString(d)&&Object.isArray(a)){this.insertDeals(d,a)}else{var b=$H(a).get("error");if(!this.hasContent(d)){this.error(d,b)}}},error:function(e,c){var d=true;switch(c){case 1:var b="No deals were found";break;case 0:default:var b="Oops! Click on tab to retry";d=false}var a='<div class="sd_notice">'+b+"</div>";this.setModeContent(e,a,d);return c},insertDeals:function(e,d){var a="<table>";for(var b=0,c=d.length;b<c;++b){a+=this.deal_template.evaluate(d[b])}a+="</table>";this.setModeContent(e,a)},setModeContent:function(c,b,d){if(Object.isUndefined(d)){d=true}var a=this.container.down("#sd_deals_sections #sd_"+c+" .sd_slot");if(a){a.update(b);if(d){a.addClassName("loaded")}}},hasContent:function(b){var a=this.container.down("#sd_deals_sections #sd_"+b+" .sd_slot");return Object.isElement(a)&&a.hasClassName("loaded")}});