	


String.prototype.parseColor=function(){var a="#";if(this.slice(0,4)=="rgb("){var c=this.slice(4,this.length-1).split(",");var b=0;do{a+=parseInt(c[b]).toColorPart()}while(++b<3)}else{if(this.slice(0,1)=="#"){if(this.length==4){for(var b=1;b<4;b++){a+=(this.charAt(b)+this.charAt(b)).toLowerCase()}}if(this.length==7){a=this.toLowerCase()}}}return(a.length==7?a:(arguments[0]||this))};Element.collectTextNodes=function(a){return $A($(a).childNodes).collect(function(b){return(b.nodeType==3?b.nodeValue:(b.hasChildNodes()?Element.collectTextNodes(b):""))}).flatten().join("")};Element.collectTextNodesIgnoreClass=function(a,b){return $A($(a).childNodes).collect(function(c){return(c.nodeType==3?c.nodeValue:((c.hasChildNodes()&&!Element.hasClassName(c,b))?Element.collectTextNodesIgnoreClass(c,b):""))}).flatten().join("")};Element.setContentZoom=function(a,b){a=$(a);a.setStyle({fontSize:(b/100)+"em"});if(Prototype.Browser.WebKit){window.scrollBy(0,0)}return a};Element.getInlineOpacity=function(a){return $(a).style.opacity||""};Element.forceRerendering=function(a){try{a=$(a);var c=document.createTextNode(" ");a.appendChild(c);a.removeChild(c)}catch(b){}};var Effect={_elementDoesNotExistError:{name:"ElementDoesNotExistError",message:"The specified DOM element does not exist, but is required for this effect to operate"},Transitions:{linear:Prototype.K,sinoidal:function(a){return(-Math.cos(a*Math.PI)/2)+0.5},reverse:function(a){return 1-a},flicker:function(a){var a=((-Math.cos(a*Math.PI)/4)+0.75)+Math.random()/4;return a>1?1:a},wobble:function(a){return(-Math.cos(a*Math.PI*(9*a))/2)+0.5},pulse:function(b,a){a=a||5;return(((b%(1/a))*a).round()==0?((b*a*2)-(b*a*2).floor()):1-((b*a*2)-(b*a*2).floor()))},spring:function(a){return 1-(Math.cos(a*4.5*Math.PI)*Math.exp(-a*6))},none:function(a){return 0},full:function(a){return 1}},DefaultOptions:{duration:1,fps:100,sync:false,from:0,to:1,delay:0,queue:"parallel"},tagifyText:function(a){var b="position:relative";if(Prototype.Browser.IE){b+=";zoom:1"}a=$(a);$A(a.childNodes).each(function(c){if(c.nodeType==3){c.nodeValue.toArray().each(function(d){a.insertBefore(new Element("span",{style:b}).update(d==" "?String.fromCharCode(160):d),c)});Element.remove(c)}})},multiple:function(b,c){var e;if(((typeof b=="object")||Object.isFunction(b))&&(b.length)){e=b}else{e=$(b).childNodes}var a=Object.extend({speed:0.1,delay:0},arguments[2]||{});var d=a.delay;$A(e).each(function(g,f){new c(g,Object.extend(a,{delay:f*a.speed+d}))})},PAIRS:{slide:["SlideDown","SlideUp"],blind:["BlindDown","BlindUp"],appear:["Appear","Fade"]},toggle:function(b,c){b=$(b);c=(c||"appear").toLowerCase();var a=Object.extend({queue:{position:"end",scope:(b.id||"global"),limit:1}},arguments[2]||{});Effect[b.visible()?Effect.PAIRS[c][1]:Effect.PAIRS[c][0]](b,a)}};Effect.DefaultOptions.transition=Effect.Transitions.sinoidal;Effect.ScopedQueue=Class.create(Enumerable,{initialize:function(){this.effects=[];this.interval=null},_each:function(a){this.effects._each(a)},add:function(b){var c=new Date().getTime();var a=Object.isString(b.options.queue)?b.options.queue:b.options.queue.position;switch(a){case"front":this.effects.findAll(function(d){return d.state=="idle"}).each(function(d){d.startOn+=b.finishOn;d.finishOn+=b.finishOn});break;case"with-last":c=this.effects.pluck("startOn").max()||c;break;case"end":c=this.effects.pluck("finishOn").max()||c;break}b.startOn+=c;b.finishOn+=c;if(!b.options.queue.limit||(this.effects.length<b.options.queue.limit)){this.effects.push(b)}if(!this.interval){this.interval=setInterval(this.loop.bind(this),15)}},remove:function(a){this.effects=this.effects.reject(function(b){return b==a});if(this.effects.length==0){clearInterval(this.interval);this.interval=null}},loop:function(){var c=new Date().getTime();for(var b=0,a=this.effects.length;b<a;b++){this.effects[b]&&this.effects[b].loop(c)}}});Effect.Queues={instances:$H(),get:function(a){if(!Object.isString(a)){return a}return this.instances.get(a)||this.instances.set(a,new Effect.ScopedQueue())}};Effect.Queue=Effect.Queues.get("global");Effect.Base=Class.create({position:null,start:function(options){function codeForEvent(options,eventName){return((options[eventName+"Internal"]?"this.options."+eventName+"Internal(this);":"")+(options[eventName]?"this.options."+eventName+"(this);":""))}if(options&&options.transition===false){options.transition=Effect.Transitions.linear}this.options=Object.extend(Object.extend({},Effect.DefaultOptions),options||{});this.currentFrame=0;this.state="idle";this.startOn=this.options.delay*1000;this.finishOn=this.startOn+(this.options.duration*1000);this.fromToDelta=this.options.to-this.options.from;this.totalTime=this.finishOn-this.startOn;this.totalFrames=this.options.fps*this.options.duration;eval('this.render = function(pos){ if (this.state=="idle"){this.state="running";'+codeForEvent(this.options,"beforeSetup")+(this.setup?"this.setup();":"")+codeForEvent(this.options,"afterSetup")+'};if (this.state=="running"){pos=this.options.transition(pos)*'+this.fromToDelta+"+"+this.options.from+";this.position=pos;"+codeForEvent(this.options,"beforeUpdate")+(this.update?"this.update(pos);":"")+codeForEvent(this.options,"afterUpdate")+"}}");this.event("beforeStart");if(!this.options.sync){Effect.Queues.get(Object.isString(this.options.queue)?"global":this.options.queue.scope).add(this)}},loop:function(c){if(c>=this.startOn){if(c>=this.finishOn){this.render(1);this.cancel();this.event("beforeFinish");if(this.finish){this.finish()}this.event("afterFinish");return}var b=(c-this.startOn)/this.totalTime,a=(b*this.totalFrames).round();if(a>this.currentFrame){this.render(b);this.currentFrame=a}}},cancel:function(){if(!this.options.sync){Effect.Queues.get(Object.isString(this.options.queue)?"global":this.options.queue.scope).remove(this)}this.state="finished"},event:function(a){if(this.options[a+"Internal"]){this.options[a+"Internal"](this)}if(this.options[a]){this.options[a](this)}},inspect:function(){var a=$H();for(property in this){if(!Object.isFunction(this[property])){a.set(property,this[property])}}return"#<Effect:"+a.inspect()+",options:"+$H(this.options).inspect()+">"}});Effect.Parallel=Class.create(Effect.Base,{initialize:function(a){this.effects=a||[];this.start(arguments[1])},update:function(a){this.effects.invoke("render",a)},finish:function(a){this.effects.each(function(b){b.render(1);b.cancel();b.event("beforeFinish");if(b.finish){b.finish(a)}b.event("afterFinish")})}});Effect.Tween=Class.create(Effect.Base,{initialize:function(c,f,e){c=Object.isString(c)?$(c):c;var b=$A(arguments),d=b.last(),a=b.length==5?b[3]:null;this.method=Object.isFunction(d)?d.bind(c):Object.isFunction(c[d])?c[d].bind(c):function(g){c[d]=g};this.start(Object.extend({from:f,to:e},a||{}))},update:function(a){this.method(a)}});Effect.Event=Class.create(Effect.Base,{initialize:function(){this.start(Object.extend({duration:0},arguments[0]||{}))},update:Prototype.emptyFunction});Effect.Opacity=Class.create(Effect.Base,{initialize:function(b){this.element=$(b);if(!this.element){throw (Effect._elementDoesNotExistError)}if(Prototype.Browser.IE&&(!this.element.currentStyle.hasLayout)){this.element.setStyle({zoom:1})}var a=Object.extend({from:this.element.getOpacity()||0,to:1},arguments[1]||{});this.start(a)},update:function(a){this.element.setOpacity(a)}});Effect.Move=Class.create(Effect.Base,{initialize:function(b){this.element=$(b);if(!this.element){throw (Effect._elementDoesNotExistError)}var a=Object.extend({x:0,y:0,mode:"relative"},arguments[1]||{});this.start(a)},setup:function(){this.element.makePositioned();this.originalLeft=parseFloat(this.element.getStyle("left")||"0");this.originalTop=parseFloat(this.element.getStyle("top")||"0");if(this.options.mode=="absolute"){this.options.x=this.options.x-this.originalLeft;this.options.y=this.options.y-this.originalTop}},update:function(a){this.element.setStyle({left:(this.options.x*a+this.originalLeft).round()+"px",top:(this.options.y*a+this.originalTop).round()+"px"})}});Effect.MoveBy=function(b,a,c){return new Effect.Move(b,Object.extend({x:c,y:a},arguments[3]||{}))};Effect.Scale=Class.create(Effect.Base,{initialize:function(b,c){this.element=$(b);if(!this.element){throw (Effect._elementDoesNotExistError)}var a=Object.extend({scaleX:true,scaleY:true,scaleContent:true,scaleFromCenter:false,scaleMode:"box",scaleFrom:100,scaleTo:c},arguments[2]||{});this.start(a)},setup:function(){this.restoreAfterFinish=this.options.restoreAfterFinish||false;this.elementPositioning=this.element.getStyle("position");this.originalStyle={};["top","left","width","height","fontSize"].each(function(b){this.originalStyle[b]=this.element.style[b]}.bind(this));this.originalTop=this.element.offsetTop;this.originalLeft=this.element.offsetLeft;var a=this.element.getStyle("font-size")||"100%";["em","px","%","pt"].each(function(b){if(a.indexOf(b)>0){this.fontSize=parseFloat(a);this.fontSizeType=b}}.bind(this));this.factor=(this.options.scaleTo-this.options.scaleFrom)/100;this.dims=null;if(this.options.scaleMode=="box"){this.dims=[this.element.offsetHeight,this.element.offsetWidth]}if(/^content/.test(this.options.scaleMode)){this.dims=[this.element.scrollHeight,this.element.scrollWidth]}if(!this.dims){this.dims=[this.options.scaleMode.originalHeight,this.options.scaleMode.originalWidth]}},update:function(a){var b=(this.options.scaleFrom/100)+(this.factor*a);if(this.options.scaleContent&&this.fontSize){this.element.setStyle({fontSize:this.fontSize*b+this.fontSizeType})}this.setDimensions(this.dims[0]*b,this.dims[1]*b)},finish:function(a){if(this.restoreAfterFinish){this.element.setStyle(this.originalStyle)}},setDimensions:function(a,e){var f={};if(this.options.scaleX){f.width=e.round()+"px"}if(this.options.scaleY){f.height=a.round()+"px"}if(this.options.scaleFromCenter){var c=(a-this.dims[0])/2;var b=(e-this.dims[1])/2;if(this.elementPositioning=="absolute"){if(this.options.scaleY){f.top=this.originalTop-c+"px"}if(this.options.scaleX){f.left=this.originalLeft-b+"px"}}else{if(this.options.scaleY){f.top=-c+"px"}if(this.options.scaleX){f.left=-b+"px"}}}this.element.setStyle(f)}});Effect.Highlight=Class.create(Effect.Base,{initialize:function(b){this.element=$(b);if(!this.element){throw (Effect._elementDoesNotExistError)}var a=Object.extend({startcolor:"#ffff99"},arguments[1]||{});this.start(a)},setup:function(){if(this.element.getStyle("display")=="none"){this.cancel();return}this.oldStyle={};if(!this.options.keepBackgroundImage){this.oldStyle.backgroundImage=this.element.getStyle("background-image");this.element.setStyle({backgroundImage:"none"})}if(!this.options.endcolor){this.options.endcolor=this.element.getStyle("background-color").parseColor("#ffffff")}if(!this.options.restorecolor){this.options.restorecolor=this.element.getStyle("background-color")}this._base=$R(0,2).map(function(a){return parseInt(this.options.startcolor.slice(a*2+1,a*2+3),16)}.bind(this));this._delta=$R(0,2).map(function(a){return parseInt(this.options.endcolor.slice(a*2+1,a*2+3),16)-this._base[a]}.bind(this))},update:function(a){this.element.setStyle({backgroundColor:$R(0,2).inject("#",function(b,c,d){return b+((this._base[d]+(this._delta[d]*a)).round().toColorPart())}.bind(this))})},finish:function(){this.element.setStyle(Object.extend(this.oldStyle,{backgroundColor:this.options.restorecolor}))}});Effect.ScrollTo=function(d){var c=arguments[1]||{},b=document.viewport.getScrollOffsets(),e=$(d).cumulativeOffset(),a=(window.height||document.body.scrollHeight)-document.viewport.getHeight();if(c.offset){e[1]+=c.offset}return new Effect.Tween(null,b.top,e[1]>a?a:e[1],c,function(f){scrollTo(b.left,f.round())})};Effect.Fade=function(c){c=$(c);var a=c.getInlineOpacity();var b=Object.extend({from:c.getOpacity()||1,to:0,afterFinishInternal:function(d){if(d.options.to!=0){return}d.element.hide().setStyle({opacity:a})}},arguments[1]||{});return new Effect.Opacity(c,b)};Effect.Appear=function(b){b=$(b);var a=Object.extend({from:(b.getStyle("display")=="none"?0:b.getOpacity()||0),to:1,afterFinishInternal:function(c){c.element.forceRerendering()},beforeSetup:function(c){c.element.setOpacity(c.options.from).show()}},arguments[1]||{});return new Effect.Opacity(b,a)};Effect.Puff=function(b){b=$(b);var a={opacity:b.getInlineOpacity(),position:b.getStyle("position"),top:b.style.top,left:b.style.left,width:b.style.width,height:b.style.height};return new Effect.Parallel([new Effect.Scale(b,200,{sync:true,scaleFromCenter:true,scaleContent:true,restoreAfterFinish:true}),new Effect.Opacity(b,{sync:true,to:0})],Object.extend({duration:1,beforeSetupInternal:function(c){Position.absolutize(c.effects[0].element)},afterFinishInternal:function(c){c.effects[0].element.hide().setStyle(a)}},arguments[1]||{}))};Effect.BlindUp=function(a){a=$(a);a.makeClipping();return new Effect.Scale(a,0,Object.extend({scaleContent:false,scaleX:false,restoreAfterFinish:true,afterFinishInternal:function(b){b.element.hide().undoClipping()}},arguments[1]||{}))};Effect.BlindDown=function(b){b=$(b);var a=b.getDimensions();return new Effect.Scale(b,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:a.height,originalWidth:a.width},restoreAfterFinish:true,afterSetup:function(c){c.element.makeClipping().setStyle({height:"0px"}).show()},afterFinishInternal:function(c){c.element.undoClipping()}},arguments[1]||{}))};Effect.SwitchOff=function(b){b=$(b);var a=b.getInlineOpacity();return new Effect.Appear(b,Object.extend({duration:0.4,from:0,transition:Effect.Transitions.flicker,afterFinishInternal:function(c){new Effect.Scale(c.element,1,{duration:0.3,scaleFromCenter:true,scaleX:false,scaleContent:false,restoreAfterFinish:true,beforeSetup:function(d){d.element.makePositioned().makeClipping()},afterFinishInternal:function(d){d.element.hide().undoClipping().undoPositioned().setStyle({opacity:a})}})}},arguments[1]||{}))};Effect.DropOut=function(b){b=$(b);var a={top:b.getStyle("top"),left:b.getStyle("left"),opacity:b.getInlineOpacity()};return new Effect.Parallel([new Effect.Move(b,{x:0,y:100,sync:true}),new Effect.Opacity(b,{sync:true,to:0})],Object.extend({duration:0.5,beforeSetup:function(c){c.effects[0].element.makePositioned()},afterFinishInternal:function(c){c.effects[0].element.hide().undoPositioned().setStyle(a)}},arguments[1]||{}))};Effect.Shake=function(d){d=$(d);var b=Object.extend({distance:20,duration:0.5},arguments[1]||{});var e=parseFloat(b.distance);var c=parseFloat(b.duration)/10;var a={top:d.getStyle("top"),left:d.getStyle("left")};return new Effect.Move(d,{x:e,y:0,duration:c,afterFinishInternal:function(f){new Effect.Move(f.element,{x:-e*2,y:0,duration:c*2,afterFinishInternal:function(g){new Effect.Move(g.element,{x:e*2,y:0,duration:c*2,afterFinishInternal:function(h){new Effect.Move(h.element,{x:-e*2,y:0,duration:c*2,afterFinishInternal:function(i){new Effect.Move(i.element,{x:e*2,y:0,duration:c*2,afterFinishInternal:function(j){new Effect.Move(j.element,{x:-e,y:0,duration:c,afterFinishInternal:function(k){k.element.undoPositioned().setStyle(a)}})}})}})}})}})}})};Effect.SlideDown=function(c){c=$(c).cleanWhitespace();var a=c.down().getStyle("bottom");var b=c.getDimensions();return new Effect.Scale(c,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:window.opera?0:1,scaleMode:{originalHeight:b.height,originalWidth:b.width},restoreAfterFinish:true,afterSetup:function(d){d.element.makePositioned();d.element.down().makePositioned();if(window.opera){d.element.setStyle({top:""})}d.element.makeClipping().setStyle({height:"0px"}).show()},afterUpdateInternal:function(d){d.element.down().setStyle({bottom:(d.dims[0]-d.element.clientHeight)+"px"})},afterFinishInternal:function(d){d.element.undoClipping().undoPositioned();d.element.down().undoPositioned().setStyle({bottom:a})}},arguments[1]||{}))};Effect.SlideUp=function(c){c=$(c).cleanWhitespace();var a=c.down().getStyle("bottom");var b=c.getDimensions();return new Effect.Scale(c,window.opera?0:1,Object.extend({scaleContent:false,scaleX:false,scaleMode:"box",scaleFrom:100,scaleMode:{originalHeight:b.height,originalWidth:b.width},restoreAfterFinish:true,afterSetup:function(d){d.element.makePositioned();d.element.down().makePositioned();if(window.opera){d.element.setStyle({top:""})}d.element.makeClipping().show()},afterUpdateInternal:function(d){d.element.down().setStyle({bottom:(d.dims[0]-d.element.clientHeight)+"px"})},afterFinishInternal:function(d){d.element.hide().undoClipping().undoPositioned();d.element.down().undoPositioned().setStyle({bottom:a})}},arguments[1]||{}))};Effect.Squish=function(a){return new Effect.Scale(a,window.opera?1:0,{restoreAfterFinish:true,beforeSetup:function(b){b.element.makeClipping()},afterFinishInternal:function(b){b.element.hide().undoClipping()}})};Effect.Grow=function(c){c=$(c);var b=Object.extend({direction:"center",moveTransition:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.full},arguments[1]||{});var a={top:c.style.top,left:c.style.left,height:c.style.height,width:c.style.width,opacity:c.getInlineOpacity()};var g=c.getDimensions();var h,f;var e,d;switch(b.direction){case"top-left":h=f=e=d=0;break;case"top-right":h=g.width;f=d=0;e=-g.width;break;case"bottom-left":h=e=0;f=g.height;d=-g.height;break;case"bottom-right":h=g.width;f=g.height;e=-g.width;d=-g.height;break;case"center":h=g.width/2;f=g.height/2;e=-g.width/2;d=-g.height/2;break}return new Effect.Move(c,{x:h,y:f,duration:0.01,beforeSetup:function(i){i.element.hide().makeClipping().makePositioned()},afterFinishInternal:function(i){new Effect.Parallel([new Effect.Opacity(i.element,{sync:true,to:1,from:0,transition:b.opacityTransition}),new Effect.Move(i.element,{x:e,y:d,sync:true,transition:b.moveTransition}),new Effect.Scale(i.element,100,{scaleMode:{originalHeight:g.height,originalWidth:g.width},sync:true,scaleFrom:window.opera?1:0,transition:b.scaleTransition,restoreAfterFinish:true})],Object.extend({beforeSetup:function(j){j.effects[0].element.setStyle({height:"0px"}).show()},afterFinishInternal:function(j){j.effects[0].element.undoClipping().undoPositioned().setStyle(a)}},b))}})};Effect.Shrink=function(c){c=$(c);var b=Object.extend({direction:"center",moveTransition:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.none},arguments[1]||{});var a={top:c.style.top,left:c.style.left,height:c.style.height,width:c.style.width,opacity:c.getInlineOpacity()};var f=c.getDimensions();var e,d;switch(b.direction){case"top-left":e=d=0;break;case"top-right":e=f.width;d=0;break;case"bottom-left":e=0;d=f.height;break;case"bottom-right":e=f.width;d=f.height;break;case"center":e=f.width/2;d=f.height/2;break}return new Effect.Parallel([new Effect.Opacity(c,{sync:true,to:0,from:1,transition:b.opacityTransition}),new Effect.Scale(c,window.opera?1:0,{sync:true,transition:b.scaleTransition,restoreAfterFinish:true}),new Effect.Move(c,{x:e,y:d,sync:true,transition:b.moveTransition})],Object.extend({beforeStartInternal:function(g){g.effects[0].element.makePositioned().makeClipping()},afterFinishInternal:function(g){g.effects[0].element.hide().undoClipping().undoPositioned().setStyle(a)}},b))};Effect.Pulsate=function(c){c=$(c);var b=arguments[1]||{};var a=c.getInlineOpacity();var e=b.transition||Effect.Transitions.sinoidal;var d=function(f){return e(1-Effect.Transitions.pulse(f,b.pulses))};d.bind(e);return new Effect.Opacity(c,Object.extend(Object.extend({duration:2,from:0,afterFinishInternal:function(f){f.element.setStyle({opacity:a})}},b),{transition:d}))};Effect.Fold=function(b){b=$(b);var a={top:b.style.top,left:b.style.left,width:b.style.width,height:b.style.height};b.makeClipping();return new Effect.Scale(b,5,Object.extend({scaleContent:false,scaleX:false,afterFinishInternal:function(c){new Effect.Scale(b,1,{scaleContent:false,scaleY:false,afterFinishInternal:function(d){d.element.hide().undoClipping().setStyle(a)}})}},arguments[1]||{}))};Effect.Morph=Class.create(Effect.Base,{initialize:function(c){this.element=$(c);if(!this.element){throw (Effect._elementDoesNotExistError)}var a=Object.extend({style:{}},arguments[1]||{});if(!Object.isString(a.style)){this.style=$H(a.style)}else{if(a.style.include(":")){this.style=a.style.parseStyle()}else{this.element.addClassName(a.style);this.style=$H(this.element.getStyles());this.element.removeClassName(a.style);var b=this.element.getStyles();this.style=this.style.reject(function(d){return d.value==b[d.key]});a.afterFinishInternal=function(d){d.element.addClassName(d.options.style);d.transforms.each(function(e){d.element.style[e.style]=""})}}}this.start(a)},setup:function(){function a(b){if(!b||["rgba(0, 0, 0, 0)","transparent"].include(b)){b="#ffffff"}b=b.parseColor();return $R(0,2).map(function(c){return parseInt(b.slice(c*2+1,c*2+3),16)})}this.transforms=this.style.map(function(g){var f=g[0],e=g[1],d=null;if(e.parseColor("#zzzzzz")!="#zzzzzz"){e=e.parseColor();d="color"}else{if(f=="opacity"){e=parseFloat(e);if(Prototype.Browser.IE&&(!this.element.currentStyle.hasLayout)){this.element.setStyle({zoom:1})}}else{if(Element.CSS_LENGTH.test(e)){var c=e.match(/^([\+\-]?[0-9\.]+)(.*)$/);e=parseFloat(c[1]);d=(c.length==3)?c[2]:null}}}var b=this.element.getStyle(f);return{style:f.camelize(),originalValue:d=="color"?a(b):parseFloat(b||0),targetValue:d=="color"?a(e):e,unit:d}}.bind(this)).reject(function(b){return((b.originalValue==b.targetValue)||(b.unit!="color"&&(isNaN(b.originalValue)||isNaN(b.targetValue))))})},update:function(a){var d={},b,c=this.transforms.length;while(c--){d[(b=this.transforms[c]).style]=b.unit=="color"?"#"+(Math.round(b.originalValue[0]+(b.targetValue[0]-b.originalValue[0])*a)).toColorPart()+(Math.round(b.originalValue[1]+(b.targetValue[1]-b.originalValue[1])*a)).toColorPart()+(Math.round(b.originalValue[2]+(b.targetValue[2]-b.originalValue[2])*a)).toColorPart():(b.originalValue+(b.targetValue-b.originalValue)*a).toFixed(3)+(b.unit===null?"":b.unit)}this.element.setStyle(d,true)}});Effect.Transform=Class.create({initialize:function(a){this.tracks=[];this.options=arguments[1]||{};this.addTracks(a)},addTracks:function(a){a.each(function(b){b=$H(b);var c=b.values().first();this.tracks.push($H({ids:b.keys().first(),effect:Effect.Morph,options:{style:c}}))}.bind(this));return this},play:function(){return new Effect.Parallel(this.tracks.map(function(a){var d=a.get("ids"),c=a.get("effect"),b=a.get("options");var e=[$(d)||$$(d)].flatten();return e.map(function(f){return new c(f,Object.extend({sync:true},b))})}).flatten(),this.options)}});Element.CSS_PROPERTIES=$w("backgroundColor backgroundPosition borderBottomColor borderBottomStyle borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth borderRightColor borderRightStyle borderRightWidth borderSpacing borderTopColor borderTopStyle borderTopWidth bottom clip color fontSize fontWeight height left letterSpacing lineHeight marginBottom marginLeft marginRight marginTop markerOffset maxHeight maxWidth minHeight minWidth opacity outlineColor outlineOffset outlineWidth paddingBottom paddingLeft paddingRight paddingTop right textIndent top width wordSpacing zIndex");Element.CSS_LENGTH=/^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;String.__parseStyleElement=document.createElement("div");String.prototype.parseStyle=function(){var b,a=$H();if(Prototype.Browser.WebKit){b=new Element("div",{style:this}).style}else{String.__parseStyleElement.innerHTML='<div style="'+this+'"></div>';b=String.__parseStyleElement.childNodes[0].style}Element.CSS_PROPERTIES.each(function(c){if(b[c]){a.set(c,b[c])}});if(Prototype.Browser.IE&&this.include("opacity")){a.set("opacity",this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1])}return a};if(document.defaultView&&document.defaultView.getComputedStyle){Element.getStyles=function(b){var a=document.defaultView.getComputedStyle($(b),null);return Element.CSS_PROPERTIES.inject({},function(c,d){c[d]=a[d];return c})}}else{Element.getStyles=function(b){b=$(b);var a=b.currentStyle,c;c=Element.CSS_PROPERTIES.inject({},function(d,e){d[e]=a[e];return d});if(!c.opacity){c.opacity=b.getOpacity()}return c}}Effect.Methods={morph:function(a,b){a=$(a);new Effect.Morph(a,Object.extend({style:b},arguments[2]||{}));return a},visualEffect:function(c,e,b){c=$(c);var d=e.dasherize().camelize(),a=d.charAt(0).toUpperCase()+d.substring(1);new Effect[a](c,b);return c},highlight:function(b,a){b=$(b);new Effect.Highlight(b,a);return b}};$w("fade appear grow shrink fold blindUp blindDown slideUp slideDown pulsate shake puff squish switchOff dropOut").each(function(a){Effect.Methods[a]=function(c,b){c=$(c);Effect[a.charAt(0).toUpperCase()+a.substring(1)](c,b);return c}});$w("getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles").each(function(a){Effect.Methods[a]=Element[a]});Element.addMethods(Effect.Methods);
if(Object.isUndefined(Effect)){throw ("dragdrop.js requires including script.aculo.us' effects.js library")}var Droppables={drops:[],remove:function(a){this.drops=this.drops.reject(function(b){return b.element==$(a)})},add:function(b){b=$(b);var a=Object.extend({greedy:true,hoverclass:null,tree:false},arguments[1]||{});if(a.containment){a._containers=[];var c=a.containment;if(Object.isArray(c)){c.each(function(d){a._containers.push($(d))})}else{a._containers.push($(c))}}if(a.accept){a.accept=[a.accept].flatten()}Element.makePositioned(b);a.element=b;this.drops.push(a)},findDeepestChild:function(a){deepest=a[0];for(i=1;i<a.length;++i){if(Element.isParent(a[i].element,deepest.element)){deepest=a[i]}}return deepest},isContained:function(b,a){var c;if(a.tree){c=b.treeNode}else{c=b.parentNode}return a._containers.detect(function(d){return c==d})},isAffected:function(a,c,b){return((b.element!=c)&&((!b._containers)||this.isContained(c,b))&&((!b.accept)||(Element.classNames(c).detect(function(d){return b.accept.include(d)})))&&Position.within(b.element,a[0],a[1]))},deactivate:function(a){if(a.hoverclass){Element.removeClassName(a.element,a.hoverclass)}this.last_active=null},activate:function(a){if(a.hoverclass){Element.addClassName(a.element,a.hoverclass)}this.last_active=a},show:function(a,c){if(!this.drops.length){return}var b,d=[];this.drops.each(function(e){if(Droppables.isAffected(a,c,e)){d.push(e)}});if(d.length>0){b=Droppables.findDeepestChild(d)}if(this.last_active&&this.last_active!=b){this.deactivate(this.last_active)}if(b){Position.within(b.element,a[0],a[1]);if(b.onHover){b.onHover(c,b.element,Position.overlap(b.overlap,b.element))}if(b!=this.last_active){Droppables.activate(b)}}},fire:function(b,a){if(!this.last_active){return}Position.prepare();if(this.isAffected([Event.pointerX(b),Event.pointerY(b)],a,this.last_active)){if(this.last_active.onDrop){this.last_active.onDrop(a,this.last_active.element,b);return true}}},reset:function(){if(this.last_active){this.deactivate(this.last_active)}}};var Draggables={drags:[],observers:[],register:function(a){if(this.drags.length==0){this.eventMouseUp=this.endDrag.bindAsEventListener(this);this.eventMouseMove=this.updateDrag.bindAsEventListener(this);this.eventKeypress=this.keyPress.bindAsEventListener(this);Event.observe(document,"mouseup",this.eventMouseUp);Event.observe(document,"mousemove",this.eventMouseMove);Event.observe(document,"keypress",this.eventKeypress)}this.drags.push(a)},unregister:function(a){this.drags=this.drags.reject(function(b){return b==a});if(this.drags.length==0){Event.stopObserving(document,"mouseup",this.eventMouseUp);Event.stopObserving(document,"mousemove",this.eventMouseMove);Event.stopObserving(document,"keypress",this.eventKeypress)}},activate:function(a){if(a.options.delay){this._timeout=setTimeout(function(){Draggables._timeout=null;window.focus();Draggables.activeDraggable=a}.bind(this),a.options.delay)}else{window.focus();this.activeDraggable=a}},deactivate:function(){this.activeDraggable=null},updateDrag:function(a){if(!this.activeDraggable){return}var b=[Event.pointerX(a),Event.pointerY(a)];if(this._lastPointer&&(this._lastPointer.inspect()==b.inspect())){return}this._lastPointer=b;this.activeDraggable.updateDrag(a,b)},endDrag:function(a){if(this._timeout){clearTimeout(this._timeout);this._timeout=null}if(!this.activeDraggable){return}this._lastPointer=null;this.activeDraggable.endDrag(a);this.activeDraggable=null},keyPress:function(a){if(this.activeDraggable){this.activeDraggable.keyPress(a)}},addObserver:function(a){this.observers.push(a);this._cacheObserverCallbacks()},removeObserver:function(a){this.observers=this.observers.reject(function(b){return b.element==a});this._cacheObserverCallbacks()},notify:function(b,a,c){if(this[b+"Count"]>0){this.observers.each(function(d){if(d[b]){d[b](b,a,c)}})}if(a.options[b]){a.options[b](a,c)}},_cacheObserverCallbacks:function(){["onStart","onEnd","onDrag"].each(function(a){Draggables[a+"Count"]=Draggables.observers.select(function(b){return b[a]}).length})}};var Draggable=Class.create({initialize:function(b){var c={handle:false,reverteffect:function(f,e,d){var g=Math.sqrt(Math.abs(e^2)+Math.abs(d^2))*0.02;new Effect.Move(f,{x:-d,y:-e,duration:g,queue:{scope:"_draggable",position:"end"}})},endeffect:function(e){var d=Object.isNumber(e._opacity)?e._opacity:1;new Effect.Opacity(e,{duration:0.2,from:0.7,to:d,queue:{scope:"_draggable",position:"end"},afterFinish:function(){Draggable._dragging[e]=false}})},zindex:1000,revert:false,quiet:false,scroll:false,scrollSensitivity:20,scrollSpeed:15,snap:false,delay:0};if(!arguments[1]||Object.isUndefined(arguments[1].endeffect)){Object.extend(c,{starteffect:function(d){d._opacity=Element.getOpacity(d);Draggable._dragging[d]=true;new Effect.Opacity(d,{duration:0.2,from:d._opacity,to:0.7})}})}var a=Object.extend(c,arguments[1]||{});this.element=$(b);if(a.handle&&Object.isString(a.handle)){this.handle=this.element.down("."+a.handle,0)}if(!this.handle){this.handle=$(a.handle)}if(!this.handle){this.handle=this.element}if(a.scroll&&!a.scroll.scrollTo&&!a.scroll.outerHTML){a.scroll=$(a.scroll);this._isScrollChild=Element.childOf(this.element,a.scroll)}Element.makePositioned(this.element);this.options=a;this.dragging=false;this.eventMouseDown=this.initDrag.bindAsEventListener(this);Event.observe(this.handle,"mousedown",this.eventMouseDown);Draggables.register(this)},destroy:function(){Event.stopObserving(this.handle,"mousedown",this.eventMouseDown);Draggables.unregister(this)},currentDelta:function(){return([parseInt(Element.getStyle(this.element,"left")||"0"),parseInt(Element.getStyle(this.element,"top")||"0")])},initDrag:function(a){if(!Object.isUndefined(Draggable._dragging[this.element])&&Draggable._dragging[this.element]){return}if(Event.isLeftClick(a)){var c=Event.element(a);if((tag_name=c.tagName.toUpperCase())&&(tag_name=="INPUT"||tag_name=="SELECT"||tag_name=="OPTION"||tag_name=="BUTTON"||tag_name=="TEXTAREA")){return}var b=[Event.pointerX(a),Event.pointerY(a)];var d=Position.cumulativeOffset(this.element);this.offset=[0,1].map(function(e){return(b[e]-d[e])});Draggables.activate(this);Event.stop(a)}},startDrag:function(b){this.dragging=true;if(!this.delta){this.delta=this.currentDelta()}if(this.options.zindex){this.originalZ=parseInt(Element.getStyle(this.element,"z-index")||0);this.element.style.zIndex=this.options.zindex}if(this.options.ghosting){this._clone=this.element.cloneNode(true);this.element._originallyAbsolute=(this.element.getStyle("position")=="absolute");if(!this.element._originallyAbsolute){Position.absolutize(this.element)}this.element.parentNode.insertBefore(this._clone,this.element)}if(this.options.scroll){if(this.options.scroll==window){var a=this._getWindowScroll(this.options.scroll);this.originalScrollLeft=a.left;this.originalScrollTop=a.top}else{this.originalScrollLeft=this.options.scroll.scrollLeft;this.originalScrollTop=this.options.scroll.scrollTop}}Draggables.notify("onStart",this,b);if(this.options.starteffect){this.options.starteffect(this.element)}},updateDrag:function(event,pointer){if(!this.dragging){this.startDrag(event)}if(!this.options.quiet){Position.prepare();Droppables.show(pointer,this.element)}Draggables.notify("onDrag",this,event);this.draw(pointer);if(this.options.change){this.options.change(this)}if(this.options.scroll){this.stopScrolling();var p;if(this.options.scroll==window){with(this._getWindowScroll(this.options.scroll)){p=[left,top,left+width,top+height]}}else{p=Position.page(this.options.scroll);p[0]+=this.options.scroll.scrollLeft+Position.deltaX;p[1]+=this.options.scroll.scrollTop+Position.deltaY;p.push(p[0]+this.options.scroll.offsetWidth);p.push(p[1]+this.options.scroll.offsetHeight)}var speed=[0,0];if(pointer[0]<(p[0]+this.options.scrollSensitivity)){speed[0]=pointer[0]-(p[0]+this.options.scrollSensitivity)}if(pointer[1]<(p[1]+this.options.scrollSensitivity)){speed[1]=pointer[1]-(p[1]+this.options.scrollSensitivity)}if(pointer[0]>(p[2]-this.options.scrollSensitivity)){speed[0]=pointer[0]-(p[2]-this.options.scrollSensitivity)}if(pointer[1]>(p[3]-this.options.scrollSensitivity)){speed[1]=pointer[1]-(p[3]-this.options.scrollSensitivity)}this.startScrolling(speed)}if(Prototype.Browser.WebKit){window.scrollBy(0,0)}Event.stop(event)},finishDrag:function(b,f){this.dragging=false;if(this.options.quiet){Position.prepare();var e=[Event.pointerX(b),Event.pointerY(b)];Droppables.show(e,this.element)}if(this.options.ghosting){if(!this.element._originallyAbsolute){Position.relativize(this.element)}delete this.element._originallyAbsolute;Element.remove(this._clone);this._clone=null}var g=false;if(f){g=Droppables.fire(b,this.element);if(!g){g=false}}if(g&&this.options.onDropped){this.options.onDropped(this.element)}Draggables.notify("onEnd",this,b);var a=this.options.revert;if(a&&Object.isFunction(a)){a=a(this.element)}var c=this.currentDelta();if(a&&this.options.reverteffect){if(g==0||a!="failure"){this.options.reverteffect(this.element,c[1]-this.delta[1],c[0]-this.delta[0])}}else{this.delta=c}if(this.options.zindex){this.element.style.zIndex=this.originalZ}if(this.options.endeffect){this.options.endeffect(this.element)}Draggables.deactivate(this);Droppables.reset()},keyPress:function(a){if(a.keyCode!=Event.KEY_ESC){return}this.finishDrag(a,false);Event.stop(a)},endDrag:function(a){if(!this.dragging){return}this.stopScrolling();this.finishDrag(a,true);Event.stop(a)},draw:function(a){var g=Position.cumulativeOffset(this.element);if(this.options.ghosting){var c=Position.realOffset(this.element);g[0]+=c[0]-Position.deltaX;g[1]+=c[1]-Position.deltaY}var f=this.currentDelta();g[0]-=f[0];g[1]-=f[1];if(this.options.scroll&&(this.options.scroll!=window&&this._isScrollChild)){g[0]-=this.options.scroll.scrollLeft-this.originalScrollLeft;g[1]-=this.options.scroll.scrollTop-this.originalScrollTop}var e=[0,1].map(function(d){return(a[d]-g[d]-this.offset[d])}.bind(this));if(this.options.snap){if(Object.isFunction(this.options.snap)){e=this.options.snap(e[0],e[1],this)}else{if(Object.isArray(this.options.snap)){e=e.map(function(d,h){return(d/this.options.snap[h]).round()*this.options.snap[h]}.bind(this))}else{e=e.map(function(d){return(d/this.options.snap).round()*this.options.snap}.bind(this))}}}var b=this.element.style;if((!this.options.constraint)||(this.options.constraint=="horizontal")){b.left=e[0]+"px"}if((!this.options.constraint)||(this.options.constraint=="vertical")){b.top=e[1]+"px"}if(b.visibility=="hidden"){b.visibility=""}},stopScrolling:function(){if(this.scrollInterval){clearInterval(this.scrollInterval);this.scrollInterval=null;Draggables._lastScrollPointer=null}},startScrolling:function(a){if(!(a[0]||a[1])){return}this.scrollSpeed=[a[0]*this.options.scrollSpeed,a[1]*this.options.scrollSpeed];this.lastScrolled=new Date();this.scrollInterval=setInterval(this.scroll.bind(this),10)},scroll:function(){var current=new Date();var delta=current-this.lastScrolled;this.lastScrolled=current;if(this.options.scroll==window){with(this._getWindowScroll(this.options.scroll)){if(this.scrollSpeed[0]||this.scrollSpeed[1]){var d=delta/1000;this.options.scroll.scrollTo(left+d*this.scrollSpeed[0],top+d*this.scrollSpeed[1])}}}else{this.options.scroll.scrollLeft+=this.scrollSpeed[0]*delta/1000;this.options.scroll.scrollTop+=this.scrollSpeed[1]*delta/1000}Position.prepare();Droppables.show(Draggables._lastPointer,this.element);Draggables.notify("onDrag",this);if(this._isScrollChild){Draggables._lastScrollPointer=Draggables._lastScrollPointer||$A(Draggables._lastPointer);Draggables._lastScrollPointer[0]+=this.scrollSpeed[0]*delta/1000;Draggables._lastScrollPointer[1]+=this.scrollSpeed[1]*delta/1000;if(Draggables._lastScrollPointer[0]<0){Draggables._lastScrollPointer[0]=0}if(Draggables._lastScrollPointer[1]<0){Draggables._lastScrollPointer[1]=0}this.draw(Draggables._lastScrollPointer)}if(this.options.change){this.options.change(this)}},_getWindowScroll:function(w){var T,L,W,H;with(w.document){if(w.document.documentElement&&documentElement.scrollTop){T=documentElement.scrollTop;L=documentElement.scrollLeft}else{if(w.document.body){T=body.scrollTop;L=body.scrollLeft}}if(w.innerWidth){W=w.innerWidth;H=w.innerHeight}else{if(w.document.documentElement&&documentElement.clientWidth){W=documentElement.clientWidth;H=documentElement.clientHeight}else{W=body.offsetWidth;H=body.offsetHeight}}}return{top:T,left:L,width:W,height:H}}});Draggable._dragging={};var SortableObserver=Class.create({initialize:function(b,a){this.element=$(b);this.observer=a;this.lastValue=Sortable.serialize(this.element)},onStart:function(){this.lastValue=Sortable.serialize(this.element)},onEnd:function(){Sortable.unmark();if(this.lastValue!=Sortable.serialize(this.element)){this.observer(this.element)}}});var Sortable={SERIALIZE_RULE:/^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,sortables:{},_findRootElement:function(a){while(a.tagName.toUpperCase()!="BODY"){if(a.id&&Sortable.sortables[a.id]){return a}a=a.parentNode}},options:function(a){a=Sortable._findRootElement($(a));if(!a){return}return Sortable.sortables[a.id]},destroy:function(a){var b=Sortable.options(a);if(b){Draggables.removeObserver(b.element);b.droppables.each(function(c){Droppables.remove(c)});b.draggables.invoke("destroy");delete Sortable.sortables[b.element.id]}},create:function(c){c=$(c);var b=Object.extend({element:c,tag:"li",dropOnEmpty:false,tree:false,treeTag:"ul",overlap:"vertical",constraint:"vertical",containment:c,handle:false,only:false,delay:0,hoverclass:null,ghosting:false,quiet:false,scroll:false,scrollSensitivity:20,scrollSpeed:15,format:this.SERIALIZE_RULE,elements:false,handles:false,onChange:Prototype.emptyFunction,onUpdate:Prototype.emptyFunction},arguments[1]||{});this.destroy(c);var a={revert:true,quiet:b.quiet,scroll:b.scroll,scrollSpeed:b.scrollSpeed,scrollSensitivity:b.scrollSensitivity,delay:b.delay,ghosting:b.ghosting,constraint:b.constraint,handle:b.handle};if(b.starteffect){a.starteffect=b.starteffect}if(b.reverteffect){a.reverteffect=b.reverteffect}else{if(b.ghosting){a.reverteffect=function(f){f.style.top=0;f.style.left=0}}}if(b.endeffect){a.endeffect=b.endeffect}if(b.zindex){a.zindex=b.zindex}var d={overlap:b.overlap,containment:b.containment,tree:b.tree,hoverclass:b.hoverclass,onHover:Sortable.onHover};var e={onHover:Sortable.onEmptyHover,overlap:b.overlap,containment:b.containment,hoverclass:b.hoverclass};Element.cleanWhitespace(c);b.draggables=[];b.droppables=[];if(b.dropOnEmpty||b.tree){Droppables.add(c,e);b.droppables.push(c)}(b.elements||this.findElements(c,b)||[]).each(function(h,f){var g=b.handles?$(b.handles[f]):(b.handle?$(h).select("."+b.handle)[0]:h);b.draggables.push(new Draggable(h,Object.extend(a,{handle:g})));Droppables.add(h,d);if(b.tree){h.treeNode=c}b.droppables.push(h)});if(b.tree){(Sortable.findTreeElements(c,b)||[]).each(function(f){Droppables.add(f,e);f.treeNode=c;b.droppables.push(f)})}this.sortables[c.id]=b;Draggables.addObserver(new SortableObserver(c,b.onUpdate))},findElements:function(b,a){return Element.findChildren(b,a.only,a.tree?true:false,a.tag)},findTreeElements:function(b,a){return Element.findChildren(b,a.only,a.tree?true:false,a.treeTag)},onHover:function(e,d,a){if(Element.isParent(d,e)){return}if(a>0.33&&a<0.66&&Sortable.options(d).tree){return}else{if(a>0.5){Sortable.mark(d,"before");if(d.previousSibling!=e){var b=e.parentNode;e.style.visibility="hidden";d.parentNode.insertBefore(e,d);if(d.parentNode!=b){Sortable.options(b).onChange(e)}Sortable.options(d.parentNode).onChange(e)}}else{Sortable.mark(d,"after");var c=d.nextSibling||null;if(c!=e){var b=e.parentNode;e.style.visibility="hidden";d.parentNode.insertBefore(e,c);if(d.parentNode!=b){Sortable.options(b).onChange(e)}Sortable.options(d.parentNode).onChange(e)}}}},onEmptyHover:function(e,g,h){var j=e.parentNode;var a=Sortable.options(g);if(!Element.isParent(g,e)){var f;var c=Sortable.findElements(g,{tag:a.tag,only:a.only});var b=null;if(c){var d=Element.offsetSize(g,a.overlap)*(1-h);for(f=0;f<c.length;f+=1){if(d-Element.offsetSize(c[f],a.overlap)>=0){d-=Element.offsetSize(c[f],a.overlap)}else{if(d-(Element.offsetSize(c[f],a.overlap)/2)>=0){b=f+1<c.length?c[f+1]:null;break}else{b=c[f];break}}}}g.insertBefore(e,b);Sortable.options(j).onChange(e);a.onChange(e)}},unmark:function(){if(Sortable._marker){Sortable._marker.hide()}},mark:function(b,a){var d=Sortable.options(b.parentNode);if(d&&!d.ghosting){return}if(!Sortable._marker){Sortable._marker=($("dropmarker")||Element.extend(document.createElement("DIV"))).hide().addClassName("dropmarker").setStyle({position:"absolute"});document.getElementsByTagName("body").item(0).appendChild(Sortable._marker)}var c=Position.cumulativeOffset(b);Sortable._marker.setStyle({left:c[0]+"px",top:c[1]+"px"});if(a=="after"){if(d.overlap=="horizontal"){Sortable._marker.setStyle({left:(c[0]+b.clientWidth)+"px"})}else{Sortable._marker.setStyle({top:(c[1]+b.clientHeight)+"px"})}}Sortable._marker.show()},_tree:function(e,b,f){var d=Sortable.findElements(e,b)||[];for(var c=0;c<d.length;++c){var a=d[c].id.match(b.format);if(!a){continue}var g={id:encodeURIComponent(a?a[1]:null),element:e,parent:f,children:[],position:f.children.length,container:$(d[c]).down(b.treeTag)};if(g.container){this._tree(g.container,b,g)}f.children.push(g)}return f},tree:function(d){d=$(d);var c=this.options(d);var b=Object.extend({tag:c.tag,treeTag:c.treeTag,only:c.only,name:d.id,format:c.format},arguments[1]||{});var a={id:null,parent:null,children:[],container:d,position:0};return Sortable._tree(d,b,a)},_constructIndex:function(b){var a="";do{if(b.id){a="["+b.position+"]"+a}}while((b=b.parent)!=null);return a},sequence:function(b){b=$(b);var a=Object.extend(this.options(b),arguments[1]||{});return $(this.findElements(b,a)||[]).map(function(c){return c.id.match(a.format)?c.id.match(a.format)[1]:""})},setSequence:function(b,c){b=$(b);var a=Object.extend(this.options(b),arguments[2]||{});var d={};this.findElements(b,a).each(function(e){if(e.id.match(a.format)){d[e.id.match(a.format)[1]]=[e,e.parentNode]}e.parentNode.removeChild(e)});c.each(function(e){var f=d[e];if(f){f[1].appendChild(f[0]);delete d[e]}})},serialize:function(c){c=$(c);var b=Object.extend(Sortable.options(c),arguments[1]||{});var a=encodeURIComponent((arguments[1]&&arguments[1].name)?arguments[1].name:c.id);if(b.tree){return Sortable.tree(c,arguments[1]).children.map(function(d){return[a+Sortable._constructIndex(d)+"[id]="+encodeURIComponent(d.id)].concat(d.children.map(arguments.callee))}).flatten().join("&")}else{return Sortable.sequence(c,arguments[1]).map(function(d){return a+"[]="+encodeURIComponent(d)}).join("&")}}};Element.isParent=function(b,a){if(!b.parentNode||b==a){return false}if(b.parentNode==a){return true}return Element.isParent(b.parentNode,a)};Element.findChildren=function(d,b,a,c){if(!d.hasChildNodes()){return null}c=c.toUpperCase();if(b){b=[b].flatten()}var e=[];$A(d.childNodes).each(function(g){if(g.tagName&&g.tagName.toUpperCase()==c&&(!b||(Element.classNames(g).detect(function(h){return b.include(h)})))){e.push(g)}if(a){var f=Element.findChildren(g,b,a,c);if(f){e.push(f)}}});return(e.length>0?e.flatten():[])};Element.offsetSize=function(a,b){return a["offset"+((b=="vertical"||b=="height")?"Height":"Width")]};

