var BookingBuddy={Date:{},Calendar:{},LT:{},LE:{},Search:{},AFS:{},Dropdown:{},Aircodes:{},Tools:{},Weather:{},UK:{},Deals:{},IPLocation:{},domain:null,searchMode:null,slideStatus:$H(),slidingFactor:7,uniqueIDCounter:1,init:function(D,C,B){fixes=[".FinePrint.aircode_link","div.forminputs div.hotelsearchfields .formelement label span.js"];for(fn=0,ft=fixes.length;fn<ft;fn++){fix=$$(fixes[fn]);for(a=0,b=fix.length;a<b;a++){fix[a].setStyle({display:"inline"})}}var A=$$("span.non");for(a=0,b=A.length;a<b;a++){A[a].setStyle({display:"none"})}if(!B&&(top!=self)){top.location.replace(self.location.href)}BookingBuddy.domain=C;BookingBuddy.searchMode=D},emitEvent:function(C,B){if(!C){return }if(document.createEvent){var A=document.createEvent("HTMLEvents");A.initEvent(B,true,false);$(C).dispatchEvent(A)}else{if(document.createEventObject){$(C).fireEvent("on"+B)}}},getCookie:function(C){var B=document.cookie;var E=C+"=";var D=B.indexOf("; "+E);if(D==-1){D=B.indexOf(E);if(D!=0){return null}}else{D+=2}var A=document.cookie.indexOf(";",D);if(A==-1){A=B.length}try{return decodeURIComponent(B.substring(D+E.length,A))}catch(F){return null}},createCookie:function(D,G,E){if(E){var C=new Date();C.setTime(C.getTime()+(E*60*1000));var A="; expires="+C.toGMTString()}else{var A=""}var F="";if(!BookingBuddy.domain){var B=document.domain.match(/.+(bookingbuddy.+)/);if(B!=null){F=B[1]}}else{F=BookingBuddy.domain}document.cookie=D+"="+G+A+"; path=/; domain="+F;return true},getESTHour:function(){var B=new Date(BookingBuddy.StringsUncached.ServerTime);var D=B.getTime();var E=B.getTimezoneOffset()*60000;var C=new Date(D+E-(300*60000));var A=C.getHours();if(A==0){A=24}return A},handleEnterKey:function(B){B=(!B)?window.event:B;var A=(!B.keyCode)?B.which:B.keyCode;if(A==13){Event.stop(B);return false}else{return true}},toggleCovered:function(C,P){function D(T){var S=T.style.visibility;if(!S){if(document.defaultView&&typeof (document.defaultView.getComputedStyle)=="function"){S=document.defaultView.getComputedStyle(T,"").getPropertyValue("visibility")}else{if(T.currentStyle){S=T.currentStyle.visibility}else{S=""}}}return S}function E(S){var T=BookingBuddy.getAbsolutePos(S);return[T.x,S.offsetWidth+T.x,T.y,S.offsetHeight+T.y]}var J=["applet","iframe","select"];var N=E(C);var B=N[0];var A=N[1];var I=N[2];var H=N[3];for(var M=J.length;M>0;){var K=document.getElementsByTagName(J[--M]);var L=null;for(var O=K.length;O>0;){L=K[--O];var N=E(L);var R=N[0];var Q=N[1];var G=N[2];var F=N[3];if((R>A)||(Q<B)||(G>H)||(F<I)){if(!L.__sl_save_visibility){L.__sl_save_visibility=D(L)}L.style.visibility=L.__sl_save_visibility}else{if(!L.__sl_save_visibility){L.__sl_save_visibility=D(L)}L.style.visibility=P}}}},getAbsolutePos:function(E){var A=0,D=0;var C=/^div$/i.test(E.tagName);if(C&&E.scrollLeft){A=E.scrollLeft}if(C&&E.scrollTop){D=E.scrollTop}var F={x:E.offsetLeft-A,y:E.offsetTop-D};if(E.offsetParent){var B=BookingBuddy.getAbsolutePos(E.offsetParent);F.x+=B.x;F.y+=B.y}return F},getQSParam:function(A){var B=window.location.search;try{var D=B.toQueryParams()}catch(C){return null}return(D[A]?D[A].replace(/\+/g," "):null)},setTabIndex:function(B,C){var A=C||1;B.each(function(D){var E=$(D);if(E){E.tabIndex=A++}})},isNumeric:function(A){return(parseFloat(A)==A)},generateUniqueID:function(A){A=$(A);if(A!==null){if(A.id!=""){return A.id}var B="generatedID_"+BookingBuddy.uniqueIDCounter++;while($(B)!==null){B="generatedID_"+BookingBuddy.uniqueIDCounter++}A.id=B;return B}else{return""}},slide:function(F,E,C){var A=BookingBuddy.generateUniqueID(F);if(A==""){return }var B=$(A);var D=B.style.height!=""&&B.style.height!="auto"?B.style.height.gsub("px","")/1:B.offsetHeight;if(E=="close"){E=0}else{if(E=="fit"){E=BookingBuddy.trueHeight(A)}else{if(!BookingBuddy.isNumeric(E)){return }}}if(D<E){BookingBuddy.slideStatus[A]="opening"}else{if(D>E){BookingBuddy.slideStatus[A]="closing"}else{return }}BookingBuddy.sliding(A,E,C,BookingBuddy.slideStatus[A])},sliding:function(B,G,I,E){if(BookingBuddy.slideStatus[B]!=E){return }var D=$(B);var H=D.style.height!=""&&D.style.height!="auto"?D.style.height.gsub("px","")/1:D.offsetHeight;var A=(E=="opening")?H+I:H-I;var F=false;if(E=="opening"){if(A>=G){D.style.height="auto";F=true}}else{if(A<=G){D.style.height=G+"px";F=true}}if(F){BookingBuddy.slideStatus[B]="done";return }else{D.style.height=A+"px";var C='BookingBuddy.sliding("'+B+'", '+G+", "+I+', "'+E+'");';window.setTimeout(C,10)}},trueHeight:function(F){var B=BookingBuddy.generateUniqueID(F);if(B==""){return }var E=$(B);var C=E.cloneNode(true);C.style.display="";C.style.width=E.getStyle("width");C.style.height="auto";C.style.position="absolute";C.style.left="0px";C.style.top="0px";C.style.visibility="hidden";E.parentNode.appendChild(C);var A=C.offsetHeight;var D=E.parentNode.childNodes.length-1;$(E.parentNode.childNodes[D]).remove();return A},swapElements:function(B,A){B=$(B);A=$(A);if((B&&A)&&(B!==A)){var D=B.nextSibling,C=B.parentNode;A.parentNode.replaceChild(B,A);C.insertBefore(A,D)}return B}};BookingBuddy.Search={redirectUrl:"",formName:"bbsearch",trackingHook:null,ie6RollOvers:function(){if(BookingBuddy.searchMode=="air"){Event.observe(window,"load",function(){if(!window.XMLHttpRequest){$$("input.BBInputButton").each(function(A){Event.observe(A,"mouseover",function(){Element.addClassName(A,"BBInputButton-hover")});Event.observe(A,"mouseout",function(){Element.removeClassName(A,"BBInputButton-hover")})})}})}},adMetaData:[],blockedPopUpHook:null,blockedPopUpDivID:"BookingBuddySearchBlockedPopUpDivID",darkenedScreenDivID:"DarkenedScreenDivID",windowOptions:"status=1,toolbar=1,location=1,menubar=1,resizable=1,scrollbars=1,height=525,width=925,top=35",init:function(A){BookingBuddy.Search.redirectUrl=A;var B=screen.width-925;if(B<0){B=0}BookingBuddy.Search.windowOptions+=",left="+B},registerAd:function(F){var D=$("BBAd"+F);if(!D){return false}var C=D.title;var A=function(G){BookingBuddy.Search.submit(C)};var B=[$("bb_ad_image_"+F),$("bb_ad_button_"+F)];for(var E=0;E<B.length;E++){if(B[E]){B[E].observe("click",A)}}},registerAdMetaData:function(B,A){if(typeof BookingBuddy.Search.adMetaData[B]=="undefined"){BookingBuddy.Search.adMetaData[B]={}}for(key in A){BookingBuddy.Search.adMetaData[B][key]=A[key]}},getAdMetaData:function(C,B){var A=BookingBuddy.Search.adMetaData[C];if(A&&A[B]!=null){return A[B]}return null},registerValidationCallback:function(B){if(typeof B!="function"){return false}var A=BookingBuddy.Search.validateCallbacks.size();BookingBuddy.Search.validateCallbacks[A]=B;return true},submit:function(D,A){var F=BookingBuddy.searchMode;var N=$(BookingBuddy.Search.formName);var M=false;var C=$("oneway");if(C){M=C.checked}urlParams=D.split("|");if(!/^[a-z]\d+$/.test(urlParams[0])){return false}N.action=BookingBuddy.Search.redirectUrl;var K=/host=([\w\.\-]+)/.exec(BookingBuddy.Search.redirectUrl);if(K&&typeof K[1]!="undefined"){N.host.value=K[1]}N.r.value=urlParams[0];var H=/i(\d+)/.exec(urlParams[0]);if(M&&(BookingBuddy.Search.getAdMetaData(H[1],"display_name")=="Hotwire")){alert("Hotwire does not currently support one-way searches.");return false}var I=BookingBuddy.Validation.validateSearch(A,M);if(I){BookingBuddy.RS.setSearchCookie();if(typeof BookingBuddy.Search.preSearchHook=="function"){BookingBuddy.Search.preSearchHook()}var O=new Date();var J="bb_search_"+O.getTime();var R=window.open("",J,BookingBuddy.Search.windowOptions);if(R){N.target=J;N.submit()}else{BookingBuddy.Search.showBlockedPopUpMessage();return false}var E="search "+urlParams[1];var K=/i(\d+)/.exec(urlParams[0]);var L;var B=(BookingBuddy.domain.indexOf("bookingbuddy")!=-1)?"bb_":"st_";var G=B+"conv_page_view";if(E.match(/dropdown(?!_premium)/)){bb_event_flag="event6,";L=B+"conv_nonfeaturedsearch"}else{L=B+"conv_featuredsearch";if(F=="hotel"){var Q=B+"conv_hotel_featuredsearch";window.setTimeout("offermaticaCreateConfirm('"+G+"', '"+Q+"')",500)}}offermaticaCreateConfirm(G,L);if(K.length==2){var P=K[1];if(typeof BookingBuddy.Search.trackingHook=="function"){BookingBuddy.Search.trackingHook(E,P,F)}}}return I},showBlockedPopUpMessage:function(E){if(null!=E){var B=$(E)}else{var B=$(BookingBuddy.Search.blockedPopUpDivID)}if(!B){return }var A=$(document.body);if(A){var D=A.cumulativeScrollOffset();B.style.top=(D.top+200)+"px"}var C=$(BookingBuddy.Search.darkenedScreenDivID);if(C&&window.XMLHttpRequest){if(A){C.style.height=(A.getHeight()+30)+"px"}else{C.style.height=(document.viewport.getHeight()+30)+"px"}C.setOpacity(0.6);C.style.visibility="visible"}B.style.visibility="visible";BookingBuddy.toggleCovered(B,"hidden");if(typeof BookingBuddy.Search.blockedPopUpHook=="function"){BookingBuddy.Search.blockedPopUpHook()}},hideBlockedPopUpMessage:function(C){if(null!=C){var B=$(C)}else{var B=$(BookingBuddy.Search.blockedPopUpDivID)}if(!B){return }BookingBuddy.toggleCovered(B,"");B.style.visibility="hidden";var A=$(BookingBuddy.Search.darkenedScreenDivID);if(A){A.style.visibility="hidden"}},leadTimeCheck:function(B,D){var A=new Date(BookingBuddy.StringsUncached.ServerTime);var C=B.getTime()-A.getTime();return(C>=D)},toggleOneway:function(B){var A=$(BookingBuddy.Date.returnDateDivID);if(A){A.style.display=B}}};BookingBuddy.Upsell={template:null,buttonOnly:false,ads:{},upsellToPrimary:{},hideTimer:null,currentlyShowing:null,registerAd:function(primary_id,upsell_id,upsell_text){with(BookingBuddy.Upsell){var primary_wrapper=$("BBAd"+primary_id);if(!primary_wrapper){return }ads[primary_id]={id:upsell_id,text:upsell_text};upsellToPrimary[upsell_id]=primary_id;var logo=$("bb_ad_image_"+primary_id);var primary_button=$("bb_ad_button_"+primary_id);Event.observe(primary_button,"mouseover",BookingBuddy.Upsell.primaryMouseOver);Event.observe(primary_button,"mouseout",BookingBuddy.Upsell.hideTooltip);Event.observe(logo,"mouseover",BookingBuddy.Upsell.primaryMouseOver);Event.observe(logo,"mouseout",BookingBuddy.Upsell.hideTooltip);var upsell_button=$("bb_ad_button_"+upsell_id);Event.observe(upsell_button,"mouseover",BookingBuddy.Upsell.upsellMouseOver);Event.observe(upsell_button,"mouseout",BookingBuddy.Upsell.hideTooltip)}},primaryMouseOver:function(event){with(BookingBuddy.Upsell){Event.stop(event);if(buttonOnly){return }var match=event.target.id.match(/(?:bb_ad_image_|bb_ad_button_)(\d+)/);if(match!=null){var id=match[1];var parent_element=$("BBAd"+id);if(parent_element){displayTooltip(id,parent_element)}}}},upsellMouseOver:function(event){with(BookingBuddy.Upsell){var match=event.target.id.match(/(?:bb_ad_image_|bb_ad_button_)(\d+)/);if(match!=null){var upsell_id=match[1];if(upsellToPrimary[upsell_id]){var primary_id=upsellToPrimary[upsell_id];if(buttonOnly){var parent_element=$("BBAd"+upsell_id)}else{var parent_element=$("BBAd"+primary_id)}if(parent_element){displayTooltip(primary_id,parent_element)}}}}},displayTooltip:function(id,parent_element){with(BookingBuddy.Upsell){if(template==null){return }if((currentlyShowing!=null)&&(id!=currentlyShowing)){return }hideTooltip(true);BookingBuddy.Upsell.currentlyShowing=id;var params={primary_id:id,upsell_id:ads[id].id,upsell_text:ads[id].text};var pos=parent_element.positionedOffset();var div=document.createElement("div");div.id="BBUpsellTooltip";div.style.top=pos.top+"px";div.style.left=pos.left+(parent_element.getWidth()-15)+"px";div.innerHTML=template.evaluate(params);Event.observe(div,"mouseover",BookingBuddy.Upsell.mouseOut);document.body.appendChild(div)}},mouseOut:function(A){if((!A.originalTarget)||(A.originalTarget.id=="BBUpsellTooltip")){BookingBuddy.Upsell.hideTooltip();Event.stop(A)}},hideTooltip:function(B){if(B!=true){if(BookingBuddy.Upsell.hideTimer==null){BookingBuddy.Upsell.hideTimer=setTimeout("BookingBuddy.Upsell.hideTooltip(true)",50)}return }clearTimeout(BookingBuddy.Upsell.hideTimer);BookingBuddy.Upsell.hideTimer=null;BookingBuddy.Upsell.currentlyShowing=null;var A=$("BBUpsellTooltip");if(A){A.parentNode.removeChild(A)}},submit:function(B){BookingBuddy.Upsell.hideTooltip(true);var A=$("BBAd"+B);if(A){BookingBuddy.Search.submit(A.title)}}};BookingBuddy.RS={searches:[],maxCookiedSearches:3,listID:"BookingBuddyRSListID",divID:"BookingBuddyRSDivID",postPopulateSearchFormHook:null,preSwitchSearchModeHook:null,displayStepTwo:null,monthShortNames:new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"),monthShortNames:new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"),switchMap:{air_to_air:{arrival_city:"arrival_city",departure_city:"departure_city",departure_month:"departure_month",departure_day:"departure_day",departure_time:"departure_time",return_month:"return_month",return_day:"return_day",return_time:"return_time",num_travelers:"num_travelers"},air_to_hotel:{arrival_city:"arrival_city",departure_month:"arrival_month",departure_day:"arrival_day",return_month:"departure_month",return_day:"departure_day",num_travelers:"num_travelers"},air_to_car:{arrival_city:"pickup_city",departure_month:"pickup_month",departure_day:"pickup_day",return_month:"dropoff_month",return_day:"dropoff_day"},air_to_cruise:{departure_month:"travel_month",departure_day:"departure_day",return_month:"return_month",return_day:"return_day"},air_to_vacation:{arrival_city:"arrival_city",departure_city:"departure_city",departure_month:"departure_month",departure_day:"departure_day",return_month:"return_month",return_day:"return_day",num_travelers:"num_travelers"},air_to_vacation_rental:{arrival_city:"arrival_city",departure_month:"arrival_month",departure_day:"arrival_day",return_month:"departure_month",return_day:"departure_day"},hotel_to_hotel:{arrival_city:"arrival_city",num_travelers:"num_travelers",num_rooms:"num_rooms",arrival_month:"arrival_month",arrival_day:"arrival_day",departure_month:"departure_month",departure_day:"departure_day",provider:"provider"},hotel_to_air:{departure_month:"return_month",departure_day:"return_day",arrival_month:"departure_month",arrival_day:"departure_day",num_travelers:"num_travelers"},hotel_to_car:{arrival_city:"pickup_city",departure_month:"dropoff_month",departure_day:"dropoff_day",arrival_month:"pickup_month",arrival_day:"pickup_day"},hotel_to_vacation:{departure_month:"return_month",departure_day:"return_day",arrival_month:"departure_month",arrival_day:"departure_day",num_travelers:"num_travelers"},hotel_to_cruise:{arrival_day:"departure_day",arrival_month:"travel_month",departure_day:"return_day",departure_month:"return_month"},hotel_to_vacation_rental:{arrival_city:"arrival_city",num_rooms:"num_bedrooms",arrival_month:"arrival_month",arrival_day:"arrival_day",departure_month:"departure_month",departure_day:"departure_day"},car_to_vacation:{pickup_city:"arrival_city",pickup_month:"departure_month",pickup_day:"departure_day",dropoff_month:"return_month",dropoff_day:"return_day"},car_to_car:{pickup_city:"pickup_city",pickup_month:"pickup_month",pickup_day:"pickup_day",dropoff_month:"dropoff_month",dropoff_day:"dropoff_day",pickup_time:"pickup_time",dropoff_time:"dropoff_time"},car_to_air:{pickup_city:"arrival_city",pickup_month:"departure_month",pickup_day:"departure_day",dropoff_month:"return_month",dropoff_day:"return_day"},car_to_hotel:{pickup_city:"arrival_city",pickup_month:"arrival_month",pickup_day:"arrival_day",dropoff_month:"departure_month",dropoff_day:"departure_day"},car_to_cruise:{pickup_day:"departure_day",pickup_month:"travel_month",dropoff_day:"return_day",dropoff_month:"return_month"},car_to_vacation_rental:{pickup_city:"arrival_city",pickup_month:"arrival_month",pickup_day:"arrival_day",dropoff_month:"departure_month",dropoff_day:"departure_day"},vacation_to_air:{arrival_city:"arrival_city",departure_city:"departure_city",departure_month:"departure_month",departure_day:"departure_day",return_month:"return_month",return_day:"return_day",num_travelers:"num_travelers"},vacation_to_hotel:{arrival_city:"arrival_city",departure_month:"arrival_month",departure_day:"arrival_day",return_month:"departure_month",return_day:"departure_day",num_travelers:"num_travelers"},vacation_to_car:{arrival_city:"pickup_city",departure_month:"pickup_month",departure_day:"pickup_day",return_month:"dropoff_month",return_day:"dropoff_day"},vacation_to_cruise:{departure_day:"departure_day",departure_month:"travel_month",return_day:"return_day",return_month:"return_month"},vacation_to_vacation_rental:{arrival_city:"arrival_city",departure_month:"arrival_month",departure_day:"arrival_day",return_month:"departure_month",return_day:"departure_day"},cruise_to_air:{travel_month:"departure_month"},cruise_to_hotel:{travel_month:"arrival_month"},cruise_to_car:{travel_month:"pickup_month"},cruise_to_vacation:{travel_month:"departure_month"},cruise_to_vacation_rental:{travel_month:"arrival_month"},vacation_rental_to_vacation_rental:{arrival_city:"arrival_city",num_bedrooms:"num_bedrooms",arrival_month:"arrival_month",arrival_day:"arrival_day",departure_month:"departure_month",departure_day:"departure_day"},vacation_rental_to_hotel:{arrival_city:"arrival_city",num_bedrooms:"num_rooms",arrival_month:"arrival_month",arrival_day:"arrival_day",departure_month:"departure_month",departure_day:"departure_day"},vacation_rental_to_air:{arrival_city:"arrival_city",departure_month:"return_month",departure_day:"return_day",arrival_month:"departure_month",arrival_day:"departure_day"},vacation_rental_to_car:{arrival_city:"pickup_city",departure_month:"dropoff_month",departure_day:"dropoff_day",arrival_month:"pickup_month",arrival_day:"pickup_day"},vacation_rental_to_vacation:{departure_month:"return_month",departure_day:"return_day",arrival_month:"departure_month",arrival_day:"departure_day",arrival_city:"arrival_city"},vacation_rental_to_cruise:{arrival_day:"departure_day",arrival_month:"travel_month",departure_day:"return_day",departure_month:"return_month"}},elements:{air:["oneway","roundtrip","num_travelers","departure_city","arrival_city","departure_month","departure_day","return_month","return_day","departure_time","return_time","non_stop","service_class"],hotel:["arrival_city","num_travelers","num_rooms","arrival_month","arrival_day","departure_month","departure_day","provider"],car:["pickup_city","pickup_month","pickup_day","pickup_time","dropoff_month","dropoff_day","dropoff_time"],cruise:["destination","cruise_line","travel_month","cruise_length","over_55","departure_date","return_date"],vacation:["departure_city","arrival_city","departure_month","departure_day","return_month","return_day","num_travelers",],vacation_rental:["arrival_city","num_bedrooms","arrival_month","arrival_day","departure_month","departure_day"]},init:function(){var B=BookingBuddy.getCookie("BBSearches_"+BookingBuddy.searchMode);if(B){var A=JSON.parse(B);if(A){BookingBuddy.RS.update(A)}}BookingBuddy.RS.populateSearchForm(0,true)},update:function(A){var D="";A.each(function(N,H){var L=null;var G={index:H};var M="";var K="";BookingBuddy.RS.searches[H]=N;switch(BookingBuddy.searchMode){case"air":G.depart=N.departure_city;G.destination=N.arrival_city;M=BookingBuddy.Date.makeFromValues(true,N.departure_month,N.departure_day);K=BookingBuddy.Date.makeFromValues(true,N.return_month,N.return_day);switch(BookingBuddy.domain){case"bookingbuddy.co.uk":L=(N.search_type=="roundtrip"||N.st=="roundtrip")?BookingBuddy.Strings.RS.UK.RSTemplate_air_roundtrip:BookingBuddy.Strings.RS.UK.RSTemplate_air_oneway;var P=/([A-Z]{3})/;var J=G.depart.match(P);if(J&&J[0]){G.depart=J[0].strip()}var I=G.destination.match(P);if(I&&I[0]){G.destination=I[0].strip()}break;default:L=(N.search_type=="roundtrip"||N.st=="roundtrip")?BookingBuddy.Strings.RS.Default.RSTemplate_air_roundtrip:BookingBuddy.Strings.RS.Default.RSTemplate_air_oneway;break}break;case"hotel":case"vacation_rental":G.destination=N.arrival_city;M=BookingBuddy.Date.makeFromValues(true,N.arrival_month,N.arrival_day);K=BookingBuddy.Date.makeFromValues(true,N.departure_month,N.departure_day);switch(BookingBuddy.domain){case"bookingbuddy.co.uk":var L=BookingBuddy.Strings.RS.UK.RSTemplate_hotel;var E=/[(-]/;var I=G.destination.split(E);if(I[0]){G.destination=I[0].strip()}break;default:var L=BookingBuddy.Strings.RS.Default.RSTemplate_hotel;break}break;case"car":var L=BookingBuddy.Strings.RS.Default.RSTemplate_car;G.destination=N.pickup_city;M=BookingBuddy.Date.makeFromValues(true,N.pickup_month,N.pickup_day);K=BookingBuddy.Date.makeFromValues(true,N.dropoff_month,N.dropoff_day);break;case"vacation":var L=BookingBuddy.Strings.RS.Default.RSTemplate_vacation;G.depart=N.departure_city;G.destination=N.arrival_city;M=BookingBuddy.Date.makeFromValues(true,N.departure_month,N.departure_day);K=BookingBuddy.Date.makeFromValues(true,N.return_month,N.return_day);break;case"cruise":var O=N.travel_month;O=O.substring(0,O.length-3);L=BookingBuddy.Strings.RS.Default.RSTemplate_cruise;G={destination:N.destination,month_1:O}}if(M!=""){var F=M.split(/\//);if(BookingBuddy.domain=="bookingbuddy.co.uk"){G.month_1=BookingBuddy.RS.monthShortNames[F[0]-1]}else{G.month_1=F[0]}G.day_1=F[1];G.year_1=F[2]}if(K!=""){var F=K.split(/\//);if(BookingBuddy.domain=="bookingbuddy.co.uk"){G.month_2=BookingBuddy.RS.monthShortNames[F[0]-1]}else{G.month_2=F[0]}G.day_2=F[1];G.year_2=F[2]}D+=L.evaluate(G)});if(D!=""){var B=$(BookingBuddy.RS.listID);var C=$(BookingBuddy.RS.divID);if(B&&C){B.innerHTML=D}}},setSearchCookie:function(){var G="BBSearches_"+BookingBuddy.searchMode;var H=BookingBuddy.getCookie(G);var A=[];if(H){A=JSON.parse(H)}var F={};BookingBuddy.RS.elements[BookingBuddy.searchMode].each(function(I){var J=$(I);if(!J){return }if(J.type=="radio"){if(J.checked){F[J.name]=$F(J)}}else{if(J.type=="checkbox"){F[I]=(J.checked)?"1":"0"}else{F[I]=$F(J)}}});var E=JSON.stringify(F);var D=[];A.each(function(J){var I=JSON.stringify(J);if(!BookingBuddy.RS.searchIsExpired(J)&&E!=I){D.push(J)}});D.unshift(F);D.splice(BookingBuddy.RS.maxCookiedSearches,D.length-BookingBuddy.RS.maxCookiedSearches);var B=JSON.stringify(D);BookingBuddy.createCookie(G,encodeURIComponent(B),7*24*60);BookingBuddy.RS.update(D);var C=$(BookingBuddy.RS.divID);if(C){C.fire("rs:display")}},searchIsExpired:function(D){var A=new Date(BookingBuddy.StringsUncached.ServerTime);A.setHours(0,0,0,0);var C="";if(D.departure_month){C=BookingBuddy.Date.makeFromValues(true,D.departure_month,D.departure_day)}else{if(D.arrival_month){C=BookingBuddy.Date.makeFromValues(true,D.arrival_month,D.arrival_day)}else{if(D.pickup_month){C=BookingBuddy.Date.makeFromValues(true,D.pickup_month,D.pickup_day)}else{if(D.travel_month){C=D.travel_month}}}}if(C){var B=new Date(C);if(B.getTime()<A.getTime()){return true}}return false},populateSearchForm:function(H,I){var B={},E={},A={},G={};if(BookingBuddy.RS.searches[H]){B=BookingBuddy.RS.searches[H]}var D=BookingBuddy.getCookie("BBSwitch");if(D){if(D.indexOf(":::")!=-1){var F=D.split(":::");D=F[0];G=F[1]?JSON.parse(F[1]):{}}var C=JSON.parse(D);A=(C)?C:{};document.cookie="BBSwitch="+encodeURIComponent(JSON.stringify(G))+";path=/"}$H(B).each(function(J){E[J.key]=J.value});BookingBuddy.RS.elements[BookingBuddy.searchMode].each(function(N){var L=$(N);if(!L){return }var M=(typeof E[N]=="string")?E[N]:"";if(I){var J=BookingBuddy.getQSParam($(N).name);if(!J){J=BookingBuddy.getQSParam(N)}if(typeof J=="string"){M=J;if(BookingBuddy.RS.displayStepTwo&&typeof (BookingBuddy.RS.displayStepTwo)=="function"){BookingBuddy.RS.displayStepTwo()}}else{if(typeof A[N]=="string"){M=A[N]}}}if(L.type=="text"){L.value=M}else{if(L.type=="select-one"){for(i=0;i<L.options.length;i++){var K=L.options[i].value;if((K==M)||(("0"+K)==M)||((M!="")&&(K==("0"+M)))){L.options[i].selected=true;break}}}else{if(L.type=="radio"){if(L.value==M){L.checked=true}}else{if(L.type=="checkbox"){L.checked=(M==1)?true:false}}}}E[N]=M;BookingBuddy.emitEvent(L.id,"change");BookingBuddy.emitEvent(L.id,"blur");if(L.id=="arrival_city"||L.id=="pickup_city"){if(BookingBuddy.searchMode=="hotel"||BookingBuddy.searchMode=="car"){Event.observe(window,"load",function(){BookingBuddy.AFS.updateHelper(L.id,L.value)})}}});if(BookingBuddy.searchMode=="air"){if(E.search_type=="oneway"||E.roundtrip=="oneway"){BookingBuddy.Search.toggleOneway("none")}else{BookingBuddy.Search.toggleOneway("block")}}if(typeof BookingBuddy.RS.postPopulateSearchFormHook=="function"){BookingBuddy.RS.postPopulateSearchFormHook()}BookingBuddy.Date.dontUpdate=false},setSwitchCookie:function(B){var I=$(BookingBuddy.Search.formName);var L={};var J={};var G=BookingBuddy.RS.switchMap[B];if(!G){return }$H(G).each(function(N){var O=$(N.key);if(!O){return }var P=$F(O);if(P&&N.value){L[N.value]=P}});if(B=="air_to_hotel"||B=="vacation_to_hotel"||B=="air_to_car"||B=="vacation_to_car"||B=="air_to_vacation_rental"||B=="vacation_to_vacation_rental"){if(B.indexOf("to_hotel")!=-1||B.indexOf("to_vacation_rental")!=-1){var M="arrival_city"}else{var M="pickup_city"}if(L[M]){var F=L[M].indexOf("(");if(F!=-1){L[M]=L[M].substring(0,F).strip()}var C=L[M].indexOf("- All Airports");if(C!=-1){L[M]=L[M].substring(0,C).strip()}}}if(B.indexOf("to_cruise")!=-1){var M="travel_month";if(typeof L[M]!="undefined"){J.departure_date=L[M].substr(0,2)+L[M].substr(3,4)+L.departure_day;J.return_date=L.return_month.substr(0,2)+L.return_month.substr(3,4)+L.return_day;L[M]=L[M].substr(3,4)+"-"+L[M].substr(0,2)+"-01"}}if(B.indexOf("cruise_to")!=-1){switch(B){case"cruise_to_air":case"cruise_to_vacation":var H={dep_month:"departure_month",dep_day:"departure_day",ret_month:"return_month",ret_day:"return_day"};break;case"cruise_to_hotel":case"cruise_to_vacation_rental":var H={dep_month:"arrival_month",dep_day:"arrival_day",ret_month:"departure_month",ret_day:"departure_day"};break;case"cruise_to_car":var H={dep_month:"pickup_month",dep_day:"pickup_day",ret_month:"dropoff_month",ret_day:"dropoff_day"};break;default:var H={dep_month:"",dep_day:"",ret_month:"",ret_day:""}}if(L[H.dep_month]&&L[H.dep_month]!=""){L[H.dep_month]=L[H.dep_month].substr(5,2)+" "+L[H.dep_month].substr(0,4);L[H.dep_day]="1";L[H.ret_month]=L[H.dep_month];L[H.ret_day]="8"}var K=BookingBuddy.getCookie("BBSwitch");if(K){var D=JSON.parse(K);var A=(D)?D:{};if(A.departure_date&&A.return_date&&L[H.dep_month]){var E=A.departure_date.substr(0,2)+" "+A.departure_date.substr(2,4);if(E==L[H.dep_month]){L[H.dep_month]=E;L[H.dep_day]=A.departure_date.substr(6);L[H.ret_month]=A.return_date.substr(0,2)+" "+A.return_date.substr(2,4);L[H.ret_day]=A.return_date.substr(6)}}}}document.cookie="BBSwitch="+encodeURIComponent(JSON.stringify(L))+":::"+encodeURIComponent(JSON.stringify(J))+";path=/"},switchMode:function(A,B){if(typeof BookingBuddy.RS.preSwitchSearchModeHook=="function"){BookingBuddy.RS.preSwitchSearchModeHook()}BookingBuddy.RS.setSwitchCookie(B);location.href=A}};BookingBuddy.LT={apiUrl:null,apiIds:"",apiRequestId:0,apiResultById:{},disabled:true,animation:true,debug:false,adRegistry:[],adTemplate:null,maxAds:8,adsPerRow:4,adsMargining:true,slideTime:1.2,divWrapper:null,divHeader:null,divAds:null,divFooter:null,divHeight:0,targetedInputs:[],enablePricing:false,divPricedAds:null,currencyCodes:"USD",showCount:0,init:function(config){with(BookingBuddy.LT){adTemplate=BookingBuddy.Strings.LT.DefaultAdTemplate;switch(BookingBuddy.domain){case"bookingbuddy.co.uk":adsPerRow=1;break;default:adsPerRow=4;break}for(var key in config){BookingBuddy.LT[key]=config[key]}disabled=false;divWrapper=$("BBLTWrapper");divHeader=$("BBLTHeader");divAds=$("BBLTAds");divFooter=$("BBLTFooter");if(enablePricing){divPricedAds=$("BBLTPricedAds")}if(!divWrapper||!divHeader||!divAds||!divFooter){failInit("Couldnt initialize all LT divs")}if(animation){Effect.BlindUp(divWrapper,{duration:0})}var validation=false;switch(BookingBuddy.searchMode){case"hotel":case"vacation_rental":var df=$("arrival_city");if(!df){failInit("Couldnt find arrival_city input")}targetedInputs=[df];break;case"car":var df=$("pickup_city");if(!df){failInit("Couldnt find pickup_city input")}targetedInputs=[df];break;case"cruise":var df=$("destination");if(!df){failInit("Couldnt find destination input")}targetedInputs=[df];break;default:var df=$("departure_city");var dt=$("arrival_city");if(!df||!dt){failInit("Couldnt find arrival or departure city input")}targetedInputs=[df,dt];validation=true;break}if(validation){BookingBuddy.Validation.registerValidLocationCallback(confirmToggle)}else{for(var i=0,l=targetedInputs.length;i<l;i++){if(targetedInputs[i].type=="text"){new Form.Element.Observer(targetedInputs[i],1.4,confirmToggle)}}}for(var i=0,l=adRegistry.length;i<l;i++){var img=new Image();img.src=adRegistry[i].logo;apiIds+=adRegistry[i].ad_id+":"}divWrapper.observe("bblt:end",function(event){var height=parseInt(divWrapper.getHeight());if(height>divHeight){divHeight=height}divWrapper.setStyle({height:divHeight+"px"})})}},failInit:function(A){BookingBuddy.LT.disabled=true;if(BookingBuddy.LT.debug){console.log(A)}return },confirmToggle:function(A,B){B=B.replace(/^\s+|\s+$/g,"");if(!B){return }try{if((BookingBuddy.searchMode=="vacation")&&(A.id=="arrival_city")){if(B==window.defaultValues[BookingBuddy.searchMode][A.id]){return }}}catch(C){}if(BookingBuddy.LT.showCount==0){BookingBuddy.LT.toggle()}},toggle:function(){with(BookingBuddy.LT){if(disabled){return }$(divWrapper).fire("lt:begin");var params={};for(var i=0,l=targetedInputs.length;i<l;i++){params["v"+(i+1)]=$F(targetedInputs[i])}params.rid=++apiRequestId;params.ids=apiIds;params.m=BookingBuddy.searchMode;if(enablePricing){params.p=1;params.cc=currencyCodes}if(debug){params.eno=1}new Ajax.Request(apiUrl,{method:"get",parameters:params,onSuccess:toggleSuccess})}},toggleSuccess:function(transport){with(BookingBuddy.LT){try{if(!transport.responseText){throw"No response"}var json=transport.responseText.evalJSON(true);if(!json){throw"Unparsable response"}if(!json.ids||!json.msg||!json.rid){throw"Invalid response"}}catch(e){apiResultById={};hide();if(debug){console.log("JSON Parsing Failure for LT: "+e.message)}return }if(json.rid!=apiRequestId){return }var msg=getTitleMsg(json.msg);var adsToShow=[];var adsToShowPriced=[];for(var i=0,l=json.ids.length;i<l;i++){var id=json.ids[i].id;if(json.ids[i].display&&(showCount<maxAds)){showCount++;apiResultById[id]=json.ids[i];if(json.ids[i].is_priced=="Y"){adsToShowPriced.push(id)}else{adsToShow.push(id)}}}if(showCount){show(adsToShow,adsToShowPriced,msg)}else{hide()}}},hide:function(){with(BookingBuddy.LT){if(animation){Effect.BlindUp(divWrapper,{duration:slideTime})}else{divAds.innerHTML=""}}},show:function(adsToShow,adsToShowPriced,msg){with(BookingBuddy.LT){var html="";var adsLength=adsToShow.length;for(i=0,n=0;i<adsLength;i++){if(i%adsPerRow==0){if((adsLength-i)>adsPerRow){html+='<div class="BBSearchLogos'+adsPerRow+'">';for(n=i;n<adsPerRow+i;n++){html+=getAdHTML(adsToShow[n])}html+="</div>"}else{html+='<div class="BBSearchLogos'+(adsLength-i)+'">';while(n<adsLength){html+=getAdHTML(adsToShow[n++])}html+="</div>"}}}divAds.innerHTML=html;if(divPricedAds){html="";for(i=0,l=adsToShowPriced.length;i<l;i++){html+=getAdHTML(adsToShowPriced[i])}divPricedAds.innerHTML=html;if(html){$(divWrapper).fire("lt:prices")}else{$(divWrapper).fire("lt:noprices")}}if(msg){divHeader.innerHTML=msg}if(!divWrapper.visible()){if(animation){Effect.BlindDown(divWrapper,{duration:slideTime,afterFinish:function(){$(divWrapper).fire("bblt:end")}})}}BookingBuddy.LT.showCount=0;$(divWrapper).fire("lt:end")}},getAdHTML:function(ad_id){with(BookingBuddy.LT){var adData=false;for(var i=0,l=adRegistry.length;i<l;i++){if(adRegistry[i].ad_id==ad_id){adData=adRegistry[i]}}if(!adData){if(debug){error.log("Unable to getAdHTML for ad_id: "+ad_id)}return""}if(apiResultById[ad_id]){adData.lt_price=apiResultById[ad_id].price?apiResultById[ad_id].price:"";adData.lt_desc=apiResultById[ad_id].desc?apiResultById[ad_id].desc:"";adData.lt_updated=(apiResultById[ad_id].last_updated!="N/A")?'<div class="price_found">Price found: '+apiResultById[ad_id].last_updated+"<br /></div>":"";if(apiResultById[ad_id].depart_date_day&&apiResultById[ad_id].depart_date_month&&apiResultById[ad_id].depart_date_year){adData.lt_depart=apiResultById[ad_id].depart_date_day+"/"+apiResultById[ad_id].depart_date_month+"/"+apiResultById[ad_id].depart_date_year;adData.lt_return=apiResultById[ad_id].return_date_day+"/"+apiResultById[ad_id].return_date_month+"/"+apiResultById[ad_id].return_date_year;adData.departure_date=apiResultById[ad_id].depart_date_month+"/"+apiResultById[ad_id].depart_date_day+"/"+apiResultById[ad_id].depart_date_year;adData.return_date=apiResultById[ad_id].return_date_month+"/"+apiResultById[ad_id].return_date_day+"/"+apiResultById[ad_id].return_date_year;adData.departure_month=apiResultById[ad_id].depart_date_month+" "+apiResultById[ad_id].depart_date_year;adData.departure_day=apiResultById[ad_id].depart_date_day;adData.return_month=apiResultById[ad_id].return_date_month+" "+apiResultById[ad_id].return_date_year;adData.return_day=apiResultById[ad_id].return_date_day}else{adData.lt_depart=adData.lt_return=adData.departure_date=adData.return_date=adData.departure_month=adData.departure_day=adData.return_month=adData.return_day=""}}if(apiResultById[ad_id].price){var priceData=new Array("num_travelers","departure_city","arrival_city","service_class","departure_time","return_time");var i;for(i=0;i<priceData.length;i++){adData[priceData[i]]=($(priceData[i])&&$(priceData[i]).value)?$(priceData[i]).value:""}adData.search_type=($("roundtrip")&&$("roundtrip").checked)?"roundtrip":"oneway";var tracking=adData.tracking_name.split("|");if(tracking[1]){adData.tracking_name_priced=tracking[1]}}try{var result=adTemplate.evaluate(adData);return result}catch(e){if(debug){error.log("Error rendering adHTML template for ad_id: "+ad_id+" message: "+e.message)}}return""}},getTitleMsg:function(msg_data){with(BookingBuddy.Strings.LT){var template=DefaultTemplate;switch(BookingBuddy.searchMode){case"air":if(msg_data.point_1&&msg_data.point_2){template=AirTemplateRoundTrip}else{if(msg_data.point_1){template=AirTemplateFrom}else{template=AirTemplateTo}}break;case"cruise":template=CruiseTemplate;break;case"car":template=CarTemplate;break;case"hotel":case"vacation_rental":template=HotelTemplate;break;case"vacation":if(!msg_data.point_2&&msg_data.point_1){template=VacationTemplateFrom}else{if(msg_data.point_2){template=VacationTemplateTo}}break}try{return template.evaluate(msg_data)}catch(e){if(BookingBuddy.LT.debug){error.log("Failed to process template in getTitleMsg: "+e.message)}}return""}}};BookingBuddy.LE={ajaxTransport:false,defaultLocations:[],cache:[],url:null,searchAdapterID:null,startTimestamp:null,endTimestamp:null,point1InputID:null,point2InputID:null,inited:false,init:function(A){BookingBuddy.LE.url=A;Event.observe(window,"load",function(){BookingBuddy.LE.updateLocations(1);BookingBuddy.LE.updateLocations(2)});BookingBuddy.LE.inited=true},loadDefaults:function(A){if(!BookingBuddy.LE.inited){return }BookingBuddy.LE.updateSelect(A,BookingBuddy.LE.defaultLocations)},updateLocations:function(D){if(!BookingBuddy.LE.inited){return }var G=BookingBuddy.LE.searchAdapterID;var J=BookingBuddy.LE.startTimestamp;var B="point_"+((D%2)+1);var H="point_"+D;if(!$F(B)){return }var A=$F(B);var C=A.split("|");var F=C[0];if(BookingBuddy.LE.cache[B]&&BookingBuddy.LE.cache[B][F]){return BookingBuddy.LE.updateSelect(H,BookingBuddy.LE.cache[B][F])}if(BookingBuddy.LE.ajaxTransport&&BookingBuddy.LE.ajaxTransport.readyState!=0){BookingBuddy.LE.ajaxTransport.abort()}var I=BookingBuddy.LE.url+"&selection_id="+F+"&id="+encodeURIComponent(G)+"&cf="+encodeURIComponent(D)+"&start_date="+encodeURIComponent(J);var E=function(){BookingBuddy.LE.__callback(F,B,H)};BookingBuddy.LE.ajaxTransport=Ajax.getTransport();BookingBuddy.LE.ajaxTransport.open("GET",I,true);BookingBuddy.LE.ajaxTransport.onreadystatechange=E;BookingBuddy.LE.ajaxTransport.send(null)},__callback:function(selection,source,target){try{if(!BookingBuddy.LE.ajaxTransport||BookingBuddy.LE.ajaxTransport.readyState!=4||BookingBuddy.LE.ajaxTransport.status!=200){return }}catch(e){return }try{var locs=eval("("+BookingBuddy.LE.ajaxTransport.responseText+")")}catch(e){return }if(!locs){return }BookingBuddy.LE.updateSelect(target,locs);if(!BookingBuddy.LE.cache[source]){BookingBuddy.LE.cache[source]=[]}BookingBuddy.LE.cache[source][selection]=locs;BookingBuddy.LE.setPointInput(BookingBuddy.LE.point1InputID,1);BookingBuddy.LE.setPointInput(BookingBuddy.LE.point2InputID,2)},updateSelect:function(F,D){if(!BookingBuddy.LE.inited){return }var A=$(F);if(!A){return }var C=A.selectedIndex;var E=(C>=0?A.options[C].value:"");A.options.length=0;var B=0;$H(D).each(function(J){var G=J.key;var K=J.value;var H=(G==E);var I=new Option(K,G,H);A.options[A.options.length]=I;if(H){A.selectedIndex=B}++B})},checkSubmitRoute:function(){var D=BookingBuddy.LE.point1InputID;var H=BookingBuddy.LE.point2InputID;var B=$("point_1");var A=$("point_2");var C=B.selectedIndex;var G=A.selectedIndex;if(C<0||G<0){alert(BookingBuddy.Strings.LE.ChooseArrivalAndDeparture);return false}var F=BookingBuddy.LE.setPointInput(D,1);var E=BookingBuddy.LE.setPointInput(H,2);if(!F||!E){alert(BookingBuddy.Strings.LE.GenericError);return false}return true},checkSubmitSingle:function(){var D=BookingBuddy.LE.point1InputID;var A=$("point_1");var B=A.selectedIndex;if(B<0){alert(BookingBuddy.Strings.LE.ChooseLocation);return false}var C=BookingBuddy.LE.setPointInput(D,1);if(!C){alert(BookingBuddy.Strings.LE.GenericError)}return C},setPointInput:function(B,E){var A=$("point_"+E);var C=$(B);if(!A||!C){return false}var D=A.value.split("|");if(D[1]){C.value=D[1]}return true}};BookingBuddy.LS={ajaxTransport:null,url:null,isVisible:false,currentSuggestions:null,suggestTimeout:200,suggestTimeoutID:null,currentTarget:null,currentTargetValue:null,inputs:[],suggestionTypes:[],country:null,maxSuggestions:-1,postSelectionCallback:[],init:function(B,A,C){BookingBuddy.LS.url=B;BookingBuddy.LS.inputs=A;BookingBuddy.LS.suggestionTypes=C;BookingBuddy.LS.inputs.each(function(E){var D=$(E);if(D.match("select")){return }if(!D){return }D.setAttribute("autocomplete","off");Event.observe(E,"keyup",BookingBuddy.LS.keyUpHandler);Event.observe(E,"blur",BookingBuddy.LS.handleBlur);Event.observe(E,"focus",function(){BookingBuddy.LS.handleFocus(E)})})},setMaxSuggestions:function(A){BookingBuddy.LS.maxSuggestions=parseInt(A)},setCurrentTargetValue:function(A){BookingBuddy.LS.currentTargetValue=A},formValidationHandler:function(){var A=true;BookingBuddy.LS.inputs.each(function(B){if($(B+"_warning")){if(!A){return }BookingBuddy.Aircodes.openWindow(B,true);A=false}});return A},closeSuggest:function(){BookingBuddy.LS.isVisible=false;var A=$("BBLocationSuggest");if(A){A.parentNode.removeChild(A);BookingBuddy.toggleCovered(A,"")}},handleFocus:function(A){BookingBuddy.LS.currentTarget=A},handleBlur:function(){if(BookingBuddy.LS.suggestTimeoutID!=null){clearTimeout(BookingBuddy.LS.suggestTimeoutID);BookingBuddy.LS.suggestTimeoutID=null}if(BookingBuddy.LS.ajaxTransport){BookingBuddy.LS.ajaxTransport=null}var A=BookingBuddy.LS.getSelectedIndex();if(A==-1){if(!BookingBuddy.LS.setSelectedIndex(0)){BookingBuddy.LS.currentTarget=null;return false}}return BookingBuddy.LS.useSelected()},keyUpHandler:function(A){switch(A.keyCode){case 9:return ;case 13:var B=$(BookingBuddy.LS.currentTarget);if(BookingBuddy.LS.useSelected()&&B){BookingBuddy.Validation.executeValidLocationCallbacks(B,B.value);return true}return false;case 37:case 38:case 39:case 40:return BookingBuddy.LS.handleArrowKey(A);default:return BookingBuddy.LS.updateSuggestions(A)}},useSelected:function(){var A=BookingBuddy.LS.getSelectedIndex();if((A>=0)&&(A<BookingBuddy.LS.currentSuggestions.length)){var C=$(BookingBuddy.LS.currentTarget);if(BookingBuddy.LS.currentTargetValue&&C){C.value=BookingBuddy.LS.currentSuggestions[A].display;var B=$(BookingBuddy.LS.currentTargetValue);if(B){B.value=BookingBuddy.LS.currentSuggestions[A].value}}else{C.value=BookingBuddy.LS.currentSuggestions[A].value}BookingBuddy.LS.closeSuggest();BookingBuddy.LS.currentTarget=null;BookingBuddy.LS.postSelectionCallback.each(function(D){if(typeof D=="function"){D(BookingBuddy.LS.currentSuggestions[A].value)}});if(C.id=="arrival_city"||C.id=="air_destination_city"){document.fire("BBDeals:blur")}return true}return false},addPostSelectionCallback:function(B){if(typeof B!="function"){return }var A=BookingBuddy.LS.postSelectionCallback.length;BookingBuddy.LS.postSelectionCallback[A]=B},handleArrowKey:function(D){if((D.keyCode!=38)&&(D.keyCode!=40)){return }var E=$("BBLocationSuggest");if(!E){return }var A=-1;var B=$A(E.getElementsByTagName("li"));B.each(function(F,G){if(F.hasClassName("selected")){A=G}});if(D.keyCode==38){var C=A-1}else{var C=A+1}if((C>=0)&&(C<B.length)){if(A!=-1){B[A].removeClassName("selected")}B[C].addClassName("selected")}},getSelectedIndex:function(){var C=$("BBLocationSuggest");if(!C){return -1}var B=$A(C.getElementsByTagName("li"));var A=-1;B.each(function(D,E){if(D.hasClassName("selected")){A=E}});return A},setSelectedIndex:function(B){var C=$("BBLocationSuggest");if(!C){return }var A=$A(C.getElementsByTagName("li"));var D=false;A.each(function(E,F){if(F==B){E.className="selected";D=true}else{E.className=""}});return D},updateSuggestions:function(B){if(BookingBuddy.AFS.ajaxTransport&&BookingBuddy.AFS.ajaxTransport.transport.readyState!=0){BookingBuddy.AFS.ajaxTransport.transport.abort()}if(!B.target){B.target=B.srcElement}BookingBuddy.LS.currentTarget=B.target.id;var A=B.target.value.toLowerCase();if(A.length<3){BookingBuddy.LS.closeSuggest();return }if(BookingBuddy.LS.suggestTimeoutID!=null){clearTimeout(BookingBuddy.LS.suggestTimeoutID)}BookingBuddy.LS.suggestTimeoutID=setTimeout('BookingBuddy.LS.__updateSuggestionsHelper("'+A+'")',BookingBuddy.LS.suggestTimeout)},__updateSuggestionsHelper:function(C){BookingBuddy.LS.suggestTimeoutID=null;var B={input:C,types:BookingBuddy.LS.suggestionTypes,limit:BookingBuddy.LS.maxSuggestions};if(BookingBuddy.LS.country!=null){B.country=BookingBuddy.LS.country}var A=BookingBuddy.LS.url;if(A.indexOf("?")!=-1){A+="&"}else{A+="?"}A+="service=LocationSuggest.suggest&args="+encodeURIComponent(JSON.stringify(B));BookingBuddy.LS.ajaxTransport=new Ajax.Request(A,{method:"get",onSuccess:BookingBuddy.LS.__callback})},__callback:function(transport){try{var ret=eval(transport.responseText);if(ret){BookingBuddy.LS.showSuggestions(ret)}else{BookingBuddy.LS.closeSuggest();BookingBuddy.LS.currentSuggestions=null}}catch(e){BookingBuddy.LS.closeSuggest();BookingBuddy.LS.currentSuggestions=null;return }},showSuggestions:function(A){var C=$(BookingBuddy.LS.currentTarget);if(!C){return }BookingBuddy.LS.closeSuggest();if(A.length==0){return }var B=document.createElement("ul");B.id="BBLocationSuggest";B.className="BBLocationSuggest";B.style.position="absolute";var D=Position.positionedOffset(C);B.style.left=D[0]+"px";B.style.top=(D[1]+C.getHeight())+"px";A.each(function(G,F){if((BookingBuddy.LS.maxSuggestions!=-1)&&(F>=BookingBuddy.LS.maxSuggestions)){return }if(typeof G=="string"){var I=G;var H=G}else{var I=G.display;var H=G.value}I=BookingBuddy.LS.boldSuggestionText(I,C.value);var E=document.createElement("li");E.innerHTML=I;E.setAttribute("suggestValue",H);Event.observe(E,"mouseover",function(){BookingBuddy.LS.setSelectedIndex(F)});B.appendChild(E);BookingBuddy.Validation.addValidLocation(H)});C.parentNode.appendChild(B);BookingBuddy.toggleCovered(B,"hidden");BookingBuddy.LS.isVisible=true;BookingBuddy.LS.currentSuggestions=A},boldSuggestionText:function(B,A){A=A.replace("(","\\(");A=A.replace(")","\\)");var C=new RegExp(A,"gi");var D=B.match(C);if(D){D.each(function(E){B=B.replace(E,"<b>"+E+"</b>")})}return B}};BookingBuddy.Validation={validateCallbacks:[],validValues:[],invalidLocationFields:[],locationValidationUrl:null,autoPopulateOnce:false,showAlertHook:null,VLCallbackHooks:[],init:function(url,location_inputs){BookingBuddy.Validation.locationValidationUrl=url;location_inputs.each(function(input){if($(input).match("select")){return }var blur_event="BookingBuddy.Validation.validateLocationField('"+input+"')";eval(blur_event);Event.observe(input,"blur",function(){setTimeout(blur_event,700)})})},validateSearch:function(H,M){var F=$(BookingBuddy.Search.formName);var N="";var E=BookingBuddy.searchMode;var L=false;var A=true;var I=new Date(BookingBuddy.StringsUncached.ServerTime);I.setHours(0,0,0,0);if(BookingBuddy.Validation.invalidLocationFields.length>0){alert(BookingBuddy.Strings.Validation.PleaseCorrectFollowing+"\n"+BookingBuddy.Strings.Validation.OneLocationInvalid);return false}if(E=="air"||E=="vacation"){var J=BookingBuddy.Date.make("departure");if($F("departure_city")&&$F("arrival_city")){if($F("departure_city")==$F("arrival_city")){N+="-"+BookingBuddy.Strings.Validation.DifferentLocations+"\n"}}if(!$F("departure_city")){N+="- "+BookingBuddy.Strings.Validation.EnterDepartureCity+"\n"}if(!$F("arrival_city")){N+="- "+BookingBuddy.Strings.Validation.EnterArrivalCity+"\n"}if((E=="vacation")&&window.defaultValues&&window.defaultValues.vacation.arrival_city){if($("arrival_city").value==defaultValues.vacation.arrival_city){N+="- "+BookingBuddy.Strings.Validation.EnterArrivalCity+"\n"}}N+=(!J)?"- "+BookingBuddy.Strings.Validation.ChooseDepartureDate+"\n":"";if(M){if(J){BookingBuddy.Date.set("return",J);BookingBuddy.Date.updateDaysDrop("return")}}var G=BookingBuddy.Date.make("return");if(!G){N+="- "+BookingBuddy.Strings.Validation.ChooseReturnDate+"\n"}if(!M&&J&&G&&(J>G)){N+="- "+BookingBuddy.Strings.Validation.DepartureDateAfterReturnDate+"\n"}var D=new Date();D.setDate(I.getDate()+330);var C=J?Math.ceil((J.getTime()-I.getTime())/(1000*60*60*24)):0;var B=G?Math.ceil((G.getTime()-I.getTime())/(1000*60*60*24)):0;if(C>330||B>330){var K={days_out:BookingBuddy.RS.monthShortNames[D.getMonth()]+" "+D.getDate()+", "+D.getFullYear()};N+="- "+BookingBuddy.Strings.Validation.Beyond330Days.evaluate(K)+"\n"}}else{if(E=="hotel"||E=="vacation_rental"){J=BookingBuddy.Date.make("arrival");G=BookingBuddy.Date.make("departure");if(!$F("arrival_city")||/^\s+$/.test($F("arrival_city"))){N+="- "+BookingBuddy.Strings.Validation.ChooseDestinationCity+"\n"}N+=(!J)?"- "+BookingBuddy.Strings.Validation.ChooseArrivalDate+"\n":"";N+=(!G)?"- "+BookingBuddy.Strings.Validation.ChooseDepartureDate+"\n":"";if(J&&G&&(J>=G)){N+="- "+BookingBuddy.Strings.Validation.CheckInAfterCheckOut+"\n"}}else{if(E=="car"){J=BookingBuddy.Date.make("pickup");G=BookingBuddy.Date.make("dropoff");if(!$F("pickup_city")||/^\s+$/.test($F("pickup_city"))){N+="- "+BookingBuddy.Strings.Validation.ChoosePickupCity+"\n"}N+=(!J)?"- "+BookingBuddy.Strings.Validation.ChooseValidPickupOff+"\n":"";N+=(!G)?"- "+BookingBuddy.Strings.Validation.ChooseValidDropOff+"\n":"";if(J&&G&&(J>G)){N+="- "+BookingBuddy.Strings.Validation.PickUpAfterDropOff+"\n"}if(!BookingBuddy.Search.leadTimeCheck(J,(2*60*60*1000))){L=true}}}}if(J&&G&&((I.getTime()>J.getTime())||(I.getTime()>G.getTime()))){N+="- "+BookingBuddy.Strings.Validation.SearchDatePast+"\n"}if(BookingBuddy.Validation.validateCallbacks.size()>0){BookingBuddy.Validation.validateCallbacks.each(function(P){if(typeof P=="function"){var O=P();if(typeof O=="string"){N+=O}else{A=A&&O}}})}if(N.length>0){alert(BookingBuddy.Strings.Validation.CorrectFollowing+"\n"+N);A=false}if(L&&!confirm(BookingBuddy.Strings.Validation.SearchTwoHoursAway)){A=false}return A},registerValidationCallback:function(B){if(typeof B!="function"){return false}var A=BookingBuddy.Validation.validateCallbacks.size();BookingBuddy.Validation.validateCallbacks[A]=B;return true},registerValidLocationCallback:function(A){if(typeof A!="function"){return false}BookingBuddy.Validation.VLCallbackHooks.push(A);return true},executeValidLocationCallbacks:function(target,val){with(BookingBuddy.Validation){for(var i=0;i<VLCallbackHooks.size();i++){if(typeof VLCallbackHooks[i]=="function"){var func=VLCallbackHooks[i];func(target,val)}}}},validateLocationField:function(target){var elm=$(target);if(!elm){return false}var val=elm.value;if(!val||(val.length==0)){return false}if((target=="arrival_city")&&window.defaultValues&&window.defaultValues.vacation.arrival_city&&(val==window.defaultValues.vacation.arrival_city)){return false}with(BookingBuddy.Validation){if(validValues.indexOf(val)!=-1){hideAlert(target);executeValidLocationCallbacks(target,val);return true}var args={input:val,types:BookingBuddy.LS.suggestionTypes};if(BookingBuddy.LS.country){args.country=BookingBuddy.LS.country}var url=locationValidationUrl;if(url.indexOf("?")!=-1){url+="&"}else{url+="?"}url+="service=LocationSuggest.validate&args="+encodeURIComponent(JSON.stringify(args));var options={onSuccess:function(request){validateLocationCallback(target,request)},method:"get"};var request=new Ajax.Request(url,options)}},validateLocationCallback:function(target,request){with(BookingBuddy.Validation){var response=JSON.parse(request.responseText);if(!response){return }var t=$(target);if(!t){return }if(autoPopulateOnce||(response.valid=="1")){if(autoPopulateOnce){setTimeout(function(){autoPopulateOnce=false},4000)}if(response.value){executeValidLocationCallbacks(target,response.value);t.value=response.value}else{if(response.suggestions[0].value){executeValidLocationCallbacks(target,response.suggestions[0].value);t.value=response.suggestions[0].value}else{return }}validValues.push(t.value);hideAlert(target)}else{BookingBuddy.Validation.showAlert(target,response.suggestions)}}},addValidLocation:function(location){with(BookingBuddy.Validation){if(validValues.indexOf(location)!=-1){return }validValues.push(location)}},showAlert:function(F,A){BookingBuddy.Validation.hideAlert(F);var H=$(F);if(!H){return }BookingBuddy.Validation.invalidLocationFields.push(F);if($(F+"_warning")){return }H.addClassName("warning_highlight");var E=document.createElement("select");E.id=F+"_validation_options";E.className="validation_select";E.style.width=H.getWidth()+"px";Event.observe(E,"change",function(){BookingBuddy.Validation.alertChangeHandler(E.id)});E.options[0]=new Option("Suggested locations","");A.each(function(I){var K='BookingBuddy.Validation.alertSelect("'+F+'", "'+I.value+'");';var L=new Option(I.display,K);var J=E.options.length;E.options[J]=L});if(typeof BookingBuddy.Validation.showAlertHook=="function"){BookingBuddy.Validation.showAlertHook(F,A)}if(A.length==0){var G=new Option(BookingBuddy.Strings.LS.NoSuggestions,"");G.style.className="empty";E.options[E.options.length]=G}var C=E.options.length;E.options[C]=new Option("----------------","");var G=new Option(BookingBuddy.Strings.LS.ViewAirportList,'BookingBuddy.Aircodes.openWindow("'+F+'");');E.options[C+1]=G;H.parentNode.appendChild(E);var D=$("LocationWarning_"+BookingBuddy.searchMode);var B=A.length;if(D){if(D.style.display=="none"){if(B==0){D.innerHTML=BookingBuddy.Strings.LS.ChooseValidLocation}else{D.innerHTML=BookingBuddy.Strings.LS.AmbiguousLocation}D.style.display=""}else{if(B==0){D.innerHTML=BookingBuddy.Strings.LS.ChooseValidLocation}}}},alertChangeHandler:function(id){var elm=$(id);if(!elm){return }var value=elm.options[elm.selectedIndex].value;try{eval(value)}catch(e){return }},alertSelect:function(B,A){var C=$(B);if(!C){return }BookingBuddy.Validation.executeValidLocationCallbacks(B,A);C.value=A;BookingBuddy.Validation.hideAlert(B)},hideAlert:function(C){var A=$(C);var D=$(C+"_validation_options");BookingBuddy.Validation.invalidLocationFields=BookingBuddy.Validation.invalidLocationFields.without(C);if(A){A.removeClassName("warning_highlight")}if(D){D.parentNode.removeChild(D)}if(BookingBuddy.Validation.invalidLocationFields.length==0){var B=$("LocationWarning_"+BookingBuddy.searchMode);if(B){B.style.display="none"}}}};BookingBuddy.Calendar={attach:function(E,A,D){if(typeof Calendar=="undefined"){return }var J=function(K){BookingBuddy.Date.set(D,K.date,true)};var H=function(K){return BookingBuddy.Date.make(D)};var I=new Date();I.setFullYear(I.getFullYear()+1);var B=$(D+"_month");if(B){var C=B.options[B.options.length-1].value;var F=parseInt(C.substring(0,2),10);var G=parseInt(C.substring(3));I.setMonth(F-1);I.setFullYear(G)}return Calendar.setup({button:E,showAt:$(A),singleClick:true,onUpdate:J,getDate:H,maxDate:I})}};BookingBuddy.Date={dontUpdate:false,returnDateDivID:"BookingBuddyDateReturnDateDivID",postInitHook:null,init:function(){var B=[];switch(BookingBuddy.searchMode){case"air":case"vacation":B=["departure","return"];break;case"hotel":case"vacation_rental":B=["arrival","departure"];break;case"car":B=["pickup","dropoff"];break}if(B[0]){var A=new Date(BookingBuddy.StringsUncached.ServerTime);A.setTime(A.getTime()+(21*24*60*60*1000));BookingBuddy.Date.set(B[0],A,true)}B.each(function(C){BookingBuddy.Date.updateDaysDrop(C)});if(typeof BookingBuddy.Date.postInitHook=="function"){BookingBuddy.Date.postInitHook()}},update:function(G,F,E,D){var C=BookingBuddy.Date.make(G);var B=BookingBuddy.Date.make(F);BookingBuddy.Date.updateDaysDrop(G);if(!D&&((C<=B)||!C||!B||BookingBuddy.Date.dontUpdate)){return }var A=new Date(C.getTime()+(E*24*60*60*1000));BookingBuddy.Date.set(F,A);BookingBuddy.Date.updateDaysDrop(F)},make:function(B,E){var A=$(B+"_day");var C=$(B+"_month");var D=$(B+"_time");if(!A||!C){return false}if(D){return BookingBuddy.Date.makeFromValues(E,C.options[C.selectedIndex].value,A.options[A.selectedIndex].value,D.options[D.selectedIndex].value)}else{return BookingBuddy.Date.makeFromValues(E,C.options[C.selectedIndex].value,A.options[A.selectedIndex].value)}},makeFromValues:function(I,B,J,E){var H=parseInt(J,10);var F=parseInt(B.substring(0,2),10);var G=parseInt(B.substring(3),10);var C=new Date(G,F-1,1);if(H>BookingBuddy.Date.daysInMonth(C)){return false}else{var D=F+"/"+H+"/"+G;var A=null;if(typeof E!="undefined"){switch(E){case"anytime":case"morning":A=6;case"noon":A=12;case"evening":A=18;default:A=parseInt(E,10)}if(isNaN(A)){A=6}}return(I)?D:new Date(G,F-1,H,A)}},updateDaysDrop:function(F){var B=$(F+"_day"),C,D=32;while(!(C=BookingBuddy.Date.make(F))&&D>0){var A=parseInt(B.value,10)-2;B.options[A].selected=true;C=BookingBuddy.Date.make(F);D--}var G=BookingBuddy.Date.daysInMonth(C);var E=parseInt(B.value,10);B.options.length=0;for(var D=1;D<=G;D++){B.options[D-1]=new Option(D,D)}if(E<=B.options.length){B.options[E-1].selected=true}},daysInMonth:function(A){var B=A.getMonth();var C=[31,BookingBuddy.Date.leapYear(A)?29:28,31,30,31,30,31,31,30,31,30,31];return C[B]},leapYear:function(A){var B=A.getFullYear();return(((B%4==0)&&(B%100!=0))||(B%400==0))},set:function(C,A,E){var F=$(C+"_month");if(!F){return }var H=(A.getMonth()+1);var B=(H<10?"0":"")+H+" "+A.getFullYear();for(var D=0;D<F.options.length;D++){var G=F.options[D].value;if(G==B){F.selectedIndex=D;BookingBuddy.Date.updateDaysDrop(C);$(C+"_day").selectedIndex=(A.getDate()-1);if(E){BookingBuddy.emitEvent(F,"change")}break}}}};BookingBuddy.AFS={afsArray:[],afsTitleHook:null,afsTitleTemplate:null,afsAdsTemplate:null,useChannel:false,callAfsToggle:true,displayed:false,ajaxTransport:null,afsTitleDiv:"afsModule_Name",adsDivID:"BookingBuddyAFSAdsDivID",inputIDs:[],firstTime:true,url:null,contentReplaceHook:null,postDisplayHook:[],init:function(A){BookingBuddy.AFS.afsTitleTemplate=BookingBuddy.Strings.AFS.AfsTitles.DefaultTemplate;BookingBuddy.AFS.afsAdsTemplate=BookingBuddy.Strings.AFS.AfsAds.DefaultTemplate;if(typeof A!="undefined"){for(var B in A){BookingBuddy.AFS[B]=A[B]}}BookingBuddy.AFS.afsArray.each(function(C){if(!$(C.displayConfig.afsSectionDiv)){return }});if((BookingBuddy.searchMode!="air")&&(BookingBuddy.searchMode!="vacation")){BookingBuddy.AFS.inputIDs.each(function(C){Event.observe(C,"change",function(D){BookingBuddy.AFS.update($F(C))})})}},register:function(D,A){var C={afsSectionDiv:"BookingBuddyAFSAdsDivID",afsTitleDiv:"afsModule_Name"};if(typeof A!="undefined"){for(var B in A){C[B]=A[B]}}BookingBuddy.AFS.afsArray.push({url:D,displayConfig:C})},updateHelper:function(B,D){for(var C=0,A=BookingBuddy.AFS.inputIDs.length;C<A;C++){if(BookingBuddy.AFS.inputIDs[C]==B){BookingBuddy.AFS.update(D);break}}},update:function(search_term){if(BookingBuddy.AFS.hasValue()==false){return }if(BookingBuddy.AFS.ajaxTransport&&BookingBuddy.AFS.ajaxTransport.transport.readyState!=0){BookingBuddy.AFS.ajaxTransport.transport.abort()}BookingBuddy.AFS.afsArray.each(function(afs){with(afs){if(!$(displayConfig.afsSectionDiv)){return }$(displayConfig.afsSectionDiv).update();var query=url+encodeURIComponent(search_term);BookingBuddy.AFS.ajaxTransport=new Ajax.Request(query,{method:"get",onFailure:function(){BookingBuddy.AFS.slide("afsModule_Content","afsModule_Toggle","close")},onSuccess:function(transport){BookingBuddy.AFS.ajaxSuccess(transport,displayConfig.afsSectionDiv)}})}})},ajaxSuccess:function(transport,AFSDiv){BookingBuddy.AFS.adsDivID=AFSDiv;eval(transport.responseText);BookingBuddy.AFS.firstTime=false;if(BookingBuddy.AFS.callAfsToggle){BookingBuddy.AFS.toggle();if(!BookingBuddy.AFS.displayed&&$("afsModule_Content")){$("afsModule_Content").fire("afs:display")}BookingBuddy.AFS.displayed=true}if($("afsModule_Content")){$("afsModule_Content").fire("bbload:afs_conv_clicks")}},toggle:function(){if(!BookingBuddy.AFS.adsDivID||!BookingBuddy.AFS.callAfsToggle){return }var A=false;BookingBuddy.AFS.inputIDs.each(function(D){var B=$(D);var C=$F(B);if(C){A=true}});if(A){if($("afsModule_Content")){BookingBuddy.AFS.afsToggle("afsModule_Content","afsModule_Toggle","fit")}else{BookingBuddy.slide(BookingBuddy.AFS.adsDivID,"fit",BookingBuddy.slidingFactor)}}else{if(!A&&BookingBuddy.AFS.displayed){if($("afsModule_Content")){BookingBuddy.AFS.afsToggle("afsModule_Content","afsModule_Toggle","close")}else{BookingBuddy.slide(BookingBuddy.AFS.adsDivID,"close",BookingBuddy.slidingFactor);BookingBuddy.AFS.displayed=false}}}},afsToggle:function(E,D,C){var B=BookingBuddy.AFS.hasValue();if(C=="fit"&&BookingBuddy.AFS.firstTime&&B){BookingBuddy.AFS.update(B);return }var A=BookingBuddy.Tools.toggle(E,D,C,"BookingBuddy.AFS.afsToggle");if(!A){return }if(C=="close"){BookingBuddy.AFS.displayed=false}},display:function(A){var B=$(BookingBuddy.AFS.adsDivID);if(!B){return }var C=null;if(typeof BookingBuddy.AFS.contentReplaceHook=="function"){C=BookingBuddy.AFS.contentReplaceHook(A)}if(C==null){C=BookingBuddy.AFS.getBody(A)}B.insert({top:C});BookingBuddy.AFS.postDisplayHook.each(function(D){if(typeof D=="function"){D()}})},getBody:function(B){var C=BookingBuddy.AFS.afsAdsTemplate;var D='<div id="BookingBuddyAfsSectionTitle"></div>';D+='<div id="BookingBuddyAFSAdsTitle">Sponsored Links</div><div id="BBafsContainer">';var A="";B.each(function(E){if(E.line3!=""){E.line3="<br />"+E.line3}D+=C.evaluate(E)});D+="</div>\n";return D},afsCityName:function(A,D){if(A===null){return }var B=null;if(typeof BookingBuddy.AFS.afsTitleHook=="function"){var C=BookingBuddy.AFS.afsTitleHook();if(C){B=C}}if(B==null){if(!BookingBuddy.AFS.useChannel){B=BookingBuddy.AFS.afsTitleTemplate[BookingBuddy.searchMode]}else{B=BookingBuddy.AFS.afsTitleTemplate[D]}}if($(BookingBuddy.AFS.afsTitleDiv)){$(BookingBuddy.AFS.afsTitleDiv).update(B.evaluate({city:A}))}},ss:function(A){window.status=A||"";return true},hasValue:function(){if(BookingBuddy.AFS.inputIDs.length<1){return false}var A=null;for(var B=0;B<BookingBuddy.AFS.inputIDs.length;B++){A=$(BookingBuddy.AFS.inputIDs[B]);if(A.value==""||A.value=="Type or choose from above"){return false}}return A.value}};BookingBuddy.DHTMLDropdown={debug:false,dropdowns:[],add_dropdown:function(){var A=this.dropdowns.length;this.dropdowns[A]={options:[],selected:null};return A},add_option:function(D,A,C){if(!this.valid_dropdown(D)){this.throw_error("add_option","Invalid dropdown index");return -1}var B=this.dropdowns[D].options.length;this.dropdowns[D].options[B]={value:A,label:C};if(this.dropdowns[D].selected==null){this.dropdowns[D].selected=B}return B},add_dropdown_options:function(C,B){var A;B.each(function(F){if(F.ad_id){A=F.ad_id.replace(/^\D+/,"");F.label=BookingBuddy.Search.getAdMetaData(A,"display_name")}if(F.logo_url&&F.logo_url!=""){var D=new Image();D.src=F.logo_url;F.alt_text=F.label+" logo";var E=BookingBuddy.Strings.DHTMLDropdown.PremiumAdTemplate.evaluate(F)}else{var E=BookingBuddy.Strings.DHTMLDropdown.BasicAdTemplate.evaluate(F)}BookingBuddy.DHTMLDropdown.add_option(C,F.value,E)})},get_value:function(A){return this.dropdowns[A].options[this.dropdowns[A].selected].value},draw_dropdown:function(F,B){if(!this.valid_dropdown(F)){this.throw_error("draw_dropdown","Invalid dropdown index");return -1}var E=$(B);if(!E){this.throw_error("draw_dropdown","Invalid parent");return -1}var D=document.createElement("div");D.id="dropdown_display_"+F;D.className="dropdown_display";var C=document.createElement("div");C.id="dropdown_display_"+F+"_text";C.className="dropdown_text";D.appendChild(C);var A=document.createElement("div");A.className="dropdown_button";D.appendChild(A);E.insertBefore(D,$("dropdown_submit"));Event.observe("dropdown_display_"+F,"click",function(G){BookingBuddy.DHTMLDropdown.handle_dropdown_click(G,F)});this.show_selected(F);Event.observe("dropdown_submit","click",function(G){BookingBuddy.Search.submit(BookingBuddy.DHTMLDropdown.get_value(F),true);Event.stop(G)});return 1},handle_dropdown_click:function(A,B){if(this.is_open(B)){this.hide_dropdown(B)}else{this.draw_options(B)}Event.stop(A)},handle_option_click:function(B,C,A){BookingBuddy.DHTMLDropdown.select_option(C,A);BookingBuddy.Search.submit(BookingBuddy.DHTMLDropdown.get_value(C),true);Event.stop(B)},handle_window_click:function(A){BookingBuddy.DHTMLDropdown.close_all_dropdowns();Event.stopObserving(document.body,"click",BookingBuddy.DHTMLDropdown.handle_window_click);A.stop},is_open:function(B){var A=$("dropdown_options_"+B);if(A){return true}return false},draw_options:function(D){if(!this.valid_dropdown(D)){this.throw_error("draw_options","Invalid dropdown index");return -1}var C=$("dropdown_display_"+D);if(!C){this.throw_error("draw_options","Could not find parent dropdown");return -1}var B=document.createElement("div");B.id="dropdown_options_"+D;B.className="dropdown_options";for(var A=0;A<this.dropdowns[D].options.length;A++){B.appendChild(this.create_option_div(D,A))}B.style.visibility="hidden";C.appendChild(B);this.position_options(D);Event.observe(document.body,"click",BookingBuddy.DHTMLDropdown.handle_window_click);return false},hide_dropdown:function(B){var A=$("dropdown_options_"+B);if(A){A.parentNode.removeChild(A)}},create_option_div:function(C,A){if(!this.valid_dropdown(C)){this.throw_error("create_option_div","Invalid dropdown index");return null}if(A>=this.dropdowns[C].options.length){this.throw_error("create_option_div","Invalid option index");return null}var B=document.createElement("div");B.className="dropdown_option";Event.observe(B,"click",function(D){BookingBuddy.DHTMLDropdown.handle_option_click(D,C,A)});B.innerHTML=this.dropdowns[C].options[A].label;return B},select_option:function(B,A){this.hide_dropdown(B);this.dropdowns[B].selected=A;this.show_selected(B)},select_by_value:function(C,B){if(!this.valid_dropdown(C)){this.throw_error("select_by_value","Invalid dropdown index");return -1}for(var A=0;A<this.dropdowns[C].options.length;A++){if(this.dropdowns[C].options[A].value==B){this.dropdowns[C].selected=A;break}}this.show_selected(C)},show_selected:function(D){if(!this.valid_dropdown(D)){this.throw_error("show_selected","Invalid dropdown index");return -1}var B=this.dropdowns[D].selected;if(B==null){return }var A=this.dropdowns[D].options[B].label;var C=$("dropdown_display_"+D+"_text");if(C){C.innerHTML=A}},position_options:function(D){if(!this.valid_dropdown(D)){this.throw_error("position_options","Invalid dropdown index");return -1}var B=$("dropdown_options_"+D);var A=$("dropdown_display_"+D);if(B&&A){var C=Position.positionedOffset(A);newX=C[0];newY=C[1]-Element.getHeight(B);B.style.top=newY+"px";B.style.left=newX+"px";B.style.visibility=""}},valid_dropdown:function(A){if((A<0)||(A>=this.dropdowns.length)){return false}return true},close_all_dropdowns:function(){for(var A=0;A<BookingBuddy.DHTMLDropdown.dropdowns.length;A++){BookingBuddy.DHTMLDropdown.hide_dropdown(A)}},position_all_dropdowns:function(){BookingBuddy.DHTMLDropdown.dropdowns.each(function(B,A){BookingBuddy.DHTMLDropdown.position_options(A)})},throw_error:function(B,A){if(this.debug==true){alert("ERROR - "+B+": "+A)}return }};BookingBuddy.Aircodes={url:null,options:"scrollbars=yes,width=440,height=320,resizable=yes",target:null,popup:null,init:function(A){BookingBuddy.Aircodes.url=A},openWindow:function(C,B){if(!BookingBuddy.Aircodes.url){return }var A=BookingBuddy.Aircodes.url+"?target="+encodeURIComponent(C);if(B){A+="&le=1"}BookingBuddy.Aircodes.popup=window.open(A,"aircodes",BookingBuddy.Aircodes.options);if(!BookingBuddy.Aircodes.popup){BookingBuddy.Search.showBlockedPopUpMessage();return false}},populateInput:function(A){if(!BookingBuddy.Aircodes.target||!BookingBuddy.Aircodes.popup){return }targetField=$(BookingBuddy.Aircodes.target);if(targetField){targetField.value=A;targetField.focus();window.BookingBuddy.emitEvent(targetField,"change");window.BookingBuddy.emitEvent(targetField,"blur")}BookingBuddy.Aircodes.popup.close()}};BookingBuddy.FlexSearch={adElements:{},init:function(){BookingBuddy.FlexSearch.adElements.flex_days_3=$$("#afw_adwrapper .flex_days_3");BookingBuddy.FlexSearch.adElements.flex_days_30=$$("#afw_adwrapper .flex_days_30");BookingBuddy.FlexSearch.adElements.flex_days_330=$$("#afw_adwrapper .flex_days_330");BookingBuddy.FlexSearch.updateFlexAdDisplay(null)},updateFlexAdDisplay:function(E){var D="flex_days_"+$F("flex_days");for(var C in BookingBuddy.FlexSearch.adElements){for(var A=0,B=BookingBuddy.FlexSearch.adElements[C].length;A<B;A++){BookingBuddy.FlexSearch.adElements[C][A].hide();$($(BookingBuddy.FlexSearch.adElements[C][A]).parentNode).hide()}}for(var A=0,B=BookingBuddy.FlexSearch.adElements[D].length;A<B;A++){BookingBuddy.FlexSearch.adElements[D][A].show();$($(BookingBuddy.FlexSearch.adElements[D][A]).parentNode).show()}}};BookingBuddy.PopUnder={searchesPerformed:0,popUnderArray:[],center:null,init:function(B){BookingBuddy.PopUnder.searchesPerformed=parseInt(BookingBuddy.getCookie("BBPopUnderNumOfSearches"));if(isNaN(BookingBuddy.PopUnder.searchesPerformed)){BookingBuddy.PopUnder.searchesPerformed=0}var A=$(B);if(A){A.observe("submit",function(C){BookingBuddy.createCookie("BBPopUnderNumOfSearches",++BookingBuddy.PopUnder.searchesPerformed,30);setTimeout(BookingBuddy.PopUnder.call,500)})}},register:function(D,C,B,F,A,E){BookingBuddy.PopUnder.popUnderArray.push({url:D,params:F,numOfSearches:C,center:B,height:A,width:E})},call:function(C){if(typeof C=="object"&&C){return BookingBuddy.PopUnder.pop(C)}for(var A=0;A<BookingBuddy.PopUnder.popUnderArray.length;A++){var B=BookingBuddy.PopUnder.popUnderArray[A];BookingBuddy.PopUnder.pop(B)}return true},pop:function(C){if(typeof C!="object"&&!C){return false}if(C.numOfSearches){if(BookingBuddy.PopUnder.searchesPerformed!=C.numOfSearches){return false}}C.params+=",height="+C.height+",width="+C.width;var B=Math.floor(Math.random()*100);var A=window.open(C.url,"BBPopUnder"+B,C.params);if(!A){return false}A.blur();if(!C.center){A.moveTo(0,0)}else{var E=(screen.width-(C.width+32))/2;var D=(screen.height-(C.height+96))/2;A.moveTo(E,D)}return A}};BookingBuddy.IPLocation={url:"/ajax/",populateInput:function(G,E,C,B){var J=$(E);if(!J){return }if(!C&&(J.value.length!=0)){return }var D=BookingBuddy.getQSParam("icup");var H=BookingBuddy.getCookie("iploc");if(!D&&H){J.value=H;return }var F={type:G};if(D){F.icup=D}if(B){F.af_redirect=true}var A=BookingBuddy.IPLocation.url+"?service=LocationSuggest.ip&args="+encodeURIComponent(JSON.stringify(F));var I=new Ajax.Request(A,{onSuccess:function(K){BookingBuddy.IPLocation.callback(K,E,C)},method:"get"})},callback:function(E,D,C){var B=$(D);if(!B){return }if(!C&&(B.value.length!=0)){return }var A=JSON.parse(E.responseText);if(A.iplocation){B.value=A.iplocation;BookingBuddy.createCookie("iploc",A.iplocation,1440)}if(A.affiliate_redirect){BookingBuddy.IPLocation.displayAffiliateRedirect(A.affiliate_redirect)}},displayAffiliateRedirect:function(B){var C=new Element("div");C.update(B);document.body.appendChild(C);var A=new DHTMLPopup_Affiliate("dhtml_affiliate");A.setPageMask("page_mask");A.show();$("dhtml_af_img_0","dhtml_af_link_0").each(function(D){D.observe("click",function(){A.submit("dhtml_af_0","affiliate","save");omnitureSendEvents("event26","A BB.com user is selecting an international site")})});$("dhtml_af_img_1","dhtml_af_link_1").each(function(D){D.observe("click",function(){A.submit("dhtml_af_1","affiliate","save")})});$("dhtml_affiliate").observe("dhtmlpopup:af:success",function(E){A.hide();var D=E.memo.url;if(D&&-1==D.indexOf(BookingBuddy.domain)){window.location.href=D}});$("dhtml_affiliate").observe("dhtmlpopup:af:error",A.hide.bind(A));$("dhtml_affiliate_close").observe("click",A.hide.bind(A))}};BookingBuddy.UK={step2displayed:false,maskID:"mask",maskOffsetHeight:6,adsID:"ads",pricedDivWrapper:"BBLTPricedAdsWrapper",pricedDiv:"BBLTPricedAds",searchForm:"bbsearch",showRecentSearches:false,recentSearchesDisplayed:false,showPrices:false,pricesShown:false,init:function(){document.observe("afs:display",function(){if(BookingBuddy.UK.step2displayed){Effect.BlindDown("afs_blind")}});document.observe("lt:begin",BookingBuddy.UK.showMask);document.observe("lt:end",BookingBuddy.UK.hideMask);document.observe("lt:prices",function(){BookingBuddy.UK.showPrices=true});document.observe("lt:noprices",function(){BookingBuddy.UK.showPrices=false});document.observe("lt:end",function(){setTimeout(function(){if(BookingBuddy.UK.step2displayed&&$("priced_blind")){if(BookingBuddy.UK.showPrices){if(!BookingBuddy.UK.pricesShown){Effect.BlindDown("priced_blind");BookingBuddy.UK.pricesShown=true}}else{Effect.BlindUp("priced_blind");BookingBuddy.UK.pricesShown=false}}},2000)});var A=$(BookingBuddy.UK.searchForm);if(A){A.onkeydown=function(B){if(typeof (B)=="undefined"){B=window.event}if(B.keyCode==13){BookingBuddy.UK.submitClick()}}}},submitClick:function(){if(!BookingBuddy.UK.step2displayed){BookingBuddy.UK.goToStep2()}else{BookingBuddy.UK.showMask();setTimeout("BookingBuddy.UK.hideMask()",2000)}},applyHover:function(){if(!window.XMLHttpRequest){$$("input.BBInputImage").each(function(A){Event.observe(A,"mouseover",function(){Element.addClassName(A,"ad_button_hover");Element.addClassName(A.parentNode,"ad_div_hover")});Event.observe(A,"mouseout",function(){Element.removeClassName(A,"ad_button_hover");Element.removeClassName(A.parentNode,"ad_div_hover")})})}},goToStep2:function(){with(BookingBuddy.UK){$("step2graphic").hide();var footerbox=$("footerbox");if(footerbox){footerbox.hide()}$("leftbordersearch").style.height="350px";$("ads").style.display="block";$("module_wrapper_recentSearches").style.display="block";var p=$(pricedDiv);var pw=$(pricedDivWrapper);if(p.innerHTML&&pw){pw.show()}else{pw.hide()}var submit_button=$("submit_button");if(submit_button){submit_button.addClassName("update")}showMask();setTimeout("BookingBuddy.UK.hideMask()",1000);if(showRecentSearches){displayRS()}document.observe("rs:display",displayRS);document.observe("lt:prices",function(){$(pricedDivWrapper).show()});document.observe("lt:noprices",function(){$(pricedDivWrapper).hide()});var city_name="";var city_name_span;document.observe("lt:end",function(){city_name="";var arr=$("arrival_city").value;if(arr){var match=arr.split(",",2);if(match[0]&&match[1]){var city_name_span=$("price_city_name");if(city_name_span){city_name_span.innerHTML=match[0]}}}});step2displayed=true;if(BookingBuddy.AFS.displayed){$("afsModule_Content").fire("afs:display")}$(pricedDivWrapper).fire("lt:end")}},displayRS:function(){with(BookingBuddy.UK){if(!recentSearchesDisplayed){Effect.BlindDown("recentSearches_wrapper");BookingBuddy.createCookie("bb_module_recentSearchesModule_Content","fit");recentSearchesDisplayed=true}}},showMask:function(){with(BookingBuddy.UK){var mask=$(maskID);var ads=$(adsID);if(mask&&ads){var height=ads.offsetHeight-maskOffsetHeight;if(height>0){mask.style.height=height+"px";mask.show()}}}},hideMask:function(){with(BookingBuddy.UK){var mask=$(maskID);if(mask){mask.hide()}}},toggleTooltip:function(F,A){var C=$(F+"_tooltip");var B=$(F);if(!C||!B){return }var E=C.parentNode;if(!E){return }var D=E.parentNode;if(!D){return }if(D.id!=BookingBuddy.UK.pricedDiv){return }if(A){C.show();B.addClassName("LTAdHover")}else{C.hide();B.removeClassName("LTAdHover")}}};BookingBuddy.Deals={dealsArray:[],feedUrl:null,init:function(config){for(var key in config){BookingBuddy.Deals[key]=config[key]}BookingBuddy.Deals.dealsArray.each(function(deal){with(deal){if(typeof displayConfig.target_input!="undefined"){if($(displayConfig.target_input).match("select")){Event.observe(displayConfig.target_input,"change",function(){options.arrival_city=$F(displayConfig.target_input);BookingBuddy.Deals.loadDeal(deal);return })}else{if(BookingBuddy.searchMode=="air"||BookingBuddy.searchMode=="vacation"){document.observe("BBDeals:blur",function(){options.arrival_city=$F(displayConfig.target_input);BookingBuddy.Deals.loadDeal(deal);return })}else{Event.observe(displayConfig.target_input,"blur",function(){options.arrival_city=$F(displayConfig.target_input);BookingBuddy.Deals.loadDeal(deal);return })}}}}BookingBuddy.Deals.loadDeal(deal)})},register:function(C,A){var D={insertType:"update",divDealsHeader:"BB-deals-header",headerMsg:" Deals",divDeals:"BB-deals-section",divErrorMsg:"BB-deals-error-msg",errorMsg:"No deals available at this time.",onError:null,onSuccess:null,dealTemplate:BookingBuddy.Strings.Deals.DefaultTemplate,cityName:null};if(typeof A!="undefined"){for(var B in A){D[B]=A[B]}}BookingBuddy.Deals.dealsArray.push({options:C,displayConfig:D})},loadDeal:function(Deal){with(Deal){new Ajax.Request(BookingBuddy.Deals.feedUrl,{method:"get",parameters:options,onSuccess:function(transport){if(!transport.responseText){return }var json=transport.responseText.evalJSON(true);if(!json.errorstr){if(json[0].destination){if($(displayConfig.divDealsHeader)){$(displayConfig.divDealsHeader).update(json[0].destination+displayConfig.headerMsg)}displayConfig.cityName=json[0].destination;json.splice(0,1)}var html="";var deal_row=0;json.each(function(deal){if(deal_row%2==0){deal.row_type="odd"}html+=Deal.displayConfig.dealTemplate.evaluate(deal);deal_row++});if(displayConfig.insertType=="update"){$(displayConfig.divDeals).update(html)}else{if($(displayConfig.divErrorMsg)){$(displayConfig.divErrorMsg).hide()}$(displayConfig.divDeals).insert({top:html})}if(typeof displayConfig.onSuccess=="function"){displayConfig.onSuccess()}}else{if(typeof displayConfig.onError=="function"){displayConfig.onError()}var errorMsg='<span id="'+displayConfig.divErrorMsg+'">'+displayConfig.errorMsg+"</span>";$(displayConfig.divDeals).update(errorMsg);if($(displayConfig.divErrorMsg)){$(displayConfig.divErrorMsg).show()}}}})}}};