var BookingBuddy={domain:null,searchMode:null,slideStatus:$H(),slidingFactor:7,uniqueIDCounter:1,init:function(f,e,d){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 c=$$("span.non");for(a=0,b=c.length;a<b;a++){c[a].setStyle({display:"none"})}if(!d&&(top!=self)){top.location.replace(self.location.href)}BookingBuddy.domain=e;BookingBuddy.searchMode=f},emitEvent:function(e,d){if(!e){return}if(document.createEvent){var c=document.createEvent("HTMLEvents");c.initEvent(d,true,false);$(e).dispatchEvent(c)}else{if(document.createEventObject){$(e).fireEvent("on"+d)}}},getCookie:function(f){var d=document.cookie;var h=f+"=";var g=d.indexOf("; "+h);if(g==-1){g=d.indexOf(h);if(g!=0){return null}}else{g+=2}var c=document.cookie.indexOf(";",g);if(c==-1){c=d.length}try{return decodeURIComponent(d.substring(g+h.length,c))}catch(i){return null}},createCookie:function(f,i,g){if(g){var e=new Date();e.setTime(e.getTime()+(g*60*1000));var c="; expires="+e.toGMTString()}else{var c=""}var h="";if(!BookingBuddy.domain){var d=document.domain.match(/.+(bookingbuddy.+|smartertravel.+)/);if(d!=null){h=d[1]}}else{h=BookingBuddy.domain}document.cookie=f+"="+i+c+"; path=/; domain="+h;return true},getESTHour:function(){var d=new Date(BookingBuddy.Strings.ServerTime);var f=d.getTime();var g=-d.getTimezoneOffset()/60;var e=new Date(f-g);var c=e.getHours();if(c==0){c=24}return c},handleEnterKey:function(d){d=(!d)?window.event:d;var c=(!d.keyCode)?d.which:d.keyCode;if(c==13){Event.stop(d);return false}else{return true}},toggleCovered:function(e,t){function f(k){var i=k.style.visibility;if(!i){if(document.defaultView&&typeof(document.defaultView.getComputedStyle)=="function"){i=document.defaultView.getComputedStyle(k,"").getPropertyValue("visibility")}else{if(k.currentStyle){i=k.currentStyle.visibility}else{i=""}}}return i}function g(i){var k=BookingBuddy.getAbsolutePos(i);return[k.x,i.offsetWidth+k.x,k.y,i.offsetHeight+k.y]}var n=["applet","iframe","select"];var r=g(e);var d=r[0];var c=r[1];var m=r[2];var l=r[3];for(var q=n.length;q>0;){var o=document.getElementsByTagName(n[--q]);var p=null;for(var s=o.length;s>0;){p=o[--s];var r=g(p);var v=r[0];var u=r[1];var j=r[2];var h=r[3];if((v>c)||(u<d)||(j>l)||(h<m)){if(!p.__sl_save_visibility){p.__sl_save_visibility=f(p)}p.style.visibility=p.__sl_save_visibility}else{if(!p.__sl_save_visibility){p.__sl_save_visibility=f(p)}p.style.visibility=t}}}},getAbsolutePos:function(g){var c=0,f=0;var e=/^div$/i.test(g.tagName);if(e&&g.scrollLeft){c=g.scrollLeft}if(e&&g.scrollTop){f=g.scrollTop}var h={x:g.offsetLeft-c,y:g.offsetTop-f};if(g.offsetParent){var d=BookingBuddy.getAbsolutePos(g.offsetParent);h.x+=d.x;h.y+=d.y}return h},getQSParam:function(c){var d=window.location.search;try{var f=d.toQueryParams()}catch(e){return null}return(f[c]?f[c].replace(/\+/g," "):null)},setTabIndex:function(d,e){var c=e||1;d.each(function(f){var g=$(f);if(g){g.tabIndex=c++}})},isNumeric:function(c){return(parseFloat(c)==c)},generateUniqueID:function(c){c=$(c);if(c!==null){if(c.id!=""){return c.id}var d="generatedID_"+BookingBuddy.uniqueIDCounter++;while($(d)!==null){d="generatedID_"+BookingBuddy.uniqueIDCounter++}c.id=d;return d}else{return""}},popWindow:function(f,m,g,c){var j="height="+m+",width="+g+",scrollbars=yes";var d="BBSurvey"+Math.floor(Math.random()*100);var i=window.open(f,d,j);if(i){if(c){try{var h=(screen.height-m)/2;var l=(screen.width-g)/2;i.moveTo(l,h)}catch(k){}}return i}return false},slide:function(h,g,e){var c=BookingBuddy.generateUniqueID(h);if(c==""){return}var d=$(c);var f=d.style.height!=""&&d.style.height!="auto"?d.style.height.gsub("px","")/1:d.offsetHeight;if(g=="close"){g=0}else{if(g=="fit"){g=BookingBuddy.trueHeight(c)}else{if(!BookingBuddy.isNumeric(g)){return}}}if(f<g){BookingBuddy.slideStatus[c]="opening"}else{if(f>g){BookingBuddy.slideStatus[c]="closing"}else{return}}BookingBuddy.sliding(c,g,e,BookingBuddy.slideStatus[c])},sliding:function(d,i,k,g){if(BookingBuddy.slideStatus[d]!=g){return}var f=$(d);var j=f.style.height!=""&&f.style.height!="auto"?f.style.height.gsub("px","")/1:f.offsetHeight;var c=(g=="opening")?j+k:j-k;var h=false;if(g=="opening"){if(c>=i){f.style.height="auto";h=true}}else{if(c<=i){f.style.height=i+"px";h=true}}if(h){BookingBuddy.slideStatus[d]="done";return}else{f.style.height=(c===0)?"":c+"px";var e='BookingBuddy.sliding("'+d+'", '+i+", "+k+', "'+g+'");';window.setTimeout(e,10)}},trueHeight:function(h){var d=BookingBuddy.generateUniqueID(h);if(d==""){return}var g=$(d);var e=g.cloneNode(true);e.style.display="";e.style.width=g.getStyle("width");e.style.height="auto";e.style.position="absolute";e.style.left="0px";e.style.top="0px";e.style.visibility="hidden";g.parentNode.appendChild(e);var c=e.offsetHeight;var f=g.parentNode.childNodes.length-1;$(g.parentNode.childNodes[f]).remove();return c},swapElements:function(d,c){d=$(d);c=$(c);if((d&&c)&&(d!==c)){var f=d.nextSibling,e=d.parentNode;c.parentNode.replaceChild(d,c);e.insertBefore(c,f)}return d}};
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){$(c).observe("change",function(f){function d(){BookingBuddy.AFS.update($F(c))}if((BookingBuddy.domain=="bookingbuddy.co.uk")&&(typeof BookingBuddy.UK.step2displayed!=="undefined")&&!BookingBuddy.UK.step2displayed){return}else{setTimeout(d,500)}})})}},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){if((BookingBuddy.domain=="bookingbuddy.co.uk")&&(typeof BookingBuddy.UK.step2displayed!=="undefined")&&!BookingBuddy.UK.step2displayed){return}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.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.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})},setTextInputDates:function(d,b,c,a){if(typeof b=="undefined"){var b=new Template("#{month}/#{day}/#{year}")}c=c||(function(g){var f=new Date();f.setDate(g.getDate()+21);return f})(new Date());a=a||(function(g){var f=new Date();f.setDate(g.getDate()+7);return f})(c);if(typeof d=="undefined"){var d={air:["air_departure_date","air_return_date"],hotel:["hotel_arrival_date","hotel_departure_date"],vacation_rental:["vacation_rental_arrival_date","vacation_rental_departure_date"],car:["car_pickup_date","car_dropoff_date"],vacation:["vacation_departure_date","vacation_return_date"]}}$H(d).each(function(e){$A(e.value).each(function(k,i){if(!$(k)){return}var g=0===i?c:a;var j=(g.getMonth()+1)<10?"0"+(g.getMonth()+1):(g.getMonth()+1);var h=g.getDate()<10?"0"+g.getDate():g.getDate();$(k).setValue(b.evaluate({month:j,day:h,year:g.getFullYear()}));$(k).onkeydown=function(l){return false};if(k.indexOf("_date")!=-1){monthInput=$(k.substring(0,k.length-5)+"_month");var f=function(){var m=k.substring(0,k.length-5);var l=BookingBuddy.Date.make(m,false);if(!isNaN(l.getTime())){$(k).setValue(BookingBuddy.Date.make(m,true))}};if(monthInput){monthInput.observe("change",f)}}$(k).fire("change")})})}};
BookingBuddy.Date={dontUpdate:false,returnDateDivID:"BookingBuddyDateReturnDateDivID",postInitHook:null,useUKDateFormat:false,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.Strings.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(c,h){var b=$(c+"_day");var d=$(c+"_month");var f=$(c+"_time");if(!b||!d){return false}var a=(d.options)?d.options[d.selectedIndex].value:d.value;var e=(b.options)?b.options[b.selectedIndex].value:b.value;var g=null;if(f){g=(f.options)?f.options[f.selectedIndex].value:f.value}return BookingBuddy.Date.makeFromValues(h,a,e,g)},makeFromValues:function(j,c,k,f){var i=parseInt(k,10);var a=c.split(" ");var g=a[0];var h=a[1];var d=new Date(h,g-1,1);if(i>BookingBuddy.Date.daysInMonth(d)){return false}else{var e=g+"/"+i+"/"+h;if(BookingBuddy.Date.useUKDateFormat){e=i+"/"+g+"/"+h}var b=null;if(typeof f!="undefined"){switch(f){case"anytime":case"morning":b=6;case"noon":b=12;case"evening":b=18;default:b=parseInt(f,10)}if(isNaN(b)){b=6}}return(j)?e:new Date(h,g-1,i,b)}},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){if(c.indexOf("_date")!=-1){c=c.substring(0,c.length-5)}var f=$(c+"_month");if(!f){return}var h=(a.getMonth()+1);var b=(h<10?"0":"")+h+" "+a.getFullYear();if(f.type=="text"||f.type=="hidden"){f.value=b;$(c+"_day").value=(a.getDate());if(e){BookingBuddy.emitEvent(f,"change")}}else{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}}}f.fire("ab:textdate",{date_obj:a})}};
BookingBuddy.Deals={dealsArray:[],feedUrl:null,init:function(a){for(var b in a){BookingBuddy.Deals[b]=a[b]}BookingBuddy.Deals.dealsArray.each(function(c){if($(c.displayConfig.target_input)&&typeof c.displayConfig.target_input!="undefined"){c.options.arrival_city=$F(c.displayConfig.target_input);if($(c.displayConfig.target_input).match("select")){$(c.displayConfig.target_input).observe("change",function(){c.options.arrival_city=$F(c.displayConfig.target_input);BookingBuddy.Deals.loadDeal(c);return})}else{if(BookingBuddy.searchMode=="air"||BookingBuddy.searchMode=="vacation"){document.observe("BBDeals:blur",function(){c.options.arrival_city=$F(c.displayConfig.target_input);BookingBuddy.Deals.loadDeal(c);return})}else{$(c.displayConfig.target_input).observe("blur",function(){c.options.arrival_city=$F(c.displayConfig.target_input);BookingBuddy.Deals.loadDeal(c);return})}}}BookingBuddy.Deals.loadDeal(c)})},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,target_input:undefined};if(BookingBuddy.RS.arrivalCityName){c.arrival_city=BookingBuddy.RS.arrivalCityName}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)}else{displayConfig.cityName=null}var html="";var deal_row=0;json.each(function(deal){if(deal_row%2==0){deal.row_type="odd"}if(displayConfig.priceNoDollarSymbol!==undefined){if(deal.price.charAt(0)=="$"){deal.dollar="$";deal.price=deal.price.substring(1)}}if(displayConfig.fold_destination){var indx=deal.destination_name.indexOf(",");if(indx>0){deal.destination_name_folded=deal.destination_name.replace(/, /i,",<br />")}else{deal.destination_name_folded=deal.destination_name}}if(displayConfig.fold_price){if(deal.price.toLowerCase().indexOf("off")>0){deal.price=deal.price.replace(/ off/i,"<br />off")}}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()}}}})}}};
BookingBuddy.DHTMLDropdown={debug:false,dropDownSelectionHook:null,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);if(typeof BookingBuddy.DHTMLDropdown.dropDownSelectionHook=="function"){BookingBuddy.DHTMLDropdown.dropDownSelectionHook();Event.stop(b);return}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.ExpediaFareCache={debug:null,url:"/ajax/",service:["getFaresByAirportNames"],fareDiv:null,averageTemplate:null,fromToTemplate:null,locationIds:{departure:["departure_city","pickup_city"],arrival:["arrival_city","dropoff_city"]},ajaxParams:{},init:function(a){BookingBuddy.ExpediaFareCache.averageTemplate=BookingBuddy.Strings.ExpediaFareCache.averageTemplate;BookingBuddy.ExpediaFareCache.fromToTemplate=BookingBuddy.Strings.ExpediaFareCache.fromToTemplate;if(typeof a!=="undefined"){for(var b in a){this[b]=a[b]}}BookingBuddy.ExpediaFareCache.service.each(function(c){BookingBuddy.ExpediaFareCache[c]()})},getSEMLowFare:function(){var b=BookingBuddy.getQSParam("min");var a=BookingBuddy.getQSParam("max");if(b&&a){BookingBuddy.ExpediaFareCache.ajaxParams.min_sem_fare=b;BookingBuddy.ExpediaFareCache.ajaxParams.max_sem_fare=a;BookingBuddy.ExpediaFareCache.loadSEMLowFare()}},loadSEMLowFare:function(){new Ajax.Request(BookingBuddy.ExpediaFareCache.url,{method:"get",parameters:{service:"ExpediaFareCache.loadSEMLowFare",args:JSON.stringify(BookingBuddy.ExpediaFareCache.ajaxParams)},onSuccess:function(b){if(!b.responseText){return}var a=b.responseText.evalJSON(true);if(!a.errorstr){if(window.console&&BookingBuddy.ExpediaFareCache.debug){console.log(a)}}}})},getFaresByAirportNames:function(){["departure","arrival"].each(function(a){BookingBuddy.ExpediaFareCache.locationIds[a].each(function(b){if($(b)){var c=$F(b);if(c){BookingBuddy.ExpediaFareCache.ajaxParams[a]=c}}})});if(BookingBuddy.ExpediaFareCache.ajaxParams.departure||BookingBuddy.ExpediaFareCache.ajaxParams.arrival){BookingBuddy.ExpediaFareCache.loadFaresByAirportNames()}},loadFaresByAirportNames:function(){new Ajax.Request(BookingBuddy.ExpediaFareCache.url,{method:"get",parameters:{service:"ExpediaFareCache.getFaresByAirportNames",args:JSON.stringify(BookingBuddy.ExpediaFareCache.ajaxParams)},onSuccess:function(d){if(!d.responseText){return}var b=d.responseText.evalJSON(true);if(!b.errorstr){var a="";var c=b[0];a+=BookingBuddy.ExpediaFareCache.averageTemplate.evaluate(c);b.splice(0,1);b.each(function(e){a+=BookingBuddy.ExpediaFareCache.fromToTemplate.evaluate(e)});if(window.console&&BookingBuddy.ExpediaFareCache.debug){console.log(a)}}}})}};
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(f){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.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.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,currentSuggestionTypes:[],currentTargetValue:null,inputs:[],initDone:{},country:null,maxSuggestions:-1,postSelectionCallback:[],init:function(b,a){BookingBuddy.LS.url=b;if(typeof a!=="undefined"){a.each(function(c){BookingBuddy.LS.addLSField(c.id,c.suggestion_types)})}},addLSField:function(c,a){var b=$(c);if(!b){return}BookingBuddy.LS.register({id:c,suggestion_types:a});if(b.match("select")){return}b.setAttribute("autocomplete","off");b.observe("keyup",BookingBuddy.LS.keyUpHandler);b.observe("blur",BookingBuddy.LS.handleBlur);b.observe("focus",function(){BookingBuddy.LS.handleFocus({id:c,suggestion_types:a})})},register:function(a){BookingBuddy.LS.inputs.push(a)},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){var c=b.id;if($(c+"_warning")){if(!a){return}BookingBuddy.Aircodes.openWindow(c,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.id;BookingBuddy.LS.currentSuggestionTypes=a.suggestion_types},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;BookingBuddy.LS.inputs.each(function(d){var e=d.id;var c=d.suggestion_types;if(b.target.id==e){BookingBuddy.LS.currentSuggestionTypes=c}});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.currentSuggestionTypes,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.LT={apiUrl:null,apiIds:"",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,currentAds:[],fetcher:null,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){return failInit("Couldnt initialize all LT divs")}if(animation){Effect.BlindUp(divWrapper,{duration:0})}var validation=false;var df;switch(BookingBuddy.searchMode){case"hotel":case"vacation_rental":df=$("arrival_city");if(!df){return failInit("Couldnt find arrival_city input")}targetedInputs=[df];break;case"car":df=$("pickup_city");if(!df){return failInit("Couldnt find pickup_city input")}targetedInputs=[df];break;case"cruise":df=$("destination");if(!df){return failInit("Couldnt find destination input")}targetedInputs=[df];break;default:df=$("departure_city");var dt=$("arrival_city");if(!df||!dt){return failInit("Couldnt find arrival or departure city input")}targetedInputs=[df,dt];validation=true;break}targetedInputs.each(function(input){input.onpaste=function(){setTimeout("BookingBuddy.emitEvent('"+input.id+"', 'blur')",1)}});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:"auto"})})}},failInit:function(a){BookingBuddy.LT.disabled=true;if(BookingBuddy.LT.debug&&window.console){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}if(fetcher&&fetcher.transport.readyState<4){fetcher.transport.abort()}$(divWrapper).fire("lt:begin");var params={};for(var i=0,l=targetedInputs.length;i<l;i++){params["v"+(i+1)]=$F(targetedInputs[i])}params.ids=apiIds;params.m=BookingBuddy.searchMode;if(enablePricing){params.p=1;params.cc=currencyCodes}fetcher=new Ajax.Request(apiUrl,{method:"get",parameters:{service:"LocationTargeting.targeted",args:JSON.stringify(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){throw"Invalid response"}}catch(e){apiResultById={};if(debug&&window.console){console.log("JSON Parsing Failure for LT: "+e.message)}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){if(!enablePricing&&(showCount==(maxAds-1))){break}apiResultById[id]=json.ids[i];if(json.ids[i].is_priced=="Y"){adsToShowPriced.push(id)}else{adsToShow.push(id)}showCount++}}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;postCurrentAds(adsToShow);$(divWrapper).fire("lt:end");var buttonsArray=[$$("#BBLTAds .BBInputImage"),$$("#BBLTAds .BBInputButton")];buttonsArray.each(function(buttons){buttons.each(function(button){button.observe("click",function(event){if(window.location.href.indexOf("affiliate")==-1){if(button.id.indexOf("image")!==-1){button=button.next(".BBInputButton")}button.addClassName("clicked");button.value="_"}})})})}},postCurrentAds:function(ads){with(BookingBuddy.LT){currentAds=[];var a=ads.length-1;do{currentAds.push(ads[a])}while(a--)}},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.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=c.name?c.name:"BBPopUnder"+Math.floor(Math.random()*100);var a=window.open(c.url,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.RS={maxCookiedSearches:3,listID:"BookingBuddyRSListID",divID:"BookingBuddyRSDivID",displayStepTwo:null,monthShortNames:new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"),arrivalCityName:null,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)}}SwitchMode.postPopulateSearchFormHook=BookingBuddy.searchMode=="air"?(BookingBuddy.Search.toggleOneway):function(){};SwitchMode.init(BookingBuddy.searchMode);["arrival_city","pickup_city"].each(function(d){if($(d)){var c=$F(d);if(c){BookingBuddy.RS.arrivalCityName=c}}});BookingBuddy.RS.init=function(){}},getDateFromInputs:function(e,b){var c=$F(BookingBuddy.searchMode+"_"+b);var i=parseInt(c)==c?parseInt(c):-1;var k=$F(BookingBuddy.searchMode+"_"+e).split(" ");var j=k[0];var f=parseInt(j)==j?parseInt(j):-1;var a=k.length>1?k[1]:"";var h=parseInt(a)==a?parseInt(a):-1;if(i!=-1&&f!=-1&&h!=-1){var g=new Date();g.setDate(i);g.setMonth(f-1);g.setFullYear(h);return g}return undefined},setTextInputDatesFromHidden:function(c){if(typeof c=="undefined"){c=new Array();$A(BookingBuddy.RS.elements[BookingBuddy.searchMode]).each(function(d){if(d.indexOf("_month")!=-1||d.indexOf("_day")!=-1){c.push(d)}})}var b=BookingBuddy.RS.getDateFromInputs(c[0],c[1]);var a=BookingBuddy.RS.getDateFromInputs(c[2],c[3]);BookingBuddy.Calendar.setTextInputDates(undefined,undefined,b,a)},update:function(a){var d="";a.each(function(p,i){try{var n=null;var h={index:i};var o="";var m="";SwitchMode.searches[i]=p;switch(BookingBuddy.searchMode){case"air":h.depart=p.departure_city;h.destination=p.arrival_city;o=BookingBuddy.Date.makeFromValues(true,p.departure_month,p.departure_day);m=BookingBuddy.Date.makeFromValues(true,p.return_month,p.return_day);switch(BookingBuddy.domain){case"bookingbuddy.co.uk":n=(p.search_type=="roundtrip"||p.st=="roundtrip")?BookingBuddy.Strings.RS.UK.RSTemplate_air_roundtrip:BookingBuddy.Strings.RS.UK.RSTemplate_air_oneway;var r=/([A-Z]{3})/;var l=h.depart.match(r);if(l&&l[0]){h.depart=l[0].strip()}var k=h.destination.match(r);if(k&&k[0]){h.destination=k[0].strip()}break;default:n=(p.search_type=="roundtrip"||p.st=="roundtrip")?BookingBuddy.Strings.RS.Default.RSTemplate_air_roundtrip:BookingBuddy.Strings.RS.Default.RSTemplate_air_oneway;break}break;case"hotel":case"vacation_rental":h.destination=p.arrival_city;o=BookingBuddy.Date.makeFromValues(true,p.arrival_month,p.arrival_day);m=BookingBuddy.Date.makeFromValues(true,p.departure_month,p.departure_day);switch(BookingBuddy.domain){case"bookingbuddy.co.uk":var n=BookingBuddy.Strings.RS.UK.RSTemplate_hotel;var f=/[(-]/;var k=h.destination.split(f);if(k[0]){h.destination=k[0].strip()}break;default:var n=BookingBuddy.Strings.RS.Default.RSTemplate_hotel;break}break;case"car":var n=BookingBuddy.Strings.RS.Default.RSTemplate_car;h.destination=p.pickup_city;o=BookingBuddy.Date.makeFromValues(true,p.pickup_month,p.pickup_day);m=BookingBuddy.Date.makeFromValues(true,p.dropoff_month,p.dropoff_day);break;case"vacation":var n=BookingBuddy.Strings.RS.Default.RSTemplate_vacation;h.depart=p.departure_city;h.destination=p.arrival_city;o=BookingBuddy.Date.makeFromValues(true,p.departure_month,p.departure_day);m=BookingBuddy.Date.makeFromValues(true,p.return_month,p.return_day);break;case"cruise":var q=p.travel_month;q=q.substring(0,q.length-3);n=BookingBuddy.Strings.RS.Default.RSTemplate_cruise;h={destination:p.destination,month_1:q}}if(o!=""){var g=o.split(/\//);if(BookingBuddy.domain=="bookingbuddy.co.uk"){h.month_1=BookingBuddy.RS.monthShortNames[g[0]-1]}else{h.month_1=g[0]}h.day_1=g[1];h.year_1=g[2]}if(m!=""){var g=m.split(/\//);if(BookingBuddy.domain=="bookingbuddy.co.uk"){h.month_2=BookingBuddy.RS.monthShortNames[g[0]-1]}else{h.month_2=g[0]}h.day_2=g[1];h.year_2=g[2]}h.searchMode=BookingBuddy.searchMode;d+=n.evaluate(h)}catch(j){}});if(d!=""){var b=$(BookingBuddy.RS.listID);var c=$(BookingBuddy.RS.divID);if(b&&c){b.innerHTML=d}}},setSearchCookie:function(){if(!BookingBuddy.searchMode){return}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);if(!e.length){return}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.Strings.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},switchMode:function(a,b){SwitchMode.switchMode(a,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:(navigator.appName=="Microsoft Internet Explorer")?"toolbar=0,location=1,menubar=0,resizable=1,scrollbars=1,height=525,width=925,top=35":"status=1,toolbar=1,location=1,menubar=1,resizable=1,scrollbars=1,height=525,width=925,top=35",windowName:"",storeWindowNames:false,openedWindowNames:[],init:function(a){BookingBuddy.Search.redirectUrl=a;var b=screen.width-925;if(b<0){b=0}BookingBuddy.Search.windowOptions+=",left="+b;$$(".forminputs").each(function(c){c.observe("mousedown",function(){$$(".BBInputButton").each(function(d){if(d.hasClassName("clicked")){d.removeClassName("clicked");d.value="Search"}})})})},registerAd:function(d){var b=$("BBAd"+d);if(!b){return false}var a=b.title;var c=[$("bb_ad_image_"+d),$("bb_ad_button_"+d)];c.each(function(e){if(!e){return}e.observe("click",function(g){var f=BookingBuddy.Search.submit(a);if(f){if(window.location.href.indexOf("affiliate")==-1){if(e.id.indexOf("image")!==-1){e=e.next(".BBInputButton")}if(e){e.addClassName("clicked");e.value="_"}}}})})},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(e,a){if(typeof e!="string"){return}var h=BookingBuddy.searchMode;var r=$(BookingBuddy.Search.formName);var q=false;var c=$("oneway");if(c){q=c.checked}if(!Object.isArray(e)){urlParams=e.split("|");if(!/^[a-z]\d+$/.test(urlParams[0])){return false}}else{urlParams=[];params=[];e.each(function(f){var d=f.split("|");if(!/^[a-z]\d+$/.test(d[0])){return false}params.push(d[0])});urlParams[0]=encodeURIComponent(params)}r.action=BookingBuddy.Search.redirectUrl;var o=/host=([\w\.\-]+)/.exec(BookingBuddy.Search.redirectUrl);if(r.host&&o&&typeof o[1]!="undefined"){r.host.value=o[1]}r.r.value=urlParams[0];var k=/i(\d+)/.exec(urlParams[0]);var j=BookingBuddy.Search.getAdMetaData(k[1],"display_name");if(q&&(j=="Hotwire")){alert("Hotwire does not currently support one-way searches.");return false}var l=BookingBuddy.Validation.validateSearch(a,q);if(l){BookingBuddy.RS.setSearchCookie();if(typeof BookingBuddy.Search.preSearchHook=="function"){BookingBuddy.Search.preSearchHook("BBAd"+k[1])}if(BookingBuddy.Search.windowName){r.target=BookingBuddy.Search.windowName;r.submit()}else{var s=new Date();j=j.replace(/([^a-zA-Z])/g,"_");var n="bb_search_"+j+"_"+s.getTime();var v=window.open("",n,BookingBuddy.Search.windowOptions);if(v){if(BookingBuddy.Search.storeWindowNames){BookingBuddy.Search.openedWindowNames.push({name:n,window:v})}r.target=n;r.submit()}else{BookingBuddy.Search.showBlockedPopUpMessage();return false}}var g="search "+urlParams[1];var o=/i(\d+)/.exec(urlParams[0]);var p;var b=(BookingBuddy.domain.indexOf("bookingbuddy")!=-1)?"bb_":"st_";var i=b+"conv_page_view";if(g.match(/dropdown(?!_premium)/)){bb_event_flag="event6,";p=b+"conv_nonfeaturedsearch"}else{p=b+"conv_featuredsearch";if(h=="hotel"){var u=b+"conv_hotel_featuredsearch";window.setTimeout("offermaticaCreateConfirm('"+i+"', '"+u+"')",500)}}offermaticaCreateConfirm(i,p);if(o.length==2){var t=o[1];if(typeof BookingBuddy.Search.trackingHook=="function"){BookingBuddy.Search.trackingHook(g,t,h)}}}return l},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.Strings.ServerTime);var c=b.getTime()-a.getTime();return(c>=d)},toggleOneway:function(b){if(BookingBuddy.searchMode!="air"){return}if(typeof b=="undefined"){if(typeof SwitchMode.oneway=="undefined"){var b="block"}else{var b="none"}}var a=$(BookingBuddy.Date.returnDateDivID);if(a){a.style.display=b}}};
SwitchMode={debug:null,searches:[],postPopulateSearchFormHook:null,preSwitchSearchModeHook:null,airport_modes:["air","vacation","car"],domain:null,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:{departure_city:"departure_city",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:{departure_city:"departure_city",arrival_city:"pickup_city",departure_month:"pickup_month",departure_day:"pickup_day",return_month:"dropoff_month",return_day:"dropoff_day"},air_to_cruise:{departure_city:"departure_city",arrival_city:"arrival_city",departure_city:"departure_city",departure_month:"travel_month",departure_day:"departure_day",return_month:"return_month",return_day:"return_day"},air_to_vacation:{departure_city:"departure_city",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:{departure_city:"departure_city",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:{arrival_city:"arrival_city",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:{arrival_city:"arrival_city",departure_month:"return_month",departure_day:"return_day",arrival_month:"departure_month",arrival_day:"departure_day",num_travelers:"num_travelers"},hotel_to_cruise:{arrival_city:"arrival_city",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_city:"arrival_city",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:{departure_city:"departure_city",arrival_city:"arrival_city",departure_month:"departure_month",departure_day:"departure_day",return_month:"return_month",return_day:"return_day",num_travelers:"num_travelers"},vacation_to_hotel:{departure_city:"departure_city",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:{departure_city:"departure_city",arrival_city:"pickup_city",departure_month:"pickup_month",departure_day:"pickup_day",return_month:"dropoff_month",return_day:"dropoff_day"},vacation_to_cruise:{departure_city:"departure_city",arrival_city:"arrival_city",departure_day:"departure_day",departure_month:"travel_month",return_day:"return_day",return_month:"return_month"},vacation_to_vacation_rental:{departure_city:"departure_city",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_city:"arrival_city",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(b,a){if(typeof a!="undefined"){SwitchMode.domain=a}SwitchMode.populateSearchForm(0,true,b)},populateSearchForm:function(k,l,h,e){if(h=="home"){h="air"}var b={},f={},a={},j={};var d=SwitchMode.getCookie("SwitchMode");if(d){if(d.indexOf(":::")!=-1){var g=d.split(":::");d=g[0];j=g[1]?JSON.parse(g[1]):{}}var c=JSON.parse(d);a=(c)?c:{};if(j){$H(j).each(function(m){a[m.key]=m.value})}}if(typeof e!="undefined"&&SwitchMode.searches[k]){b=SwitchMode.searches[k];$H(b).each(function(m){f[m.key]=m.value})}else{$H(a).each(function(m){f[m.key]=m.value})}f[f.st]=f.st;if(window.console&&SwitchMode.debug){console.log("Cookie Data --");console.log(f)}if(!SwitchMode.elements[h]){return}SwitchMode.elements[h].each(function(r){var p=$(r);if(p&&p.id!=r){p=null}var n=$(h+"_"+r);if(!p){p=n;if(!p){if(window.console&&SwitchMode.debug){console.log("Id not found - "+n)}return}}var q=(typeof f[r]=="string")?f[r]:"";if(l&&$(r)||l&&n){if(n){var m=SwitchMode.getQSParam(n.name)}else{var m=SwitchMode.getQSParam($(r).name)}if(!m){m=SwitchMode.getQSParam(r)}if(!m&&"oneway"==r){m=SwitchMode.getQSParam("search_type")}if(typeof m=="string"){q=m;if(SwitchMode.displayStepTwo&&typeof(SwitchMode.displayStepTwo)=="function"){SwitchMode.displayStepTwo()}}else{if(typeof a[r]=="string"){q=a[r]}}}if(p.type=="text"||p.type=="hidden"){p.value=q}else{if(p.type=="select-one"){for(i=0;i<p.options.length;i++){var o=p.options[i].value;if((o==q)||(("0"+o)==q)||((q!="")&&(o==("0"+q)))){p.options[i].selected=true;break}}}else{if(p.type=="radio"){if(p.value==q){p.checked=true}}else{if(p.type=="checkbox"){p.checked=(q==1)?true:false}}}}f[r]=q;SwitchMode.emitEvent(p.id,"change");SwitchMode.emitEvent(p.id,"blur")});if(h=="air"){if(f.search_type=="oneway"||f.roundtrip=="oneway"||f.st=="oneway"){SwitchMode.oneway="true"}}if(e){BookingBuddy.RS.setTextInputDatesFromHidden()}if(typeof SwitchMode.postPopulateSearchFormHook=="function"){SwitchMode.postPopulateSearchFormHook()}},setSwitchCookie:function(b){var n={};var k={};var g=SwitchMode.switchMap[b];if(!g){return}var h=b.split("_");var m=h[0];if(b.indexOf("vacation_rental")!=-1){var d=h[2]+"_"+h[3]}else{var d=h[2]}var l=SwitchMode.getCookie("SwitchMode");if(l){if(l.indexOf(":::")!=-1){var h=l.split(":::");l=h[0]}var c=JSON.parse(l);var a=(c)?c:{};["arrival_city","departure_city"].each(function(o){if(o=="arrival_city"){if(a[o]){var q=d=="car"?"pickup_city":"arrival_city";n[q]=a.arrival_city}}else{if(a[o]){n[o]=a[o]}}})}$H(g).each(function(o){var q=$(o.key);if(!q){q=$(d+"_"+o.key);if(!q){return}}var r=$F(q);if(r&&o.value){n[o.value]=r}});SwitchMode.airport_modes.each(function(s){if(m==s){switch(d){case"hotel":case"vacation_rental":case"cruise":var r="arrival_city";break;case"car":var r="pickup_city";break;default:var r=null;break}if(!r){return}if(n[r]){var q=n[r].indexOf("(");if(q!=-1){n[r]=n[r].substring(0,q).strip()}var o=n[r].indexOf("- All Airports");if(o!=-1){n[r]=n[r].substring(0,o).strip()}}}});if(d=="cruise"){var p="travel_month";if(typeof n[p]!="undefined"){k.departure_date=n[p].substr(0,2)+n[p].substr(3,4)+n.departure_day;k.return_date=n.return_month.substr(0,2)+n.return_month.substr(3,4)+n.return_day;n[p]=n[p].substr(3,4)+"-"+n[p].substr(0,2)+"-01"}}if(m=="cruise"){switch(d){case"air":case"vacation":var j={dep_month:"departure_month",dep_day:"departure_day",ret_month:"return_month",ret_day:"return_day"};break;case"hotel":case"vacation_rental":var j={dep_month:"arrival_month",dep_day:"arrival_day",ret_month:"departure_month",ret_day:"departure_day"};break;case"car":var j={dep_month:"pickup_month",dep_day:"pickup_day",ret_month:"dropoff_month",ret_day:"dropoff_day"};break;default:var j={dep_month:"",dep_day:"",ret_month:"",ret_day:""}}if(n[j.dep_month]&&n[j.dep_month]!=""){n[j.dep_month]=n[j.dep_month].substr(5,2)+" "+n[j.dep_month].substr(0,4);n[j.dep_day]="1";n[j.ret_month]=n[j.dep_month];n[j.ret_day]="8"}if(a.departure_date&&a.return_date&&n[j.dep_month]){var e=a.departure_date.substr(0,2)+" "+a.departure_date.substr(2,4);if(e==n[j.dep_month]){n[j.dep_month]=e;n[j.dep_day]=a.departure_date.substr(6);n[j.ret_month]=a.return_date.substr(0,2)+" "+a.return_date.substr(2,4);n[j.ret_day]=a.return_date.substr(6)}}}if(window.console&&SwitchMode.debug){console.log(n.arrival_city)}var f=encodeURIComponent(JSON.stringify(n))+":::"+encodeURIComponent(JSON.stringify(k));SwitchMode.createCookie("SwitchMode",f,60*24*30)},switchMode:function(a,b){SwitchMode.setSwitchCookie(b);location.href=a},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(!SwitchMode.domain){var b=document.domain.match(/.+(bookingbuddy.+|smartertravel.+|airfarewatchdog.+)/);if(b!=null){f=b[1]}}else{f=SwitchMode.domain}document.cookie=d+"="+g+a+"; path=/; domain="+f;return true},getCookie:function(c){var b=document.cookie;var f=c+"=";var d=b.indexOf("; "+f);if(d==-1){d=b.indexOf(f);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+f.length,a))}catch(g){return null}},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)}}},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)}};
BookingBuddy.Tools={toggle:function(d,b,a,c){var e=$(d);var h=$(b);if(e==null||h==null){return false}c=c==null?"BookingBuddy.Tools.toggle":c;var g={contentId:d,linkId:b,func:c};if(a=="fit"){h.update(BookingBuddy.Strings.Tools.contractLink.evaluate(g));BookingBuddy.createCookie("bb_module_"+d,"fit",30*24*60)}else{h.update(BookingBuddy.Strings.Tools.expandLink.evaluate(g));BookingBuddy.createCookie("bb_module_"+d,"close",30*24*60)}var i=d.gsub("_Content","");var f="";if(i=="afsModule"){f="Deals"}else{f=$(i+"_Name")?$(i+"_Name").innerHTML.strip():"Unknown"}omnitureContentModule(f,(a=="fit"));BookingBuddy.slide(e,a,BookingBuddy.slidingFactor);return true}};
BookingBuddy.UK={step2displayed:false,maskID:"mask",maskOffsetHeight:6,adsID:"BBSearchLogos",pricedDivWrapper:"BBLTPricedAdsWrapper",pricedDiv:"BBLTPricedAds",searchForm:"bbsearch",showRecentSearches:false,recentSearchesDisplayed:false,successfulCheckboxSearches:[],checkedAdCount:0,checkboxTrackingInfo:null,windowLeft:screen.width-890,windowTop:35,showLightboxAt:null,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){$("priced_blind").style.height="";Effect.BlindDown("priced_blind");BookingBuddy.UK.pricesShown=true}}else{Effect.BlindUp("priced_blind");BookingBuddy.UK.pricesShown=false}}},2000)});document.observe("lt:end",function(){trackBBUKProductImpressions(BookingBuddy.LT.currentAds)})},validateAndSubmitForm:function(){var b=false;var a=$("oneway");if(a){b=a.checked}if(BookingBuddy.Validation.validateSearch(false,b)){BookingBuddy.UK.submitClick()}},submitClick:function(){var a=s.getValOnce("event25","event25",0);if(a){omnitureSendEvents("event25","BBUK - Step 1  Compare Button Click")}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()}var leftborder=$("leftbordersearch");var recentsearches=$("module_wrapper_recentSearches");if(leftborder){leftborder.style.height="350px"}$("BBSearchLogos").style.display="block";if(recentsearches){recentsearches.style.display="block"}var p=$(pricedDiv);var pw=$(pricedDivWrapper);if(pw){if(p.innerHTML){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]}}}BookingBuddy.UK.checkedAdCount=0;var allCheckboxes=$$("input.ad_checkbox");for(var i=0;i<allCheckboxes.length;i++){if(allCheckboxes[i].name.search(/(Hotels\.com.*).*targeted/i)!=-1){allCheckboxes[i].checked=true;BookingBuddy.UK.checkedAdCount++}}});step2displayed=true;BookingBuddy.AFS.inputIDs.each(function(input_id){BookingBuddy.AFS.update($(input_id).value)});if(BookingBuddy.AFS.displayed){$("afsModule_Content").fire("afs:display")}if(pw){pw.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()}}},updateAFS:function(){BookingBuddy.AFS.inputIDs.each(function(a){if($(a)&&($F(a)!=="")){BookingBuddy.AFS.update($F(a))}})},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")}},toggleCheck:function(c,b){var a=$(c);if(a){if(!a.checked){a.checked=true;if(b.id.indexOf("BBAd")!=-1){BookingBuddy.UK.checkedAdCount++}}else{a.checked=false;if(b.id.indexOf("BBAd")!=-1){BookingBuddy.UK.checkedAdCount--}}}},setStagger:function(){BookingBuddy.UK.windowTop=BookingBuddy.UK.windowTop+35;BookingBuddy.UK.windowLeft=Math.max(BookingBuddy.UK.windowLeft-35,336);BookingBuddy.Search.windowOptions="status=1,toolbar=1,location=1,menubar=0,resizable=1,scrollbars=1,height=525,width=925";BookingBuddy.Search.windowOptions+=",top="+BookingBuddy.UK.windowTop;BookingBuddy.Search.windowOptions+=",left="+BookingBuddy.UK.windowLeft},resetStagger:function(){BookingBuddy.UK.windowTop=BookingBuddy.UK.windowTop-35;BookingBuddy.UK.windowLeft=BookingBuddy.UK.windowLeft+35;BookingBuddy.Search.windowOptions="status=1,toolbar=1,location=1,menubar=0,resizable=1,scrollbars=1,height=525,width=925";BookingBuddy.Search.windowOptions+=",top="+BookingBuddy.UK.windowTop;BookingBuddy.Search.windowOptions+=",left="+BookingBuddy.UK.windowLeft},submitCheckedSearches:function(){var h=false;var l=false;var c=$("oneway");if(c){l=c.checked}if(BookingBuddy.Validation.validateSearch(false,l)){var e=$$("input.ad_checkbox");var j=[];var b=0;for(var d=0;d<e.length;d++){if(e[d].checked){e[d].checked=false;b++;BookingBuddy.UK.setStagger();BookingBuddy.UK.checkboxTrackingInfo={total:BookingBuddy.UK.checkedAdCount,current:b,from_lightbox:false};var k=BookingBuddy.Search.submit(e[d].name);var g=e[d].id.substring(6);var f=[];if(k==false){h=true;f.push(g,0);BookingBuddy.UK.resetStagger()}else{f.push(g,1)}j.push(f)}}if(b>=2){$(BookingBuddy.Search.formName).fire("bbuk:submit")}if(BookingBuddy.Search.openedWindowNames&&BookingBuddy.Search.openedWindowNames[0]!==undefined){var a=BookingBuddy.Search.openedWindowNames[0].window;if(!a.closed){a.focus()}}if(h==true){BookingBuddy.UK.showPopupBlockedMsg(j)}else{BookingBuddy.Search.openedWindowNames=[];BookingBuddy.UK.checkedAdCount=0}}},showPopupBlockedMsg:function(o){BookingBuddy.UK.successfulCheckboxSearches=[];var b=$("dhtml_checkboxes");var c=0,m=0;if(BookingBuddy.UK.showLightboxAt&&$(BookingBuddy.UK.showLightboxAt)){var p=$(BookingBuddy.UK.showLightboxAt).cumulativeOffset();c=p.left;m=p.top}else{c=BookingBuddy.UK.windowLeft-335;if(c<0){c=6}m=157}b.setStyle({visibility:"visible",top:m+"px",left:c+"px"});var k=$(document.body);var f=$("dhtml_checkboxes_darkenedScreenDiv");if(f&&window.XMLHttpRequest){if(k){f.style.height=(k.getHeight()+30)+"px"}else{f.style.height=(document.viewport.getHeight()+30)+"px"}f.setOpacity(0.5);f.style.visibility="visible"}BookingBuddy.toggleCovered(b,"hidden");var h=$("service_class");if(h){h.style.visibility="hidden"}$("popup_on_logos").innerHTML="";var d=BookingBuddy.LT.adRegistry;for(var g=0;g<o.length;g++){for(var e=0;e<d.length;e++){if(o[g][0]==d[e].ad_id){var a=d[e].logo;var n=d[e].display_name;var l=d[e].tracking_name;$("popup_on_logos").innerHTML+='<div class="popup_checked_logo" onclick="BookingBuddy.UK.submitAndToggle(\''+l+"', "+g+');"><div class="popup_checked_img"><img src="'+a+'" /></div><div class="popup_checked_name" id="name_'+g+'">'+n+'</div><div class="popup_checked_chkmrk" id="chkmrk_'+g+'" style="display:none;"></div></div>'}}if(o[g][1]){BookingBuddy.UK.successfulCheckboxSearches.push(g);BookingBuddy.UK.togglePopupDisplay(g)}}$("checkboxes_total").innerHTML=o.length+" "},submitAndToggle:function(l,a){var f=l.split("|");var c=/i(\d+)/.exec(f[0]);var d=BookingBuddy.Search.getAdMetaData(c[1],"display_name");d=d.replace(/([^a-zA-Z])/g,"_");for(var k=0;k<BookingBuddy.Search.openedWindowNames.length;k++){var e=BookingBuddy.Search.openedWindowNames[k];if((e.name.indexOf(d)!=-1)&&(!e.window.closed)){e.window.focus();return}}BookingBuddy.UK.setStagger();BookingBuddy.UK.checkboxTrackingInfo={total:BookingBuddy.UK.checkedAdCount,current:a+1,from_lightbox:true};var n=BookingBuddy.Search.submit(l);if(n){if(!BookingBuddy.UK.showLightboxAt){var b=$("dhtml_checkboxes");var h=BookingBuddy.UK.windowLeft-330;if(h<0){h=6}b.style.left=h+"px"}var j=true;for(var g=0;g<BookingBuddy.UK.successfulCheckboxSearches.length;g++){if(BookingBuddy.UK.successfulCheckboxSearches[g]==a){j=false}}if(j){BookingBuddy.UK.successfulCheckboxSearches.push(a);BookingBuddy.UK.togglePopupDisplay(a)}}},togglePopupDisplay:function(a){var c="name_"+a;var b="chkmrk_"+a;$(c).setStyle({color:"#666666"});$(b).setStyle({display:""});$("checkboxes_success").innerHTML=BookingBuddy.UK.successfulCheckboxSearches.length+" "}};
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.User={source_cookie:"referrer",init:function(){BookingBuddy.User.setSource()},_sanitizeSource:function(d,c,a,b){return $H({source:d.replace(/[^\w\-]/,""),value:c.replace(/[^\w\-]/,""),value2:a.replace(/[^\w\-]/,""),timestamp:parseInt(b)})},setSource:function(){var e=BookingBuddy.getQSParam("source")||"";var d=BookingBuddy.getQSParam("value")||"";var a=BookingBuddy.getQSParam("value2")||"";var c=(Date.parse(BookingBuddy.Strings.ServerTime))/1000;var f=BookingBuddy.User._sanitizeSource(e,d,a,c);if(!f.get("source")||!f.get("timestamp")){return false}var b=[f.get("source"),f.get("value"),f.get("timestamp"),f.get("value2")].join(":::");return BookingBuddy.createCookie(BookingBuddy.User.source_cookie,encodeURIComponent(b),60*24*5)},getSource:function(b){var a=decodeURIComponent(BookingBuddy.getCookie(BookingBuddy.User.source_cookie));if(!a){return null}var d=$A(a.split(":::"));if(4!=d.size()){return null}var c=BookingBuddy.User._sanitizeSource(d[0],d[1],d[3],d[2]);if("undefined"==typeof b){return c}return c.get(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(i,o){var g=$(BookingBuddy.Search.formName);var p="";var e=BookingBuddy.searchMode;var m=false;var a=true;var j=new Date(BookingBuddy.Strings.ServerTime);j.setHours(0,0,0,0);if(BookingBuddy.Validation.invalidLocationFields.length>0){BookingBuddy.Validation.alert(BookingBuddy.Strings.Validation.PleaseCorrectFollowing+"\n"+BookingBuddy.Strings.Validation.OneLocationInvalid);return false}if(e=="air"||e=="vacation"){var k=BookingBuddy.Date.make("departure");if($F("departure_city")&&$F("arrival_city")){if($F("departure_city")==$F("arrival_city")){p+="-"+BookingBuddy.Strings.Validation.DifferentLocations+"\n"}}if(!$F("departure_city")){p+="- "+BookingBuddy.Strings.Validation.EnterDepartureCity+"\n"}if(!$F("arrival_city")){p+="- "+BookingBuddy.Strings.Validation.EnterArrivalCity+"\n"}if((e=="vacation")&&window.defaultValues&&window.defaultValues.vacation.arrival_city){if($("arrival_city").value==defaultValues.vacation.arrival_city){p+="- "+BookingBuddy.Strings.Validation.EnterArrivalCity+"\n"}}p+=(!k)?"- "+BookingBuddy.Strings.Validation.ChooseDepartureDate+"\n":"";if(o){if(k){BookingBuddy.Date.set("return",k);BookingBuddy.Date.updateDaysDrop("return")}}var h=BookingBuddy.Date.make("return");if(!h){p+="- "+BookingBuddy.Strings.Validation.ChooseReturnDate+"\n"}if(!o&&k&&h&&(k>h)){p+="- "+BookingBuddy.Strings.Validation.DepartureDateAfterReturnDate+"\n"}var d=new Date();d.setDate(j.getDate()+330);var c=k?Math.ceil((k.getTime()-j.getTime())/(1000*60*60*24)):0;var b=h?Math.ceil((h.getTime()-j.getTime())/(1000*60*60*24)):0;if(c>330||b>330){var l={days_out:BookingBuddy.RS.monthShortNames[d.getMonth()]+" "+d.getDate()+", "+d.getFullYear()};p+="- "+BookingBuddy.Strings.Validation.Beyond330Days.evaluate(l)+"\n"}}else{if(e=="hotel"||e=="vacation_rental"){if(g.arrival_date&&g.departure_date){k=BookingBuddy.Date.make(g.arrival_date.id.replace("_date",""));h=BookingBuddy.Date.make(g.departure_date.id.replace("_date",""))}else{k=BookingBuddy.Date.make("arrival");h=BookingBuddy.Date.make("departure")}var n=g.arrival_city.value;if(!n||/^\s+$/.test(n)){p+="- "+BookingBuddy.Strings.Validation.ChooseDestinationCity+"\n"}p+=(!k)?"- "+BookingBuddy.Strings.Validation.ChooseArrivalDate+"\n":"";p+=(!h)?"- "+BookingBuddy.Strings.Validation.ChooseDepartureDate+"\n":"";if(k&&h&&(k>=h)){p+="- "+BookingBuddy.Strings.Validation.CheckInAfterCheckOut+"\n"}}else{if(e=="car"){k=BookingBuddy.Date.make("pickup");h=BookingBuddy.Date.make("dropoff");if(!$F("pickup_city")||/^\s+$/.test($F("pickup_city"))){p+="- "+BookingBuddy.Strings.Validation.ChoosePickupCity+"\n"}p+=(!k)?"- "+BookingBuddy.Strings.Validation.ChooseValidPickupOff+"\n":"";p+=(!h)?"- "+BookingBuddy.Strings.Validation.ChooseValidDropOff+"\n":"";if(k&&h&&(k>h)){p+="- "+BookingBuddy.Strings.Validation.PickUpAfterDropOff+"\n"}if(!BookingBuddy.Search.leadTimeCheck(k,(2*60*60*1000))){m=true}}}}if(k&&h&&((j.getTime()>k.getTime())||(j.getTime()>h.getTime()))){p+="- "+BookingBuddy.Strings.Validation.SearchDatePast+"\n"}if(BookingBuddy.Validation.validateCallbacks.size()>0){BookingBuddy.Validation.validateCallbacks.each(function(q){if(typeof q=="function"){var f=q();if(typeof f=="string"){p+=f}else{a=a&&f}}})}if(p.length>0){BookingBuddy.Validation.alert(BookingBuddy.Strings.Validation.CorrectFollowing+"\n"+p);a=false}if(m&&!window.confirm(BookingBuddy.Strings.Validation.SearchTwoHoursAway)){a=false}return a},alert:function(a){window.alert(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 suggestion_types=[];BookingBuddy.LS.inputs.each(function(item){var input_name=item.id;if(target==input_name){suggestion_types=item.suggestion_types}});var args={input:val,types:suggestion_types};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){t.value=response.value;executeValidLocationCallbacks(target,response.value)}else{if(response.suggestions[0].value){t.value=response.suggestions[0].value;executeValidLocationCallbacks(target,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";Event.observe(e,"change",function(){BookingBuddy.Validation.alertChangeHandler(e.id)});e.options[0]=new Option("Suggested locations","");a.each(function(j){var l='BookingBuddy.Validation.alertSelect("'+f+'", "'+j.value+'");';var m=new Option(j.display,l);var k=e.options.length;e.options[k]=m});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}c.value=a;BookingBuddy.Validation.executeValidLocationCallbacks(b,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"}}},checkForPastDate:function(d){var a=new Date(BookingBuddy.Strings.ServerTime);a.setHours(0,0,0,0);var c=$F(d).split("/");var b=BookingBuddy.Date.makeFromValues(false,c[0]+" "+c[2],c[1]);if(b&&(a.getTime()>b.getTime())){return true}else{return false}}};
BookingBuddy.Weather={monthNames:new Array("January","February","March","April","May","June","July","August","September","October","November","December"),div:"weather",input_ids:{air:["arrival_city","departure_month"],hotel:["arrival_city","arrival_month"],vacation:["arrival_city","departure_month"],car:["pickup_city","pickup_month"],cruise:["destination","travel_month"],vacation_rental:["arrival_city","arrival_month"]},input_date:{air:"departure",hotel:"arrival",vacation:"departure",car:"pickup",cruise:"travel",vacation_rental:"arrival"},input_city:{air:"arrival_city",hotel:"arrival_city",vacation:"arrival_city",car:"pickup_city",cruise:"destination",vacation_rental:"arrival_city"},weatherTemplate:null,num_months:3,inputValues:{},url:"/ajax/?service=Weather.getMonthlyAverageTemps",init:function(config){with(BookingBuddy.Weather){weatherTemplate=BookingBuddy.Strings.Weather.ThreeMonthReport;if(typeof config!=="undefined"){for(var key in config){this[key]=config[key]}}if(!$(div)){return}}if($(BookingBuddy.Weather.input_city[BookingBuddy.searchMode])){setTimeout(BookingBuddy.Weather.update,1000)}BookingBuddy.Weather.input_ids[BookingBuddy.searchMode].each(function(input){if($(input)){var event="change";if(input.indexOf("city")!=-1){event="blur"}Event.observe(input,event,BookingBuddy.Weather.update)}})},update:function(){var f=$(BookingBuddy.Weather.input_city[BookingBuddy.searchMode]);var a;if(f){a=$F(BookingBuddy.Weather.input_city[BookingBuddy.searchMode]);if(a==""){return}}var d=BookingBuddy.Weather.input_date[BookingBuddy.searchMode];var b;if(BookingBuddy.searchMode=="cruise"){b=$(d+"_month").value.substring(5,2)}else{var e=BookingBuddy.Date.make(d);b=e.getMonth()+1}ajaxTransport=null;var c=BookingBuddy.Weather.url+'&args={"location":"'+a+'","start_month":"'+b+'","num_months":"'+BookingBuddy.Weather.num_months+'"}';ajaxTransport=new Ajax.Request(c,{method:"get",onFailure:function(){$(BookingBuddy.Weather.div).hide()},onSuccess:function(k){if(k.responseText){var g=k.responseText.evalJSON(true);if(g.length==0){$(BookingBuddy.Weather.div).hide();return}else{$(BookingBuddy.Weather.div).show()}var j=new Object();for(i=0;i<g.length;i++){j.city=g[i].city;j["month_"+(i+1)]=BookingBuddy.Weather.monthNames[g[i].month-1];j["month_"+(i+1)+"_high"]=g[i].high;j["month_"+(i+1)+"_low"]=g[i].low}$(BookingBuddy.Weather.div).update(BookingBuddy.Weather.weatherTemplate.evaluate(j));var h=g.length;for(i=BookingBuddy.Weather.num_months;i>0;i--){if(i>h&&$("weather-month-"+i)){$("weather-month-"+i).hide()}}}else{$(BookingBuddy.Weather.div).hide()}}})}};

