
	
	



	


var Prototype={Version:"1.6.1",Browser:(function(){var b=navigator.userAgent;var a=Object.prototype.toString.call(window.opera)=="[object Opera]";return{IE:!!window.attachEvent&&!a,Opera:a,WebKit:b.indexOf("AppleWebKit/")>-1,Gecko:b.indexOf("Gecko")>-1&&b.indexOf("KHTML")===-1,MobileSafari:/Apple.*Mobile.*Safari/.test(b)}})(),BrowserFeatures:{XPath:!!document.evaluate,SelectorsAPI:!!document.querySelector,ElementExtensions:(function(){var a=window.Element||window.HTMLElement;return !!(a&&a.prototype)})(),SpecificElementExtensions:(function(){if(typeof window.HTMLDivElement!=="undefined"){return true}var c=document.createElement("div");var b=document.createElement("form");var a=false;if(c.__proto__&&(c.__proto__!==b.__proto__)){a=true}c=b=null;return a})()},ScriptFragment:"<script[^>]*>([\\S\\s]*?)<\/script>",JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,emptyFunction:function(){},K:function(a){return a}};if(Prototype.Browser.MobileSafari){Prototype.BrowserFeatures.SpecificElementExtensions=false}var Abstract={};var Try={these:function(){var c;for(var b=0,d=arguments.length;b<d;b++){var a=arguments[b];try{c=a();break}catch(f){}}return c}};var Class=(function(){function a(){}function b(){var g=null,f=$A(arguments);if(Object.isFunction(f[0])){g=f.shift()}function d(){this.initialize.apply(this,arguments)}Object.extend(d,Class.Methods);d.superclass=g;d.subclasses=[];if(g){a.prototype=g.prototype;d.prototype=new a;g.subclasses.push(d)}for(var e=0;e<f.length;e++){d.addMethods(f[e])}if(!d.prototype.initialize){d.prototype.initialize=Prototype.emptyFunction}d.prototype.constructor=d;return d}function c(k){var f=this.superclass&&this.superclass.prototype;var e=Object.keys(k);if(!Object.keys({toString:true}).length){if(k.toString!=Object.prototype.toString){e.push("toString")}if(k.valueOf!=Object.prototype.valueOf){e.push("valueOf")}}for(var d=0,g=e.length;d<g;d++){var j=e[d],h=k[j];if(f&&Object.isFunction(h)&&h.argumentNames().first()=="$super"){var l=h;h=(function(i){return function(){return f[i].apply(this,arguments)}})(j).wrap(l);h.valueOf=l.valueOf.bind(l);h.toString=l.toString.bind(l)}this.prototype[j]=h}return this}return{create:b,Methods:{addMethods:c}}})();(function(){var d=Object.prototype.toString;function i(q,s){for(var r in s){q[r]=s[r]}return q}function l(q){try{if(e(q)){return"undefined"}if(q===null){return"null"}return q.inspect?q.inspect():String(q)}catch(r){if(r instanceof RangeError){return"..."}throw r}}function k(q){var s=typeof q;switch(s){case"undefined":case"function":case"unknown":return;case"boolean":return q.toString()}if(q===null){return"null"}if(q.toJSON){return q.toJSON()}if(h(q)){return}var r=[];for(var u in q){var t=k(q[u]);if(!e(t)){r.push(u.toJSON()+": "+t)}}return"{"+r.join(", ")+"}"}function c(q){return $H(q).toQueryString()}function f(q){return q&&q.toHTML?q.toHTML():String.interpret(q)}function o(q){var r=[];for(var s in q){r.push(s)}return r}function m(q){var r=[];for(var s in q){r.push(q[s])}return r}function j(q){return i({},q)}function h(q){return !!(q&&q.nodeType==1)}function g(q){return d.call(q)=="[object Array]"}function p(q){return q instanceof Hash}function b(q){return typeof q==="function"}function a(q){return d.call(q)=="[object String]"}function n(q){return d.call(q)=="[object Number]"}function e(q){return typeof q==="undefined"}i(Object,{extend:i,inspect:l,toJSON:k,toQueryString:c,toHTML:f,keys:o,values:m,clone:j,isElement:h,isArray:g,isHash:p,isFunction:b,isString:a,isNumber:n,isUndefined:e})})();Object.extend(Function.prototype,(function(){var k=Array.prototype.slice;function d(o,l){var n=o.length,m=l.length;while(m--){o[n+m]=l[m]}return o}function i(m,l){m=k.call(m,0);return d(m,l)}function g(){var l=this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1].replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g,"").replace(/\s+/g,"").split(",");return l.length==1&&!l[0]?[]:l}function h(n){if(arguments.length<2&&Object.isUndefined(arguments[0])){return this}var l=this,m=k.call(arguments,1);return function(){var o=i(m,arguments);return l.apply(n,o)}}function f(n){var l=this,m=k.call(arguments,1);return function(p){var o=d([p||window.event],m);return l.apply(n,o)}}function j(){if(!arguments.length){return this}var l=this,m=k.call(arguments,0);return function(){var n=i(m,arguments);return l.apply(this,n)}}function e(n){var l=this,m=k.call(arguments,1);n=n*1000;return window.setTimeout(function(){return l.apply(l,m)},n)}function a(){var l=d([0.01],arguments);return this.delay.apply(this,l)}function c(m){var l=this;return function(){var n=d([l.bind(this)],arguments);return m.apply(this,n)}}function b(){if(this._methodized){return this._methodized}var l=this;return this._methodized=function(){var m=d([this],arguments);return l.apply(null,m)}}return{argumentNames:g,bind:h,bindAsEventListener:f,curry:j,delay:e,defer:a,wrap:c,methodize:b}})());Date.prototype.toJSON=function(){return'"'+this.getUTCFullYear()+"-"+(this.getUTCMonth()+1).toPaddedString(2)+"-"+this.getUTCDate().toPaddedString(2)+"T"+this.getUTCHours().toPaddedString(2)+":"+this.getUTCMinutes().toPaddedString(2)+":"+this.getUTCSeconds().toPaddedString(2)+'Z"'};RegExp.prototype.match=RegExp.prototype.test;RegExp.escape=function(a){return String(a).replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")};var PeriodicalExecuter=Class.create({initialize:function(b,a){this.callback=b;this.frequency=a;this.currentlyExecuting=false;this.registerCallback()},registerCallback:function(){this.timer=setInterval(this.onTimerEvent.bind(this),this.frequency*1000)},execute:function(){this.callback(this)},stop:function(){if(!this.timer){return}clearInterval(this.timer);this.timer=null},onTimerEvent:function(){if(!this.currentlyExecuting){try{this.currentlyExecuting=true;this.execute();this.currentlyExecuting=false}catch(a){this.currentlyExecuting=false;throw a}}}});Object.extend(String,{interpret:function(a){return a==null?"":String(a)},specialChar:{"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r","\\":"\\\\"}});Object.extend(String.prototype,(function(){function prepareReplacement(replacement){if(Object.isFunction(replacement)){return replacement}var template=new Template(replacement);return function(match){return template.evaluate(match)}}function gsub(pattern,replacement){var result="",source=this,match;replacement=prepareReplacement(replacement);if(Object.isString(pattern)){pattern=RegExp.escape(pattern)}if(!(pattern.length||pattern.source)){replacement=replacement("");return replacement+source.split("").join(replacement)+replacement}while(source.length>0){if(match=source.match(pattern)){result+=source.slice(0,match.index);result+=String.interpret(replacement(match));source=source.slice(match.index+match[0].length)}else{result+=source,source=""}}return result}function sub(pattern,replacement,count){replacement=prepareReplacement(replacement);count=Object.isUndefined(count)?1:count;return this.gsub(pattern,function(match){if(--count<0){return match[0]}return replacement(match)})}function scan(pattern,iterator){this.gsub(pattern,iterator);return String(this)}function truncate(length,truncation){length=length||30;truncation=Object.isUndefined(truncation)?"...":truncation;return this.length>length?this.slice(0,length-truncation.length)+truncation:String(this)}function strip(){return this.replace(/^\s+/,"").replace(/\s+$/,"")}function stripTags(){return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi,"")}function stripScripts(){return this.replace(new RegExp(Prototype.ScriptFragment,"img"),"")}function extractScripts(){var matchAll=new RegExp(Prototype.ScriptFragment,"img");var matchOne=new RegExp(Prototype.ScriptFragment,"im");return(this.match(matchAll)||[]).map(function(scriptTag){return(scriptTag.match(matchOne)||["",""])[1]})}function evalScripts(){return this.extractScripts().map(function(script){return eval(script)})}function escapeHTML(){return this.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function unescapeHTML(){return this.stripTags().replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&amp;/g,"&")}function toQueryParams(separator){var match=this.strip().match(/([^?#]*)(#.*)?$/);if(!match){return{}}return match[1].split(separator||"&").inject({},function(hash,pair){if((pair=pair.split("="))[0]){var key=decodeURIComponent(pair.shift());var value=pair.length>1?pair.join("="):pair[0];if(value!=undefined){value=decodeURIComponent(value)}if(key in hash){if(!Object.isArray(hash[key])){hash[key]=[hash[key]]}hash[key].push(value)}else{hash[key]=value}}return hash})}function toArray(){return this.split("")}function succ(){return this.slice(0,this.length-1)+String.fromCharCode(this.charCodeAt(this.length-1)+1)}function times(count){return count<1?"":new Array(count+1).join(this)}function camelize(){var parts=this.split("-"),len=parts.length;if(len==1){return parts[0]}var camelized=this.charAt(0)=="-"?parts[0].charAt(0).toUpperCase()+parts[0].substring(1):parts[0];for(var i=1;i<len;i++){camelized+=parts[i].charAt(0).toUpperCase()+parts[i].substring(1)}return camelized}function capitalize(){return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase()}function underscore(){return this.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/-/g,"_").toLowerCase()}function dasherize(){return this.replace(/_/g,"-")}function inspect(useDoubleQuotes){var escapedString=this.replace(/[\x00-\x1f\\]/g,function(character){if(character in String.specialChar){return String.specialChar[character]}return"\\u00"+character.charCodeAt().toPaddedString(2,16)});if(useDoubleQuotes){return'"'+escapedString.replace(/"/g,'\\"')+'"'}return"'"+escapedString.replace(/'/g,"\\'")+"'"}function toJSON(){return this.inspect(true)}function unfilterJSON(filter){return this.replace(filter||Prototype.JSONFilter,"$1")}function isJSON(){var str=this;if(str.blank()){return false}str=this.replace(/\\./g,"@").replace(/"[^"\\\n\r]*"/g,"");return(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str)}function evalJSON(sanitize){var json=this.unfilterJSON();try{if(!sanitize||json.isJSON()){return eval("("+json+")")}}catch(e){}throw new SyntaxError("Badly formed JSON string: "+this.inspect())}function include(pattern){return this.indexOf(pattern)>-1}function startsWith(pattern){return this.indexOf(pattern)===0}function endsWith(pattern){var d=this.length-pattern.length;return d>=0&&this.lastIndexOf(pattern)===d}function empty(){return this==""}function blank(){return/^\s*$/.test(this)}function interpolate(object,pattern){return new Template(this,pattern).evaluate(object)}return{gsub:gsub,sub:sub,scan:scan,truncate:truncate,strip:String.prototype.trim?String.prototype.trim:strip,stripTags:stripTags,stripScripts:stripScripts,extractScripts:extractScripts,evalScripts:evalScripts,escapeHTML:escapeHTML,unescapeHTML:unescapeHTML,toQueryParams:toQueryParams,parseQuery:toQueryParams,toArray:toArray,succ:succ,times:times,camelize:camelize,capitalize:capitalize,underscore:underscore,dasherize:dasherize,inspect:inspect,toJSON:toJSON,unfilterJSON:unfilterJSON,isJSON:isJSON,evalJSON:evalJSON,include:include,startsWith:startsWith,endsWith:endsWith,empty:empty,blank:blank,interpolate:interpolate}})());var Template=Class.create({initialize:function(a,b){this.template=a.toString();this.pattern=b||Template.Pattern},evaluate:function(a){if(a&&Object.isFunction(a.toTemplateReplacements)){a=a.toTemplateReplacements()}return this.template.gsub(this.pattern,function(d){if(a==null){return(d[1]+"")}var f=d[1]||"";if(f=="\\"){return d[2]}var b=a,g=d[3];var e=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;d=e.exec(g);if(d==null){return f}while(d!=null){var c=d[1].startsWith("[")?d[2].replace(/\\\\]/g,"]"):d[1];b=b[c];if(null==b||""==d[3]){break}g=g.substring("["==d[3]?d[1].length:d[0].length);d=e.exec(g)}return f+String.interpret(b)})}});Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;var $break={};var Enumerable=(function(){function c(y,x){var w=0;try{this._each(function(A){y.call(x,A,w++)})}catch(z){if(z!=$break){throw z}}return this}function r(z,y,x){var w=-z,A=[],B=this.toArray();if(z<1){return B}while((w+=z)<B.length){A.push(B.slice(w,w+z))}return A.collect(y,x)}function b(y,x){y=y||Prototype.K;var w=true;this.each(function(A,z){w=w&&!!y.call(x,A,z);if(!w){throw $break}});return w}function i(y,x){y=y||Prototype.K;var w=false;this.each(function(A,z){if(w=!!y.call(x,A,z)){throw $break}});return w}function j(y,x){y=y||Prototype.K;var w=[];this.each(function(A,z){w.push(y.call(x,A,z))});return w}function t(y,x){var w;this.each(function(A,z){if(y.call(x,A,z)){w=A;throw $break}});return w}function h(y,x){var w=[];this.each(function(A,z){if(y.call(x,A,z)){w.push(A)}});return w}function g(z,y,x){y=y||Prototype.K;var w=[];if(Object.isString(z)){z=new RegExp(RegExp.escape(z))}this.each(function(B,A){if(z.match(B)){w.push(y.call(x,B,A))}});return w}function a(w){if(Object.isFunction(this.indexOf)){if(this.indexOf(w)!=-1){return true}}var x=false;this.each(function(y){if(y==w){x=true;throw $break}});return x}function q(x,w){w=Object.isUndefined(w)?null:w;return this.eachSlice(x,function(y){while(y.length<x){y.push(w)}return y})}function l(w,y,x){this.each(function(A,z){w=y.call(x,w,A,z)});return w}function v(x){var w=$A(arguments).slice(1);return this.map(function(y){return y[x].apply(y,w)})}function p(y,x){y=y||Prototype.K;var w;this.each(function(A,z){A=y.call(x,A,z);if(w==null||A>=w){w=A}});return w}function n(y,x){y=y||Prototype.K;var w;this.each(function(A,z){A=y.call(x,A,z);if(w==null||A<w){w=A}});return w}function e(z,x){z=z||Prototype.K;var y=[],w=[];this.each(function(B,A){(z.call(x,B,A)?y:w).push(B)});return[y,w]}function f(x){var w=[];this.each(function(y){w.push(y[x])});return w}function d(y,x){var w=[];this.each(function(A,z){if(!y.call(x,A,z)){w.push(A)}});return w}function m(x,w){return this.map(function(z,y){return{value:z,criteria:x.call(w,z,y)}}).sort(function(B,A){var z=B.criteria,y=A.criteria;return z<y?-1:z>y?1:0}).pluck("value")}function o(){return this.map()}function s(){var x=Prototype.K,w=$A(arguments);if(Object.isFunction(w.last())){x=w.pop()}var y=[this].concat(w).map($A);return this.map(function(A,z){return x(y.pluck(z))})}function k(){return this.toArray().length}function u(){return"#<Enumerable:"+this.toArray().inspect()+">"}return{each:c,eachSlice:r,all:b,every:b,any:i,some:i,collect:j,map:j,detect:t,findAll:h,select:h,filter:h,grep:g,include:a,member:a,inGroupsOf:q,inject:l,invoke:v,max:p,min:n,partition:e,pluck:f,reject:d,sortBy:m,toArray:o,entries:o,zip:s,size:k,inspect:u,find:t}})();function $A(c){if(!c){return[]}if("toArray" in Object(c)){return c.toArray()}var b=c.length||0,a=new Array(b);while(b--){a[b]=c[b]}return a}function $w(a){if(!Object.isString(a)){return[]}a=a.strip();return a?a.split(/\s+/):[]}Array.from=$A;(function(){var s=Array.prototype,m=s.slice,o=s.forEach;function b(w){for(var v=0,x=this.length;v<x;v++){w(this[v])}}if(!o){o=b}function l(){this.length=0;return this}function d(){return this[0]}function g(){return this[this.length-1]}function i(){return this.select(function(v){return v!=null})}function u(){return this.inject([],function(w,v){if(Object.isArray(v)){return w.concat(v.flatten())}w.push(v);return w})}function h(){var v=m.call(arguments,0);return this.select(function(w){return !v.include(w)})}function f(v){return(v!==false?this:this.toArray())._reverse()}function k(v){return this.inject([],function(y,x,w){if(0==w||(v?y.last()!=x:!y.include(x))){y.push(x)}return y})}function p(v){return this.uniq().findAll(function(w){return v.detect(function(x){return w===x})})}function q(){return m.call(this,0)}function j(){return this.length}function t(){return"["+this.map(Object.inspect).join(", ")+"]"}function r(){var v=[];this.each(function(w){var x=Object.toJSON(w);if(!Object.isUndefined(x)){v.push(x)}});return"["+v.join(", ")+"]"}function a(x,v){v||(v=0);var w=this.length;if(v<0){v=w+v}for(;v<w;v++){if(this[v]===x){return v}}return -1}function n(w,v){v=isNaN(v)?this.length:(v<0?this.length+v:v)+1;var x=this.slice(0,v).reverse().indexOf(w);return(x<0)?x:v-x-1}function c(){var A=m.call(this,0),y;for(var w=0,x=arguments.length;w<x;w++){y=arguments[w];if(Object.isArray(y)&&!("callee" in y)){for(var v=0,z=y.length;v<z;v++){A.push(y[v])}}else{A.push(y)}}return A}Object.extend(s,Enumerable);if(!s._reverse){s._reverse=s.reverse}Object.extend(s,{_each:o,clear:l,first:d,last:g,compact:i,flatten:u,without:h,reverse:f,uniq:k,intersect:p,clone:q,toArray:q,size:j,inspect:t,toJSON:r});var e=(function(){return[].concat(arguments)[0][0]!==1})(1,2);if(e){s.concat=c}if(!s.indexOf){s.indexOf=a}if(!s.lastIndexOf){s.lastIndexOf=n}})();function $H(a){return new Hash(a)}var Hash=Class.create(Enumerable,(function(){function e(q){this._object=Object.isHash(q)?q.toObject():Object.clone(q)}function f(r){for(var q in this._object){var s=this._object[q],t=[q,s];t.key=q;t.value=s;r(t)}}function k(q,r){return this._object[q]=r}function c(q){if(this._object[q]!==Object.prototype[q]){return this._object[q]}}function n(q){var r=this._object[q];delete this._object[q];return r}function p(){return Object.clone(this._object)}function o(){return this.pluck("key")}function m(){return this.pluck("value")}function g(r){var q=this.detect(function(s){return s.value===r});return q&&q.key}function i(q){return this.clone().update(q)}function d(q){return new Hash(q).inject(this,function(r,s){r.set(s.key,s.value);return r})}function b(q,r){if(Object.isUndefined(r)){return q}return q+"="+encodeURIComponent(String.interpret(r))}function a(){return this.inject([],function(s,t){var r=encodeURIComponent(t.key),q=t.value;if(q&&typeof q=="object"){if(Object.isArray(q)){return s.concat(q.map(b.curry(r)))}}else{s.push(b(r,q))}return s}).join("&")}function l(){return"#<Hash:{"+this.map(function(q){return q.map(Object.inspect).join(": ")}).join(", ")+"}>"}function j(){return Object.toJSON(this.toObject())}function h(){return new Hash(this)}return{initialize:e,_each:f,set:k,get:c,unset:n,toObject:p,toTemplateReplacements:p,keys:o,values:m,index:g,merge:i,update:d,toQueryString:a,inspect:l,toJSON:j,clone:h}})());Hash.from=$H;Object.extend(Number.prototype,(function(){function d(){return this.toPaddedString(2,16)}function e(){return this+1}function a(k,j){$R(0,this,true).each(k,j);return this}function b(l,k){var j=this.toString(k||10);return"0".times(l-j.length)+j}function f(){return isFinite(this)?this.toString():"null"}function i(){return Math.abs(this)}function h(){return Math.round(this)}function g(){return Math.ceil(this)}function c(){return Math.floor(this)}return{toColorPart:d,succ:e,times:a,toPaddedString:b,toJSON:f,abs:i,round:h,ceil:g,floor:c}})());function $R(c,a,b){return new ObjectRange(c,a,b)}var ObjectRange=Class.create(Enumerable,(function(){function b(f,d,e){this.start=f;this.end=d;this.exclusive=e}function c(d){var e=this.start;while(this.include(e)){d(e);e=e.succ()}}function a(d){if(d<this.start){return false}if(this.exclusive){return d<this.end}return d<=this.end}return{initialize:b,_each:c,include:a}})());var Ajax={getTransport:function(){return Try.these(function(){return new XMLHttpRequest()},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Microsoft.XMLHTTP")})||false},activeRequestCount:0};Ajax.Responders={responders:[],_each:function(a){this.responders._each(a)},register:function(a){if(!this.include(a)){this.responders.push(a)}},unregister:function(a){this.responders=this.responders.without(a)},dispatch:function(d,b,c,a){this.each(function(f){if(Object.isFunction(f[d])){try{f[d].apply(f,[b,c,a])}catch(g){}}})}};Object.extend(Ajax.Responders,Enumerable);Ajax.Responders.register({onCreate:function(){Ajax.activeRequestCount++},onComplete:function(){Ajax.activeRequestCount--}});Ajax.Base=Class.create({initialize:function(a){this.options={method:"post",asynchronous:true,contentType:"application/x-www-form-urlencoded",encoding:"UTF-8",parameters:"",evalJSON:true,evalJS:true};Object.extend(this.options,a||{});this.options.method=this.options.method.toLowerCase();if(Object.isString(this.options.parameters)){this.options.parameters=this.options.parameters.toQueryParams()}else{if(Object.isHash(this.options.parameters)){this.options.parameters=this.options.parameters.toObject()}}}});Ajax.Request=Class.create(Ajax.Base,{_complete:false,initialize:function($super,b,a){$super(a);this.transport=Ajax.getTransport();this.request(b)},request:function(b){this.url=b;this.method=this.options.method;var d=Object.clone(this.options.parameters);if(!["get","post"].include(this.method)){d._method=this.method;this.method="post"}this.parameters=d;if(d=Object.toQueryString(d)){if(this.method=="get"){this.url+=(this.url.include("?")?"&":"?")+d}else{if(/Konqueror|Safari|KHTML/.test(navigator.userAgent)){d+="&_="}}}try{var a=new Ajax.Response(this);if(this.options.onCreate){this.options.onCreate(a)}Ajax.Responders.dispatch("onCreate",this,a);this.transport.open(this.method.toUpperCase(),this.url,this.options.asynchronous);if(this.options.asynchronous){this.respondToReadyState.bind(this).defer(1)}this.transport.onreadystatechange=this.onStateChange.bind(this);this.setRequestHeaders();this.body=this.method=="post"?(this.options.postBody||d):null;this.transport.send(this.body);if(!this.options.asynchronous&&this.transport.overrideMimeType){this.onStateChange()}}catch(c){this.dispatchException(c)}},onStateChange:function(){var a=this.transport.readyState;if(a>1&&!((a==4)&&this._complete)){this.respondToReadyState(this.transport.readyState)}},setRequestHeaders:function(){var e={"X-Requested-With":"XMLHttpRequest","X-Prototype-Version":Prototype.Version,Accept:"text/javascript, text/html, application/xml, text/xml, */*"};if(this.method=="post"){e["Content-type"]=this.options.contentType+(this.options.encoding?"; charset="+this.options.encoding:"");if(this.transport.overrideMimeType&&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005){e.Connection="close"}}if(typeof this.options.requestHeaders=="object"){var c=this.options.requestHeaders;if(Object.isFunction(c.push)){for(var b=0,d=c.length;b<d;b+=2){e[c[b]]=c[b+1]}}else{$H(c).each(function(f){e[f.key]=f.value})}}for(var a in e){this.transport.setRequestHeader(a,e[a])}},success:function(){var a=this.getStatus();return !a||(a>=200&&a<300)},getStatus:function(){try{return this.transport.status||0}catch(a){return 0}},respondToReadyState:function(a){var c=Ajax.Request.Events[a],b=new Ajax.Response(this);if(c=="Complete"){try{this._complete=true;(this.options["on"+b.status]||this.options["on"+(this.success()?"Success":"Failure")]||Prototype.emptyFunction)(b,b.headerJSON)}catch(d){this.dispatchException(d)}var f=b.getHeader("Content-type");if(this.options.evalJS=="force"||(this.options.evalJS&&this.isSameOrigin()&&f&&f.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))){this.evalResponse()}}try{(this.options["on"+c]||Prototype.emptyFunction)(b,b.headerJSON);Ajax.Responders.dispatch("on"+c,this,b,b.headerJSON)}catch(d){this.dispatchException(d)}if(c=="Complete"){this.transport.onreadystatechange=Prototype.emptyFunction}},isSameOrigin:function(){var a=this.url.match(/^\s*https?:\/\/[^\/]*/);return !a||(a[0]=="#{protocol}//#{domain}#{port}".interpolate({protocol:location.protocol,domain:document.domain,port:location.port?":"+location.port:""}))},getHeader:function(a){try{return this.transport.getResponseHeader(a)||null}catch(b){return null}},evalResponse:function(){try{return eval((this.transport.responseText||"").unfilterJSON())}catch(e){this.dispatchException(e)}},dispatchException:function(a){(this.options.onException||Prototype.emptyFunction)(this,a);Ajax.Responders.dispatch("onException",this,a)}});Ajax.Request.Events=["Uninitialized","Loading","Loaded","Interactive","Complete"];Ajax.Response=Class.create({initialize:function(c){this.request=c;var d=this.transport=c.transport,a=this.readyState=d.readyState;if((a>2&&!Prototype.Browser.IE)||a==4){this.status=this.getStatus();this.statusText=this.getStatusText();this.responseText=String.interpret(d.responseText);this.headerJSON=this._getHeaderJSON()}if(a==4){var b=d.responseXML;this.responseXML=Object.isUndefined(b)?null:b;this.responseJSON=this._getResponseJSON()}},status:0,statusText:"",getStatus:Ajax.Request.prototype.getStatus,getStatusText:function(){try{return this.transport.statusText||""}catch(a){return""}},getHeader:Ajax.Request.prototype.getHeader,getAllHeaders:function(){try{return this.getAllResponseHeaders()}catch(a){return null}},getResponseHeader:function(a){return this.transport.getResponseHeader(a)},getAllResponseHeaders:function(){return this.transport.getAllResponseHeaders()},_getHeaderJSON:function(){var a=this.getHeader("X-JSON");if(!a){return null}a=decodeURIComponent(escape(a));try{return a.evalJSON(this.request.options.sanitizeJSON||!this.request.isSameOrigin())}catch(b){this.request.dispatchException(b)}},_getResponseJSON:function(){var a=this.request.options;if(!a.evalJSON||(a.evalJSON!="force"&&!(this.getHeader("Content-type")||"").include("application/json"))||this.responseText.blank()){return null}try{return this.responseText.evalJSON(a.sanitizeJSON||!this.request.isSameOrigin())}catch(b){this.request.dispatchException(b)}}});Ajax.Updater=Class.create(Ajax.Request,{initialize:function($super,a,c,b){this.container={success:(a.success||a),failure:(a.failure||(a.success?null:a))};b=Object.clone(b);var d=b.onComplete;b.onComplete=(function(e,f){this.updateContent(e.responseText);if(Object.isFunction(d)){d(e,f)}}).bind(this);$super(c,b)},updateContent:function(d){var c=this.container[this.success()?"success":"failure"],a=this.options;if(!a.evalScripts){d=d.stripScripts()}if(c=$(c)){if(a.insertion){if(Object.isString(a.insertion)){var b={};b[a.insertion]=d;c.insert(b)}else{a.insertion(c,d)}}else{c.update(d)}}}});Ajax.PeriodicalUpdater=Class.create(Ajax.Base,{initialize:function($super,a,c,b){$super(b);this.onComplete=this.options.onComplete;this.frequency=(this.options.frequency||2);this.decay=(this.options.decay||1);this.updater={};this.container=a;this.url=c;this.start()},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent()},stop:function(){this.updater.options.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments)},updateComplete:function(a){if(this.options.decay){this.decay=(a.responseText==this.lastText?this.decay*this.options.decay:1);this.lastText=a.responseText}this.timer=this.onTimerEvent.bind(this).delay(this.decay*this.frequency)},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options)}});function $(b){if(arguments.length>1){for(var a=0,d=[],c=arguments.length;a<c;a++){d.push($(arguments[a]))}return d}if(Object.isString(b)){b=document.getElementById(b)}return Element.extend(b)}if(Prototype.BrowserFeatures.XPath){document._getElementsByXPath=function(f,a){var c=[];var e=document.evaluate(f,$(a)||document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);for(var b=0,d=e.snapshotLength;b<d;b++){c.push(Element.extend(e.snapshotItem(b)))}return c}}if(!window.Node){var Node={}}if(!Node.ELEMENT_NODE){Object.extend(Node,{ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,ENTITY_REFERENCE_NODE:5,ENTITY_NODE:6,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11,NOTATION_NODE:12})}(function(c){var b=(function(){var f=document.createElement("form");var e=document.createElement("input");var d=document.documentElement;e.setAttribute("name","test");f.appendChild(e);d.appendChild(f);var g=f.elements?(typeof f.elements.test=="undefined"):null;d.removeChild(f);f=e=null;return g})();var a=c.Element;c.Element=function(f,e){e=e||{};f=f.toLowerCase();var d=Element.cache;if(b&&e.name){f="<"+f+' name="'+e.name+'">';delete e.name;return Element.writeAttribute(document.createElement(f),e)}if(!d[f]){d[f]=Element.extend(document.createElement(f))}return Element.writeAttribute(d[f].cloneNode(false),e)};Object.extend(c.Element,a||{});if(a){c.Element.prototype=a.prototype}})(this);Element.cache={};Element.idCounter=1;Element.Methods={visible:function(a){return $(a).style.display!="none"},toggle:function(a){a=$(a);Element[Element.visible(a)?"hide":"show"](a);return a},hide:function(a){a=$(a);a.style.display="none";return a},show:function(a){a=$(a);a.style.display="";return a},remove:function(a){a=$(a);a.parentNode.removeChild(a);return a},update:(function(){var b=(function(){var e=document.createElement("select"),f=true;e.innerHTML='<option value="test">test</option>';if(e.options&&e.options[0]){f=e.options[0].nodeName.toUpperCase()!=="OPTION"}e=null;return f})();var a=(function(){try{var f=document.createElement("table");if(f&&f.tBodies){f.innerHTML="<tbody><tr><td>test</td></tr></tbody>";var h=typeof f.tBodies[0]=="undefined";f=null;return h}}catch(g){return true}})();var d=(function(){var f=document.createElement("script"),h=false;try{f.appendChild(document.createTextNode(""));h=!f.firstChild||f.firstChild&&f.firstChild.nodeType!==3}catch(g){h=true}f=null;return h})();function c(f,g){f=$(f);if(g&&g.toElement){g=g.toElement()}if(Object.isElement(g)){return f.update().insert(g)}g=Object.toHTML(g);var e=f.tagName.toUpperCase();if(e==="SCRIPT"&&d){f.text=g;return f}if(b||a){if(e in Element._insertionTranslations.tags){while(f.firstChild){f.removeChild(f.firstChild)}Element._getContentFromAnonymousElement(e,g.stripScripts()).each(function(h){f.appendChild(h)})}else{f.innerHTML=g.stripScripts()}}else{f.innerHTML=g.stripScripts()}g.evalScripts.bind(g).defer();return f}return c})(),replace:function(b,c){b=$(b);if(c&&c.toElement){c=c.toElement()}else{if(!Object.isElement(c)){c=Object.toHTML(c);var a=b.ownerDocument.createRange();a.selectNode(b);c.evalScripts.bind(c).defer();c=a.createContextualFragment(c.stripScripts())}}b.parentNode.replaceChild(c,b);return b},insert:function(c,e){c=$(c);if(Object.isString(e)||Object.isNumber(e)||Object.isElement(e)||(e&&(e.toElement||e.toHTML))){e={bottom:e}}var d,f,b,g;for(var a in e){d=e[a];a=a.toLowerCase();f=Element._insertionTranslations[a];if(d&&d.toElement){d=d.toElement()}if(Object.isElement(d)){f(c,d);continue}d=Object.toHTML(d);b=((a=="before"||a=="after")?c.parentNode:c).tagName.toUpperCase();g=Element._getContentFromAnonymousElement(b,d.stripScripts());if(a=="top"||a=="after"){g.reverse()}g.each(f.curry(c));d.evalScripts.bind(d).defer()}return c},wrap:function(b,c,a){b=$(b);if(Object.isElement(c)){$(c).writeAttribute(a||{})}else{if(Object.isString(c)){c=new Element(c,a)}else{c=new Element("div",c)}}if(b.parentNode){b.parentNode.replaceChild(c,b)}c.appendChild(b);return c},inspect:function(b){b=$(b);var a="<"+b.tagName.toLowerCase();$H({id:"id",className:"class"}).each(function(f){var e=f.first(),c=f.last();var d=(b[e]||"").toString();if(d){a+=" "+c+"="+d.inspect(true)}});return a+">"},recursivelyCollect:function(a,c){a=$(a);var b=[];while(a=a[c]){if(a.nodeType==1){b.push(Element.extend(a))}}return b},ancestors:function(a){return Element.recursivelyCollect(a,"parentNode")},descendants:function(a){return Element.select(a,"*")},firstDescendant:function(a){a=$(a).firstChild;while(a&&a.nodeType!=1){a=a.nextSibling}return $(a)},immediateDescendants:function(a){if(!(a=$(a).firstChild)){return[]}while(a&&a.nodeType!=1){a=a.nextSibling}if(a){return[a].concat($(a).nextSiblings())}return[]},previousSiblings:function(a){return Element.recursivelyCollect(a,"previousSibling")},nextSiblings:function(a){return Element.recursivelyCollect(a,"nextSibling")},siblings:function(a){a=$(a);return Element.previousSiblings(a).reverse().concat(Element.nextSiblings(a))},match:function(b,a){if(Object.isString(a)){a=new Selector(a)}return a.match($(b))},up:function(b,d,a){b=$(b);if(arguments.length==1){return $(b.parentNode)}var c=Element.ancestors(b);return Object.isNumber(d)?c[d]:Selector.findElement(c,d,a)},down:function(b,c,a){b=$(b);if(arguments.length==1){return Element.firstDescendant(b)}return Object.isNumber(c)?Element.descendants(b)[c]:Element.select(b,c)[a||0]},previous:function(b,d,a){b=$(b);if(arguments.length==1){return $(Selector.handlers.previousElementSibling(b))}var c=Element.previousSiblings(b);return Object.isNumber(d)?c[d]:Selector.findElement(c,d,a)},next:function(c,d,b){c=$(c);if(arguments.length==1){return $(Selector.handlers.nextElementSibling(c))}var a=Element.nextSiblings(c);return Object.isNumber(d)?a[d]:Selector.findElement(a,d,b)},select:function(b){var a=Array.prototype.slice.call(arguments,1);return Selector.findChildElements(b,a)},adjacent:function(b){var a=Array.prototype.slice.call(arguments,1);return Selector.findChildElements(b.parentNode,a).without(b)},identify:function(a){a=$(a);var b=Element.readAttribute(a,"id");if(b){return b}do{b="anonymous_element_"+Element.idCounter++}while($(b));Element.writeAttribute(a,"id",b);return b},readAttribute:function(c,a){c=$(c);if(Prototype.Browser.IE){var b=Element._attributeTranslations.read;if(b.values[a]){return b.values[a](c,a)}if(b.names[a]){a=b.names[a]}if(a.include(":")){return(!c.attributes||!c.attributes[a])?null:c.attributes[a].value}}return c.getAttribute(a)},writeAttribute:function(e,c,f){e=$(e);var b={},d=Element._attributeTranslations.write;if(typeof c=="object"){b=c}else{b[c]=Object.isUndefined(f)?true:f}for(var a in b){c=d.names[a]||a;f=b[a];if(d.values[a]){c=d.values[a](e,f)}if(f===false||f===null){e.removeAttribute(c)}else{if(f===true){e.setAttribute(c,c)}else{e.setAttribute(c,f)}}}return e},getHeight:function(a){return Element.getDimensions(a).height},getWidth:function(a){return Element.getDimensions(a).width},classNames:function(a){return new Element.ClassNames(a)},hasClassName:function(a,b){if(!(a=$(a))){return}var c=a.className;return(c.length>0&&(c==b||new RegExp("(^|\\s)"+b+"(\\s|$)").test(c)))},addClassName:function(a,b){if(!(a=$(a))){return}if(!Element.hasClassName(a,b)){a.className+=(a.className?" ":"")+b}return a},removeClassName:function(a,b){if(!(a=$(a))){return}a.className=a.className.replace(new RegExp("(^|\\s+)"+b+"(\\s+|$)")," ").strip();return a},toggleClassName:function(a,b){if(!(a=$(a))){return}return Element[Element.hasClassName(a,b)?"removeClassName":"addClassName"](a,b)},cleanWhitespace:function(b){b=$(b);var c=b.firstChild;while(c){var a=c.nextSibling;if(c.nodeType==3&&!/\S/.test(c.nodeValue)){b.removeChild(c)}c=a}return b},empty:function(a){return $(a).innerHTML.blank()},descendantOf:function(b,a){b=$(b),a=$(a);if(b.compareDocumentPosition){return(b.compareDocumentPosition(a)&8)===8}if(a.contains){return a.contains(b)&&a!==b}while(b=b.parentNode){if(b==a){return true}}return false},scrollTo:function(a){a=$(a);var b=Element.cumulativeOffset(a);window.scrollTo(b[0],b[1]);return a},getStyle:function(b,c){b=$(b);c=c=="float"?"cssFloat":c.camelize();var d=b.style[c];if(!d||d=="auto"){var a=document.defaultView.getComputedStyle(b,null);d=a?a[c]:null}if(c=="opacity"){return d?parseFloat(d):1}return d=="auto"?null:d},getOpacity:function(a){return $(a).getStyle("opacity")},setStyle:function(b,c){b=$(b);var e=b.style,a;if(Object.isString(c)){b.style.cssText+=";"+c;return c.include("opacity")?b.setOpacity(c.match(/opacity:\s*(\d?\.?\d*)/)[1]):b}for(var d in c){if(d=="opacity"){b.setOpacity(c[d])}else{e[(d=="float"||d=="cssFloat")?(Object.isUndefined(e.styleFloat)?"cssFloat":"styleFloat"):d]=c[d]}}return b},setOpacity:function(a,b){a=$(a);a.style.opacity=(b==1||b==="")?"":(b<0.00001)?0:b;return a},getDimensions:function(c){c=$(c);var g=Element.getStyle(c,"display");if(g!="none"&&g!=null){return{width:c.offsetWidth,height:c.offsetHeight}}var b=c.style;var f=b.visibility;var d=b.position;var a=b.display;b.visibility="hidden";if(d!="fixed"){b.position="absolute"}b.display="block";var h=c.clientWidth;var e=c.clientHeight;b.display=a;b.position=d;b.visibility=f;return{width:h,height:e}},makePositioned:function(a){a=$(a);var b=Element.getStyle(a,"position");if(b=="static"||!b){a._madePositioned=true;a.style.position="relative";if(Prototype.Browser.Opera){a.style.top=0;a.style.left=0}}return a},undoPositioned:function(a){a=$(a);if(a._madePositioned){a._madePositioned=undefined;a.style.position=a.style.top=a.style.left=a.style.bottom=a.style.right=""}return a},makeClipping:function(a){a=$(a);if(a._overflow){return a}a._overflow=Element.getStyle(a,"overflow")||"auto";if(a._overflow!=="hidden"){a.style.overflow="hidden"}return a},undoClipping:function(a){a=$(a);if(!a._overflow){return a}a.style.overflow=a._overflow=="auto"?"":a._overflow;a._overflow=null;return a},cumulativeOffset:function(b){var a=0,c=0;do{a+=b.offsetTop||0;c+=b.offsetLeft||0;b=b.offsetParent}while(b);return Element._returnOffset(c,a)},positionedOffset:function(b){var a=0,d=0;do{a+=b.offsetTop||0;d+=b.offsetLeft||0;b=b.offsetParent;if(b){if(b.tagName.toUpperCase()=="BODY"){break}var c=Element.getStyle(b,"position");if(c!=="static"){break}}}while(b);return Element._returnOffset(d,a)},absolutize:function(b){b=$(b);if(Element.getStyle(b,"position")=="absolute"){return b}var d=Element.positionedOffset(b);var f=d[1];var e=d[0];var c=b.clientWidth;var a=b.clientHeight;b._originalLeft=e-parseFloat(b.style.left||0);b._originalTop=f-parseFloat(b.style.top||0);b._originalWidth=b.style.width;b._originalHeight=b.style.height;b.style.position="absolute";b.style.top=f+"px";b.style.left=e+"px";b.style.width=c+"px";b.style.height=a+"px";return b},relativize:function(a){a=$(a);if(Element.getStyle(a,"position")=="relative"){return a}a.style.position="relative";var c=parseFloat(a.style.top||0)-(a._originalTop||0);var b=parseFloat(a.style.left||0)-(a._originalLeft||0);a.style.top=c+"px";a.style.left=b+"px";a.style.height=a._originalHeight;a.style.width=a._originalWidth;return a},cumulativeScrollOffset:function(b){var a=0,c=0;do{a+=b.scrollTop||0;c+=b.scrollLeft||0;b=b.parentNode}while(b);return Element._returnOffset(c,a)},getOffsetParent:function(a){if(a.offsetParent){return $(a.offsetParent)}if(a==document.body){return $(a)}while((a=a.parentNode)&&a!=document.body){if(Element.getStyle(a,"position")!="static"){return $(a)}}return $(document.body)},viewportOffset:function(d){var a=0,c=0;var b=d;do{a+=b.offsetTop||0;c+=b.offsetLeft||0;if(b.offsetParent==document.body&&Element.getStyle(b,"position")=="absolute"){break}}while(b=b.offsetParent);b=d;do{if(!Prototype.Browser.Opera||(b.tagName&&(b.tagName.toUpperCase()=="BODY"))){a-=b.scrollTop||0;c-=b.scrollLeft||0}}while(b=b.parentNode);return Element._returnOffset(c,a)},clonePosition:function(b,d){var a=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},arguments[2]||{});d=$(d);var e=Element.viewportOffset(d);b=$(b);var f=[0,0];var c=null;if(Element.getStyle(b,"position")=="absolute"){c=Element.getOffsetParent(b);f=Element.viewportOffset(c)}if(c==document.body){f[0]-=document.body.offsetLeft;f[1]-=document.body.offsetTop}if(a.setLeft){b.style.left=(e[0]-f[0]+a.offsetLeft)+"px"}if(a.setTop){b.style.top=(e[1]-f[1]+a.offsetTop)+"px"}if(a.setWidth){b.style.width=d.offsetWidth+"px"}if(a.setHeight){b.style.height=d.offsetHeight+"px"}return b}};Object.extend(Element.Methods,{getElementsBySelector:Element.Methods.select,childElements:Element.Methods.immediateDescendants});Element._attributeTranslations={write:{names:{className:"class",htmlFor:"for"},values:{}}};if(Prototype.Browser.Opera){Element.Methods.getStyle=Element.Methods.getStyle.wrap(function(d,b,c){switch(c){case"left":case"top":case"right":case"bottom":if(d(b,"position")==="static"){return null}case"height":case"width":if(!Element.visible(b)){return null}var e=parseInt(d(b,c),10);if(e!==b["offset"+c.capitalize()]){return e+"px"}var a;if(c==="height"){a=["border-top-width","padding-top","padding-bottom","border-bottom-width"]}else{a=["border-left-width","padding-left","padding-right","border-right-width"]}return a.inject(e,function(f,g){var h=d(b,g);return h===null?f:f-parseInt(h,10)})+"px";default:return d(b,c)}});Element.Methods.readAttribute=Element.Methods.readAttribute.wrap(function(c,a,b){if(b==="title"){return a.title}return c(a,b)})}else{if(Prototype.Browser.IE){Element.Methods.getOffsetParent=Element.Methods.getOffsetParent.wrap(function(c,b){b=$(b);try{b.offsetParent}catch(f){return $(document.body)}var a=b.getStyle("position");if(a!=="static"){return c(b)}b.setStyle({position:"relative"});var d=c(b);b.setStyle({position:a});return d});$w("positionedOffset viewportOffset").each(function(a){Element.Methods[a]=Element.Methods[a].wrap(function(f,c){c=$(c);try{c.offsetParent}catch(h){return Element._returnOffset(0,0)}var b=c.getStyle("position");if(b!=="static"){return f(c)}var d=c.getOffsetParent();if(d&&d.getStyle("position")==="fixed"){d.setStyle({zoom:1})}c.setStyle({position:"relative"});var g=f(c);c.setStyle({position:b});return g})});Element.Methods.cumulativeOffset=Element.Methods.cumulativeOffset.wrap(function(b,a){try{a.offsetParent}catch(c){return Element._returnOffset(0,0)}return b(a)});Element.Methods.getStyle=function(a,b){a=$(a);b=(b=="float"||b=="cssFloat")?"styleFloat":b.camelize();var c=a.style[b];if(!c&&a.currentStyle){c=a.currentStyle[b]}if(b=="opacity"){if(c=(a.getStyle("filter")||"").match(/alpha\(opacity=(.*)\)/)){if(c[1]){return parseFloat(c[1])/100}}return 1}if(c=="auto"){if((b=="width"||b=="height")&&(a.getStyle("display")!="none")){return a["offset"+b.capitalize()]+"px"}return null}return c};Element.Methods.setOpacity=function(b,e){function f(g){return g.replace(/alpha\([^\)]*\)/gi,"")}b=$(b);var a=b.currentStyle;if((a&&!a.hasLayout)||(!a&&b.style.zoom=="normal")){b.style.zoom=1}var d=b.getStyle("filter"),c=b.style;if(e==1||e===""){(d=f(d))?c.filter=d:c.removeAttribute("filter");return b}else{if(e<0.00001){e=0}}c.filter=f(d)+"alpha(opacity="+(e*100)+")";return b};Element._attributeTranslations=(function(){var b="className";var a="for";var c=document.createElement("div");c.setAttribute(b,"x");if(c.className!=="x"){c.setAttribute("class","x");if(c.className==="x"){b="class"}}c=null;c=document.createElement("label");c.setAttribute(a,"x");if(c.htmlFor!=="x"){c.setAttribute("htmlFor","x");if(c.htmlFor==="x"){a="htmlFor"}}c=null;return{read:{names:{"class":b,className:b,"for":a,htmlFor:a},values:{_getAttr:function(d,e){return d.getAttribute(e)},_getAttr2:function(d,e){return d.getAttribute(e,2)},_getAttrNode:function(d,f){var e=d.getAttributeNode(f);return e?e.value:""},_getEv:(function(){var d=document.createElement("div");d.onclick=Prototype.emptyFunction;var g=d.getAttribute("onclick");var e;if(String(g).indexOf("{")>-1){e=function(f,h){h=f.getAttribute(h);if(!h){return null}h=h.toString();h=h.split("{")[1];h=h.split("}")[0];return h.strip()}}else{if(g===""){e=function(f,h){h=f.getAttribute(h);if(!h){return null}return h.strip()}}}d=null;return e})(),_flag:function(d,e){return $(d).hasAttribute(e)?e:null},style:function(d){return d.style.cssText.toLowerCase()},title:function(d){return d.title}}}}})();Element._attributeTranslations.write={names:Object.extend({cellpadding:"cellPadding",cellspacing:"cellSpacing"},Element._attributeTranslations.read.names),values:{checked:function(a,b){a.checked=!!b},style:function(a,b){a.style.cssText=b?b:""}}};Element._attributeTranslations.has={};$w("colSpan rowSpan vAlign dateTime accessKey tabIndex encType maxLength readOnly longDesc frameBorder").each(function(a){Element._attributeTranslations.write.names[a.toLowerCase()]=a;Element._attributeTranslations.has[a.toLowerCase()]=a});(function(a){Object.extend(a,{href:a._getAttr2,src:a._getAttr2,type:a._getAttr,action:a._getAttrNode,disabled:a._flag,checked:a._flag,readonly:a._flag,multiple:a._flag,onload:a._getEv,onunload:a._getEv,onclick:a._getEv,ondblclick:a._getEv,onmousedown:a._getEv,onmouseup:a._getEv,onmouseover:a._getEv,onmousemove:a._getEv,onmouseout:a._getEv,onfocus:a._getEv,onblur:a._getEv,onkeypress:a._getEv,onkeydown:a._getEv,onkeyup:a._getEv,onsubmit:a._getEv,onreset:a._getEv,onselect:a._getEv,onchange:a._getEv})})(Element._attributeTranslations.read.values);if(Prototype.BrowserFeatures.ElementExtensions){(function(){function a(e){var b=e.getElementsByTagName("*"),d=[];for(var c=0,f;f=b[c];c++){if(f.tagName!=="!"){d.push(f)}}return d}Element.Methods.down=function(c,d,b){c=$(c);if(arguments.length==1){return c.firstDescendant()}return Object.isNumber(d)?a(c)[d]:Element.select(c,d)[b||0]}})()}}else{if(Prototype.Browser.Gecko&&/rv:1\.8\.0/.test(navigator.userAgent)){Element.Methods.setOpacity=function(a,b){a=$(a);a.style.opacity=(b==1)?0.999999:(b==="")?"":(b<0.00001)?0:b;return a}}else{if(Prototype.Browser.WebKit){Element.Methods.setOpacity=function(a,b){a=$(a);a.style.opacity=(b==1||b==="")?"":(b<0.00001)?0:b;if(b==1){if(a.tagName.toUpperCase()=="IMG"&&a.width){a.width++;a.width--}else{try{var d=document.createTextNode(" ");a.appendChild(d);a.removeChild(d)}catch(c){}}}return a};Element.Methods.cumulativeOffset=function(b){var a=0,c=0;do{a+=b.offsetTop||0;c+=b.offsetLeft||0;if(b.offsetParent==document.body){if(Element.getStyle(b,"position")=="absolute"){break}}b=b.offsetParent}while(b);return Element._returnOffset(c,a)}}}}}if("outerHTML" in document.documentElement){Element.Methods.replace=function(c,e){c=$(c);if(e&&e.toElement){e=e.toElement()}if(Object.isElement(e)){c.parentNode.replaceChild(e,c);return c}e=Object.toHTML(e);var d=c.parentNode,b=d.tagName.toUpperCase();if(Element._insertionTranslations.tags[b]){var f=c.next();var a=Element._getContentFromAnonymousElement(b,e.stripScripts());d.removeChild(c);if(f){a.each(function(g){d.insertBefore(g,f)})}else{a.each(function(g){d.appendChild(g)})}}else{c.outerHTML=e.stripScripts()}e.evalScripts.bind(e).defer();return c}}Element._returnOffset=function(b,c){var a=[b,c];a.left=b;a.top=c;return a};Element._getContentFromAnonymousElement=function(c,b){var d=new Element("div"),a=Element._insertionTranslations.tags[c];if(a){d.innerHTML=a[0]+b+a[1];a[2].times(function(){d=d.firstChild})}else{d.innerHTML=b}return $A(d.childNodes)};Element._insertionTranslations={before:function(a,b){a.parentNode.insertBefore(b,a)},top:function(a,b){a.insertBefore(b,a.firstChild)},bottom:function(a,b){a.appendChild(b)},after:function(a,b){a.parentNode.insertBefore(b,a.nextSibling)},tags:{TABLE:["<table>","</table>",1],TBODY:["<table><tbody>","</tbody></table>",2],TR:["<table><tbody><tr>","</tr></tbody></table>",3],TD:["<table><tbody><tr><td>","</td></tr></tbody></table>",4],SELECT:["<select>","</select>",1]}};(function(){var a=Element._insertionTranslations.tags;Object.extend(a,{THEAD:a.TBODY,TFOOT:a.TBODY,TH:a.TD})})();Element.Methods.Simulated={hasAttribute:function(a,c){c=Element._attributeTranslations.has[c]||c;var b=$(a).getAttributeNode(c);return !!(b&&b.specified)}};Element.Methods.ByTag={};Object.extend(Element,Element.Methods);(function(a){if(!Prototype.BrowserFeatures.ElementExtensions&&a.__proto__){window.HTMLElement={};window.HTMLElement.prototype=a.__proto__;Prototype.BrowserFeatures.ElementExtensions=true}a=null})(document.createElement("div"));Element.extend=(function(){function c(g){if(typeof window.Element!="undefined"){var i=window.Element.prototype;if(i){var k="_"+(Math.random()+"").slice(2);var h=document.createElement(g);i[k]="x";var j=(h[k]!=="x");delete i[k];h=null;return j}}return false}function b(h,g){for(var j in g){var i=g[j];if(Object.isFunction(i)&&!(j in h)){h[j]=i.methodize()}}}var d=c("object");if(Prototype.BrowserFeatures.SpecificElementExtensions){if(d){return function(h){if(h&&typeof h._extendedByPrototype=="undefined"){var g=h.tagName;if(g&&(/^(?:object|applet|embed)$/i.test(g))){b(h,Element.Methods);b(h,Element.Methods.Simulated);b(h,Element.Methods.ByTag[g.toUpperCase()])}}return h}}return Prototype.K}var a={},e=Element.Methods.ByTag;var f=Object.extend(function(i){if(!i||typeof i._extendedByPrototype!="undefined"||i.nodeType!=1||i==window){return i}var g=Object.clone(a),h=i.tagName.toUpperCase();if(e[h]){Object.extend(g,e[h])}b(i,g);i._extendedByPrototype=Prototype.emptyFunction;return i},{refresh:function(){if(!Prototype.BrowserFeatures.ElementExtensions){Object.extend(a,Element.Methods);Object.extend(a,Element.Methods.Simulated)}}});f.refresh();return f})();Element.hasAttribute=function(a,b){if(a.hasAttribute){return a.hasAttribute(b)}return Element.Methods.Simulated.hasAttribute(a,b)};Element.addMethods=function(c){var i=Prototype.BrowserFeatures,d=Element.Methods.ByTag;if(!c){Object.extend(Form,Form.Methods);Object.extend(Form.Element,Form.Element.Methods);Object.extend(Element.Methods.ByTag,{FORM:Object.clone(Form.Methods),INPUT:Object.clone(Form.Element.Methods),SELECT:Object.clone(Form.Element.Methods),TEXTAREA:Object.clone(Form.Element.Methods)})}if(arguments.length==2){var b=c;c=arguments[1]}if(!b){Object.extend(Element.Methods,c||{})}else{if(Object.isArray(b)){b.each(g)}else{g(b)}}function g(k){k=k.toUpperCase();if(!Element.Methods.ByTag[k]){Element.Methods.ByTag[k]={}}Object.extend(Element.Methods.ByTag[k],c)}function a(m,l,k){k=k||false;for(var o in m){var n=m[o];if(!Object.isFunction(n)){continue}if(!k||!(o in l)){l[o]=n.methodize()}}}function e(n){var k;var m={OPTGROUP:"OptGroup",TEXTAREA:"TextArea",P:"Paragraph",FIELDSET:"FieldSet",UL:"UList",OL:"OList",DL:"DList",DIR:"Directory",H1:"Heading",H2:"Heading",H3:"Heading",H4:"Heading",H5:"Heading",H6:"Heading",Q:"Quote",INS:"Mod",DEL:"Mod",A:"Anchor",IMG:"Image",CAPTION:"TableCaption",COL:"TableCol",COLGROUP:"TableCol",THEAD:"TableSection",TFOOT:"TableSection",TBODY:"TableSection",TR:"TableRow",TH:"TableCell",TD:"TableCell",FRAMESET:"FrameSet",IFRAME:"IFrame"};if(m[n]){k="HTML"+m[n]+"Element"}if(window[k]){return window[k]}k="HTML"+n+"Element";if(window[k]){return window[k]}k="HTML"+n.capitalize()+"Element";if(window[k]){return window[k]}var l=document.createElement(n);var o=l.__proto__||l.constructor.prototype;l=null;return o}var h=window.HTMLElement?HTMLElement.prototype:Element.prototype;if(i.ElementExtensions){a(Element.Methods,h);a(Element.Methods.Simulated,h,true)}if(i.SpecificElementExtensions){for(var j in Element.Methods.ByTag){var f=e(j);if(Object.isUndefined(f)){continue}a(d[j],f.prototype)}}Object.extend(Element,Element.Methods);delete Element.ByTag;if(Element.extend.refresh){Element.extend.refresh()}Element.cache={}};document.viewport={getDimensions:function(){return{width:this.getWidth(),height:this.getHeight()}},getScrollOffsets:function(){return Element._returnOffset(window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft,window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop)}};(function(b){var g=Prototype.Browser,e=document,c,d={};function a(){if(g.WebKit&&!e.evaluate){return document}if(g.Opera&&window.parseFloat(window.opera.version())<9.5){return document.body}return document.documentElement}function f(h){if(!c){c=a()}d[h]="client"+h;b["get"+h]=function(){return c[d[h]]};return b["get"+h]()}b.getWidth=f.curry("Width");b.getHeight=f.curry("Height")})(document.viewport);Element.Storage={UID:1};Element.addMethods({getStorage:function(b){if(!(b=$(b))){return}var a;if(b===window){a=0}else{if(typeof b._prototypeUID==="undefined"){b._prototypeUID=[Element.Storage.UID++]}a=b._prototypeUID[0]}if(!Element.Storage[a]){Element.Storage[a]=$H()}return Element.Storage[a]},store:function(b,a,c){if(!(b=$(b))){return}if(arguments.length===2){Element.getStorage(b).update(a)}else{Element.getStorage(b).set(a,c)}return b},retrieve:function(c,b,a){if(!(c=$(c))){return}var e=Element.getStorage(c),d=e.get(b);if(Object.isUndefined(d)){e.set(b,a);d=a}return d},clone:function(c,a){if(!(c=$(c))){return}var e=c.cloneNode(a);e._prototypeUID=void 0;if(a){var d=Element.select(e,"*"),b=d.length;while(b--){d[b]._prototypeUID=void 0}}return Element.extend(e)}});var Selector=Class.create({initialize:function(a){this.expression=a.strip();if(this.shouldUseSelectorsAPI()){this.mode="selectorsAPI"}else{if(this.shouldUseXPath()){this.mode="xpath";this.compileXPathMatcher()}else{this.mode="normal";this.compileMatcher()}}},shouldUseXPath:(function(){var a=(function(){var e=false;if(document.evaluate&&window.XPathResult){var d=document.createElement("div");d.innerHTML="<ul><li></li></ul><div><ul><li></li></ul></div>";var c=".//*[local-name()='ul' or local-name()='UL']//*[local-name()='li' or local-name()='LI']";var b=document.evaluate(c,d,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);e=(b.snapshotLength!==2);d=null}return e})();return function(){if(!Prototype.BrowserFeatures.XPath){return false}var b=this.expression;if(Prototype.Browser.WebKit&&(b.include("-of-type")||b.include(":empty"))){return false}if((/(\[[\w-]*?:|:checked)/).test(b)){return false}if(a){return false}return true}})(),shouldUseSelectorsAPI:function(){if(!Prototype.BrowserFeatures.SelectorsAPI){return false}if(Selector.CASE_INSENSITIVE_CLASS_NAMES){return false}if(!Selector._div){Selector._div=new Element("div")}try{Selector._div.querySelector(this.expression)}catch(a){return false}return true},compileMatcher:function(){var e=this.expression,ps=Selector.patterns,h=Selector.handlers,c=Selector.criteria,le,p,m,len=ps.length,name;if(Selector._cache[e]){this.matcher=Selector._cache[e];return}this.matcher=["this.matcher = function(root) {","var r = root, h = Selector.handlers, c = false, n;"];while(e&&le!=e&&(/\S/).test(e)){le=e;for(var i=0;i<len;i++){p=ps[i].re;name=ps[i].name;if(m=e.match(p)){this.matcher.push(Object.isFunction(c[name])?c[name](m):new Template(c[name]).evaluate(m));e=e.replace(m[0],"");break}}}this.matcher.push("return h.unique(n);\n}");eval(this.matcher.join("\n"));Selector._cache[this.expression]=this.matcher},compileXPathMatcher:function(){var h=this.expression,j=Selector.patterns,c=Selector.xpath,g,b,a=j.length,d;if(Selector._cache[h]){this.xpath=Selector._cache[h];return}this.matcher=[".//*"];while(h&&g!=h&&(/\S/).test(h)){g=h;for(var f=0;f<a;f++){d=j[f].name;if(b=h.match(j[f].re)){this.matcher.push(Object.isFunction(c[d])?c[d](b):new Template(c[d]).evaluate(b));h=h.replace(b[0],"");break}}}this.xpath=this.matcher.join("");Selector._cache[this.expression]=this.xpath},findElements:function(a){a=a||document;var c=this.expression,b;switch(this.mode){case"selectorsAPI":if(a!==document){var d=a.id,f=$(a).identify();f=f.replace(/([\.:])/g,"\\$1");c="#"+f+" "+c}b=$A(a.querySelectorAll(c)).map(Element.extend);a.id=d;return b;case"xpath":return document._getElementsByXPath(this.xpath,a);default:return this.matcher(a)}},match:function(k){this.tokens=[];var q=this.expression,a=Selector.patterns,f=Selector.assertions;var b,d,g,o=a.length,c;while(q&&b!==q&&(/\S/).test(q)){b=q;for(var j=0;j<o;j++){d=a[j].re;c=a[j].name;if(g=q.match(d)){if(f[c]){this.tokens.push([c,Object.clone(g)]);q=q.replace(g[0],"")}else{return this.findElements(document).include(k)}}}}var n=true,c,l;for(var j=0,h;h=this.tokens[j];j++){c=h[0],l=h[1];if(!Selector.assertions[c](k,l)){n=false;break}}return n},toString:function(){return this.expression},inspect:function(){return"#<Selector:"+this.expression.inspect()+">"}});if(Prototype.BrowserFeatures.SelectorsAPI&&document.compatMode==="BackCompat"){Selector.CASE_INSENSITIVE_CLASS_NAMES=(function(){var c=document.createElement("div"),a=document.createElement("span");c.id="prototype_test_id";a.className="Test";c.appendChild(a);var b=(c.querySelector("#prototype_test_id .test")!==null);c=a=null;return b})()}Object.extend(Selector,{_cache:{},xpath:{descendant:"//*",child:"/*",adjacent:"/following-sibling::*[1]",laterSibling:"/following-sibling::*",tagName:function(a){if(a[1]=="*"){return""}return"[local-name()='"+a[1].toLowerCase()+"' or local-name()='"+a[1].toUpperCase()+"']"},className:"[contains(concat(' ', @class, ' '), ' #{1} ')]",id:"[@id='#{1}']",attrPresence:function(a){a[1]=a[1].toLowerCase();return new Template("[@#{1}]").evaluate(a)},attr:function(a){a[1]=a[1].toLowerCase();a[3]=a[5]||a[6];return new Template(Selector.xpath.operators[a[2]]).evaluate(a)},pseudo:function(a){var b=Selector.xpath.pseudos[a[1]];if(!b){return""}if(Object.isFunction(b)){return b(a)}return new Template(Selector.xpath.pseudos[a[1]]).evaluate(a)},operators:{"=":"[@#{1}='#{3}']","!=":"[@#{1}!='#{3}']","^=":"[starts-with(@#{1}, '#{3}')]","$=":"[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']","*=":"[contains(@#{1}, '#{3}')]","~=":"[contains(concat(' ', @#{1}, ' '), ' #{3} ')]","|=":"[contains(concat('-', @#{1}, '-'), '-#{3}-')]"},pseudos:{"first-child":"[not(preceding-sibling::*)]","last-child":"[not(following-sibling::*)]","only-child":"[not(preceding-sibling::* or following-sibling::*)]",empty:"[count(*) = 0 and (count(text()) = 0)]",checked:"[@checked]",disabled:"[(@disabled) and (@type!='hidden')]",enabled:"[not(@disabled) and (@type!='hidden')]",not:function(f){var j=f[6],c=Selector.patterns,k=Selector.xpath,a,l,h=c.length,b;var d=[];while(j&&a!=j&&(/\S/).test(j)){a=j;for(var g=0;g<h;g++){b=c[g].name;if(f=j.match(c[g].re)){l=Object.isFunction(k[b])?k[b](f):new Template(k[b]).evaluate(f);d.push("("+l.substring(1,l.length-1)+")");j=j.replace(f[0],"");break}}}return"[not("+d.join(" and ")+")]"},"nth-child":function(a){return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ",a)},"nth-last-child":function(a){return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ",a)},"nth-of-type":function(a){return Selector.xpath.pseudos.nth("position() ",a)},"nth-last-of-type":function(a){return Selector.xpath.pseudos.nth("(last() + 1 - position()) ",a)},"first-of-type":function(a){a[6]="1";return Selector.xpath.pseudos["nth-of-type"](a)},"last-of-type":function(a){a[6]="1";return Selector.xpath.pseudos["nth-last-of-type"](a)},"only-of-type":function(a){var b=Selector.xpath.pseudos;return b["first-of-type"](a)+b["last-of-type"](a)},nth:function(g,e){var h,i=e[6],d;if(i=="even"){i="2n+0"}if(i=="odd"){i="2n+1"}if(h=i.match(/^(\d+)$/)){return"["+g+"= "+h[1]+"]"}if(h=i.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(h[1]=="-"){h[1]=-1}var f=h[1]?Number(h[1]):1;var c=h[2]?Number(h[2]):0;d="[((#{fragment} - #{b}) mod #{a} = 0) and ((#{fragment} - #{b}) div #{a} >= 0)]";return new Template(d).evaluate({fragment:g,a:f,b:c})}}}},criteria:{tagName:'n = h.tagName(n, r, "#{1}", c);      c = false;',className:'n = h.className(n, r, "#{1}", c);    c = false;',id:'n = h.id(n, r, "#{1}", c);           c = false;',attrPresence:'n = h.attrPresence(n, r, "#{1}", c); c = false;',attr:function(a){a[3]=(a[5]||a[6]);return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(a)},pseudo:function(a){if(a[6]){a[6]=a[6].replace(/"/g,'\\"')}return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(a)},descendant:'c = "descendant";',child:'c = "child";',adjacent:'c = "adjacent";',laterSibling:'c = "laterSibling";'},patterns:[{name:"laterSibling",re:/^\s*~\s*/},{name:"child",re:/^\s*>\s*/},{name:"adjacent",re:/^\s*\+\s*/},{name:"descendant",re:/^\s/},{name:"tagName",re:/^\s*(\*|[\w\-]+)(\b|$)?/},{name:"id",re:/^#([\w\-\*]+)(\b|$)/},{name:"className",re:/^\.([\w\-\*]+)(\b|$)/},{name:"pseudo",re:/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/},{name:"attrPresence",re:/^\[((?:[\w-]+:)?[\w-]+)\]/},{name:"attr",re:/\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/}],assertions:{tagName:function(a,b){return b[1].toUpperCase()==a.tagName.toUpperCase()},className:function(a,b){return Element.hasClassName(a,b[1])},id:function(a,b){return a.id===b[1]},attrPresence:function(a,b){return Element.hasAttribute(a,b[1])},attr:function(b,c){var a=Element.readAttribute(b,c[1]);return a&&Selector.operators[c[2]](a,c[5]||c[6])}},handlers:{concat:function(d,c){for(var e=0,f;f=c[e];e++){d.push(f)}return d},mark:function(a){var d=Prototype.emptyFunction;for(var b=0,c;c=a[b];b++){c._countedByPrototype=d}return a},unmark:(function(){var a=(function(){var b=document.createElement("div"),e=false,d="_countedByPrototype",c="x";b[d]=c;e=(b.getAttribute(d)===c);b=null;return e})();return a?function(b){for(var c=0,d;d=b[c];c++){d.removeAttribute("_countedByPrototype")}return b}:function(b){for(var c=0,d;d=b[c];c++){d._countedByPrototype=void 0}return b}})(),index:function(a,d,g){a._countedByPrototype=Prototype.emptyFunction;if(d){for(var b=a.childNodes,e=b.length-1,c=1;e>=0;e--){var f=b[e];if(f.nodeType==1&&(!g||f._countedByPrototype)){f.nodeIndex=c++}}}else{for(var e=0,c=1,b=a.childNodes;f=b[e];e++){if(f.nodeType==1&&(!g||f._countedByPrototype)){f.nodeIndex=c++}}}},unique:function(b){if(b.length==0){return b}var d=[],e;for(var c=0,a=b.length;c<a;c++){if(typeof(e=b[c])._countedByPrototype=="undefined"){e._countedByPrototype=Prototype.emptyFunction;d.push(Element.extend(e))}}return Selector.handlers.unmark(d)},descendant:function(a){var d=Selector.handlers;for(var c=0,b=[],e;e=a[c];c++){d.concat(b,e.getElementsByTagName("*"))}return b},child:function(a){var e=Selector.handlers;for(var d=0,c=[],f;f=a[d];d++){for(var b=0,g;g=f.childNodes[b];b++){if(g.nodeType==1&&g.tagName!="!"){c.push(g)}}}return c},adjacent:function(a){for(var c=0,b=[],e;e=a[c];c++){var d=this.nextElementSibling(e);if(d){b.push(d)}}return b},laterSibling:function(a){var d=Selector.handlers;for(var c=0,b=[],e;e=a[c];c++){d.concat(b,Element.nextSiblings(e))}return b},nextElementSibling:function(a){while(a=a.nextSibling){if(a.nodeType==1){return a}}return null},previousElementSibling:function(a){while(a=a.previousSibling){if(a.nodeType==1){return a}}return null},tagName:function(a,j,c,b){var k=c.toUpperCase();var e=[],g=Selector.handlers;if(a){if(b){if(b=="descendant"){for(var f=0,d;d=a[f];f++){g.concat(e,d.getElementsByTagName(c))}return e}else{a=this[b](a)}if(c=="*"){return a}}for(var f=0,d;d=a[f];f++){if(d.tagName.toUpperCase()===k){e.push(d)}}return e}else{return j.getElementsByTagName(c)}},id:function(a,l,b,c){var k=$(b),g=Selector.handlers;if(l==document){if(!k){return[]}if(!a){return[k]}}else{if(!l.sourceIndex||l.sourceIndex<1){var a=l.getElementsByTagName("*");for(var e=0,d;d=a[e];e++){if(d.id===b){return[d]}}}}if(a){if(c){if(c=="child"){for(var f=0,d;d=a[f];f++){if(k.parentNode==d){return[k]}}}else{if(c=="descendant"){for(var f=0,d;d=a[f];f++){if(Element.descendantOf(k,d)){return[k]}}}else{if(c=="adjacent"){for(var f=0,d;d=a[f];f++){if(Selector.handlers.previousElementSibling(k)==d){return[k]}}}else{a=g[c](a)}}}}for(var f=0,d;d=a[f];f++){if(d==k){return[k]}}return[]}return(k&&Element.descendantOf(k,l))?[k]:[]},className:function(b,a,c,d){if(b&&d){b=this[d](b)}return Selector.handlers.byClassName(b,a,c)},byClassName:function(c,b,f){if(!c){c=Selector.handlers.descendant([b])}var h=" "+f+" ";for(var e=0,d=[],g,a;g=c[e];e++){a=g.className;if(a.length==0){continue}if(a==f||(" "+a+" ").include(h)){d.push(g)}}return d},attrPresence:function(c,b,a,g){if(!c){c=b.getElementsByTagName("*")}if(c&&g){c=this[g](c)}var e=[];for(var d=0,f;f=c[d];d++){if(Element.hasAttribute(f,a)){e.push(f)}}return e},attr:function(a,j,h,k,c,b){if(!a){a=j.getElementsByTagName("*")}if(a&&b){a=this[b](a)}var l=Selector.operators[c],f=[];for(var e=0,d;d=a[e];e++){var g=Element.readAttribute(d,h);if(g===null){continue}if(l(g,k)){f.push(d)}}return f},pseudo:function(b,c,e,a,d){if(b&&d){b=this[d](b)}if(!b){b=a.getElementsByTagName("*")}return Selector.pseudos[c](b,e,a)}},pseudos:{"first-child":function(b,f,a){for(var d=0,c=[],e;e=b[d];d++){if(Selector.handlers.previousElementSibling(e)){continue}c.push(e)}return c},"last-child":function(b,f,a){for(var d=0,c=[],e;e=b[d];d++){if(Selector.handlers.nextElementSibling(e)){continue}c.push(e)}return c},"only-child":function(b,g,a){var e=Selector.handlers;for(var d=0,c=[],f;f=b[d];d++){if(!e.previousElementSibling(f)&&!e.nextElementSibling(f)){c.push(f)}}return c},"nth-child":function(b,c,a){return Selector.pseudos.nth(b,c,a)},"nth-last-child":function(b,c,a){return Selector.pseudos.nth(b,c,a,true)},"nth-of-type":function(b,c,a){return Selector.pseudos.nth(b,c,a,false,true)},"nth-last-of-type":function(b,c,a){return Selector.pseudos.nth(b,c,a,true,true)},"first-of-type":function(b,c,a){return Selector.pseudos.nth(b,"1",a,false,true)},"last-of-type":function(b,c,a){return Selector.pseudos.nth(b,"1",a,true,true)},"only-of-type":function(b,d,a){var c=Selector.pseudos;return c["last-of-type"](c["first-of-type"](b,d,a),d,a)},getIndices:function(d,c,e){if(d==0){return c>0?[c]:[]}return $R(1,e).inject([],function(a,b){if(0==(b-c)%d&&(b-c)/d>=0){a.push(b)}return a})},nth:function(c,s,u,r,e){if(c.length==0){return[]}if(s=="even"){s="2n+0"}if(s=="odd"){s="2n+1"}var q=Selector.handlers,p=[],d=[],g;q.mark(c);for(var o=0,f;f=c[o];o++){if(!f.parentNode._countedByPrototype){q.index(f.parentNode,r,e);d.push(f.parentNode)}}if(s.match(/^\d+$/)){s=Number(s);for(var o=0,f;f=c[o];o++){if(f.nodeIndex==s){p.push(f)}}}else{if(g=s.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(g[1]=="-"){g[1]=-1}var v=g[1]?Number(g[1]):1;var t=g[2]?Number(g[2]):0;var w=Selector.pseudos.getIndices(v,t,c.length);for(var o=0,f,k=w.length;f=c[o];o++){for(var n=0;n<k;n++){if(f.nodeIndex==w[n]){p.push(f)}}}}}q.unmark(c);q.unmark(d);return p},empty:function(b,f,a){for(var d=0,c=[],e;e=b[d];d++){if(e.tagName=="!"||e.firstChild){continue}c.push(e)}return c},not:function(a,d,k){var g=Selector.handlers,l,c;var j=new Selector(d).findElements(k);g.mark(j);for(var f=0,e=[],b;b=a[f];f++){if(!b._countedByPrototype){e.push(b)}}g.unmark(j);return e},enabled:function(b,f,a){for(var d=0,c=[],e;e=b[d];d++){if(!e.disabled&&(!e.type||e.type!=="hidden")){c.push(e)}}return c},disabled:function(b,f,a){for(var d=0,c=[],e;e=b[d];d++){if(e.disabled){c.push(e)}}return c},checked:function(b,f,a){for(var d=0,c=[],e;e=b[d];d++){if(e.checked){c.push(e)}}return c}},operators:{"=":function(b,a){return b==a},"!=":function(b,a){return b!=a},"^=":function(b,a){return b==a||b&&b.startsWith(a)},"$=":function(b,a){return b==a||b&&b.endsWith(a)},"*=":function(b,a){return b==a||b&&b.include(a)},"~=":function(b,a){return(" "+b+" ").include(" "+a+" ")},"|=":function(b,a){return("-"+(b||"").toUpperCase()+"-").include("-"+(a||"").toUpperCase()+"-")}},split:function(b){var a=[];b.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/,function(c){a.push(c[1].strip())});return a},matchElements:function(f,g){var e=$$(g),d=Selector.handlers;d.mark(e);for(var c=0,b=[],a;a=f[c];c++){if(a._countedByPrototype){b.push(a)}}d.unmark(e);return b},findElement:function(b,c,a){if(Object.isNumber(c)){a=c;c=false}return Selector.matchElements(b,c||"*")[a||0]},findChildElements:function(e,g){g=Selector.split(g.join(","));var d=[],f=Selector.handlers;for(var c=0,b=g.length,a;c<b;c++){a=new Selector(g[c].strip());f.concat(d,a.findElements(e))}return(b>1)?f.unique(d):d}});if(Prototype.Browser.IE){Object.extend(Selector.handlers,{concat:function(d,c){for(var e=0,f;f=c[e];e++){if(f.tagName!=="!"){d.push(f)}}return d}})}function $$(){return Selector.findChildElements(document,$A(arguments))}var Form={reset:function(a){a=$(a);a.reset();return a},serializeElements:function(g,b){if(typeof b!="object"){b={hash:!!b}}else{if(Object.isUndefined(b.hash)){b.hash=true}}var c,f,a=false,e=b.submit;var d=g.inject({},function(h,i){if(!i.disabled&&i.name){c=i.name;f=$(i).getValue();if(f!=null&&i.type!="file"&&(i.type!="submit"||(!a&&e!==false&&(!e||c==e)&&(a=true)))){if(c in h){if(!Object.isArray(h[c])){h[c]=[h[c]]}h[c].push(f)}else{h[c]=f}}}return h});return b.hash?d:Object.toQueryString(d)}};Form.Methods={serialize:function(b,a){return Form.serializeElements(Form.getElements(b),a)},getElements:function(e){var f=$(e).getElementsByTagName("*"),d,a=[],c=Form.Element.Serializers;for(var b=0;d=f[b];b++){a.push(d)}return a.inject([],function(g,h){if(c[h.tagName.toLowerCase()]){g.push(Element.extend(h))}return g})},getInputs:function(g,c,d){g=$(g);var a=g.getElementsByTagName("input");if(!c&&!d){return $A(a).map(Element.extend)}for(var e=0,h=[],f=a.length;e<f;e++){var b=a[e];if((c&&b.type!=c)||(d&&b.name!=d)){continue}h.push(Element.extend(b))}return h},disable:function(a){a=$(a);Form.getElements(a).invoke("disable");return a},enable:function(a){a=$(a);Form.getElements(a).invoke("enable");return a},findFirstElement:function(b){var c=$(b).getElements().findAll(function(d){return"hidden"!=d.type&&!d.disabled});var a=c.findAll(function(d){return d.hasAttribute("tabIndex")&&d.tabIndex>=0}).sortBy(function(d){return d.tabIndex}).first();return a?a:c.find(function(d){return/^(?:input|select|textarea)$/i.test(d.tagName)})},focusFirstElement:function(a){a=$(a);a.findFirstElement().activate();return a},request:function(b,a){b=$(b),a=Object.clone(a||{});var d=a.parameters,c=b.readAttribute("action")||"";if(c.blank()){c=window.location.href}a.parameters=b.serialize(true);if(d){if(Object.isString(d)){d=d.toQueryParams()}Object.extend(a.parameters,d)}if(b.hasAttribute("method")&&!a.method){a.method=b.method}return new Ajax.Request(c,a)}};Form.Element={focus:function(a){$(a).focus();return a},select:function(a){$(a).select();return a}};Form.Element.Methods={serialize:function(a){a=$(a);if(!a.disabled&&a.name){var b=a.getValue();if(b!=undefined){var c={};c[a.name]=b;return Object.toQueryString(c)}}return""},getValue:function(a){a=$(a);var b=a.tagName.toLowerCase();return Form.Element.Serializers[b](a)},setValue:function(a,b){a=$(a);var c=a.tagName.toLowerCase();Form.Element.Serializers[c](a,b);return a},clear:function(a){$(a).value="";return a},present:function(a){return $(a).value!=""},activate:function(a){a=$(a);try{a.focus();if(a.select&&(a.tagName.toLowerCase()!="input"||!(/^(?:button|reset|submit)$/i.test(a.type)))){a.select()}}catch(b){}return a},disable:function(a){a=$(a);a.disabled=true;return a},enable:function(a){a=$(a);a.disabled=false;return a}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers={input:function(a,b){switch(a.type.toLowerCase()){case"checkbox":case"radio":return Form.Element.Serializers.inputSelector(a,b);default:return Form.Element.Serializers.textarea(a,b)}},inputSelector:function(a,b){if(Object.isUndefined(b)){return a.checked?a.value:null}else{a.checked=!!b}},textarea:function(a,b){if(Object.isUndefined(b)){return a.value}else{a.value=b}},select:function(c,f){if(Object.isUndefined(f)){return this[c.type=="select-one"?"selectOne":"selectMany"](c)}else{var b,d,g=!Object.isArray(f);for(var a=0,e=c.length;a<e;a++){b=c.options[a];d=this.optionValue(b);if(g){if(d==f){b.selected=true;return}}else{b.selected=f.include(d)}}}},selectOne:function(b){var a=b.selectedIndex;return a>=0?this.optionValue(b.options[a]):null},selectMany:function(d){var a,e=d.length;if(!e){return null}for(var c=0,a=[];c<e;c++){var b=d.options[c];if(b.selected){a.push(this.optionValue(b))}}return a},optionValue:function(a){return Element.extend(a).hasAttribute("value")?a.value:a.text}};Abstract.TimedObserver=Class.create(PeriodicalExecuter,{initialize:function($super,a,b,c){$super(c,b);this.element=$(a);this.lastValue=this.getValue()},execute:function(){var a=this.getValue();if(Object.isString(this.lastValue)&&Object.isString(a)?this.lastValue!=a:String(this.lastValue)!=String(a)){this.callback(this.element,a);this.lastValue=a}}});Form.Element.Observer=Class.create(Abstract.TimedObserver,{getValue:function(){return Form.Element.getValue(this.element)}});Form.Observer=Class.create(Abstract.TimedObserver,{getValue:function(){return Form.serialize(this.element)}});Abstract.EventObserver=Class.create({initialize:function(a,b){this.element=$(a);this.callback=b;this.lastValue=this.getValue();if(this.element.tagName.toLowerCase()=="form"){this.registerFormCallbacks()}else{this.registerCallback(this.element)}},onElementEvent:function(){var a=this.getValue();if(this.lastValue!=a){this.callback(this.element,a);this.lastValue=a}},registerFormCallbacks:function(){Form.getElements(this.element).each(this.registerCallback,this)},registerCallback:function(a){if(a.type){switch(a.type.toLowerCase()){case"checkbox":case"radio":Event.observe(a,"click",this.onElementEvent.bind(this));break;default:Event.observe(a,"change",this.onElementEvent.bind(this));break}}}});Form.Element.EventObserver=Class.create(Abstract.EventObserver,{getValue:function(){return Form.Element.getValue(this.element)}});Form.EventObserver=Class.create(Abstract.EventObserver,{getValue:function(){return Form.serialize(this.element)}});(function(){var v={KEY_BACKSPACE:8,KEY_TAB:9,KEY_RETURN:13,KEY_ESC:27,KEY_LEFT:37,KEY_UP:38,KEY_RIGHT:39,KEY_DOWN:40,KEY_DELETE:46,KEY_HOME:36,KEY_END:35,KEY_PAGEUP:33,KEY_PAGEDOWN:34,KEY_INSERT:45,cache:{}};var e=document.documentElement;var w="onmouseenter" in e&&"onmouseleave" in e;var o;if(Prototype.Browser.IE){var h={0:1,1:4,2:2};o=function(y,x){return y.button===h[x]}}else{if(Prototype.Browser.WebKit){o=function(y,x){switch(x){case 0:return y.which==1&&!y.metaKey;case 1:return y.which==1&&y.metaKey;default:return false}}}else{o=function(y,x){return y.which?(y.which===x+1):(y.button===x)}}}function r(x){return o(x,0)}function q(x){return o(x,1)}function k(x){return o(x,2)}function c(z){z=v.extend(z);var y=z.target,x=z.type,A=z.currentTarget;if(A&&A.tagName){if(x==="load"||x==="error"||(x==="click"&&A.tagName.toLowerCase()==="input"&&A.type==="radio")){y=A}}if(y.nodeType==Node.TEXT_NODE){y=y.parentNode}return Element.extend(y)}function m(y,A){var x=v.element(y);if(!A){return x}var z=[x].concat(x.ancestors());return Selector.findElement(z,A,0)}function p(x){return{x:b(x),y:a(x)}}function b(z){var y=document.documentElement,x=document.body||{scrollLeft:0};return z.pageX||(z.clientX+(y.scrollLeft||x.scrollLeft)-(y.clientLeft||0))}function a(z){var y=document.documentElement,x=document.body||{scrollTop:0};return z.pageY||(z.clientY+(y.scrollTop||x.scrollTop)-(y.clientTop||0))}function n(x){v.extend(x);x.preventDefault();x.stopPropagation();x.stopped=true}v.Methods={isLeftClick:r,isMiddleClick:q,isRightClick:k,element:c,findElement:m,pointer:p,pointerX:b,pointerY:a,stop:n};var t=Object.keys(v.Methods).inject({},function(x,y){x[y]=v.Methods[y].methodize();return x});if(Prototype.Browser.IE){function g(y){var x;switch(y.type){case"mouseover":x=y.fromElement;break;case"mouseout":x=y.toElement;break;default:return null}return Element.extend(x)}Object.extend(t,{stopPropagation:function(){this.cancelBubble=true},preventDefault:function(){this.returnValue=false},inspect:function(){return"[object Event]"}});v.extend=function(y,x){if(!y){return false}if(y._extendedByPrototype){return y}y._extendedByPrototype=Prototype.emptyFunction;var z=v.pointer(y);Object.extend(y,{target:y.srcElement||x,relatedTarget:g(y),pageX:z.x,pageY:z.y});return Object.extend(y,t)}}else{v.prototype=window.Event.prototype||document.createEvent("HTMLEvents").__proto__;Object.extend(v.prototype,t);v.extend=Prototype.K}function l(B,A,C){var z=Element.retrieve(B,"prototype_event_registry");if(Object.isUndefined(z)){d.push(B);z=Element.retrieve(B,"prototype_event_registry",$H())}var x=z.get(A);if(Object.isUndefined(x)){x=[];z.set(A,x)}if(x.pluck("handler").include(C)){return false}var y;if(A.include(":")){y=function(D){if(Object.isUndefined(D.eventName)){return false}if(D.eventName!==A){return false}v.extend(D,B);C.call(B,D)}}else{if(!w&&(A==="mouseenter"||A==="mouseleave")){if(A==="mouseenter"||A==="mouseleave"){y=function(E){v.extend(E,B);var D=E.relatedTarget;while(D&&D!==B){try{D=D.parentNode}catch(F){D=B}}if(D===B){return}C.call(B,E)}}}else{y=function(D){v.extend(D,B);C.call(B,D)}}}y.handler=C;x.push(y);return y}function f(){for(var x=0,y=d.length;x<y;x++){v.stopObserving(d[x]);d[x]=null}}var d=[];if(Prototype.Browser.IE){window.attachEvent("onunload",f)}if(Prototype.Browser.WebKit){window.addEventListener("unload",Prototype.emptyFunction,false)}var j=Prototype.K;if(!w){j=function(y){var x={mouseenter:"mouseover",mouseleave:"mouseout"};return y in x?x[y]:y}}function s(A,z,B){A=$(A);var y=l(A,z,B);if(!y){return A}if(z.include(":")){if(A.addEventListener){A.addEventListener("dataavailable",y,false)}else{A.attachEvent("ondataavailable",y);A.attachEvent("onfilterchange",y)}}else{var x=j(z);if(A.addEventListener){A.addEventListener(x,y,false)}else{A.attachEvent("on"+x,y)}}return A}function i(C,A,D){C=$(C);var z=Element.retrieve(C,"prototype_event_registry");if(Object.isUndefined(z)){return C}if(A&&!D){var B=z.get(A);if(Object.isUndefined(B)){return C}B.each(function(E){Element.stopObserving(C,A,E.handler)});return C}else{if(!A){z.each(function(G){var E=G.key,F=G.value;F.each(function(H){Element.stopObserving(C,E,H.handler)})});return C}}var B=z.get(A);if(!B){return}var y=B.find(function(E){return E.handler===D});if(!y){return C}var x=j(A);if(A.include(":")){if(C.removeEventListener){C.removeEventListener("dataavailable",y,false)}else{C.detachEvent("ondataavailable",y);C.detachEvent("onfilterchange",y)}}else{if(C.removeEventListener){C.removeEventListener(x,y,false)}else{C.detachEvent("on"+x,y)}}z.set(A,B.without(y));return C}function u(A,z,y,x){A=$(A);if(Object.isUndefined(x)){x=true}if(A==document&&document.createEvent&&!A.dispatchEvent){A=document.documentElement}var B;if(document.createEvent){B=document.createEvent("HTMLEvents");B.initEvent("dataavailable",true,true)}else{B=document.createEventObject();B.eventType=x?"ondataavailable":"onfilterchange"}B.eventName=z;B.memo=y||{};if(document.createEvent){A.dispatchEvent(B)}else{A.fireEvent(B.eventType,B)}return v.extend(B)}Object.extend(v,v.Methods);Object.extend(v,{fire:u,observe:s,stopObserving:i});Element.addMethods({fire:u,observe:s,stopObserving:i});Object.extend(document,{fire:u.methodize(),observe:s.methodize(),stopObserving:i.methodize(),loaded:false});if(window.Event){Object.extend(window.Event,v)}else{window.Event=v}})();(function(){var d;function a(){if(document.loaded){return}if(d){window.clearTimeout(d)}document.loaded=true;document.fire("dom:loaded")}function c(){if(document.readyState==="complete"){document.stopObserving("readystatechange",c);a()}}function b(){try{document.documentElement.doScroll("left")}catch(f){d=b.defer();return}a()}if(document.addEventListener){document.addEventListener("DOMContentLoaded",a,false)}else{document.observe("readystatechange",c);if(window==top){d=b.defer()}}Event.observe(window,"load",a)})();Element.addMethods();Hash.toQueryString=Object.toQueryString;var Toggle={display:Element.toggle};Element.Methods.childOf=Element.Methods.descendantOf;var Insertion={Before:function(a,b){return Element.insert(a,{before:b})},Top:function(a,b){return Element.insert(a,{top:b})},Bottom:function(a,b){return Element.insert(a,{bottom:b})},After:function(a,b){return Element.insert(a,{after:b})}};var $continue=new Error('"throw $continue" is deprecated, use "return" instead');var Position={includeScrollOffsets:false,prepare:function(){this.deltaX=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;this.deltaY=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0},within:function(b,a,c){if(this.includeScrollOffsets){return this.withinIncludingScrolloffsets(b,a,c)}this.xcomp=a;this.ycomp=c;this.offset=Element.cumulativeOffset(b);return(c>=this.offset[1]&&c<this.offset[1]+b.offsetHeight&&a>=this.offset[0]&&a<this.offset[0]+b.offsetWidth)},withinIncludingScrolloffsets:function(b,a,d){var c=Element.cumulativeScrollOffset(b);this.xcomp=a+c[0]-this.deltaX;this.ycomp=d+c[1]-this.deltaY;this.offset=Element.cumulativeOffset(b);return(this.ycomp>=this.offset[1]&&this.ycomp<this.offset[1]+b.offsetHeight&&this.xcomp>=this.offset[0]&&this.xcomp<this.offset[0]+b.offsetWidth)},overlap:function(b,a){if(!b){return 0}if(b=="vertical"){return((this.offset[1]+a.offsetHeight)-this.ycomp)/a.offsetHeight}if(b=="horizontal"){return((this.offset[0]+a.offsetWidth)-this.xcomp)/a.offsetWidth}},cumulativeOffset:Element.Methods.cumulativeOffset,positionedOffset:Element.Methods.positionedOffset,absolutize:function(a){Position.prepare();return Element.absolutize(a)},relativize:function(a){Position.prepare();return Element.relativize(a)},realOffset:Element.Methods.cumulativeScrollOffset,offsetParent:Element.Methods.getOffsetParent,page:Element.Methods.viewportOffset,clone:function(b,c,a){a=a||{};return Element.clonePosition(c,b,a)}};if(!document.getElementsByClassName){document.getElementsByClassName=function(b){function a(c){return c.blank()?null:"[contains(concat(' ', @class, ' '), ' "+c+" ')]"}b.getElementsByClassName=Prototype.BrowserFeatures.XPath?function(c,e){e=e.toString().strip();var d=/\s/.test(e)?$w(e).map(a).join(""):a(e);return d?document._getElementsByXPath(".//*"+d,c):[]}:function(e,f){f=f.toString().strip();var g=[],h=(/\s/.test(f)?$w(f):null);if(!h&&!f){return g}var c=$(e).getElementsByTagName("*");f=" "+f+" ";for(var d=0,k,j;k=c[d];d++){if(k.className&&(j=" "+k.className+" ")&&(j.include(f)||(h&&h.all(function(i){return !i.toString().blank()&&j.include(" "+i+" ")})))){g.push(Element.extend(k))}}return g};return function(d,c){return $(c||document.body).getElementsByClassName(d)}}(Element.Methods)}Element.ClassNames=Class.create();Element.ClassNames.prototype={initialize:function(a){this.element=$(a)},_each:function(a){this.element.className.split(/\s+/).select(function(b){return b.length>0})._each(a)},set:function(a){this.element.className=a},add:function(a){if(this.include(a)){return}this.set($A(this).concat(a).join(" "))},remove:function(a){if(!this.include(a)){return}this.set($A(this).without(a).join(" "))},toString:function(){return $A(this).join(" ")}};Object.extend(Element.ClassNames.prototype,Enumerable);
(function(){var a=Object;a.isNull=function(b){return b===null};a.isUndeclared=function(b){return a.isNull(b)||a.isUndefined(b)}})();
(function(){var a=Array;a.combineArrays=function(){var b=[];for(var c=0;c<arguments.length;++c){if(Object.isArray(arguments[c])){arguments[c].each(function(d){b.push(d)})}}return $A(b)}})();
(function(){var a=Date;var b=Date.prototype;a.getDaysInMonth=function(c,e){var f=new Date(c,e+1,0);return f.getDate()};a.isLeapYear=function(c){var e=new Date(c,1,29);return e.getMonth()===1};b.cloneDate=function(){return new Date(this.getTime())};b.getDaysInMonth=function(){return a.getDaysInMonth(this.getFullYear(),this.getMonth())};b.getNextDay=function(){return new Date(this.getFullYear(),this.getMonth(),this.getDate()+1,this.getHours(),this.getMinutes(),this.getSeconds(),this.getMilliseconds())};b.getPreviousDay=function(){return new Date(this.getFullYear(),this.getMonth(),this.getDate()-1,this.getHours(),this.getMinutes(),this.getSeconds(),this.getMilliseconds())};b.gotoDayOfWeek=function(c){return new Date(this.getFullYear(),this.getMonth(),this.getDate()-(this.getDay()-c),this.getHours(),this.getMinutes(),this.getSeconds(),this.getMilliseconds())};b.gotoFirstDayOfWeek=function(){return this.gotoDayOfWeek(0)};b.isLeapYear=function(){return a.isLeapYear(this.getFullYear())}})();
Hash.addMethods({hasKey:function(a){return this.keys().indexOf(a)!==-1}});
(function(){var b=$H({HTMLEvents:/^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/,MouseEvents:/^(?:click|mouse(?:down|up|over|move|out))$/});var a={pointerX:0,pointerY:0,button:0,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false,bubbles:true,cancelable:true};Event.simulate=function(g,d){var e=Object.extend(Object.clone(a),arguments[2]||{});g=$(g);var f=b.detect(function(h){return h.value.test(d)});if(!f){throw new SyntaxError("Only HTMLEvents and MouseEvents interfaces are supported")}else{f=f.key}var c=null;if(document.createEvent){c=document.createEvent(f);if(f=="HTMLEvents"){c.initEvent(d,e.bubbles,e.cancelable)}else{c.initMouseEvent(d,e.bubbles,e.cancelable,document.defaultView,e.button,e.pointerX,e.pointerY,e.pointerX,e.pointerY,e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.button,g)}g.dispatchEvent(c)}else{e.clientX=e.pointerX;e.clientY=e.pointerY;c=Object.extend(document.createEventObject(),e);g.fireEvent("on"+d,c)}return g};Element.addMethods({simulate:Event.simulate})})();

// script.aculo.us scriptaculous.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008

// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// For details, see the script.aculo.us web site: http://script.aculo.us/

var Scriptaculous = {
  Version: '1.8.2',
  require: function(libraryName) {
    // inserting via DOM fails in Safari 2.0, so brute force approach
    document.write('<script type="text/javascript" src="'+libraryName+'"><\/script>');
  },
  REQUIRED_PROTOTYPE: '1.6.0.3',
  load: function() {
    function convertVersionString(versionString) {
      var v = versionString.replace(/_.*|\./g, '');
      v = parseInt(v + '0'.times(4-v.length));
      return versionString.indexOf('_') > -1 ? v-1 : v;
    }

    if((typeof Prototype=='undefined') ||
       (typeof Element == 'undefined') ||
       (typeof Element.Methods=='undefined') ||
       (convertVersionString(Prototype.Version) <
        convertVersionString(Scriptaculous.REQUIRED_PROTOTYPE)))
       throw("script.aculo.us requires the Prototype JavaScript framework >= " +
        Scriptaculous.REQUIRED_PROTOTYPE);

    var js = /scriptaculous\.js(\?.*)?$/;
    $$('head script[src]').findAll(function(s) {
      return s.src.match(js);
    }).each(function(s) {
      var path = s.src.replace(js, ''),
      includes = s.src.match(/\?.*load=([a-z,]*)/);
      (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider,sound').split(',').each(
       function(include) { Scriptaculous.require(path+include+'.js') });
    });
  }
};

//Scriptaculous.load();


	


var Builder={NODEMAP:{AREA:"map",CAPTION:"table",COL:"table",COLGROUP:"table",LEGEND:"fieldset",OPTGROUP:"select",OPTION:"select",PARAM:"object",TBODY:"table",TD:"table",TFOOT:"table",TH:"table",THEAD:"table",TR:"table"},node:function(a){a=a.toUpperCase();var g=this.NODEMAP[a]||"div";var b=document.createElement(g);try{b.innerHTML="<"+a+"></"+a+">"}catch(f){}var d=b.firstChild||null;if(d&&(d.tagName.toUpperCase()!=a)){d=d.getElementsByTagName(a)[0]}if(!d){d=document.createElement(a)}if(!d){return}if(arguments[1]){if(this._isStringOrNumber(arguments[1])||(arguments[1] instanceof Array)||arguments[1].tagName){this._children(d,arguments[1])}else{var c=this._attributes(arguments[1]);if(c.length){try{b.innerHTML="<"+a+" "+c+"></"+a+">"}catch(f){}d=b.firstChild||null;if(!d){d=document.createElement(a);for(attr in arguments[1]){d[attr=="class"?"className":attr]=arguments[1][attr]}}if(d.tagName.toUpperCase()!=a){d=b.getElementsByTagName(a)[0]}}}}if(arguments[2]){this._children(d,arguments[2])}return $(d)},_text:function(a){return document.createTextNode(a)},ATTR_MAP:{className:"class",htmlFor:"for"},_attributes:function(a){var b=[];for(attribute in a){b.push((attribute in this.ATTR_MAP?this.ATTR_MAP[attribute]:attribute)+'="'+a[attribute].toString().escapeHTML().gsub(/"/,"&quot;")+'"')}return b.join(" ")},_children:function(b,a){if(a.tagName){b.appendChild(a);return}if(typeof a=="object"){a.flatten().each(function(c){if(typeof c=="object"){b.appendChild(c)}else{if(Builder._isStringOrNumber(c)){b.appendChild(Builder._text(c))}}})}else{if(Builder._isStringOrNumber(a)){b.appendChild(Builder._text(a))}}},_isStringOrNumber:function(a){return(typeof a=="string"||typeof a=="number")},build:function(b){var a=this.node("div");$(a).update(b.strip());return a.down()},dump:function(b){if(typeof b!="object"&&typeof b!="function"){b=window}var a=("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);a.each(function(c){b[c]=function(){return Builder.node.apply(Builder,[c].concat($A(arguments)))}})}};
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){return(-Math.cos((b*((a||5)-0.5)*2)*Math.PI)/2)+0.5},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(a){function b(d,c){return((d[c+"Internal"]?"this.options."+c+"Internal(this);":"")+(d[c]?"this.options."+c+"(this);":""))}if(a&&a.transition===false){a.transition=Effect.Transitions.linear}this.options=Object.extend(Object.extend({},Effect.DefaultOptions),a||{});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;this.render=(function(){function c(e,d){if(e.options[d+"Internal"]){e.options[d+"Internal"](e)}if(e.options[d]){e.options[d](e)}}return function(d){if(this.state==="idle"){this.state="running";c(this,"beforeSetup");if(this.setup){this.setup()}c(this,"afterSetup")}if(this.state==="running"){d=(this.options.transition(d)*this.fromToDelta)+this.options.from;this.position=d;c(this,"beforeUpdate");if(this.update){this.update(d)}c(this,"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(c){var b=arguments[1]||{},a=document.viewport.getScrollOffsets(),d=$(c).cumulativeOffset();if(b.offset){d[1]+=b.offset}return new Effect.Tween(null,a.top,d[1],b,function(e){scrollTo(a.left,e.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]||{},a=c.getInlineOpacity(),e=b.transition||Effect.Transitions.linear,d=function(f){return 1-e((-Math.cos((f*(b.pulses||5)*2)*Math.PI)/2)+0.5)};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._originallyAbsolute=(this.element.getStyle("position")=="absolute");if(!this._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._originallyAbsolute){Position.relativize(this.element)}delete this._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){a=$(a);var b=Sortable.sortables[a.id];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")]};
if(typeof Effect=="undefined"){throw ("controls.js requires including script.aculo.us' effects.js library")}var Autocompleter={};Autocompleter.Base=Class.create({baseInitialize:function(b,c,a){b=$(b);this.element=b;this.update=$(c);this.hasFocus=false;this.changed=false;this.active=false;this.index=0;this.entryCount=0;this.oldElementValue=this.element.value;if(this.setOptions){this.setOptions(a)}else{this.options=a||{}}this.options.paramName=this.options.paramName||this.element.name;this.options.tokens=this.options.tokens||[];this.options.frequency=this.options.frequency||0.4;this.options.minChars=this.options.minChars||1;this.options.onShow=this.options.onShow||function(d,e){if(!e.style.position||e.style.position=="absolute"){e.style.position="absolute";Position.clone(d,e,{setHeight:false,offsetTop:d.offsetHeight})}Effect.Appear(e,{duration:0.15})};this.options.onHide=this.options.onHide||function(d,e){new Effect.Fade(e,{duration:0.15})};if(typeof(this.options.tokens)=="string"){this.options.tokens=new Array(this.options.tokens)}if(!this.options.tokens.include("\n")){this.options.tokens.push("\n")}this.observer=null;this.element.setAttribute("autocomplete","off");Element.hide(this.update);Event.observe(this.element,"blur",this.onBlur.bindAsEventListener(this));Event.observe(this.element,"keydown",this.onKeyPress.bindAsEventListener(this))},show:function(){if(Element.getStyle(this.update,"display")=="none"){this.options.onShow(this.element,this.update)}if(!this.iefix&&(Prototype.Browser.IE)&&(Element.getStyle(this.update,"position")=="absolute")){new Insertion.After(this.update,'<iframe id="'+this.update.id+'_iefix" style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" src="javascript:false;" frameborder="0" scrolling="no"></iframe>');this.iefix=$(this.update.id+"_iefix")}if(this.iefix){setTimeout(this.fixIEOverlapping.bind(this),50)}},fixIEOverlapping:function(){Position.clone(this.update,this.iefix,{setTop:(!this.update.style.height)});this.iefix.style.zIndex=1;this.update.style.zIndex=2;Element.show(this.iefix)},hide:function(){this.stopIndicator();if(Element.getStyle(this.update,"display")!="none"){this.options.onHide(this.element,this.update)}if(this.iefix){Element.hide(this.iefix)}},startIndicator:function(){if(this.options.indicator){Element.show(this.options.indicator)}},stopIndicator:function(){if(this.options.indicator){Element.hide(this.options.indicator)}},onKeyPress:function(a){if(this.active){switch(a.keyCode){case Event.KEY_TAB:case Event.KEY_RETURN:this.selectEntry();Event.stop(a);case Event.KEY_ESC:this.hide();this.active=false;Event.stop(a);return;case Event.KEY_LEFT:case Event.KEY_RIGHT:return;case Event.KEY_UP:this.markPrevious();this.render();Event.stop(a);return;case Event.KEY_DOWN:this.markNext();this.render();Event.stop(a);return}}else{if(a.keyCode==Event.KEY_TAB||a.keyCode==Event.KEY_RETURN||(Prototype.Browser.WebKit>0&&a.keyCode==0)){return}}this.changed=true;this.hasFocus=true;if(this.observer){clearTimeout(this.observer)}this.observer=setTimeout(this.onObserverEvent.bind(this),this.options.frequency*1000)},activate:function(){this.changed=false;this.hasFocus=true;this.getUpdatedChoices()},onHover:function(b){var a=Event.findElement(b,"LI");if(this.index!=a.autocompleteIndex){this.index=a.autocompleteIndex;this.render()}Event.stop(b)},onClick:function(b){var a=Event.findElement(b,"LI");this.index=a.autocompleteIndex;this.selectEntry();this.hide()},onBlur:function(a){setTimeout(this.hide.bind(this),250);this.hasFocus=false;this.active=false},render:function(){if(this.entryCount>0){for(var a=0;a<this.entryCount;a++){this.index==a?Element.addClassName(this.getEntry(a),"selected"):Element.removeClassName(this.getEntry(a),"selected")}if(this.hasFocus){this.show();this.active=true}}else{this.active=false;this.hide()}},markPrevious:function(){if(this.index>0){this.index--}else{this.index=this.entryCount-1}this.getEntry(this.index).scrollIntoView(true)},markNext:function(){if(this.index<this.entryCount-1){this.index++}else{this.index=0}this.getEntry(this.index).scrollIntoView(false)},getEntry:function(a){return this.update.firstChild.childNodes[a]},getCurrentEntry:function(){return this.getEntry(this.index)},selectEntry:function(){this.active=false;this.updateElement(this.getCurrentEntry())},updateElement:function(f){if(this.options.updateElement){this.options.updateElement(f);return}var d="";if(this.options.select){var a=$(f).select("."+this.options.select)||[];if(a.length>0){d=Element.collectTextNodes(a[0],this.options.select)}}else{d=Element.collectTextNodesIgnoreClass(f,"informal")}var c=this.getTokenBounds();if(c[0]!=-1){var e=this.element.value.substr(0,c[0]);var b=this.element.value.substr(c[0]).match(/^\s+/);if(b){e+=b[0]}this.element.value=e+d+this.element.value.substr(c[1])}else{this.element.value=d}this.oldElementValue=this.element.value;this.element.focus();if(this.options.afterUpdateElement){this.options.afterUpdateElement(this.element,f)}},updateChoices:function(c){if(!this.changed&&this.hasFocus){this.update.innerHTML=c;Element.cleanWhitespace(this.update);Element.cleanWhitespace(this.update.down());if(this.update.firstChild&&this.update.down().childNodes){this.entryCount=this.update.down().childNodes.length;for(var a=0;a<this.entryCount;a++){var b=this.getEntry(a);b.autocompleteIndex=a;this.addObservers(b)}}else{this.entryCount=0}this.stopIndicator();this.index=0;if(this.entryCount==1&&this.options.autoSelect){this.selectEntry();this.hide()}else{this.render()}}},addObservers:function(a){Event.observe(a,"mouseover",this.onHover.bindAsEventListener(this));Event.observe(a,"click",this.onClick.bindAsEventListener(this))},onObserverEvent:function(){this.changed=false;this.tokenBounds=null;if(this.getToken().length>=this.options.minChars){this.getUpdatedChoices()}else{this.active=false;this.hide()}this.oldElementValue=this.element.value},getToken:function(){var a=this.getTokenBounds();return this.element.value.substring(a[0],a[1]).strip()},getTokenBounds:function(){if(null!=this.tokenBounds){return this.tokenBounds}var e=this.element.value;if(e.strip().empty()){return[-1,0]}var f=arguments.callee.getFirstDifferencePos(e,this.oldElementValue);var h=(f==this.oldElementValue.length?1:0);var d=-1,c=e.length;var g;for(var b=0,a=this.options.tokens.length;b<a;++b){g=e.lastIndexOf(this.options.tokens[b],f+h-1);if(g>d){d=g}g=e.indexOf(this.options.tokens[b],f+h);if(-1!=g&&g<c){c=g}}return(this.tokenBounds=[d+1,c])}});Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos=function(c,a){var d=Math.min(c.length,a.length);for(var b=0;b<d;++b){if(c[b]!=a[b]){return b}}return d};Ajax.Autocompleter=Class.create(Autocompleter.Base,{initialize:function(c,d,b,a){this.baseInitialize(c,d,a);this.options.asynchronous=true;this.options.onComplete=this.onComplete.bind(this);this.options.defaultParams=this.options.parameters||null;this.url=b},getUpdatedChoices:function(){this.startIndicator();var a=encodeURIComponent(this.options.paramName)+"="+encodeURIComponent(this.getToken());this.options.parameters=this.options.callback?this.options.callback(this.element,a):a;if(this.options.defaultParams){this.options.parameters+="&"+this.options.defaultParams}new Ajax.Request(this.url,this.options)},onComplete:function(a){this.updateChoices(a.responseText)}});Autocompleter.Local=Class.create(Autocompleter.Base,{initialize:function(b,d,c,a){this.baseInitialize(b,d,a);this.options.array=c},getUpdatedChoices:function(){this.updateChoices(this.options.selector(this))},setOptions:function(a){this.options=Object.extend({choices:10,partialSearch:true,partialChars:2,ignoreCase:true,fullSearch:false,selector:function(b){var d=[];var c=[];var h=b.getToken();var g=0;for(var e=0;e<b.options.array.length&&d.length<b.options.choices;e++){var f=b.options.array[e];var j=b.options.ignoreCase?f.toLowerCase().indexOf(h.toLowerCase()):f.indexOf(h);while(j!=-1){if(j==0&&f.length!=h.length){d.push("<li><strong>"+f.substr(0,h.length)+"</strong>"+f.substr(h.length)+"</li>");break}else{if(h.length>=b.options.partialChars&&b.options.partialSearch&&j!=-1){if(b.options.fullSearch||/\s/.test(f.substr(j-1,1))){c.push("<li>"+f.substr(0,j)+"<strong>"+f.substr(j,h.length)+"</strong>"+f.substr(j+h.length)+"</li>");break}}}j=b.options.ignoreCase?f.toLowerCase().indexOf(h.toLowerCase(),j+1):f.indexOf(h,j+1)}}if(c.length){d=d.concat(c.slice(0,b.options.choices-d.length))}return"<ul>"+d.join("")+"</ul>"}},a||{})}});Field.scrollFreeActivate=function(a){setTimeout(function(){Field.activate(a)},1)};Ajax.InPlaceEditor=Class.create({initialize:function(c,b,a){this.url=b;this.element=c=$(c);this.prepareOptions();this._controls={};arguments.callee.dealWithDeprecatedOptions(a);Object.extend(this.options,a||{});if(!this.options.formId&&this.element.id){this.options.formId=this.element.id+"-inplaceeditor";if($(this.options.formId)){this.options.formId=""}}if(this.options.externalControl){this.options.externalControl=$(this.options.externalControl)}if(!this.options.externalControl){this.options.externalControlOnly=false}this._originalBackground=this.element.getStyle("background-color")||"transparent";this.element.title=this.options.clickToEditText;this._boundCancelHandler=this.handleFormCancellation.bind(this);this._boundComplete=(this.options.onComplete||Prototype.emptyFunction).bind(this);this._boundFailureHandler=this.handleAJAXFailure.bind(this);this._boundSubmitHandler=this.handleFormSubmission.bind(this);this._boundWrapperHandler=this.wrapUp.bind(this);this.registerListeners()},checkForEscapeOrReturn:function(a){if(!this._editing||a.ctrlKey||a.altKey||a.shiftKey){return}if(Event.KEY_ESC==a.keyCode){this.handleFormCancellation(a)}else{if(Event.KEY_RETURN==a.keyCode){this.handleFormSubmission(a)}}},createControl:function(g,c,b){var e=this.options[g+"Control"];var f=this.options[g+"Text"];if("button"==e){var a=document.createElement("input");a.type="submit";a.value=f;a.className="editor_"+g+"_button";if("cancel"==g){a.onclick=this._boundCancelHandler}this._form.appendChild(a);this._controls[g]=a}else{if("link"==e){var d=document.createElement("a");d.href="#";d.appendChild(document.createTextNode(f));d.onclick="cancel"==g?this._boundCancelHandler:this._boundSubmitHandler;d.className="editor_"+g+"_link";if(b){d.className+=" "+b}this._form.appendChild(d);this._controls[g]=d}}},createEditField:function(){var c=(this.options.loadTextURL?this.options.loadingText:this.getText());var b;if(1>=this.options.rows&&!/\r|\n/.test(this.getText())){b=document.createElement("input");b.type="text";var a=this.options.size||this.options.cols||0;if(0<a){b.size=a}}else{b=document.createElement("textarea");b.rows=(1>=this.options.rows?this.options.autoRows:this.options.rows);b.cols=this.options.cols||40}b.name=this.options.paramName;b.value=c;b.className="editor_field";if(this.options.submitOnBlur){b.onblur=this._boundSubmitHandler}this._controls.editor=b;if(this.options.loadTextURL){this.loadExternalText()}this._form.appendChild(this._controls.editor)},createForm:function(){var b=this;function a(d,e){var c=b.options["text"+d+"Controls"];if(!c||e===false){return}b._form.appendChild(document.createTextNode(c))}this._form=$(document.createElement("form"));this._form.id=this.options.formId;this._form.addClassName(this.options.formClassName);this._form.onsubmit=this._boundSubmitHandler;this.createEditField();if("textarea"==this._controls.editor.tagName.toLowerCase()){this._form.appendChild(document.createElement("br"))}if(this.options.onFormCustomization){this.options.onFormCustomization(this,this._form)}a("Before",this.options.okControl||this.options.cancelControl);this.createControl("ok",this._boundSubmitHandler);a("Between",this.options.okControl&&this.options.cancelControl);this.createControl("cancel",this._boundCancelHandler,"editor_cancel");a("After",this.options.okControl||this.options.cancelControl)},destroy:function(){if(this._oldInnerHTML){this.element.innerHTML=this._oldInnerHTML}this.leaveEditMode();this.unregisterListeners()},enterEditMode:function(a){if(this._saving||this._editing){return}this._editing=true;this.triggerCallback("onEnterEditMode");if(this.options.externalControl){this.options.externalControl.hide()}this.element.hide();this.createForm();this.element.parentNode.insertBefore(this._form,this.element);if(!this.options.loadTextURL){this.postProcessEditField()}if(a){Event.stop(a)}},enterHover:function(a){if(this.options.hoverClassName){this.element.addClassName(this.options.hoverClassName)}if(this._saving){return}this.triggerCallback("onEnterHover")},getText:function(){return this.element.innerHTML.unescapeHTML()},handleAJAXFailure:function(a){this.triggerCallback("onFailure",a);if(this._oldInnerHTML){this.element.innerHTML=this._oldInnerHTML;this._oldInnerHTML=null}},handleFormCancellation:function(a){this.wrapUp();if(a){Event.stop(a)}},handleFormSubmission:function(d){var b=this._form;var c=$F(this._controls.editor);this.prepareSubmission();var f=this.options.callback(b,c)||"";if(Object.isString(f)){f=f.toQueryParams()}f.editorId=this.element.id;if(this.options.htmlResponse){var a=Object.extend({evalScripts:true},this.options.ajaxOptions);Object.extend(a,{parameters:f,onComplete:this._boundWrapperHandler,onFailure:this._boundFailureHandler});new Ajax.Updater({success:this.element},this.url,a)}else{var a=Object.extend({method:"get"},this.options.ajaxOptions);Object.extend(a,{parameters:f,onComplete:this._boundWrapperHandler,onFailure:this._boundFailureHandler});new Ajax.Request(this.url,a)}if(d){Event.stop(d)}},leaveEditMode:function(){this.element.removeClassName(this.options.savingClassName);this.removeForm();this.leaveHover();this.element.style.backgroundColor=this._originalBackground;this.element.show();if(this.options.externalControl){this.options.externalControl.show()}this._saving=false;this._editing=false;this._oldInnerHTML=null;this.triggerCallback("onLeaveEditMode")},leaveHover:function(a){if(this.options.hoverClassName){this.element.removeClassName(this.options.hoverClassName)}if(this._saving){return}this.triggerCallback("onLeaveHover")},loadExternalText:function(){this._form.addClassName(this.options.loadingClassName);this._controls.editor.disabled=true;var a=Object.extend({method:"get"},this.options.ajaxOptions);Object.extend(a,{parameters:"editorId="+encodeURIComponent(this.element.id),onComplete:Prototype.emptyFunction,onSuccess:function(c){this._form.removeClassName(this.options.loadingClassName);var b=c.responseText;if(this.options.stripLoadedTextTags){b=b.stripTags()}this._controls.editor.value=b;this._controls.editor.disabled=false;this.postProcessEditField()}.bind(this),onFailure:this._boundFailureHandler});new Ajax.Request(this.options.loadTextURL,a)},postProcessEditField:function(){var a=this.options.fieldPostCreation;if(a){$(this._controls.editor)["focus"==a?"focus":"activate"]()}},prepareOptions:function(){this.options=Object.clone(Ajax.InPlaceEditor.DefaultOptions);Object.extend(this.options,Ajax.InPlaceEditor.DefaultCallbacks);[this._extraDefaultOptions].flatten().compact().each(function(a){Object.extend(this.options,a)}.bind(this))},prepareSubmission:function(){this._saving=true;this.removeForm();this.leaveHover();this.showSaving()},registerListeners:function(){this._listeners={};var a;$H(Ajax.InPlaceEditor.Listeners).each(function(b){a=this[b.value].bind(this);this._listeners[b.key]=a;if(!this.options.externalControlOnly){this.element.observe(b.key,a)}if(this.options.externalControl){this.options.externalControl.observe(b.key,a)}}.bind(this))},removeForm:function(){if(!this._form){return}this._form.remove();this._form=null;this._controls={}},showSaving:function(){this._oldInnerHTML=this.element.innerHTML;this.element.innerHTML=this.options.savingText;this.element.addClassName(this.options.savingClassName);this.element.style.backgroundColor=this._originalBackground;this.element.show()},triggerCallback:function(b,a){if("function"==typeof this.options[b]){this.options[b](this,a)}},unregisterListeners:function(){$H(this._listeners).each(function(a){if(!this.options.externalControlOnly){this.element.stopObserving(a.key,a.value)}if(this.options.externalControl){this.options.externalControl.stopObserving(a.key,a.value)}}.bind(this))},wrapUp:function(a){this.leaveEditMode();this._boundComplete(a,this.element)}});Object.extend(Ajax.InPlaceEditor.prototype,{dispose:Ajax.InPlaceEditor.prototype.destroy});Ajax.InPlaceCollectionEditor=Class.create(Ajax.InPlaceEditor,{initialize:function($super,c,b,a){this._extraDefaultOptions=Ajax.InPlaceCollectionEditor.DefaultOptions;$super(c,b,a)},createEditField:function(){var a=document.createElement("select");a.name=this.options.paramName;a.size=1;this._controls.editor=a;this._collection=this.options.collection||[];if(this.options.loadCollectionURL){this.loadCollection()}else{this.checkForExternalText()}this._form.appendChild(this._controls.editor)},loadCollection:function(){this._form.addClassName(this.options.loadingClassName);this.showLoadingText(this.options.loadingCollectionText);var options=Object.extend({method:"get"},this.options.ajaxOptions);Object.extend(options,{parameters:"editorId="+encodeURIComponent(this.element.id),onComplete:Prototype.emptyFunction,onSuccess:function(transport){var js=transport.responseText.strip();if(!/^\[.*\]$/.test(js)){throw ("Server returned an invalid collection representation.")}this._collection=eval(js);this.checkForExternalText()}.bind(this),onFailure:this.onFailure});new Ajax.Request(this.options.loadCollectionURL,options)},showLoadingText:function(b){this._controls.editor.disabled=true;var a=this._controls.editor.firstChild;if(!a){a=document.createElement("option");a.value="";this._controls.editor.appendChild(a);a.selected=true}a.update((b||"").stripScripts().stripTags())},checkForExternalText:function(){this._text=this.getText();if(this.options.loadTextURL){this.loadExternalText()}else{this.buildOptionList()}},loadExternalText:function(){this.showLoadingText(this.options.loadingText);var a=Object.extend({method:"get"},this.options.ajaxOptions);Object.extend(a,{parameters:"editorId="+encodeURIComponent(this.element.id),onComplete:Prototype.emptyFunction,onSuccess:function(b){this._text=b.responseText.strip();this.buildOptionList()}.bind(this),onFailure:this.onFailure});new Ajax.Request(this.options.loadTextURL,a)},buildOptionList:function(){this._form.removeClassName(this.options.loadingClassName);this._collection=this._collection.map(function(d){return 2===d.length?d:[d,d].flatten()});var b=("value" in this.options)?this.options.value:this._text;var a=this._collection.any(function(d){return d[0]==b}.bind(this));this._controls.editor.update("");var c;this._collection.each(function(e,d){c=document.createElement("option");c.value=e[0];c.selected=a?e[0]==b:0==d;c.appendChild(document.createTextNode(e[1]));this._controls.editor.appendChild(c)}.bind(this));this._controls.editor.disabled=false;Field.scrollFreeActivate(this._controls.editor)}});Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions=function(a){if(!a){return}function b(c,d){if(c in a||d===undefined){return}a[c]=d}b("cancelControl",(a.cancelLink?"link":(a.cancelButton?"button":a.cancelLink==a.cancelButton==false?false:undefined)));b("okControl",(a.okLink?"link":(a.okButton?"button":a.okLink==a.okButton==false?false:undefined)));b("highlightColor",a.highlightcolor);b("highlightEndColor",a.highlightendcolor)};Object.extend(Ajax.InPlaceEditor,{DefaultOptions:{ajaxOptions:{},autoRows:3,cancelControl:"link",cancelText:"cancel",clickToEditText:"Click to edit",externalControl:null,externalControlOnly:false,fieldPostCreation:"activate",formClassName:"inplaceeditor-form",formId:null,highlightColor:"#ffff99",highlightEndColor:"#ffffff",hoverClassName:"",htmlResponse:true,loadingClassName:"inplaceeditor-loading",loadingText:"Loading...",okControl:"button",okText:"ok",paramName:"value",rows:1,savingClassName:"inplaceeditor-saving",savingText:"Saving...",size:0,stripLoadedTextTags:false,submitOnBlur:false,textAfterControls:"",textBeforeControls:"",textBetweenControls:""},DefaultCallbacks:{callback:function(a){return Form.serialize(a)},onComplete:function(b,a){new Effect.Highlight(a,{startcolor:this.options.highlightColor,keepBackgroundImage:true})},onEnterEditMode:null,onEnterHover:function(a){a.element.style.backgroundColor=a.options.highlightColor;if(a._effect){a._effect.cancel()}},onFailure:function(b,a){alert("Error communication with the server: "+b.responseText.stripTags())},onFormCustomization:null,onLeaveEditMode:null,onLeaveHover:function(a){a._effect=new Effect.Highlight(a.element,{startcolor:a.options.highlightColor,endcolor:a.options.highlightEndColor,restorecolor:a._originalBackground,keepBackgroundImage:true})}},Listeners:{click:"enterEditMode",keydown:"checkForEscapeOrReturn",mouseover:"enterHover",mouseout:"leaveHover"}});Ajax.InPlaceCollectionEditor.DefaultOptions={loadingCollectionText:"Loading options..."};Form.Element.DelayedObserver=Class.create({initialize:function(b,a,c){this.delay=a||0.5;this.element=$(b);this.callback=c;this.timer=null;this.lastValue=$F(this.element);Event.observe(this.element,"keyup",this.delayedListener.bindAsEventListener(this))},delayedListener:function(a){if(this.lastValue==$F(this.element)){return}if(this.timer){clearTimeout(this.timer)}this.timer=setTimeout(this.onTimerEvent.bind(this),this.delay*1000);this.lastValue=$F(this.element)},onTimerEvent:function(){this.timer=null;this.callback(this.element,$F(this.element))}});
if(!Control){var Control={}}Control.Slider=Class.create({initialize:function(d,a,b){var c=this;if(Object.isArray(d)){this.handles=d.collect(function(f){return $(f)})}else{this.handles=[$(d)]}this.track=$(a);this.options=b||{};this.axis=this.options.axis||"horizontal";this.increment=this.options.increment||1;this.step=parseInt(this.options.step||"1");this.range=this.options.range||$R(0,1);this.value=0;this.values=this.handles.map(function(){return 0});this.spans=this.options.spans?this.options.spans.map(function(e){return $(e)}):false;this.options.startSpan=$(this.options.startSpan||null);this.options.endSpan=$(this.options.endSpan||null);this.restricted=this.options.restricted||false;this.maximum=this.options.maximum||this.range.end;this.minimum=this.options.minimum||this.range.start;this.alignX=parseInt(this.options.alignX||"0");this.alignY=parseInt(this.options.alignY||"0");this.trackLength=this.maximumOffset()-this.minimumOffset();this.handleLength=this.isVertical()?(this.handles[0].offsetHeight!=0?this.handles[0].offsetHeight:this.handles[0].style.height.replace(/px$/,"")):(this.handles[0].offsetWidth!=0?this.handles[0].offsetWidth:this.handles[0].style.width.replace(/px$/,""));this.active=false;this.dragging=false;this.disabled=false;if(this.options.disabled){this.setDisabled()}this.allowedValues=this.options.values?this.options.values.sortBy(Prototype.K):false;if(this.allowedValues){this.minimum=this.allowedValues.min();this.maximum=this.allowedValues.max()}this.eventMouseDown=this.startDrag.bindAsEventListener(this);this.eventMouseUp=this.endDrag.bindAsEventListener(this);this.eventMouseMove=this.update.bindAsEventListener(this);this.handles.each(function(f,e){e=c.handles.length-1-e;c.setValue(parseFloat((Object.isArray(c.options.sliderValue)?c.options.sliderValue[e]:c.options.sliderValue)||c.range.start),e);f.makePositioned().observe("mousedown",c.eventMouseDown)});this.track.observe("mousedown",this.eventMouseDown);document.observe("mouseup",this.eventMouseUp);document.observe("mousemove",this.eventMouseMove);this.initialized=true},dispose:function(){var a=this;Event.stopObserving(this.track,"mousedown",this.eventMouseDown);Event.stopObserving(document,"mouseup",this.eventMouseUp);Event.stopObserving(document,"mousemove",this.eventMouseMove);this.handles.each(function(b){Event.stopObserving(b,"mousedown",a.eventMouseDown)})},setDisabled:function(){this.disabled=true},setEnabled:function(){this.disabled=false},getNearestValue:function(a){if(this.allowedValues){if(a>=this.allowedValues.max()){return(this.allowedValues.max())}if(a<=this.allowedValues.min()){return(this.allowedValues.min())}var c=Math.abs(this.allowedValues[0]-a);var b=this.allowedValues[0];this.allowedValues.each(function(d){var e=Math.abs(d-a);if(e<=c){b=d;c=e}});return b}if(a>this.range.end){return this.range.end}if(a<this.range.start){return this.range.start}return a},setValue:function(b,a){if(!this.active){this.activeHandleIdx=a||0;this.activeHandle=this.handles[this.activeHandleIdx];this.updateStyles()}a=a||this.activeHandleIdx||0;if(this.initialized&&this.restricted){if((a>0)&&(b<this.values[a-1])){b=this.values[a-1]}if((a<(this.handles.length-1))&&(b>this.values[a+1])){b=this.values[a+1]}}b=this.getNearestValue(b);this.values[a]=b;this.value=this.values[0];this.handles[a].style[this.isVertical()?"top":"left"]=this.translateToPx(b);this.drawSpans();if(!this.dragging||!this.event){this.updateFinished()}},setValueBy:function(b,a){this.setValue(this.values[a||this.activeHandleIdx||0]+b,a||this.activeHandleIdx||0)},translateToPx:function(a){return Math.round(((this.trackLength-this.handleLength)/(this.range.end-this.range.start))*(a-this.range.start))+"px"},translateToValue:function(a){return((a/(this.trackLength-this.handleLength)*(this.range.end-this.range.start))+this.range.start)},getRange:function(b){var a=this.values.sortBy(Prototype.K);b=b||0;return $R(a[b],a[b+1])},minimumOffset:function(){return(this.isVertical()?this.alignY:this.alignX)},maximumOffset:function(){return(this.isVertical()?(this.track.offsetHeight!=0?this.track.offsetHeight:this.track.style.height.replace(/px$/,""))-this.alignY:(this.track.offsetWidth!=0?this.track.offsetWidth:this.track.style.width.replace(/px$/,""))-this.alignX)},isVertical:function(){return(this.axis=="vertical")},drawSpans:function(){var a=this;if(this.spans){$R(0,this.spans.length-1).each(function(b){a.setSpan(a.spans[b],a.getRange(b))})}if(this.options.startSpan){this.setSpan(this.options.startSpan,$R(0,this.values.length>1?this.getRange(0).min():this.value))}if(this.options.endSpan){this.setSpan(this.options.endSpan,$R(this.values.length>1?this.getRange(this.spans.length-1).max():this.value,this.maximum))}},setSpan:function(b,a){if(this.isVertical()){b.style.top=this.translateToPx(a.start);b.style.height=this.translateToPx(a.end-a.start+this.range.start)}else{b.style.left=this.translateToPx(a.start);b.style.width=this.translateToPx(a.end-a.start+this.range.start)}},updateStyles:function(){this.handles.each(function(a){Element.removeClassName(a,"selected")});Element.addClassName(this.activeHandle,"selected")},startDrag:function(c){if(Event.isLeftClick(c)){if(!this.disabled){this.active=true;var d=Event.element(c);var e=[Event.pointerX(c),Event.pointerY(c)];var a=d;if(a==this.track){var b=Position.cumulativeOffset(this.track);this.event=c;this.setValue(this.translateToValue((this.isVertical()?e[1]-b[1]:e[0]-b[0])-(this.handleLength/2)));var b=Position.cumulativeOffset(this.activeHandle);this.offsetX=(e[0]-b[0]);this.offsetY=(e[1]-b[1])}else{while((this.handles.indexOf(d)==-1)&&d.parentNode){d=d.parentNode}if(this.handles.indexOf(d)!=-1){this.activeHandle=d;this.activeHandleIdx=this.handles.indexOf(this.activeHandle);this.updateStyles();var b=Position.cumulativeOffset(this.activeHandle);this.offsetX=(e[0]-b[0]);this.offsetY=(e[1]-b[1])}}}Event.stop(c)}},update:function(a){if(this.active){if(!this.dragging){this.dragging=true}this.draw(a);if(Prototype.Browser.WebKit){window.scrollBy(0,0)}Event.stop(a)}},draw:function(b){var c=[Event.pointerX(b),Event.pointerY(b)];var a=Position.cumulativeOffset(this.track);c[0]-=this.offsetX+a[0];c[1]-=this.offsetY+a[1];this.event=b;this.setValue(this.translateToValue(this.isVertical()?c[1]:c[0]));if(this.initialized&&this.options.onSlide){this.options.onSlide(this.values.length>1?this.values:this.value,this)}},endDrag:function(a){if(this.active&&this.dragging){this.finishDrag(a,true);Event.stop(a)}this.active=false;this.dragging=false},finishDrag:function(a,b){this.active=false;this.dragging=false;this.updateFinished()},updateFinished:function(){if(this.initialized&&this.options.onChange){this.options.onChange(this.values.length>1?this.values:this.value,this)}this.event=null}});
Sound={tracks:{},_enabled:true,template:new Template('<embed style="height:0" id="sound_#{track}_#{id}" src="#{url}" loop="false" autostart="true" hidden="true"/>'),enable:function(){Sound._enabled=true},disable:function(){Sound._enabled=false},play:function(b){if(!Sound._enabled){return}var a=Object.extend({track:"global",url:b,replace:false},arguments[1]||{});if(a.replace&&this.tracks[a.track]){$R(0,this.tracks[a.track].id).each(function(d){var c=$("sound_"+a.track+"_"+d);c.Stop&&c.Stop();c.remove()});this.tracks[a.track]=null}if(!this.tracks[a.track]){this.tracks[a.track]={id:0}}else{this.tracks[a.track].id++}a.id=this.tracks[a.track].id;$$("body")[0].insert(Prototype.Browser.IE?new Element("bgsound",{id:"sound_"+a.track+"_"+a.id,src:a.url,loop:1,autostart:true}):Sound.template.evaluate(a))}};if(Prototype.Browser.Gecko&&navigator.userAgent.indexOf("Win")>0){if(navigator.plugins&&$A(navigator.plugins).detect(function(a){return a.name.indexOf("QuickTime")!=-1})){Sound.template=new Template('<object id="sound_#{track}_#{id}" width="0" height="0" type="audio/mpeg" data="#{url}"/>')}else{Sound.play=function(){}}};


	


JS={extend:function(b,a){a=a||{};for(var c in a){if(b[c]===a[c]){continue}b[c]=a[c]}return b},makeFunction:function(){return function(){return this.initialize?(this.initialize.apply(this,arguments)||this):this}},makeBridge:function(a){var b=function(){};b.prototype=a.prototype;return new b},bind:function(){var b=JS.array(arguments),c=b.shift(),a=b.shift()||null;return function(){return c.apply(a,b.concat(JS.array(arguments)))}},callsSuper:function(a){return a.SUPER===undefined?a.SUPER=/\bcallSuper\b/.test(a.toString()):a.SUPER},mask:function(b){var a=b.toString().replace(/callSuper/g,"super");b.toString=function(){return a};return b},array:function(c){if(!c){return[]}if(c.toArray){return c.toArray()}var b=c.length,a=[];while(b--){a[b]=c[b]}return a},indexOf:function(b,c){for(var a=0,d=b.length;a<d;a++){if(b[a]===c){return a}}return -1},isFn:function(a){return a instanceof Function},isType:function(a,b){if(!a||!b){return false}return(b instanceof Function&&a instanceof b)||(typeof b==="string"&&typeof a===b)||(a.isA&&a.isA(b))},ignore:function(b,a){return/^(include|extend)$/.test(b)&&typeof a==="object"}};JS.Module=JS.makeFunction();JS.extend(JS.Module.prototype,{END_WITHOUT_DOT:/([^\.])$/,initialize:function(c,a,b){this.__mod__=this;this.__inc__=[];this.__fns__={};this.__dep__=[];this.__mct__={};if(typeof c==="string"){this.__nom__=this.displayName=c}else{this.__nom__=this.displayName="";b=a;a=c}b=b||{};this.__res__=b._resolve||null;if(a){this.include(a,false)}},setName:function(a){this.__nom__=this.displayName=a||"";for(var b in this.__mod__.__fns__){this.__name__(b)}if(a&&this.__meta__){this.__meta__.setName(a+".")}},__name__:function(b){if(!this.__nom__){return}var a=this.__mod__.__fns__[b]||{};b=this.__nom__.replace(this.END_WITHOUT_DOT,"$1#")+b;if(JS.isFn(a.setName)){return a.setName(b)}if(JS.isFn(a)){a.displayName=b}},define:function(b,d,e,a){var c=(a||{})._notify||this;this.__fns__[b]=d;this.__name__(b);if(JS.Module._notify&&c&&JS.isFn(d)){JS.Module._notify(b,c)}if(e!==false){this.resolve()}},instanceMethod:function(a){var b=this.lookup(a).pop();return JS.isFn(b)?b:null},instanceMethods:function(d,c){var a=this.__mod__,c=c||[],e=a.ancestors(),f=e.length,b;for(b in a.__fns__){if(a.__fns__.hasOwnProperty(b)&&JS.isFn(a.__fns__[b])&&JS.indexOf(c,b)===-1){c.push(b)}}if(d===false){return c}while(f--){e[f].instanceMethods(false,c)}return c},include:function(d,j,k){j=(j!==false);if(!d){return j?this.resolve():this.uncache()}k=k||{};if(d.__mod__){d=d.__mod__}var f=d.include,c=d.extend,b=k._included||this,g,a,h,e;if(d.__inc__&&d.__fns__){this.__inc__.push(d);d.__dep__.push(this);if(k._extended){d.extended&&d.extended(k._extended)}else{d.included&&d.included(b)}}else{if(k._recall){for(a in d){if(JS.ignore(a,d[a])){continue}this.define(a,d[a],false,{_notify:b||k._extended||this})}}else{if(typeof f==="object"||JS.isType(f,JS.Module)){g=[].concat(f);for(h=0,e=g.length;h<e;h++){b.include(g[h],j,k)}}if(typeof c==="object"||JS.isType(c,JS.Module)){g=[].concat(c);for(h=0,e=g.length;h<e;h++){b.extend(g[h],false)}b.extend()}k._recall=true;return b.include(d,j,k)}}j?this.resolve():this.uncache()},includes:function(c){var a=this.__mod__,b=a.__inc__.length;if(Object===c||a===c||a.__res__===c.prototype){return true}while(b--){if(a.__inc__[b].includes(c)){return true}}return false},match:function(a){return a.isA&&a.isA(this)},ancestors:function(e){var c=this.__mod__,f=(e===undefined),b=(c.__res__||{}).klass,a=(b&&c.__res__===b.prototype)?b:c,d,g;if(f&&c.__anc__){return c.__anc__.slice()}e=e||[];for(d=0,g=c.__inc__.length;d<g;d++){c.__inc__[d].ancestors(e)}if(JS.indexOf(e,a)===-1){e.push(a)}if(f){c.__anc__=e.slice()}return e},lookup:function(c){var b=this.__mod__,a=b.__mct__;if(a[c]){return a[c].slice()}var f=b.ancestors(),e=[],d,h,g;for(d=0,h=f.length;d<h;d++){g=f[d].__mod__.__fns__[c];if(g){e.push(g)}}a[c]=e.slice();return e},make:function(a,c){if(!JS.isFn(c)||!JS.callsSuper(c)){return c}var b=this;return function(){return b.chain(this,a,arguments)}},chain:JS.mask(function(b,d,c){var e=this.lookup(d),f=e.length-1,h=b.callSuper,g=JS.array(c),a;b.callSuper=function(){var j=arguments.length;while(j--){g[j]=arguments[j]}f-=1;var k=e[f].apply(b,g);f+=1;return k};a=e.pop().apply(b,g);h?b.callSuper=h:delete b.callSuper;return a}),resolve:function(e){var b=this.__mod__,e=e||b,a=e.__res__,d,g,c,f;if(e===b){b.uncache(false);d=b.__dep__.length;while(d--){b.__dep__[d].resolve()}}if(!a){return}for(d=0,g=b.__inc__.length;d<g;d++){b.__inc__[d].resolve(e)}for(c in b.__fns__){f=e.make(c,b.__fns__[c]);if(a[c]!==f){a[c]=f}}},uncache:function(b){var a=this.__mod__,c=a.__dep__.length;a.__anc__=null;a.__mct__={};if(b===false){return}while(c--){a.__dep__[c].uncache()}}});JS.Class=JS.makeFunction();JS.extend(JS.Class.prototype=JS.makeBridge(JS.Module),{initialize:function(c,d,b){if(typeof c==="string"){this.__nom__=this.displayName=c}else{this.__nom__=this.displayName="";b=d;d=c}var a=JS.extend(JS.makeFunction(),this);a.klass=a.constructor=this.klass;if(!JS.isFn(d)){b=d;d=Object}a.inherit(d);a.include(b,false);a.resolve();do{d.inherited&&d.inherited(a)}while(d=d.superclass);return a},inherit:function(a){this.superclass=a;if(this.__eigen__&&a.__eigen__){this.extend(a.__eigen__(),true)}this.subclasses=[];(a.subclasses||[]).push(this);var b=this.prototype=JS.makeBridge(a);b.klass=b.constructor=this;this.__mod__=new JS.Module(this.__nom__,{},{_resolve:this.prototype});this.include(JS.Kernel,false);if(a!==Object){this.include(a.__mod__||new JS.Module(a.prototype,{_resolve:a.prototype}),false)}},include:function(c,d,a){if(!c){return}var b=this.__mod__,a=a||{};a._included=this;return b.include(c,d,a)},define:function(b,d,e,a){var c=this.__mod__;a=a||{};a._notify=this;c.define(b,d,e,a)}});JS.Module=new JS.Class("Module",JS.Module.prototype);JS.Class=new JS.Class("Class",JS.Module,JS.Class.prototype);JS.Module.klass=JS.Module.constructor=JS.Class.klass=JS.Class.constructor=JS.Class;JS.extend(JS.Module,{_observers:[],methodAdded:function(b,a){this._observers.push([b,a])},_notify:function(b,a){var d=this._observers,c=d.length;while(c--){d[c][0].call(d[c][1]||null,b,a)}}});JS.Kernel=JS.extend(new JS.Module("Kernel",{__eigen__:function(){if(this.__meta__){return this.__meta__}var d=this.__nom__,a=this.klass.__nom__,b=d||(a?"#<"+a+">":""),c=this.__meta__=new JS.Module(b?b+".":"",{},{_resolve:this});c.include(this.klass.__mod__,false);return c},equals:function(a){return this===a},extend:function(a,b){return this.__eigen__().include(a,b,{_extended:this})},hash:function(){return this.__hashcode__=this.__hashcode__||JS.Kernel.getHashCode()},isA:function(a){return this.__eigen__().includes(a)},method:function(c){var b=this,a=b.__mcache__=b.__mcache__||{};if((a[c]||{}).fn===b[c]){return a[c].bd}return(a[c]={fn:b[c],bd:JS.bind(b[c],b)}).bd},methods:function(){return this.__eigen__().instanceMethods(true)},tap:function(b,a){b.call(a||null,this);return this}}),{__hashIndex__:0,getHashCode:function(){this.__hashIndex__+=1;return(Math.floor(new Date().getTime()/1000)+this.__hashIndex__).toString(16)}});JS.Module.include(JS.Kernel);JS.extend(JS.Module,JS.Kernel.__fns__);JS.Class.include(JS.Kernel);JS.extend(JS.Class,JS.Kernel.__fns__);JS.Interface=new JS.Class({initialize:function(a){this.test=function(c,b){var d=a.length;while(d--){if(!JS.isFn(c[a[d]])){return b?a[d]:false}}return true}},extend:{ensure:function(){var c=JS.array(arguments),b=c.shift(),d,a;while(d=c.shift()){a=d.test(b,true);if(a!==true){throw new Error("object does not implement "+a+"()")}}}}});JS.Singleton=new JS.Class({initialize:function(b,c,a){return new (new JS.Class(b,c,a))}});
JS.Comparable=new JS.Module("Comparable",{extend:{ClassMethods:new JS.Module({compare:function(b,a){return b.compareTo(a)}}),included:function(a){a.extend(this.ClassMethods)}},lt:function(a){return this.compareTo(a)<0},lte:function(a){return this.compareTo(a)<1},gt:function(a){return this.compareTo(a)>0},gte:function(a){return this.compareTo(a)>-1},eq:function(a){return this.compareTo(a)===0},between:function(d,c){return this.gte(d)&&this.lte(c)}});
JS.ConstantScope=new JS.Module("ConstantScope",{extend:{included:function(a){a.__consts__=new JS.Module();a.extend(this.ClassMethods);a.include(a.__consts__);a.extend(a.__consts__);a.include(a.__mod__.__fns__);a.extend(a.__eigen__().__fns__)},ClassMethods:new JS.Module({extend:function(){var a=JS.ConstantScope.extract(arguments[0],this);this.__consts__.include(a);this.callSuper()},include:function(){var a=JS.ConstantScope.extract(arguments[0],this);this.__consts__.include(a);this.callSuper()}}),extract:function(a,e){if(!a){return null}if(JS.isType(a,JS.Module)){return null}var d={},c,b;for(c in a){if(!/^[A-Z]/.test(c)){continue}b=a[c];d[c]=b;delete a[c];if(JS.isType(b,JS.Module)){b.include(this);b.__consts__.include(e.__consts__)}}return d}}});
JS.Forwardable=new JS.Module("Forwardable",{defineDelegator:function(b,d,a,c){a=a||d;this.define(a,function(){var e=this[b],f=e[d];return JS.isFn(f)?f.apply(e,arguments):f},c!==false)},defineDelegators:function(){var a=JS.array(arguments),c=a.shift(),b=a.length;while(b--){this.defineDelegator(c,a[b],a[b],false)}this.resolve()}});
JS.Enumerable=new JS.Module("Enumerable",{extend:{forEach:function(c,b){if(!c){return new JS.Enumerator(this,"forEach")}for(var a=0,d=this.length;a<d;a++){if(this[a]!==undefined){c.call(b||null,this[a])}}return this},isComparable:function(a){return a.all(function(b){return JS.isFn(b.compareTo)})},areEqual:function(b,a){return b.equals?b.equals(a):(b===a)},Collection:new JS.Class({initialize:function(b){this.length=0;var a=Array.prototype.push;JS.Enumerable.forEach.call(b,function(c){a.call(this,c)},this)}})},all:function(c,b){c=JS.Enumerable.toFn(c);var a=true;this.forEach(function(d){a=a&&(c?c.apply(b||null,arguments):d)});return !!a},any:function(c,b){c=JS.Enumerable.toFn(c);var a=false;this.forEach(function(d){a=a||(c?c.apply(b||null,arguments):d)});return !!a},count:function(d,b){if(JS.isFn(this.size)){return this.size()}var c=0,a=d;if(d&&!JS.isFn(d)){d=function(e){return JS.Enumerable.areEqual(e,a)}}this.forEach(function(){if(!d||d.apply(b||null,arguments)){c+=1}});return c},cycle:function(c,b,a){if(!b){return this.enumFor("cycle",c)}b=JS.Enumerable.toFn(b);while(c--){this.forEach(b,a)}},drop:function(b){var a=[];this.forEachWithIndex(function(d,c){if(c>=b){a.push(d)}});return a},dropWhile:function(d,c){if(!d){return this.enumFor("dropWhile")}d=JS.Enumerable.toFn(d);var a=[],b=true;this.forEach(function(e){if(b){b=b&&d.apply(c||null,arguments)}if(!b){a.push(e)}});return a},forEachCons:function(g,f,e){if(!f){return this.enumFor("forEachCons",g)}f=JS.Enumerable.toFn(f);var a=this.toArray(),d=a.length,b=d-g,c;for(c=0;c<=b;c++){f.call(e||null,a.slice(c,c+g))}return this},forEachSlice:function(g,f,e){if(!f){return this.enumFor("forEachSlice",g)}f=JS.Enumerable.toFn(f);var b=this.toArray(),d=b.length,a=Math.ceil(d/g),c;for(c=0;c<a;c++){f.call(e||null,b.slice(c*g,(c+1)*g))}return this},forEachWithIndex:function(c,b,a){if(JS.isFn(c)){a=b;b=c;c=0}c=c||0;if(!b){return this.enumFor("forEachWithIndex",c)}b=JS.Enumerable.toFn(b);return this.forEach(function(e){var d=b.call(a||null,e,c);c+=1;return d})},forEachWithObject:function(a,c,b){if(!c){return this.enumFor("forEachWithObject",a)}c=JS.Enumerable.toFn(c);this.forEach(function(){var d=[a].concat(JS.array(arguments));c.apply(b||null,d)});return a},find:function(d,b){if(!d){return this.enumFor("find")}d=JS.Enumerable.toFn(d);var c={},a=c;this.forEach(function(e){if(c!==a){return}c=d.apply(b||null,arguments)?e:c});return c===a?null:c},findIndex:function(c,b){if(c===undefined){return this.enumFor("findIndex")}var a=null,d=JS.isFn(c);this.forEachWithIndex(function(f,e){if(a!==null){return}if(JS.Enumerable.areEqual(c,f)||(d&&c.apply(b||null,arguments))){a=e}});return a},first:function(b){var a=this.toArray();return(b===undefined)?a[0]:a.slice(0,b)},grep:function(c,d,b){d=JS.Enumerable.toFn(d);var a=[];this.forEach(function(f){var e=JS.isFn(c.match)?c.match(f):c(f);if(!e){return}if(d){f=d.apply(b||null,arguments)}a.push(f)});return a},groupBy:function(c,a){if(!c){return this.enumFor("groupBy")}c=JS.Enumerable.toFn(c);var b=new JS.Hash();this.forEach(function(d){var e=c.apply(a||null,arguments);if(!b.hasKey(e)){b.store(e,[])}b.get(e).push(d)});return b},inject:function(c,f,e){var d=JS.array(arguments),b=0,a={};switch(d.length){case 1:c=a;f=d[0];break;case 2:if(JS.isFn(c)){c=a;f=d[0];e=d[1]}}f=JS.Enumerable.toFn(f);this.forEach(function(h){if(!b++&&c===a){return c=h}var g=[c].concat(JS.array(arguments));c=f.apply(e||null,g)});return c},map:function(c,a){if(!c){return this.enumFor("map")}c=JS.Enumerable.toFn(c);var b=[];this.forEach(function(){b.push(c.apply(a||null,arguments))});return b},max:function(b,a){return this.minmax(b,a)[1]},maxBy:function(b,a){if(!b){return this.enumFor("maxBy")}return this.minmaxBy(b,a)[1]},member:function(a){return this.any(function(b){return JS.Enumerable.areEqual(b,a)})},min:function(b,a){return this.minmax(b,a)[0]},minBy:function(b,a){if(!b){return this.enumFor("minBy")}return this.minmaxBy(b,a)[0]},minmax:function(c,a){var b=this.sort(c,a);return[b[0],b[b.length-1]]},minmaxBy:function(c,a){if(!c){return this.enumFor("minmaxBy")}var b=this.sortBy(c,a);return[b[0],b[b.length-1]]},none:function(b,a){return !this.any(b,a)},one:function(c,a){c=JS.Enumerable.toFn(c);var b=0;this.forEach(function(d){if(c?c.apply(a||null,arguments):d){b+=1}});return b===1},partition:function(d,b){if(!d){return this.enumFor("partition")}d=JS.Enumerable.toFn(d);var a=[],c=[];this.forEach(function(e){(d.apply(b||null,arguments)?a:c).push(e)});return[a,c]},reject:function(c,a){if(!c){return this.enumFor("reject")}c=JS.Enumerable.toFn(c);var b=[];this.forEach(function(d){if(!c.apply(a||null,arguments)){b.push(d)}});return b},reverseForEach:function(c,b){if(!c){return this.enumFor("reverseForEach")}c=JS.Enumerable.toFn(c);var a=this.toArray(),d=a.length;while(d--){c.call(b||null,a[d])}return this},select:function(c,a){if(!c){return this.enumFor("select")}c=JS.Enumerable.toFn(c);var b=[];this.forEach(function(d){if(c.apply(a||null,arguments)){b.push(d)}});return b},sort:function(d,c){var b=JS.Enumerable.isComparable(this),a=this.toArray();d=d||(b?function(f,e){return f.compareTo(e)}:null);return d?a.sort(function(f,e){return d.call(c||null,f,e)}):a.sort()},sortBy:function(e,c){if(!e){return this.enumFor("sortBy")}e=JS.Enumerable.toFn(e);var a=JS.Enumerable,d=new a.Collection(this.map(e,c)),b=a.isComparable(d);return new a.Collection(d.zip(this).sort(function(g,f){g=g[0];f=f[0];return b?g.compareTo(f):(g<f?-1:(g>f?1:0))})).map(function(f){return f[1]})},take:function(b){var a=[];this.forEachWithIndex(function(d,c){if(c<b){a.push(d)}});return a},takeWhile:function(d,c){if(!d){return this.enumFor("takeWhile")}d=JS.Enumerable.toFn(d);var a=[],b=true;this.forEach(function(e){if(b){b=b&&d.apply(c||null,arguments)}if(b){a.push(e)}});return a},toArray:function(){return this.drop(0)},zip:function(){var b=JS.Enumerable,c=[],a=0,g=arguments.length,f,e;if(JS.isFn(arguments[g-1])){f=arguments[g-1];e={}}if(JS.isFn(arguments[g-2])){f=arguments[g-2];e=arguments[g-1]}b.forEach.call(arguments,function(h){if(h===f||h===e){return}if(h.toArray){h=h.toArray()}if(JS.isType(h,Array)){c.push(h)}});var d=this.map(function(i){var h=[i];b.forEach.call(c,function(j){h.push(j[a]===undefined?null:j[a])});return ++a&&h});if(!f){return d}b.forEach.call(d,f,e)}});JS.Enumerable.include({forEach:JS.Enumerable.forEach,collect:JS.Enumerable.instanceMethod("map"),detect:JS.Enumerable.instanceMethod("find"),entries:JS.Enumerable.instanceMethod("toArray"),every:JS.Enumerable.instanceMethod("all"),findAll:JS.Enumerable.instanceMethod("select"),filter:JS.Enumerable.instanceMethod("select"),some:JS.Enumerable.instanceMethod("any"),extend:{toFn:function(a){if(!a){return a}if(a.toFunction){return a.toFunction()}if(this.OPS[a]){return this.OPS[a]}if(JS.isType(a,"string")||JS.isType(a,String)){return function(){var b=JS.array(arguments),c=b.shift(),d=c[a];return JS.isFn(d)?d.apply(c,b):d}}return a},OPS:{"+":function(d,c){return d+c},"-":function(d,c){return d-c},"*":function(d,c){return d*c},"/":function(d,c){return d/c},"%":function(d,c){return d%c},"^":function(d,c){return d^c},"&":function(d,c){return d&c},"&&":function(d,c){return d&&c},"|":function(d,c){return d|c},"||":function(d,c){return d||c},"==":function(d,c){return d==c},"!=":function(d,c){return d!=c},">":function(d,c){return d>c},">=":function(d,c){return d>=c},"<":function(d,c){return d<c},"<=":function(d,c){return d<=c},"===":function(d,c){return d===c},"!==":function(d,c){return d!==c},"[]":function(d,c){return d[c]},"()":function(d,c){return d(c)}},Enumerator:new JS.Class({include:JS.Enumerable,extend:{DEFAULT_METHOD:"forEach"},initialize:function(b,c,a){this._object=b;this._method=c||this.klass.DEFAULT_METHOD;this._args=(a||[]).slice()},forEach:function(c,b){if(!c){return this}var a=this._args.slice();a.push(c);if(b){a.push(b)}return this._object[this._method].apply(this._object,a)},cons:JS.Enumerable.instanceMethod("forEachCons"),reverse:JS.Enumerable.instanceMethod("reverseForEach"),slice:JS.Enumerable.instanceMethod("forEachSlice"),withIndex:JS.Enumerable.instanceMethod("forEachWithIndex"),withObject:JS.Enumerable.instanceMethod("forEachWithObject")})}},false);JS.Enumerable.Collection.include(JS.Enumerable,true);JS.Kernel.include({enumFor:function(b){var a=JS.array(arguments),b=a.shift();return new JS.Enumerable.Enumerator(this,b,a)}},false);JS.Kernel.define("toEnum",JS.Kernel.instanceMethod("enumFor"),true);
JS.Observable=new JS.Module("Observable",{extend:{DEFAULT_METHOD:"update"},addObserver:function(a,b){(this.__observers__=this.__observers__||[]).push({_block:a,_context:b||null})},removeObserver:function(a,c){this.__observers__=this.__observers__||[];c=c||null;var b=this.countObservers();while(b--){if(this.__observers__[b]._block===a&&this.__observers__[b]._context===c){this.__observers__.splice(b,1);return}}},removeObservers:function(){this.__observers__=[]},countObservers:function(){return(this.__observers__=this.__observers__||[]).length},notifyObservers:function(){if(!this.isChanged()){return}var c=this.countObservers(),a,d,b;while(c--){a=this.__observers__[c];d=a._block;b=a._context;if(JS.isFn(d)){d.apply(b||null,arguments)}else{d[b||JS.Observable.DEFAULT_METHOD].apply(d,arguments)}}},setChanged:function(a){this.__changed__=!(a===false)},isChanged:function(){if(this.__changed__===undefined){this.__changed__=true}return !!this.__changed__}});JS.Observable.include({subscribe:JS.Observable.instanceMethod("addObserver"),unsubscribe:JS.Observable.instanceMethod("removeObserver")},true);
JS.Hash=new JS.Class("Hash",{include:JS.Enumerable||{},extend:{Pair:new JS.Class({include:JS.Comparable||{},setKey:function(a){this[0]=this.key=a},hasKey:function(a){var b=this.key;return b.equals?b.equals(a):b===a},setValue:function(a){this[1]=this.value=a},hasValue:function(a){var b=this.value;return b.equals?b.equals(a):b===a},compareTo:function(a){return this.key.compareTo?this.key.compareTo(a.key):(this.key<a.key?-1:(this.key>a.key?1:0))},hash:function(){var a=JS.Hash.codeFor(this.key),b=JS.Hash.codeFor(this.value);return[a,b].sort().join("")}}),codeFor:function(a){if(typeof a!=="object"){return String(a)}return JS.isFn(a.hash)?a.hash():a.toString()}},initialize:function(a){this.clear();if(!JS.isType(a,Array)){return this.setDefault(a)}for(var b=0,c=a.length;b<c;b+=2){this.store(a[b],a[b+1])}},forEach:function(d,b){if(!d){return this.enumFor("forEach")}d=JS.Enumerable.toFn(d);var c,e,a;for(c in this._buckets){if(!this._buckets.hasOwnProperty(c)){continue}e=this._buckets[c];a=e.length;while(a--){d.call(b||null,e[a])}}return this},_bucketForKey:function(a,b){var c=this.klass.codeFor(a),d=this._buckets[c];if(!d&&b){d=this._buckets[c]=[]}return d},_indexInBucket:function(d,b){var a=d.length,c=!!this._compareByIdentity;while(a--){if(c?(d[a].key===b):d[a].hasKey(b)){return a}}return -1},assoc:function(b,c){var e,a,d;e=this._bucketForKey(b,c);if(!e){return null}a=this._indexInBucket(e,b);if(a>-1){return e[a]}if(!c){return null}this.size+=1;this.length+=1;d=new this.klass.Pair;d.setKey(b);e.push(d);return d},rassoc:function(b){var a=this.key(b);return a?this.assoc(a):null},clear:function(){this._buckets={};this.length=this.size=0},compareByIdentity:function(){this._compareByIdentity=true},comparesByIdentity:function(){return !!this._compareByIdentity},setDefault:function(a){this._default=a;return this},getDefault:function(a){return JS.isFn(this._default)?this._default(this,a):(this._default||null)},equals:function(b){if(!JS.isType(b,JS.Hash)||this.length!==b.length){return false}var a=true;this.forEach(function(d){if(!a){return}var c=b.assoc(d.key);if(c===null||!c.hasValue(d.value)){a=false}});return a},hash:function(){var a=[];this.forEach(function(b){a.push(b.hash())});return a.sort().join("")},fetch:function(b,a){var c=this.assoc(b);if(c){return c.value}if(a===undefined){throw new Error("key not found")}if(JS.isFn(a)){return a(b)}return a},forEachKey:function(b,a){if(!b){return this.enumFor("forEachKey")}b=JS.Enumerable.toFn(b);this.forEach(function(c){b.call(a||null,c.key)});return this},forEachPair:function(b,a){if(!b){return this.enumFor("forEachPair")}b=JS.Enumerable.toFn(b);this.forEach(function(c){b.call(a||null,c.key,c.value)});return this},forEachValue:function(b,a){if(!b){return this.enumFor("forEachValue")}b=JS.Enumerable.toFn(b);this.forEach(function(c){b.call(a||null,c.value)});return this},get:function(a){var b=this.assoc(a);return b?b.value:this.getDefault(a)},hasKey:function(a){return !!this.assoc(a)},hasValue:function(c){var a=false,b=!!this._compareByIdentity;this.forEach(function(d){if((c.equals&&!b)?c.equals(d.value):c===d.value){a=true}});return a},invert:function(){var a=new this.klass;this.forEach(function(b){a.store(b.value,b.key)});return a},isEmpty:function(){for(var a in this._buckets){if(this._buckets.hasOwnProperty(a)&&this._buckets[a].length>0){return false}}return true},key:function(b){var a=null;this.forEach(function(c){if(b.equals?b.equals(c.value):(b===c.value)){a=c.key}});return a},keys:function(){var a=[];this.forEach(function(b){a.push(b.key)});return a},merge:function(c,d,a){var b=new this.klass;b.update(this);b.update(c,d,a);return b},rehash:function(){var a=new this.klass;a._buckets=this._buckets;this.clear();this.update(a)},remove:function(c,d){if(d===undefined){d=null}var e,b,a;e=this._bucketForKey(c);if(!e){return JS.isFn(d)?this.fetch(c,d):this.getDefault(c)}b=this._indexInBucket(e,c);if(b<0){return JS.isFn(d)?this.fetch(c,d):this.getDefault(c)}a=e[b].value;e.splice(b,1);this.size-=1;this.length-=1;if(e.length===0){delete this._buckets[this.klass.codeFor(c)]}return a},removeIf:function(b,a){if(!b){return this.enumFor("removeIf")}b=JS.Enumerable.toFn(b);this.forEach(function(c){if(b.call(a||null,c)){this.remove(c.key)}},this);return this},replace:function(a){this.clear();this.update(a)},shift:function(){var a=this.keys();if(a.length===0){return this.getDefault()}var b=this.assoc(a[0]);this.remove(b.key);return b},store:function(a,b){this.assoc(a,true).setValue(b);return b},update:function(c,d,b){var a=JS.isFn(d);c.forEach(function(g){var e=g.key,f=g.value;if(a&&this.hasKey(e)){f=d.call(b||null,e,this.get(e),f)}this.store(e,f)},this)},values:function(){var a=[];this.forEach(function(b){a.push(b.value)});return a},valuesAt:function(){var b=arguments.length,a=[];while(b--){a.push(this.get(arguments[b]))}return a}});JS.Hash.include({includes:JS.Hash.instanceMethod("hasKey"),index:JS.Hash.instanceMethod("key"),put:JS.Hash.instanceMethod("store")},true);
JS.Set=new JS.Class("Set",{extend:{forEach:function(c,d,b){if(!c||!d){return}if(c.forEach){return c.forEach(d,b)}for(var a=0,e=c.length;a<e;a++){if(c[a]!==undefined){d.call(b||null,c[a],a)}}}},include:JS.Enumerable||{},initialize:function(b,c,a){this.clear();if(c){this.klass.forEach(b,function(d){this.add(c.call(a||null,d))},this)}else{this.merge(b)}},forEach:function(b,a){if(!b){return this.enumFor("forEach")}b=JS.Enumerable.toFn(b);this.klass.forEach(this._members,b,a);return this},add:function(a){if(this.contains(a)){return false}this._members.push(a);this.length=this.size=this._members.length;return true},classify:function(c,b){if(!c){return this.enumFor("classify")}c=JS.Enumerable.toFn(c);var a=new JS.Hash();this.forEach(function(d){var e=c.call(b||null,d);if(!a.hasKey(e)){a.store(e,new this.klass)}a.get(e).add(d)},this);return a},clear:function(){this._members=[];this.length=this.size=0},complement:function(a){var b=new this.klass;this.klass.forEach(a,function(c){if(!this.contains(c)){b.add(c)}},this);return b},contains:function(a){return this._indexOf(a)!==-1},difference:function(a){a=JS.isType(a,JS.Set)?a:new JS.Set(a);var b=new this.klass;this.forEach(function(c){if(!a.contains(c)){b.add(c)}});return b},divide:function(d,b){if(!d){return this.enumFor("divide")}d=JS.Enumerable.toFn(d);var a=this.classify(d,b),c=new this.klass;a.forEachValue(c.method("add"));return c},equals:function(b){if(this.length!==b.length||!JS.isType(b,JS.Set)){return false}var a=true;this.forEach(function(c){if(!a){return}if(!b.contains(c)){a=false}});return a},hash:function(){var a=[];this.forEach(function(b){a.push(JS.Hash.codeFor(b))});return a.sort().join("")},flatten:function(b){var a=new this.klass;a._members=this._members;if(!b){b=this;b.clear()}a.forEach(function(c){if(JS.isType(c,JS.Set)){c.flatten(b)}else{b.add(c)}});return b},intersection:function(a){var b=new this.klass;this.klass.forEach(a,function(c){if(this.contains(c)){b.add(c)}},this);return b},isEmpty:function(){return this._members.length===0},isProperSubset:function(a){return this._members.length<a._members.length&&this.isSubset(a)},isProperSuperset:function(a){return this._members.length>a._members.length&&this.isSuperset(a)},isSubset:function(b){var a=true;this.forEach(function(c){if(!a){return}if(!b.contains(c)){a=false}});return a},isSuperset:function(a){return a.isSubset(this)},merge:function(a){this.klass.forEach(a,function(b){this.add(b)},this)},product:function(a){var b=new JS.Set;this.forEach(function(c){this.klass.forEach(a,function(d){b.add([c,d])})},this);return b},rebuild:function(){var a=this._members;this.clear();this.merge(a)},remove:function(b){var a=this._indexOf(b);if(a===-1){return}this._members.splice(a,1);this.length=this.size=this._members.length},removeIf:function(d,c){if(!d){return this.enumFor("removeIf")}d=JS.Enumerable.toFn(d);var a=this._members,b=a.length;while(b--){if(d.call(c||null,a[b])){this.remove(a[b])}}return this},replace:function(a){this.clear();this.merge(a)},subtract:function(a){this.klass.forEach(a,function(b){this.remove(b)},this)},union:function(a){var b=new this.klass;b.merge(this);b.merge(a);return b},xor:function(a){var b=new JS.Set(a);this.forEach(function(c){b[b.contains(c)?"remove":"add"](c)});return b},_indexOf:function(c){var a=this._members.length,b=JS.Enumerable.areEqual;while(a--){if(b(c,this._members[a])){return a}}return -1}});JS.Set.include({n:JS.Set.instanceMethod("intersection"),u:JS.Set.instanceMethod("union"),x:JS.Set.instanceMethod("product")},false);JS.SortedSet=new JS.Class("SortedSet",JS.Set,{extend:{compare:function(b,a){return JS.isType(b,Object)?b.compareTo(a):(b<a?-1:(b>a?1:0))}},add:function(b){var a=this._indexOf(b,true);if(a===null){return}this._members.splice(a,0,b);this.length=this.size=this._members.length},_indexOf:function(j,e){var g=this._members,b=g.length,c=0,f=b,a=this.klass.compare,h=JS.Enumerable.areEqual,k;if(b===0){return e?0:-1}if(a(j,g[0])<1){f=0;c=0}if(a(j,g[b-1])>0){f=0;c=b}while(!h(j,g[c])&&f>0.5){f=f/2;c+=(a(j,g[c])>0?1:-1)*Math.round(f);if(c>0&&a(j,g[c-1])>0&&a(j,g[c])<1){f=0}}while(g[c]&&!h(j,g[c])&&a(j,g[c])===0){c+=1}k=h(j,g[c]);return e?(k?null:c):(k?c:-1)}});JS.HashSet=new JS.Class("HashSet",JS.Set,{forEach:function(b,a){if(!b){return this.enumFor("forEach")}b=JS.Enumerable.toFn(b);this._members.forEachKey(b,a);return this},add:function(a){if(this.contains(a)){return false}this._members.store(a,true);this.length=this.size=this._members.length;return true},clear:function(){this._members=new JS.Hash();this.size=this.length=0},contains:function(a){return this._members.hasKey(a)},rebuild:function(){this._members.rehash();this.length=this.size=this._members.length},remove:function(a){this._members.remove(a);this.length=this.size=this._members.length},removeIf:function(b,a){if(!b){return this.enumFor("removeIf")}b=JS.Enumerable.toFn(b);this._members.removeIf(function(c){return b.call(a||null,c.key)});this.length=this.size=this._members.length;return this}});JS.Enumerable.include({toSet:function(a,c,b){a=a||JS.Set;return new a(this,c,b)}},true);
JS.LinkedList=new JS.Class("LinkedList",{include:JS.Enumerable||{},initialize:function(d,a){this.length=0;this.first=this.last=null;if(!d){return}for(var b=0,c=d.length;b<c;b++){this.push(a?new this.klass.Node(d[b]):d[b])}},forEach:function(e,b){if(!e){return this.enumFor("forEach")}e=JS.Enumerable.toFn(e);var d=this.first,c,a,f;for(a=0,f=this.length;a<f;a++){c=d.next;e.call(b||null,d,a);if(d===this.last){break}d=c}return this},at:function(b){if(b<0||b>=this.length){return undefined}var a=this.first;while(b--){a=a.next}return a},pop:function(){return this.length?this.remove(this.last):undefined},shift:function(){return this.length?this.remove(this.first):undefined},insertAfter:function(){},push:function(){},remove:function(){},extend:{Node:new JS.Class({initialize:function(a){this.data=a;this.prev=this.next=this.list=null}})}});JS.LinkedList.Doubly=new JS.Class("LinkedList.Doubly",JS.LinkedList,{insertAt:function(b,a){if(b<0||b>=this.length){return}this.insertBefore(this.at(b),a)},unshift:function(a){this.length>0?this.insertBefore(this.first,a):this.push(a)},insertBefore:function(){}});JS.LinkedList.insertTemplate=function(b,a,c){return function(e,d){if(e.list!==this){return}d[b]=e;d[a]=e[a];e[a]=(e[a][b]=d);if(d[b]===this[c]){this[c]=d}d.list=this;this.length++}};JS.LinkedList.Doubly.Circular=new JS.Class("LinkedList.Doubly.Circular",JS.LinkedList.Doubly,{insertAfter:JS.LinkedList.insertTemplate("prev","next","last"),insertBefore:JS.LinkedList.insertTemplate("next","prev","first"),push:function(a){if(this.length){return this.insertAfter(this.last,a)}this.first=this.last=a.prev=a.next=a;a.list=this;this.length=1},remove:function(a){if(a.list!==this||this.length===0){return null}if(this.length>1){a.prev.next=a.next;a.next.prev=a.prev;if(a===this.first){this.first=a.next}if(a===this.last){this.last=a.prev}}else{this.first=this.last=null}a.prev=a.next=a.list=null;this.length--;return a}});
JS.Command=new JS.Class("Command",{initialize:function(a){if(JS.isFn(a)){a={execute:a}}this._functions=a;this._stack=this._functions.stack||null},execute:function(b){if(this._stack){this._stack._restart()}var a=this._functions.execute;if(a){a.apply(this)}if(this._stack&&b!==false){this._stack.push(this)}},undo:function(){var a=this._functions.undo;if(a){a.apply(this)}},extend:{Stack:new JS.Class({include:[JS.Observable||{},JS.Enumerable||{}],initialize:function(a){a=a||{};this._redo=a.redo||null;this.clear()},forEach:function(c,b){if(!c){return this.enumFor("forEach")}c=JS.Enumerable.toFn(c);for(var a=0,d=this._stack.length;a<d;a++){if(this._stack[a]!==undefined){c.call(b||null,this._stack[a],a)}}return this},clear:function(){this._stack=[];this.length=this.pointer=0},_restart:function(){if(this.pointer===0&&this._redo&&this._redo.execute){this._redo.execute()}},push:function(a){this._stack.splice(this.pointer,this.length);this._stack.push(a);this.length=this.pointer=this._stack.length;if(this.notifyObservers){this.notifyObservers(this)}},stepTo:function(a){if(a<0||a>this.length){return}var b,c;switch(true){case a>this.pointer:for(b=this.pointer,c=a;b<c;b++){this._stack[b].execute(false)}break;case a<this.pointer:if(this._redo&&this._redo.execute){this._redo.execute();for(b=0,c=a;b<c;b++){this._stack[b].execute(false)}}else{for(b=0,c=this.pointer-a;b<c;b++){this._stack[this.pointer-b-1].undo()}}break}this.pointer=a;if(this.notifyObservers){this.notifyObservers(this)}},undo:function(){this.stepTo(this.pointer-1)},redo:function(){this.stepTo(this.pointer+1)}})}});
JS.Decorator=new JS.Class("Decorator",{initialize:function(a,c){var b=new JS.Class(),d={},f,e;for(f in a.prototype){e=a.prototype[f];if(JS.isFn(e)&&e!==a){e=this.klass.delegate(f)}d[f]=e}b.include(new JS.Module(d),false);b.include(this.klass.InstanceMethods,false);b.include(c,true);return b},extend:{delegate:function(a){return function(){return this.component[a].apply(this.component,arguments)}},InstanceMethods:new JS.Module({initialize:function(a){this.component=a;this.klass=this.constructor=a.klass;var c,b;for(c in a){if(this[c]){continue}b=a[c];if(JS.isFn(b)){b=JS.Decorator.delegate(c)}this[c]=b}},extend:function(b){this.component.extend(b);var c,a;for(c in b){a=b[c];if(JS.isFn(a)){a=JS.Decorator.delegate(c)}this[c]=a}}})}});
JS.MethodChain=function(c){var a=[],b=c||{};this.____=function(e,d){a.push({func:e,args:d})};this.fire=function(d){return JS.MethodChain.fire(a,d||b)}};JS.MethodChain.fire=function(a,b){var f,d,c,e;loop:for(c=0,e=a.length;c<e;c++){f=a[c];if(b instanceof JS.MethodChain){b.____(f.func,f.args);continue}switch(typeof f.func){case"string":d=b[f.func];break;case"function":d=f.func;break;case"object":b=f.func;continue loop;break}b=(typeof d==="function")?d.apply(b,f.args):d}return b};JS.MethodChain.prototype={_:function(){var c=arguments[0],a,b,d;switch(typeof c){case"object":case"function":a=[];for(b=1,d=arguments.length;b<d;b++){a.push(arguments[b])}this.____(c,a)}return this},toFunction:function(){var a=this;return function(b){return a.fire(b)}}};JS.MethodChain.reserved=(function(){var b=[],a;for(a in new JS.MethodChain){b.push(a)}return new RegExp("^(?:"+b.join("|")+")$")})();JS.MethodChain.addMethod=function(a){if(this.reserved.test(a)){return}var b=this.prototype[a]=function(){this.____(a,arguments);return this};b.displayName="MethodChain#"+a};JS.MethodChain.displayName="MethodChain";JS.MethodChain.addMethods=function(b){var a=[],d,c;for(d in b){Number(d)!==d&&a.push(d)}if(b instanceof Array){c=b.length;while(c--){typeof b[c]==="string"&&a.push(b[c])}}c=a.length;while(c--){this.addMethod(a[c])}b.prototype&&this.addMethods(b.prototype)};it=its=function(){return new JS.MethodChain};JS.Module.methodAdded(function(a){JS.MethodChain.addMethod(a)});JS.Kernel.include({wait:function(b){var a=new JS.MethodChain;typeof b==="number"&&setTimeout(a.fire.bind(a,this),b*1000);this.forEach&&typeof b==="function"&&this.forEach(function(){setTimeout(a.fire.bind(a,arguments[0]),b.apply(this,arguments)*1000)});return a},_:function(){var c=arguments[0],a=[],b,d;for(b=1,d=arguments.length;b<d;b++){a.push(arguments[b])}return(typeof c==="object"&&c)||(typeof c==="function"&&c.apply(this,a))||this}},true);JS.MethodChain.addMethods(["abbr","abs","accept","acceptCharset","accesskey","acos","action","addEventListener","adjacentNode","align","alignWithTop","alink","alt","anchor","appendChild","appendedNode","apply","archive","arguments","arity","asin","atan","atan2","attrNode","attributes","axis","background","bgcolor","big","blink","blur","bold","border","call","caller","ceil","cellpadding","cellspacing","char","charAt","charCodeAt","charoff","charset","checked","childNodes","cite","className","classid","clear","click","clientHeight","clientLeft","clientTop","clientWidth","cloneNode","code","codebase","codetype","color","cols","colspan","compact","concat","content","coords","cos","data","datetime","declare","deep","defer","dir","disabled","dispatchEvent","enctype","event","every","exec","exp","face","filter","firstChild","fixed","floor","focus","fontcolor","fontsize","forEach","frame","frameborder","fromCharCode","getAttribute","getAttributeNS","getAttributeNode","getAttributeNodeNS","getDate","getDay","getElementsByTagName","getElementsByTagNameNS","getFullYear","getHours","getMilliseconds","getMinutes","getMonth","getSeconds","getTime","getTimezoneOffset","getUTCDate","getUTCDay","getUTCFullYear","getUTCHours","getUTCMilliseconds","getUTCMinutes","getUTCMonth","getUTCSeconds","getYear","global","handler","hasAttribute","hasAttributeNS","hasAttributes","hasChildNodes","hasOwnProperty","headers","height","href","hreflang","hspace","htmlFor","httpEquiv","id","ignoreCase","index","indexOf","innerHTML","input","insertBefore","insertedNode","isPrototypeOf","ismap","italics","join","label","lang","language","lastChild","lastIndex","lastIndexOf","length","link","listener","localName","log","longdesc","map","marginheight","marginwidth","match","max","maxlength","media","method","min","multiline","multiple","name","namespace","namespaceURI","nextSibling","node","nodeName","nodeType","nodeValue","nohref","noresize","normalize","noshade","now","nowrap","object","offsetHeight","offsetLeft","offsetParent","offsetTop","offsetWidth","onblur","onchange","onclick","ondblclick","onfocus","onkeydown","onkeypress","onkeyup","onload","onmousedown","onmousemove","onmouseout","onmouseover","onmouseup","onreset","onselect","onsubmit","onunload","ownerDocument","parentNode","parse","pop","pow","prefix","previousSibling","profile","prompt","propertyIsEnumerable","push","random","readonly","reduce","reduceRight","rel","removeAttribute","removeAttributeNS","removeAttributeNode","removeChild","removeEventListener","removedNode","replace","replaceChild","replacedNode","rev","reverse","round","rows","rowspan","rules","scheme","scope","scrollHeight","scrollIntoView","scrollLeft","scrollTop","scrollWidth","scrolling","search","selected","setAttribute","setAttributeNS","setAttributeNode","setAttributeNodeNS","setDate","setFullYear","setHours","setMilliseconds","setMinutes","setMonth","setSeconds","setTime","setUTCDate","setUTCFullYear","setUTCHours","setUTCMilliseconds","setUTCMinutes","setUTCMonth","setUTCSeconds","setYear","shape","shift","sin","size","slice","small","some","sort","source","span","splice","split","sqrt","src","standby","start","strike","style","sub","substr","substring","summary","sup","tabIndex","tabindex","tagName","tan","target","test","text","textContent","title","toArray","toFunction","toGMTString","toLocaleDateString","toLocaleFormat","toLocaleString","toLocaleTimeString","toLowerCase","toSource","toString","toUTCString","toUpperCase","type","unshift","unwatch","useCapture","usemap","valign","value","valueOf","valuetype","version","vlink","vspace","watch","width"]);
if(JS.Proxy===undefined){JS.Proxy={}}JS.Proxy.Virtual=new JS.Class("Proxy.Virtual",{initialize:function(a){var f=function(){},c=new JS.Class(),b={},e,d;f.prototype=a.prototype;for(e in a.prototype){d=a.prototype[e];if(JS.isFn(d)&&d!==a){d=this.klass.forward(e)}b[e]=d}c.include({initialize:function(){var g=arguments,h=null;this.__getSubject__=function(){h=new f;a.apply(h,g);return(this.__getSubject__=function(){return h})()}},klass:a,constructor:a},false);c.include(new JS.Module(b),false);c.include(this.klass.InstanceMethods,true);return c},extend:{forward:function(a){return function(){var b=this.__getSubject__();return b[a].apply(b,arguments)}},InstanceMethods:new JS.Module({extend:function(b){this.__getSubject__().extend(b);var c,a;for(c in b){a=b[c];if(JS.isFn(a)){a=JS.Proxy.Virtual.forward(c)}this[c]=a}}})}});
JS.Ruby=function(a,b){b.call(new JS.Ruby.ClassBuilder(a))};JS.extend(JS.Ruby,{extendDSL:function(a,b){for(var c in b){if(a[c]||!JS.isFn(b[c])){continue}this.addMethod(a,b,c)}},addMethod:function(a,b,c){a[c]=function(){var d=b[c].apply(b,arguments);JS.Ruby.extendDSL(a,b);return d}},alias:function(b,a){return function(d,e){var c=b[e];if(c!==undefined){this.def(d,c)}if(a){JS.Ruby.extendDSL(a,b)}}},ClassBuilder:function(a){this.def=a.method("define");this.alias=JS.Ruby.alias(a.prototype);this.self={def:JS.bind(function(b,d){var c={};c[b]=d;a.extend(c);JS.Ruby.extendDSL(this,a)},this),alias:JS.Ruby.alias(a,this)};JS.Ruby.extendDSL(this,a)}});
JS.StackTrace=new JS.Module("StackTrace",{extend:{included:function(c){var b=c.__mod__||c,a=this,d;b.extend({define:function(e,f){if(!JS.isFn(f)){return this.callSuper()}var g=a.wrap(f,b,e);return this.callSuper(e,g)}});for(d in b.__fns__){b.define(d,b.__fns__[d],false)}b.resolve();if(!b.__nom__){setTimeout(function(){b.__nom__=a.nameOf(c)},1)}},nameOf:function(c,b){var e=[],d,g,f,a;if(JS.isType(c,Array)){for(d=0,g=c.length;d<g;d++){e.push(this.nameOf(c[d]))}return e}if(c.__nom__){return c.__nom__}f=[{name:null,o:b||this.root}];a=0;while(typeof f==="object"&&a<this.maxDepth){a+=1;f=this.descend(f,c)}if(typeof f=="string"){f=f.replace(/\.prototype\./g,"#");c.__nom__=f;if(c.__meta__){c.__meta__.__nom__=f+".__meta__"}}return c.__nom__},descend:function(f,g){var d=[],h=f.length,c=h,b,e,a;while(c--){e=f[c];if(h>1&&JS.indexOf(this.excluded,e.o)!==-1){continue}if(JS.isType(e.o,Array)){continue}a=e.name?e.name+".":"";for(b in e.o){if(g&&e.o[b]===g){return a+b}d.push({name:a+b,o:e.o[b]})}}return d},root:this,excluded:[],maxDepth:8,logLevel:"full",stack:new JS.Singleton({_list:[],indent:function(){var a="",b=this._list.length;while(b--){a+="|  "}return a},push:function(c,b,a){if(JS.StackTrace.logLevel==="full"){window.console&&console.log(this.indent()+c+"(",a,")")}this._list.push({name:c,object:b,args:a})},pop:function(a){var b=this._list.pop().name;if(JS.StackTrace.logLevel==="full"){window.console&&console.log(this.indent()+b+"() --> ",a)}return b},top:function(){return this._list[this._list.length-1]||{}},backtrace:function(){var a=this._list.length,b;while(a--){b=this._list[a];window.console&&console.log(b.name,"in",b.object,"(",b.args,")")}}}),flush:function(){this.stack._list=[]},print:function(){this.stack.backtrace()},wrap:function(d,c,b){var a=JS.StackTrace;var e=function(){var f,h=a.nameOf(c)+"#"+b;a.stack.push(h,this,arguments);if(a.logLevel==="errors"){try{f=d.apply(this,arguments)}catch(g){if(g.logged){throw g}g.logged=true;window.console&&console.error(g,"thrown by",a.stack.top().name+". Backtrace:");a.print();a.flush();throw g}}else{f=d.apply(this,arguments)}a.stack.pop(f);return f};e.toString=function(){return d.toString()};return e}}});(function(){var b=JS.StackTrace,a;for(a in b.root){if(a!=="JS"){b.excluded.push(b.root[a])}}})();
JS.State=new JS.Module("State",{__getState__:function(a){return(typeof a==="object"&&a)||(typeof a==="string"&&((this.states||{})[a]||{}))||{}},setState:function(a){this.__state__=this.__getState__(a);JS.State.addMethods(this.__state__,this.klass)},inState:function(){var a=arguments.length;while(a--){if(this.__state__===this.__getState__(arguments[a])){return true}}return false},extend:{stub:function(){return this},buildStubs:function(d,c,a){var b,e;for(b in a){c[b]={};for(e in a[b]){d[e]=this.stub}}},buildCollection:function(e,i){var b={},g={},d=e.lookup("states").pop()||{},c,h,f,a;this.buildStubs(b,g,i);this.buildStubs(b,g,d);for(c in g){h=(d[c]||{}).klass;h=h?new JS.Class(h,i[c]):new JS.Class(i[c]);f={};for(a in b){if(!h.prototype[a]){f[a]=b[a]}}h.include(f,false);g[c]=new h}if(e.__res__){this.addMethods(b,e.__res__.klass)}return g},addMethods:function(c,a){if(!a){return}var b={},d=a.prototype,e;for(e in c){if(d[e]){continue}d[e]=a.__mod__.__fns__[e]=this.wrapped(e)}},wrapped:function(a){return function(){var b=(this.__state__||{})[a];return b?b.apply(this,arguments):this}}}});JS.Module.include({define:(function(a){return function(b,c){if(b==="states"&&typeof c==="object"){arguments[1]=JS.State.buildCollection(this,c)}return a.apply(this,arguments)}})(JS.Module.prototype.define)},true);

var JSON=function(){var m={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},s={"boolean":function(x){return String(x)},number:function(x){return isFinite(x)?String(x):"null"},string:function(x){if(/["\\\x00-\x1f]/.test(x)){x=x.replace(/([\x00-\x1f\\"])/g,function(a,b){var c=m[b];if(c){return c}c=b.charCodeAt();return"\\u00"+Math.floor(c/16).toString(16)+(c%16).toString(16)})}return'"'+x+'"'},object:function(x){if(x){var a=[],b,f,i,l,v;if(x instanceof Array){a[0]="[";l=x.length;for(i=0;i<l;i+=1){v=x[i];f=s[typeof v];if(f){v=f(v);if(typeof v=="string"){if(b){a[a.length]=","}a[a.length]=v;b=true}}}a[a.length]="]"}else{if(x instanceof Object){a[0]="{";for(i in x){v=x[i];f=s[typeof v];if(f){v=f(v);if(typeof v=="string"){if(b){a[a.length]=","}a.push(s.string(i),":",v);b=true}}}a[a.length]="}"}else{return}}return a.join("")}return"null"}};return{copyright:"(c)2005 JSON.org",license:"http://www.crockford.com/JSON/license.html",stringify:function(v){var f=s[typeof v];if(f){v=f(v);if(typeof v=="string"){return v}}return null},parse:function(text){try{return !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(text.replace(/"(\\.|[^"\\])*"/g,"")))&&eval("("+text+")")}catch(e){return false}}}}();

	


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.DisplayAds={empty_image:"817-grey.gif",empty_class:".hide_this_ad",init:function(){Element.addMethods("iframe",{getDocument:function(a){a=$(a);if(a.contentWindow){return a.contentWindow.document}else{if(a.contentDocument){return a.contentDocument}}return null},$:function(d,f){d=$(d);var c=d.getDocument();if(arguments.length>2){for(var b=1,a=[],e=arguments.length;b<e;b++){a.push(d.$(arguments[b]))}return a}if(Object.isString(f)){f=c.getElementById(f)}return f||d}})},isEmpty:function(a){a=$(a);if(!a){return true}if(a.select(BookingBuddy.DisplayAds.empty_class).size()>0){return true}var b=false;a.select("img").each(function(c){if(-1!==c.readAttribute("src").indexOf(BookingBuddy.DisplayAds.empty_image)){b=true;return b}});return b},registerTargetingCallback:function(a){if(-1!=$A(["air","vacation"]).indexOf(BookingBuddy.searchMode)){BookingBuddy.Validation.registerValidLocationCallback(a)}else{$A(BookingBuddy.LT.targetedInputs).each(function(b){b.observe("blur",function(){a(b.id,$F(b))})})}}};
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()}}})}};
BB={log:function(a){if(window.console&&BookingBuddy.Rev.debug){console.log(a)}}};BookingBuddy.Rev={debug:false,blackList:{air:["jetblue","Hawaiian","cheap caribbean"],hotel:["jetblue","Hawaiian","cheap caribbean","choice hotels"],vacation:["jetblue","Hawaiian","cheap caribbean"],car:["jetblue","Hawaiian","cheap caribbean"],cruise:["jetblue","Hawaiian","cheap caribbean"],vacation_rental:["jetblue","Hawaiian","cheap caribbean"]},blackListWindowNames:{},omnitureTrackingAdId:{},trackingParam:"click_type=c",visibleIframeId:null,frameMinLoadTime:5000,tabbed:true,tabOrder:[],firstLoad:true,firstTabId:null,maxLeft:0,maxRight:0,firstHiddenTabIndex:7,moveRight:false,moveLeft:false,tabIncrement:102,panelDiv:"panel",searchQueryString:null,adTabOff:{},adTabOn:{},checkedAds:{},redirectUrl:null,searchUrl:"/tabsearches.php",windowLeft:screen.width-890,windowTop:35,windowOptions:(navigator.appName=="Microsoft Internet Explorer")?"toolbar=0,location=1,menubar=0,resizable=1,scrollbars=1,height=740,width=1040,top="+((screen.height-(740+96))/2)+",left="+((screen.width-(1040+32))/2):"status=1,toolbar=1,location=1,menubar=1,resizable=1,scrollbars=1,height=740,width=1040,top="+((screen.height-(740+96))/2)+",left="+((screen.width-(1040+32))/2),initialized:false,init:function(a){BookingBuddy.Search.storeWindowNames=!BookingBuddy.Rev.tabbed;if(a.indexOf("?")!=-1){a+="&"}else{a+="?"}BookingBuddy.Rev.redirectUrl=a;var b=screen.width-925;if(b<0){b=0}BookingBuddy.Search.windowOptions+=",left="+b;Event.observe(window,"resize",BookingBuddy.Rev.setFrameHeight);BookingBuddy.Rev.addTabs()},setFrameHeight:function(){var c=document.viewport.getHeight();var a=$("tab_header_wrapper").getHeight();var b=Math.abs(c-a)-3;$("panel").setStyle({height:b+"px"})},setStagger:function(){BookingBuddy.Rev.windowTop=BookingBuddy.Rev.windowTop+35;BookingBuddy.Rev.windowLeft=Math.max(BookingBuddy.Rev.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.Rev.windowTop;BookingBuddy.Search.windowOptions+=",left="+BookingBuddy.Rev.windowLeft},resetStagger:function(){BookingBuddy.Rev.windowTop=BookingBuddy.Rev.windowTop-35;BookingBuddy.Rev.windowLeft=BookingBuddy.Rev.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.Rev.windowTop;BookingBuddy.Search.windowOptions+=",left="+BookingBuddy.Rev.windowLeft},submitCheckedSearches:function(){var g=false;var i=500;var k=false;var e=$("oneway");if(e){k=e.checked}if(BookingBuddy.Validation.validateSearch(false,k)){var b=$(BookingBuddy.Search.formName);var d="#"+b.id+" .BBInputCheckBox";var c=false;$$(d).each(function(l){if(l.checked){BookingBuddy.Rev.checkedAds[l.id]=l.name;c=true}});if(!c){alert("Select  1 or more providers to get search results");return}if(BookingBuddy.Rev.tabbed){BookingBuddy.Rev.submit($H(BookingBuddy.Rev.checkedAds).values())}else{var f="";var j="";var h={};$H(BookingBuddy.Rev.checkedAds).each(function(n){j=n.key;f=n.value;BB.log("-- Loading: "+f);BookingBuddy.Rev.setStagger();var l=BookingBuddy.Search.submit(f);i=i+500;var o=j.split("_");var m=/\d+/.exec(j);if(!m){return}BookingBuddy.Rev.omnitureTrackingAdId[m]={};BookingBuddy.Rev.omnitureTrackingAdId[m].tier=f;if(l===false){BB.log("false - "+j);g=true;h[m]={};h[m].failed=true;BookingBuddy.Rev.resetStagger()}else{BB.log("true - "+j);h[m]={};h[m].failed=false}});if(BookingBuddy.Search.openedWindowNames&&BookingBuddy.Search.openedWindowNames[0]!==undefined){var a=BookingBuddy.Search.openedWindowNames[0].window;if(!a.closed){a.focus()}}if(g===true){BookingBuddy.Rev.showPopupBlockedMsg(h)}else{BookingBuddy.Search.openedWindowNames=[]}BookingBuddy.Rev.omnitureTrackSearches()}BookingBuddy.Rev.checkedAds={}}},showPopupBlockedMsg:function(k){BookingBuddy.Rev.checkedSearches=k;BB.log(BookingBuddy.Rev.checkedAds);BookingBuddy.Rev.successfulCheckboxSearches=[];if(!$("popup_on_logos")){return}var a=$("dhtml_checkboxes");var i=$("pagetop-logo").positionedOffset();var d=i[0]-20;if(a){a.setStyle({visibility:"visible",top:"35px",left:d+"px"})}var j=$(document.body);var g=$("dhtml_checkboxes_darkenedScreenDiv");if(g&&window.XMLHttpRequest){if(j){g.style.height=(j.getHeight()+30)+"px"}else{g.style.height=(document.viewport.getHeight()+30)+"px"}g.setOpacity(0.5);g.style.visibility="visible"}BookingBuddy.toggleCovered(a,"hidden");var h=$("service_class");if(h){h.style.visibility="hidden"}var f=BookingBuddy.Rev.checkedAds;var c="";var b="";for(b in k){var l=BookingBuddy.Search.getAdMetaData(b,"display_name");var m=BookingBuddy.Rev.checkedAds["check_"+b];c+='<div class="popup_checked_logo" onclick="BookingBuddy.Rev.submitAndToggle(\''+m+'\');"><div class="popup_checked_img">';if(m.indexOf("dropdown ")!=-1){c+="<span>"+l+"</span>"}else{var e=BookingBuddy.Search.getAdMetaData(b,"logo");c+='<img src="'+e+'" />'}c+='<div class="popup_checked_chkmrk" id="chkmrk_'+b+'" style="display:none;"></div></div></div>'}$("popup_on_logos").update(c);$("checkboxes_total").update($H(BookingBuddy.Rev.checkedSearches).size()+" ");b="";for(b in k){if(!k[b].failed){BookingBuddy.Rev.successfulCheckboxSearches.push(b);BookingBuddy.Rev.togglePopupDisplay(b)}}},submitAndToggle:function(e){var d=e.split("|");var g=/i(\d+)/.exec(d[0]);g=g[1];var b=BookingBuddy.Search.getAdMetaData(g,"display_name");b=b.replace(/([^a-zA-Z])/g,"_");for(var c=0;c<BookingBuddy.Search.openedWindowNames.length;c++){var f=BookingBuddy.Search.openedWindowNames[c];if((f.name.indexOf(b)!=-1)&&(!f.window.closed)){f.window.focus();return}}BookingBuddy.Rev.setStagger();var a=BookingBuddy.Search.submit(e);if(a){BookingBuddy.Rev.successfulCheckboxSearches.push(g);BookingBuddy.Rev.togglePopupDisplay(g)}},togglePopupDisplay:function(c){var b=$("name_"+c);var a=$("chkmrk_"+c);if(b){b.setStyle({color:"#666666"})}if(a){a.setStyle({display:""})}$("checkboxes_success").update(BookingBuddy.Rev.successfulCheckboxSearches.length+" ")},submit:function(b,q){var l=BookingBuddy.searchMode;var n=$(BookingBuddy.Search.formName);var t=false;var k=$("oneway");if(k){t=k.checked}if(!Object.isArray(b)){if(typeof b!="string"){return false}c=b.split("|");if(!/^[a-z]\d+$/.test(c[0])){return false}}else{var c=[];var i=[];b.each(function(e){if(typeof e!=="string"){return}var d=e.split("|");if(!/^[a-z]\d+$/.test(d[0])){return false}i.push(d[0])});c[0]=i}n.r.value=c;var h=/host=([\w\.\-]+)/.exec(BookingBuddy.Search.redirectUrl);if(h&&typeof h[1]!="undefined"){if(n.host){n.host.value=h[1]}}form_params=$H(n.serialize(true));var j="";var g="";var r="";form_params.each(function(d){if(d.key.indexOf("nojs_")!=-1||d.key=="all_checkboxes"){BB.log("removing checkbox: "+d.key);form_params.unset(d.key);return}if(d.value=="on"){j=d.key.split("|");g=j[0];if(r!==""){r+=","+g}else{r=g}g=g.substr(1);BookingBuddy.Rev.omnitureTrackingAdId[g]={};BookingBuddy.Rev.omnitureTrackingAdId[g].tier=d.key;BB.log("ON : "+d.key);form_params.unset(d.key)}});form_params.set("r",r);BookingBuddy.Rev.omnitureTrackSearches();var p=new Date();var a=BookingBuddy.Rev.searchUrl+"?"+form_params.toQueryString();BB.log("-- Opening new Tabbed window - SENDING ids: "+form_params.get("r"));window.open(a,"bb_tabbed_window"+p.getTime(),BookingBuddy.Rev.windowOptions);try{BookingBuddy.RS.setSearchCookie()}catch(o){}},registerTabbedAdMetaData:function(b,a){BookingBuddy.Search.registerAdMetaData(b,a);BookingBuddy.Rev.tabOrder.push(b)},addTabs:function(){var c=null;var a=window.location.search;if(a.indexOf("&")!=-1){try{BB.log("-- Pulling parameters from query string");a=a.replace(/\+/g,"%20");c=$H(a.toQueryParams())}catch(b){BB.log("-- toQueryParams - exception: "+b);return null}}if(c){BookingBuddy.Rev.getSearchUrls(c)}BookingBuddy.Rev.loadTabs();if(window.opener&&!window.opener.closed){BookingBuddy.Rev.displayDropdown()}},loadTabs:function(a){BookingBuddy.Rev.tabOrder.each(function(b){BookingBuddy.Rev.adTabOn[b]={};BookingBuddy.Rev.adTabOn[b].url=BookingBuddy.Rev.redirectUrl+"r=i"+b+"&"+BookingBuddy.Rev.searchQueryString;BookingBuddy.Rev.trackAttemptedSearch(BookingBuddy.Rev.adTabOn[b].url,b)});BookingBuddy.Rev.initialized=true;BookingBuddy.Rev.updateDeleteButtons();BB.log("* BookingBuddy.Rev.adTabOn *");BB.log(BookingBuddy.Rev.adTabOn)},getSearchUrls:function(b){if(!b||typeof b=="undefined"){return}var a=b.get("r");if(!a){return}b.unset("r");BookingBuddy.Rev.searchQueryString=b.toQueryString()},trackAttemptedSearch:function(a,b){a+="&"+BookingBuddy.Rev.trackingParam;$("tab_tracking").insert({bottom:'<img id="ttrack_'+b+'" src="'+a+'" height="1" width="1" />'});BookingBuddy.Rev.loadTab(a,b);Sortable.destroy("tabs");Sortable.create("tabs",{constraint:"horizontal",overlap:"horizontal",onUpdate:function(){BookingBuddy.Rev.updateTabOrder();BB.log("sorted");BB.log(BookingBuddy.Rev.tabOrder)}})},updateTabOrder:function(){BookingBuddy.Rev.tabOrder=[];$$("#tabs li").each(function(a){var b=/(\d+)/.exec(a.id);if(b){BookingBuddy.Rev.tabOrder.push(b)}})},updateDeleteButtons:function(){if(BookingBuddy.Rev.tabOrder.length>1){$$(".delete_button").invoke("show")}else{$$(".delete_button").invoke("hide")}},loadTab:function(c,d){if(!BookingBuddy.Rev.adTabOn[d].logo){BookingBuddy.Rev.adTabOn[d].logo=BookingBuddy.Search.getAdMetaData(d,"tab_logo")}if(!BookingBuddy.Rev.adTabOn[d].name){BookingBuddy.Rev.adTabOn[d].name=BookingBuddy.Search.getAdMetaData(d,"display_name")}var b=BookingBuddy.Rev.adTabOn[d].name;if(b&&b.length>12){b=b.substring(0,9)+"..."}$("tabs").insert({bottom:'<li id="li_'+d+'" ><a  id="tab_'+d+'" href="#" title="'+BookingBuddy.Rev.adTabOn[d].name+'" onclick="BookingBuddy.Rev.displayTab('+d+');" onmousedown="this.addClassName(\'tab_down\');" onmouseup="this.removeClassName(\'tab_down\');"><span>'+b+'</span><div  class="preloader_small"></div></a><div class="delete_button" onclick="BookingBuddy.Rev.deleteTab('+d+')"></div></li>'});if(BookingBuddy.Rev.adTabOn[d].logo){$("tab_"+d).setStyle({backgroundImage:"url("+BookingBuddy.Rev.adTabOn[d].logo+")"})}else{$("tab_"+d).addClassName("generic_tab")}if(BookingBuddy.Rev.firstLoad){BB.log("-- First Load: "+d);BookingBuddy.Rev.firstTabId=d;BookingBuddy.Rev.displayTab(d);BookingBuddy.Rev.firstLoad=false}if(BookingBuddy.Rev.initialized){BookingBuddy.Rev.tabOrder.push(d);BookingBuddy.Rev.updateDeleteButtons()}BB.log(BookingBuddy.Rev.tabOrder);var a=$H(BookingBuddy.Rev.adTabOn).size();if(a>6){BookingBuddy.Rev.showMoreTabs(a)}},displayTab:function(c){if($("callout").visible()){$("callout").hide()}$("panel").setStyle({backgroundImage:"none"});if($("panel").hasClassName("white")){$("panel").removeClassName("white")}BookingBuddy.Rev.visibleIframeId=c;tframe=$("tframe_"+c);if(tframe&&!tframe.hasClassName("hidden")){BB.log("-- Frame is already visible: "+c+" ---- returning");return false}$$("#tabs li a").invoke("removeClassName","active_tab");$$("#tabs li").invoke("removeClassName","active_li");var b=$("tab_"+c);var a=$("li_"+c);if(a){a.addClassName("active_li")}if(b){b.addClassName("active_tab");if(c==BookingBuddy.Rev.firstTabId){if(!b.hasClassName("loaded")){b.addClassName("loading")}}}BookingBuddy.Rev.blackList[BookingBuddy.searchMode].each(function(h){var i=new RegExp(h,"i");if(BookingBuddy.Rev.adTabOn[c].name.search(i)!=-1){$("panel").addClassName("white");ad_name=BookingBuddy.Rev.adTabOn[c].name.replace(/([^a-zA-Z])/g,"_");var j=new Date();var g="bb_search_"+ad_name;$("tab_"+c).removeClassName("loading");if(!tframe){var f='<iframe frameborder="0" id="tframe_'+c+'" class="tabbed_iframe hidden popup" src=""></iframe>';$(BookingBuddy.Rev.panelDiv).insert({bottom:f});tframe=$("tframe_"+c)}if(tframe){$$(".tabbed_iframe").each(function(d){d.addClassName("hidden")});$("callout").update('Your search results for <span id="callout_link_'+c+'" onmouseover="this.addClassName(\'callout_hover\');" onmouseout="this.removeClassName(\'callout_hover\');">'+BookingBuddy.Rev.adTabOn[c].name+"</span> opened in a new window.");var e=$("callout_link_"+c);if(e){e.observe("click",function(){if(BookingBuddy.Rev.blackListWindowNames[c]&&!BookingBuddy.Rev.blackListWindowNames[c].closed){BookingBuddy.Rev.blackListWindowNames[c].focus()}else{BookingBuddy.Rev.blackListWindowNames[c]=window.open("",g,BookingBuddy.Search.windowOptions);if(BookingBuddy.Rev.blackListWindowNames[c]){BookingBuddy.Rev.blackListWindowNames[c].location=BookingBuddy.Rev.adTabOn[c].url}}})}$("callout").show();tframe.show()}if(BookingBuddy.Rev.blackListWindowNames[c]&&!BookingBuddy.Rev.blackListWindowNames[c].closed){BookingBuddy.Rev.blackListWindowNames[c].focus()}else{BookingBuddy.Rev.blackListWindowNames[c]=window.open("",g,BookingBuddy.Search.windowOptions);if(BookingBuddy.Rev.blackListWindowNames[c]){BookingBuddy.Rev.blackListWindowNames[c].location=BookingBuddy.Rev.adTabOn[c].url}}return}});if(tframe){BB.log("-- hiding other iframes");$$(".tabbed_iframe").each(function(d){d.addClassName("hidden")});tframe.removeClassName("hidden");return true}else{BB.log("-- inserting frame: "+c);b='<iframe frameborder="0" id="tframe_'+c+'" class="tabbed_iframe hidden" src="'+BookingBuddy.Rev.adTabOn[c].url+'"></iframe>';$(BookingBuddy.Rev.panelDiv).insert({bottom:b});tframe=$("tframe_"+c)}if(tframe){BB.log("-- hiding other iframes");$$(".tabbed_iframe").each(function(d){d.addClassName("hidden")});if(c==BookingBuddy.Rev.firstTabId){BookingBuddy.Rev.adTabOn[c].timeOver=false;setTimeout(function(){BookingBuddy.Rev.adTabOn[c].timeOver=true;tframe.fire("Rev:timedOut")},BookingBuddy.Rev.frameMinLoadTime);tframe.setStyle({backgroundImage:"url(http://i.slimg.com/bookingbuddy/rev/tabbed/bb-preloader-2.gif)"});$("panel").setStyle({backgroundImage:"url(http://i.slimg.com/bookingbuddy/rev/tabbed/bb-preloader-2.gif)"})}else{BookingBuddy.Rev.adTabOn[c].timeOver=true}tframe.observe("load",function(){var f=this.id.split("_");var g=f[1];var e=$("tab_"+g);BB.log("-- iframe loaded: "+BookingBuddy.Rev.adTabOn[BookingBuddy.Rev.visibleIframeId].name);if(!BookingBuddy.Rev.adTabOn[g].timeOver){tframe.observe("Rev:timedOut",function(){var h=$("tframe_"+BookingBuddy.Rev.visibleIframeId);if(h){BookingBuddy.Rev.removePreLoaders(g);h.removeClassName("hidden");h.setStyle({backgroundImage:"none"});$("panel").setStyle({backgroundImage:"none"})}this.stopObserving("load")})}else{var d=$("tframe_"+BookingBuddy.Rev.visibleIframeId);if(d){$$(".tabbed_iframe").each(function(h){h.addClassName("hidden")});BookingBuddy.Rev.removePreLoaders(g);d.removeClassName("hidden");d.setStyle({backgroundImage:"none"})}this.stopObserving("load")}})}},removePreLoaders:function(b){var a=$("tab_"+b);if(a){a.removeClassName("loading");a.addClassName("loaded")}},focusTab:function(d){BookingBuddy.Rev.displayTab(d);var b=$H(BookingBuddy.Rev.adTabOn).size();if(b<BookingBuddy.Rev.firstHiddenTabIndex){BB.log("tabCount: "+b+" - Nope! - Returning");return}var a=0;if(b>=BookingBuddy.Rev.firstHiddenTabIndex){var c=b-BookingBuddy.Rev.firstHiddenTabIndex;a=BookingBuddy.Rev.tabIncrement*c;BookingBuddy.Rev.maxRight=-(a+BookingBuddy.Rev.tabIncrement)}BB.log("maxRight: "+BookingBuddy.Rev.maxRight+" - startPoint: "+a+" - moveTo: "+(-(a+BookingBuddy.Rev.tabIncrement)));$("tabs").setStyle({left:"0px"});a=(-(a+BookingBuddy.Rev.tabIncrement));BookingBuddy.Rev.moveRight=true;new Effect.Move($("tabs"),{x:a,afterFinish:function(){BookingBuddy.Rev.moveRight=false}})},showMoreTabs:function(a){var b=6;BookingBuddy.Rev.maxRight=-((a-b)*BookingBuddy.Rev.tabIncrement);$("more_right","more_left").invoke("show");$("more_right").observe("click",function(){var c=$("tabs").getStyle("left");BB.log("left: "+c+" maxRight: "+BookingBuddy.Rev.maxRight);if(c==(BookingBuddy.Rev.maxRight+"px")){return}if(!BookingBuddy.Rev.moveRight){BookingBuddy.Rev.moveRight=true;new Effect.Move($("tabs"),{x:-(BookingBuddy.Rev.tabIncrement),afterFinish:function(){BookingBuddy.Rev.moveRight=false}})}});$("more_left").observe("click",function(){var c=$("tabs").getStyle("left");if(c==(BookingBuddy.Rev.maxLeft+"px")){return}if(!BookingBuddy.Rev.moveLeft){BookingBuddy.Rev.moveLeft=true;new Effect.Move($("tabs"),{x:BookingBuddy.Rev.tabIncrement,afterFinish:function(){BookingBuddy.Rev.moveLeft=false}})}})},deleteTab:function(h){var f="";var e=h==BookingBuddy.Rev.visibleIframeId;["tab_"+h,"li_"+h,"tframe_"+h,"ttrack_"+h].each(function(i){f=$(i);if(f){BB.log("REMOVING tabelement: "+f.id);f.remove()}});if(BookingBuddy.Rev.adTabOn[h]){BookingBuddy.Rev.addToDropdown(h)}if(e){var c=null;var b=false;for(var d=0;d<BookingBuddy.Rev.tabOrder.length;d++){var a=BookingBuddy.Rev.tabOrder[d];var g=(a in BookingBuddy.Rev.adTabOn);if(a==h){b=true;continue}else{if(b&&g){c=a;break}else{if(g){c=a}}}}if(c!=null){BookingBuddy.Rev.displayTab(c)}}BookingBuddy.Rev.tabOrder=BookingBuddy.Rev.tabOrder.without(h);BB.log(BookingBuddy.Rev.tabOrder);BookingBuddy.Rev.updateDeleteButtons()},addToDropdown:function(b){var a=$("tab_dropdown_select");if(!a){return}BookingBuddy.Rev.adTabOff[b]={};BookingBuddy.Rev.adTabOff[b].name=BookingBuddy.Rev.adTabOn[b].name;BookingBuddy.Rev.adTabOff[b].logo=BookingBuddy.Rev.adTabOn[b].logo;BookingBuddy.Rev.adTabOff[b].url=BookingBuddy.Rev.adTabOn[b].url;delete BookingBuddy.Rev.adTabOn[b];a.insert({bottom:'<option value="'+b+'">'+BookingBuddy.Rev.adTabOff[b].name+"</option>"});a.options.selectedIndex=0},displayDropdown:function(){var h="";var b="";var g=$("tab_dropdown_select");var e=window.opener;if(g&&e&&!e.closed){var d=[];try{e.$$(".BBInputCheckBox").each(function(i){h=/(\d+)/.exec(i.id);if(h){h=h[1];d.push(h)}});if(e.BookingBuddy.DHTMLDropdown.dropdowns.length!==0){var f=e.BookingBuddy.DHTMLDropdown.dropdowns[0].options;if(f){f.each(function(i){if(i.label.indexOf("premium")!=-1){h=/(\d+)/.exec(i.value);if(h){h=h[1];d.push(h)}}})}}}catch(c){BB.log("Rev.js - displayDropdown() - Exception : "+c)}d.each(function(i){if(!BookingBuddy.Rev.adTabOn[i]){BookingBuddy.Rev.adTabOff[i]={};BookingBuddy.Rev.adTabOff[i].name=e.BookingBuddy.Search.getAdMetaData(i,"display_name");BookingBuddy.Rev.adTabOff[i].logo=e.BookingBuddy.Search.getAdMetaData(i,"tab_logo");if(BookingBuddy.Rev.adTabOff[i].name){g.insert({bottom:'<option value="'+i+'">'+BookingBuddy.Rev.adTabOff[i].name+"</option>"})}}});if(g.length>1){var a;$("tab_dropdown").show();g.options.selectedIndex=0;g.observe("change",function(i){h=this.value;BB.log("dropdown clicked:  "+this.value);if(h!==0){a=BookingBuddy.Rev.redirectUrl+"r=i"+h+"&"+BookingBuddy.Rev.searchQueryString;BookingBuddy.Rev.adTabOn[h]={};BookingBuddy.Rev.adTabOn[h].url=a;BookingBuddy.Rev.adTabOn[h].name=BookingBuddy.Rev.adTabOff[h].name;BookingBuddy.Rev.adTabOn[h].logo=BookingBuddy.Rev.adTabOff[h].logo;BookingBuddy.Rev.trackAttemptedSearch(a,h);delete BookingBuddy.Rev.adTabOff[h];$(this).remove(this.options.selectedIndex);BookingBuddy.Rev.focusTab(h)}})}}},toggleCheck:function(b){var a=$("check_"+b);if(a){a.checked=!a.checked;if($("select_all").checked&&!a.checked){$("select_all").checked=false}}},selectAll:function(){var a=$("select_all").checked;$$(".BBInputCheckBox").each(function(b){b.checked=a});if($("more_options")){$("more_options").checked=a}},reloadPage:function(){BB.log("reloadPage called");var b=$("tabsearch");var c="",a="";for(a in BookingBuddy.Rev.adTabOn){if(c!==""){c+=",i"+a}else{c="i"+a}}b.insert({bottom:'<input type="hidden" name="r" value="'+c+'" />'});return true},omnitureTrackSearches:function(){var k="",h="";s=s_gi(s_account);var c=new Date();s.purchaseID=Math.floor(Math.random()*999999+1)+""+c.getTime();var g=";",e=";";for(var b in BookingBuddy.Rev.omnitureTrackingAdId){if(BookingBuddy.Rev.omnitureTrackingAdId[b].tier.indexOf("dropdown ")!=-1){BB.log("-- Tracking NON featured search");k=true;g+="bb_"+b+";1;bb_"+b+";event29=1,;"}else{BB.log("-- Tracking featured search");h=true;e+="bb_"+b+";1;bb_"+b+";event28=1,;"}}var i=$H(BookingBuddy.Rev.omnitureTrackingAdId).size();var a="o";var j="";var d=true;if(h&&k){var f=e.slice(0,-1)+g;f=f.slice(0,-2);s.eVar33=i;s.products=f;s.events="event28,event29";s.linkTrackVars="products,eVar33,events";s.linkTrackEvents="purchase,event28,event29";j="Featured and Dropdown Checked Search - BB REV"}else{if(h){s.products=e.slice(0,-2);s.eVar33=i;s.events="event28";s.linkTrackVars="products,eVar33,events";s.linkTrackEvents="purchase,event28";j="Featured Checked Search - BB REV"}else{if(!h&&k){s.events="event29";s.products=g.slice(0,-2);s.eVar33=i;s.linkTrackVars="products,events,eVar33";s.linkTrackEvents="purchase,event29";j="Featured Dropdown Checked Search - BB REV"}else{d=false}}}if(d){if(typeof test_affiliate=="string"){s.eVar18=test_affiliate;s.linkTrackVars+=",eVar18"}s.tl(this,a,j)}s.linkTrackVars="";s.linkTrackEvents="";s.events="";BookingBuddy.Rev.omnitureTrackingAdId={}}};
var SortableFareListing=Class.create({fare_table:null,fare_row_template:null,fares:[],sort_field:"",sort_asc:true,sort_headers:[],filters:[],initialize:function(b,a){this.fare_table=$(b);this.fare_row_template=a},addFare:function(a){this.fares[this.fares.length]=a},addFares:function(a){a.each(function(b){this.addFare(b)}.bind(this))},clearTable:function(){var a=$$(".sortable_fare_listing_row");if(a.length==0){return}a.each(function(b){b.hide();b.addClassName("sortable_fare_listing_garbage_collect")});setTimeout(this.clearTableHelper,1500)},clearTableHelper:function(){var a=$$(".sortable_fare_listing_garbage_collect");a.each(Element.remove)},display:function(){this.clearTable();var b=0;var c=this.fare_table.getElementsByTagName("tbody");if(c.length!=1){var a=this.fare_table}else{var a=c[0]}this.filterFares().each(function(d){var e=$(document.createElement("tr"));a.appendChild(e);e.addClassName("sortable_fare_listing_row");if(b%2){e.addClassName("odd")}e.insert(this.fare_row_template.evaluate(d));b++}.bind(this))},addFilterToggle:function(c,d,a){var b=$(c);if(!b){return}this.filters.push({input:b,field:d,container:a});b.observe("change",this.display.bind(this));b.observe("click",this.display.bind(this))},filterFares:function(){var b=[];this.filters.each(function(c){var d=c.input.value;if(d.length==0){return}if((c.input.type=="checkbox")&&!c.input.checked){return}b.push({field:c.field,value:d})});var a=[];this.fares.each(function(d){var c=true;b.each(function(e){if(d[e.field]!=e.value){c=false}});if(c){a.push(d)}});this.filters.each(function(e){var d=false;a.each(function(f){if(f[e.field]==e.input.value){d=true}});e.input.disabled=!d;var c=$(e.container);if(c){if(d){c.removeClassName("filter_disabled")}else{c.addClassName("filter_disabled")}}});return a},addSortableColumn:function(a,b){var c=$(a);if(!c){return false}this.sort_headers.push(c);c.addClassName("sortable");c.observe("click",function(){this.sortTable(a,b)}.bind(this));return true},clearSortHeaders:function(){this.sort_headers.each(function(a){a.removeClassName("asc");a.removeClassName("desc")})},sortTable:function(a,b){var c=$(a);if(!c){return}this.clearSortHeaders();if(b==this.sort_field){this.sort_asc=!this.sort_asc}else{this.sort_field=b;this.sort_asc=true}c.addClassName(this.sort_asc?"asc":"desc");this.fares.sort(this.sortHelper.bind(this));this.display()},sortHelper:function(e,c){var d=e[this.sort_field];var b=c[this.sort_field];var a=d>b;if(!this.sort_asc){a=!a}return a}});

Calendar=function(b,c,a){this.activeDiv=null;this.onSelected=c||null;this.onClose=a||null;this.hidden=false;this.minDate=(typeof BookingBuddy!="undefined")?new Date(BookingBuddy.Strings.ServerTime):new Date();this.maxDate=(typeof BookingBuddy!="undefined")?new Date(BookingBuddy.Strings.ServerTime):new Date();this.isPopup=true;this.date=b?new Date(b):(typeof BookingBuddy!="undefined")?new Date(BookingBuddy.Strings.ServerTime):new Date();this.hiliteToday=true;this.numMonths=2;this.offset={x:0,y:1};this.tables=new Array();this.element=null;this.tbodies=new Array();this.titles=new Array();this.prev=null;this.next=null;this.dateClicked=false};Calendar._C=null;Calendar._FD=0;Calendar.is_ie=(/msie/i.test(navigator.userAgent)&&!/opera/i.test(navigator.userAgent));Calendar.is_ie5=(Calendar.is_ie&&/msie 5\.0/i.test(navigator.userAgent));Calendar.is_opera=/opera/i.test(navigator.userAgent);Calendar.is_khtml=/Konqueror|Safari|KHTML/i.test(navigator.userAgent);Calendar.getAbsolutePos=function(e){var a=0,d=0;var c=/^div$/i.test(e.tagName);if(c&&e.scrollLeft){a=e.scrollLeft}if(c&&e.scrollTop){d=e.scrollTop}var f={x:e.offsetLeft-a,y:e.offsetTop-d};if(e.offsetParent){var b=this.getAbsolutePos(e.offsetParent);f.x+=b.x;f.y+=b.y}return f};Calendar.removeClass=function(e,d){if(!(e&&e.className)){return}var a=e.className.split(" ");var b=new Array();for(var c=a.length;c>0;){if(a[--c]!=d){b[b.length]=a[c]}}e.className=b.join(" ")};Calendar.addClass=function(b,a){Calendar.removeClass(b,a);b.className+=" "+a};Calendar.getElement=function(a){var b=Calendar.is_ie?window.event.srcElement:a.currentTarget;while(b.nodeType!=1||/^div$/i.test(b.tagName)){b=b.parentNode}return b};Calendar.getTargetElement=function(a){var b=Calendar.is_ie?window.event.srcElement:a.target;while(b.nodeType!=1){b=b.parentNode}return b};Calendar.stopEvent=function(a){a||(a=window.event);if(Calendar.is_ie){a.cancelBubble=true;a.returnValue=false}else{a.preventDefault();a.stopPropagation()}return false};Calendar.addEvent=function(a,c,b){if(a.attachEvent){a.attachEvent("on"+c,b)}else{if(a.addEventListener){a.addEventListener(c,b,true)}else{a["on"+c]=b}}};Calendar.removeEvent=function(a,c,b){if(a.detachEvent){a.detachEvent("on"+c,b)}else{if(a.removeEventListener){a.removeEventListener(c,b,true)}else{a["on"+c]=null}}};Calendar.createElement=function(c,b){var a=null;if(document.createElementNS){a=document.createElementNS("http://www.w3.org/1999/xhtml",c)}else{a=document.createElement(c)}if(typeof b!="undefined"){b.appendChild(a)}return a};Calendar._add_evs=function(a){Calendar.addEvent(a,"mouseover",Calendar.buttonMouseOver);Calendar.addEvent(a,"mousedown",Calendar.buttonMouseDown);Calendar.addEvent(a,"mouseout",Calendar.buttonMouseOut);if(Calendar.is_ie){a.setAttribute("unselectable",true)}};Calendar.mouseDownUp=function(ev){var cal=Calendar._C;if(!cal){return false}var el=cal.activeDiv;if(!el){return false}var target=Calendar.getTargetElement(ev);ev||(ev=window.event);Calendar.removeClass(el,"active");if(target==el||target.parentNode==el){Calendar.cellClick(el,ev)}with(Calendar){removeEvent(document,"mouseup",mouseDownUp);removeEvent(document,is_ie5?"mousemove":"mouseover",mouseDownOver);_C=null;return stopEvent(ev)}};Calendar.mouseDownOver=function(b){var d=Calendar._C;if(!d){return}var a=d.activeDiv;var c=Calendar.getTargetElement(b);if(c==a){Calendar.addClass(a,"hilite active")}else{Calendar.removeClass(a,"hilite active")}return Calendar.stopEvent(b)};Calendar.buttonMouseDown=function(ev){with(Calendar){var el=getElement(ev);if(el.disabled){return false}var cal=el.calendar;cal.activeDiv=el;_C=cal;addClass(el,"hilite active");addEvent(document,Calendar.is_ie5?"mousemove":"mouseover",mouseDownOver);addEvent(document,"mouseup",mouseDownUp);return stopEvent(ev)}};Calendar.buttonMouseOver=function(ev){with(Calendar){var el=getElement(ev);if(el.disabled){return false}addClass(el,"hilite");return stopEvent(ev)}};Calendar.buttonMouseOut=function(ev){with(Calendar){var el=getElement(ev);if(el.disabled){return false}removeClass(el,"hilite");return stopEvent(ev)}};Calendar.cellClick=function(c,i){var b=c.calendar;var g=false;var h=false;var e=null;var d=true;if(typeof c.navtype=="undefined"){b.date.setDateOnly(c.caldate);e=b.date;h=!c.disabled;b.dateClicked=true}else{e=new Date(b.date);b.dateClicked=false;var f=e.getMonth();function a(k){var l=e.getDate();var j=e.getMonthDays(k);if(l>j){e.setDate(j)}e.setMonth(k)}switch(c.navtype){case -1:a(f-1);d=false;break;case 1:a(f+1);d=false;break}if(!e.equalsTo(b.date)){b.setDate(e);h=true}}if(h&&d){i&&b.callHandler()}if(g){Calendar.removeClass(c,"hilite");i&&b.callCloseHandler()}};Calendar.prototype.create=function(l){var k=null;if(typeof Calendar._SDN_len=="undefined"){Calendar._SDN_len=3}if(!l){k=document.getElementsByTagName("body")[0];this.isPopup=true}else{k=l;this.isPopup=false}var b=Calendar.createElement("div");this.element=b;b.className="calendar";if(this.isPopup){b.style.position="absolute";b.style.display="none"}for(var c=0;c<this.numMonths;++c){var o=Calendar.createElement("table");this.tables[c]=o;o.cellSpacing=0;o.cellPadding=0;o.calendar=this;b.appendChild(o);var h=Calendar.createElement("thead",o);var n=null;var p=null;var a=this;var d=function(m,j,i){n=Calendar.createElement("td",p);n.colSpan=j;n.className="button";if(i!=0&&Math.abs(i)<=2){n.className+=" nav"}if(m=="&laquo;"){n.className+=" left"}else{if(m=="&raquo;"){n.className+=" right"}}Calendar._add_evs(n);n.calendar=a;n.navtype=i;n.innerHTML="<div unselectable='on'>"+m+"</div>";return n};p=Calendar.createElement("tr",h);(c==0)?this.prev=d("&laquo;",1,-1):d("&nbsp;",1);this.titles[c]=d("",5,300);this.titles[c].className="title";(c==this.numMonths-1)?this.next=d("&raquo;",1,1):d("&nbsp;",1);p=Calendar.createElement("tr",h);p.className="daynames";for(var g=0;g<7;++g){n=Calendar.createElement("td",p);n.className="day name";n.innerHTML=Calendar._SDN[(g+Calendar._FD)%7].substr(0,Calendar._SDN_len)}var f=Calendar.createElement("tbody",o);this.tbodies[c]=f;for(g=6;g>0;--g){p=Calendar.createElement("tr",f);for(var e=7;e>0;--e){n=Calendar.createElement("td",p);n.calendar=this;Calendar._add_evs(n)}}}k.appendChild(this.element);this._init(this.date)};Calendar.prototype.toggleIFrameMask=function(b){if(b=="hide"){var a=document.getElementById("cal_hide_iframe");if(a){a.parentNode.removeChild(a)}}else{if(b=="show"){a=document.createElement("iframe");a.src="";a.id="cal_hide_iframe";a.frameBorder="0";a.style.position="absolute";a.style.height=this.element.offsetHeight+"px";a.style.top=parseInt(this.element.style.top)+"px";a.style.left=this.element.style.left;a.style.width=this.element.offsetWidth+"px";a.style.border="none";a.style.zIndex=1001;a.scrolling="no";a.tabIndex=-1;a.style.display="block";this.element.style.zIndex=1002;this.element.parentNode.appendChild(a)}}};Calendar.prototype._init=function(w){this.date=w;var h=w.getFullYear();var y=w.getDate();if(typeof BookingBuddy!=="undefined"&&this.params.showAt){var v=new Date(BookingBuddy.Strings.ServerTime);var n=this.params.showAt.id;var b=n.split("_");var a=b[0];if($(a+"_month")){var p=$F(a+"_month").split(" ");var x=p[0];var h=p[1];var u=$F(a+"_day");var q=new Date();q.setFullYear(h,x-1,u)}}else{var v=new Date()}var k=new Date(w);k.setDate(1);if(k<=this.minDate){this.prev.disabled=true;this.prev.className+=" navdisabled";this.prev.innerHTML="&nbsp;"}else{this.prev.disabled=false;Calendar.removeClass(this.prev,"navdisabled");this.prev.innerHTML='<div class="cal_arrow">&laquo;</div>'}for(var r=0;r<this.numMonths;++r){this.tables[r].style.visibility="hidden";var o=new Date(k);o.setMonth(o.getMonth()+r);var l=o.getMonth();var d=o.getFullYear();var g=0;var e=(o.getDay()-Calendar._FD)%7;if(e<0){e+=7}o.setDate(1-e);var f=this.tbodies[r].firstChild;for(var t=0;t<6;++t,f=f.nextSibling){var c=f.firstChild;f.className="daysrow";for(var s=0;s<7;++s,c=c.nextSibling,o.setDate(g+1)){g=o.getDate();c.className="day";if(o.getMonth()!=l){c.className="emptycell";c.innerHTML="&nbsp;";c.disabled=true;f.className="emptyrow";continue}c.disabled=false;c.innerHTML=g;c.caldate=new Date(o);if(typeof q!=="undefined"){if(o.getFullYear()==q.getFullYear()&&o.getMonth()==q.getMonth()&&g==q.getDate()){c.className+=" cal_selected_date"}}if(o.getFullYear()==v.getFullYear()&&o.getMonth()==v.getMonth()&&g==v.getDate()){c.className+=" today"}else{if(o.getTime()<this.minDate.getTime()||o.getTime()>this.maxDate.getTime()){c.className+=" invalid";c.disabled=true}}}}this.titles[r].innerHTML=Calendar._MN[l]+" "+d;this.tables[r].style.visibility="visible";if(r==this.numMonths-1){if(this.maxDate.getTime()<o.getTime()){this.next.disabled=true;this.next.className+=" navdisabled";this.next.innerHTML="&nbsp;"}else{this.next.disabled=false;Calendar.removeClass(this.prev,"navdisabled");this.next.innerHTML='<div class="cal_arrow">&raquo;</div>'}}}};Calendar.prototype.setDate=function(a){if(!a.equalsTo(this.date)){this._init(a)}};Calendar.prototype.refresh=function(){this._init(this.date)};Calendar.prototype.setMinDate=function(a){this.minDate=a};Calendar.prototype.setMaxDate=function(a){this.maxDate=a};Calendar.prototype.callHandler=function(){if(this.onSelected){this.onSelected(this)}};Calendar.prototype.callCloseHandler=function(){if(this.onClose){this.onClose(this)}};Calendar.prototype.destroy=function(){var a=this.element.parentNode;a.removeChild(this.element);Calendar._C=null;window._sl_calendar=null};Calendar._checkCalendar=function(b){var c=window._sl_calendar;if(!c){return false}var a=Calendar.is_ie?Calendar.getElement(b):Calendar.getTargetElement(b);for(;a!=null&&a!=c.element;a=a.parentNode){}if(a==null){window._sl_calendar.callCloseHandler();return Calendar.stopEvent(b)}};Calendar.prototype.show=function(){this.element.style.display="block";this.hidden=false;if(this.isPopup){window._sl_calendar=this;Calendar.addEvent(document,"mousedown",Calendar._checkCalendar)}this.toggleIFrameMask("show")};Calendar.prototype.hide=function(){if(this.isPopup){Calendar.removeEvent(document,"mousedown",Calendar._checkCalendar)}this.toggleIFrameMask("hide");this.element.style.display="none";this.hidden=true};Calendar.prototype.showAt=function(a,c){var b=this.element.style;b.left=(a+this.offset.x)+"px";b.top=(c+this.offset.y)+"px";this.show()};Calendar.prototype.showAtElement=function(b,c){var a=this;var d=Calendar.getAbsolutePos(b);if(!c||typeof c!="string"){this.showAt(d.x,d.y+b.offsetHeight);return true}Calendar.continuation_for_khtml_browser=function(){a.element.style.display="block";var e=a.element.offsetWidth;var g=a.element.offsetHeight;a.element.style.display="none";var f=c.substr(0,1);var i="l";if(c.length>1){i=c.substr(1,1)}switch(f){case"T":d.y-=g;break;case"B":d.y+=b.offsetHeight;break;case"C":d.y+=(b.offsetHeight-g)/2;break;case"t":d.y+=b.offsetHeight-g;break;case"b":break}switch(i){case"L":d.x-=e;break;case"R":d.x+=b.offsetWidth;break;case"C":d.x+=(b.offsetWidth-e)/2;break;case"l":d.x+=b.offsetWidth-e;break;case"r":break}d.width=e;d.height=g+40;a.showAt(d.x,d.y)};if(Calendar.is_khtml){setTimeout("Calendar.continuation_for_khtml_browser()",10)}else{Calendar.continuation_for_khtml_browser()}};Date._MD=new Array(31,28,31,30,31,30,31,31,30,31,30,31);Date.prototype.getMonthDays=function(b){var a=this.getFullYear();if(typeof b=="undefined"){b=this.getMonth()}if(((0==(a%4))&&((0!=(a%100))||(0==(a%400))))&&b==1){return 29}else{return Date._MD[b]}};Date.prototype.equalsTo=function(a){return((this.getFullYear()==a.getFullYear())&&(this.getMonth()==a.getMonth())&&(this.getDate()==a.getDate())&&(this.getHours()==a.getHours())&&(this.getMinutes()==a.getMinutes()))};Date.prototype.setDateOnly=function(a){var b=new Date(a);this.setDate(1);this.setFullYear(b.getFullYear());this.setMonth(b.getMonth());this.setDate(b.getDate())};window._sl_calendar=null;
Calendar._DN=new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");Calendar._SDN=new Array("Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun");Calendar._FD=0;Calendar._MN=new Array("January","February","March","April","May","June","July","August","September","October","November","December");Calendar._SMN=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");Calendar._TT={};Calendar._TT.INFO="About the calendar";Calendar._TT.ABOUT="DHTML Date/Time Selector\n(c) dynarch.com 2002-2005 / Author: Mihai Bazon\nFor latest version visit: http://www.dynarch.com/projects/calendar/\nDistributed under GNU LGPL.  See http://gnu.org/licenses/lgpl.html for details.\n\nDate selection:\n- Use the \xab, \xbb buttons to select year\n- Use the "+String.fromCharCode(8249)+", "+String.fromCharCode(8250)+" buttons to select month\n- Hold mouse button on any of the above buttons for faster selection.";Calendar._TT.ABOUT_TIME="\n\nTime selection:\n- Click on any of the time parts to increase it\n- or Shift-click to decrease it\n- or click and drag for faster selection.";Calendar._TT.PREV_YEAR="Prev. year (hold for menu)";Calendar._TT.PREV_MONTH="Prev. month (hold for menu)";Calendar._TT.GO_TODAY="Go Today";Calendar._TT.NEXT_MONTH="Next month (hold for menu)";Calendar._TT.NEXT_YEAR="Next year (hold for menu)";Calendar._TT.SEL_DATE="Select date";Calendar._TT.DRAG_TO_MOVE="Drag to move";Calendar._TT.PART_TODAY=" (today)";Calendar._TT.DAY_FIRST="Display %s first";Calendar._TT.WEEKEND="0,6";Calendar._TT.CLOSE="Close";Calendar._TT.TODAY="Today";Calendar._TT.TIME_PART="(Shift-)Click or drag to change value";Calendar._TT.DEF_DATE_FORMAT="%Y-%m-%d";Calendar._TT.TT_DATE_FORMAT="%a, %b %e";Calendar._TT.WK="wk";Calendar._TT.TIME="Time:";
Calendar.savedHandlers=new Array();Calendar.setup=function(g){var c=(typeof BookingBuddy!="undefined")?new Date(BookingBuddy.Strings.ServerTime):new Date();function f(h,i){if(typeof g[h]=="undefined"){g[h]=i}}f("button",null);f("eventName","click");f("align","Br");f("onSelect",null);f("onClose",null);f("onUpdate",null);f("date",c);f("position",null);f("cache",false);var d=c;d.setDate(1);d.setFullYear(d.getFullYear()+1);f("maxDate",d);g.button=document.getElementById(g.button);function b(i){var h=i.params;if(i.dateClicked&&typeof h.onUpdate=="function"){h.onUpdate(i)}if(i.dateClicked&&i.dateClicked){i.callCloseHandler()}}var a=g.button;var e=g.button.id+"_on"+g.eventName;Calendar.savedHandlers[e]=a["on"+g.eventName];a["on"+g.eventName]=function(){var h=false;var i=window._sl_calendar;g.date=g.getDate();if(!(i&&g.cache)){h=true;if(window._sl_calendar){window._sl_calendar.destroy()}window._sl_calendar=i=new Calendar(g.date,g.onSelect||b,g.onClose||function(j){j.hide()});i.setMaxDate(g.maxDate);i.params=g}else{i.hide()}if(g.numMonths){i.numMonths=g.numMonths}if(!g.date){g.date=new Date()}if(h){i.create()}i.setDate(g.date);if(!g.position){i.showAtElement(g.showAt||g.button,g.align)}else{i.showAt(g.position[0],g.position[1])}if(typeof Calendar.savedHandlers[e]=="function"){window.setTimeout('Calendar.savedHandlers["'+e+'"]()',10)}return false}};
var content_font_dx=0;var content_font_exp=new Date();content_font_exp.setFullYear(content_font_exp.getFullYear()+100);var SmarterTravel={Module:{}};SmarterTravel.OB={ignore_attributes:["the_link"],shortcuts:{h:window.location.host,a:"!",b:"&"},ToLink:function(h){var g=$(h);if(!g){return}var a=new Element("a");var e=g.readAttribute("the_link");var f="";for(var b=0;b<e.length;++b){var d=e.charCodeAt(b)-1;f+=String.fromCharCode(d)}var c=Object.keys(SmarterTravel.OB.shortcuts);for(b=0;b<c.length;++b){f=f.gsub("{{"+c[b]+"}}",SmarterTravel.OB.shortcuts[c[b]])}if(Prototype.Browser.IE){a.className=g.className;if(g.target){a.target=g.target}}else{for(b=0;b<g.attributes.length;++b){if(SmarterTravel.OB.ignore_attributes.indexOf(g.attributes[b].name)===-1){a.writeAttribute(g.attributes[b].name,g.attributes[b].value)}}}a.writeAttribute("href",f);a.innerHTML=g.innerHTML;g.replace(a)}};SmarterTravel.Module.SB={placement:"",init:function(a,b){b=b||SB_WIDGET_MODE;this.placementName=a;this.placement=a?a+"_":"";this.displayForm(b);this.initializeLS();this.initializeCalendars()},initializeLS:function(){var b=[this.placement+"air_depart_prepop",this.placement+"air_dest_prepop",this.placement+"vacation_depart_prepop",this.placement+"vacation_dest_prepop"];var a=[];b.each(function(d){var c={id:d,suggestion_types:["airport"]};a.push(c)});BookingBuddy.LS.init("/ajax/",a);BookingBuddy.LS.setMaxSuggestions(15)},initializeCalendars:function(){BookingBuddy.Calendar.attach(this.placement+"air_calendar_departure_icon",this.placement+"air_departure_month",this.placement+"air_departure");BookingBuddy.Calendar.attach(this.placement+"air_calendar_return_icon",this.placement+"air_return_month",this.placement+"air_return");BookingBuddy.Calendar.attach(this.placement+"hotel_calendar_arrival_icon",this.placement+"hotel_arrival_month",this.placement+"hotel_arrival");BookingBuddy.Calendar.attach(this.placement+"hotel_calendar_departure_icon",this.placement+"hotel_departure_month",this.placement+"hotel_departure");BookingBuddy.Calendar.attach(this.placement+"car_calendar_pickup_icon",this.placement+"car_pickup_month",this.placement+"car_pickup");BookingBuddy.Calendar.attach(this.placement+"car_calendar_dropoff_icon",this.placement+"car_dropoff_month",this.placement+"car_dropoff");BookingBuddy.Calendar.attach(this.placement+"vacation_calendar_departure_icon",this.placement+"vacation_departure_month",this.placement+"vacation_departure");BookingBuddy.Calendar.attach(this.placement+"vacation_calendar_return_icon",this.placement+"vacation_return_month",this.placement+"vacation_return");this.initializeCalendarObservers()},initializeCalendarObservers:function(){Event.observe(this.placement+"air_departure_day","change",function(a){BookingBuddy.Date.update(this.placement+"air_departure",this.placement+"air_return",7)});Event.observe(this.placement+"air_departure_month","change",function(a){BookingBuddy.Date.update(this.placement+"air_departure",this.placement+"air_return",7);BookingBuddy.Date.updateDaysDrop(this.placement+"air_departure")});Event.observe(this.placement+"air_return_month","change",function(a){BookingBuddy.Date.updateDaysDrop(this.placement+"air_return")});Event.observe(this.placement+"hotel_arrival_day","change",function(a){BookingBuddy.Date.update(this.placement+"hotel_arrival",this.placement+"hotel_departure",7)});Event.observe(this.placement+"hotel_arrival_month","change",function(a){BookingBuddy.Date.update(this.placement+"hotel_arrival",this.placement+"hotel_departure",7);BookingBuddy.Date.updateDaysDrop(this.placement+"hotel_arrival")});Event.observe(this.placement+"hotel_departure_month","change",function(a){BookingBuddy.Date.updateDaysDrop(this.placement+"hotel_departure")});Event.observe(this.placement+"car_pickup_day","change",function(a){BookingBuddy.Date.update(this.placement+"car_pickup",this.placement+"car_dropoff",7)});Event.observe(this.placement+"car_pickup_month","change",function(a){BookingBuddy.Date.update(this.placement+"car_pickup",this.placement+"car_dropoff",7);BookingBuddy.Date.updateDaysDrop(this.placement+"car_pickup")});Event.observe(this.placement+"car_dropoff_month","change",function(a){BookingBuddy.Date.updateDaysDrop(this.placement+"car_dropoff")});Event.observe(this.placement+"vacation_departure_day","change",function(a){BookingBuddy.Date.update(this.placement+"vacation_departure",this.placement+"vacation_return",7)});Event.observe(this.placement+"vacation_departure_month","change",function(a){BookingBuddy.Date.update(this.placement+"vacation_departure",this.placement+"vacation_return",7);BookingBuddy.Date.updateDaysDrop(this.placement+"vacation_departure")});Event.observe(this.placement+"vacation_return_month","change",function(a){BookingBuddy.Date.updateDaysDrop(this.placement+"vacation_return")})},displayForm:function(a){return display_compare_form(a,this.placementName)}};function getElement(a){return $(a)}function hideLoadingImage(){var a=$("loading_image_overlay");var b=$("loading_image");if(a){a.hide()}if(b){b.hide()}}function isSTMEmail(a){return -1!=a.search(/@smartertravelmedia.com$/i)||-1!=a.search(/@smartertravel.com$/i)||-1!=a.search(/@smarterliving.com$/i)||-1!=a.search(/@bookingbuddy.com$/i)}function popup(b,c,l){var h=arguments[3]||false;var f=arguments[4]||"popunderwin";var d=arguments[5]||false;if(typeof(d)=="string"){var k=new Date();var g=new Date(d);d=g.getTime()-k.getTime();if(d<1){d=false}else{d*=1000*60*60*24}}if(d!==false){if(getCookieValue(f)=="yes"){return false}}var i="scrollbars=0,resizable=1,width="+c+",height="+l;try{var a=window.open(b,f,i);if(h){a.blur();window.focus()}}catch(j){return false}if(d){setCookieValue(f,"yes",d,"days")}return true}function showLoadingImage(b,j,c){var h=$("loading_image_overlay");var d=$("loading_image");var g,a;var e=document.documentElement.scrollHeight;var f=document.documentElement.scrollWidth;if(Prototype.Browser.IE){g=document.documentElement.scrollTop;a=document.documentElement.scrollLeft}else{g=window.pageYOffset;a=window.pageXOffset}if(!h){h=new Element("div",{id:"loading_image_overlay"});h.hide();document.body.appendChild(h)}if(!d){d=new Element("div",{id:"loading_image"});d.hide();var i=new Element("img",{alt:"Loading...",src:b});document.body.appendChild(d);d.insert(i)}h.setStyle({height:e+"px",width:f+"px"});d.setStyle({top:Math.floor(((e-g)/2)+g-(j/2))+"px",left:Math.floor(((f-a)/2)+a-(c/2))+"px"});h.show();d.show()}function ss(a){window.status=a;return true}function cs(){window.status=""}function display_sponsor_deals(b){try{$("sd_nav_sections").className=b;$("sd_deals_sections").className=b;$("sd_see_all").href="/all/?content_type=sponsordeal&tags="+b}catch(a){}}function google_ad_request_done(e){document.write('<div id="googleWrapper"><div id="googleAds">');document.write("<h1>Sponsored Links</h1>");document.write("<ul>");for(var d=0;d<e.length;++d){var a="onMouseOver=\"return ss('go to "+e[d].visible_url+'\')" onMouseOut="cs()" onClick="omnitureAFSClick(this)"';var b=!(d%2);var c="<li";if(b){c+=' class="alternate"'}c+=">";var f='<a class="line1" target="_blank" href="'+e[d].url+'"'+a+">"+e[d].line1+"</a>";if(e[d].line2!=""){f+='<a class="line2" target="_blank" href="'+e[d].url+'"'+a+">"+e[d].line2+"</a>"}if(e[d].line3!=""){f+='<a class="line3" target="_blank" href="'+e[d].url+'"'+a+">"+e[d].line3+"</a>"}f+='<a class="visibleURL" target="_blank" href="'+e[d].url+'"'+a+">"+e[d].visible_url+"</a>";strAdBottom="</li>";document.write(c+f+strAdBottom)}document.write("</ul></div></div>")}function getCookieValue(c){var a=false;var e=document.cookie.indexOf(c+"=");if(e!=-1){var d=e+c.length+1;var b=document.cookie.indexOf(";",d);if(b==-1){b=document.cookie.length}a=document.cookie.substring(d,b)}return a}function setCookieValue(c,e){var f=arguments[2]||false;var d=arguments[3]||"minutes";var a="";if(f){var b=new Date();switch(f){case"years":f*=365;case"days":f*=24;case"hours":f*=60;case"minutes":f*=60;case"seconds":f*=1000}b.setTime(b.getTime()+f);a=";expires="+b.toGMTString()}document.cookie=c+"="+e+a+";domain=.smartertravel.com;path=/"}function changeContentFontSize(b){var a=content_font_dx+b;if(a<-2){content_font_dx=-2;return}if(a>8){content_font_dx=8;return}changeElementFontSize($("wide_left"),b);changeElementFontSize($("narrow_left"),b);setCookieValue("content_font_dx",a,525948)}function changeElementFontSize(c,a){if(!$(c)){return}c.childElements().each(function(d,e){changeElementFontSize(e,d)}.curry(a));var b;if(window.getComputedStyle){b=parseInt(window.getComputedStyle(c,null).fontSize)}else{if(c.currentStyle){b=parseInt(c.currentStyle.fontSize)}else{return}}b+=a;c.setStyle({fontSize:b+"px"})}function setContentFontSizeFromCookie(){var a=parseInt(getCookieValue("content_font_dx"));if(Math.abs(a)>0){changeContentFontSize(a)}}function alterFormAction(c){var a=$(c);var b=a.selectedIndex;if(b==-1||a[b]==""){return false}var d=a[b].text;d=d.replace(new RegExp("[,.']","g"),"");d=d.replace(/ /g,"-");switch(c){case"airDepartureCitySearch":a.form.action="/airfare/search/last-minute-airfares-from-"+d+".html";break;case"airArrivalCitySearch":a.form.action="/airfare/search/last-minute-airfares-to-"+d+".html";break;case"airlineSearch":a.form.action="/airfare/search/last-minute-"+d+"-airfares.html";break;case"carCitySearch":a.form.action="/car-rental/search/last-minute-car-rentals-in-"+d+".html";break;case"hotelCitySearch":a.form.action="/hotel/search/last-minute-hotel-deals-in-"+d+".html";break}return true}function display_compare_form(j,g){var c=new Array("air","hotel","car","cruise","vacation","vacation_rental");var g=(g)?g+"_":"";for(var h=0;h<c.length;++h){var b=$(g+c[h]+"_widget_form");var k=$(g+c[h]+"_widget_tab");if(!b||!k){continue}var f=k.className;var d=f.indexOf("_on");if(d!=-1){f=f.substring(0,d)}if(c[h]==j){b.show();k.className=f+"_on"}else{b.hide();k.className=f}}var a=$(g+j+"_depart_prepop");var m=$(g+j+"_dest_prepop");var e=BookingBuddy.getQSParam("departure_city")||ST_user_airport_code;var l=BookingBuddy.getQSParam("arrival_city")||ST_contextual_destination;if(a&&e){a.value=e}if(m&&l){m.value=l}};
var STMException=new JS.Class("STMException",{_message:"",initialize:function(b){var a=arguments[1]||{};if(console.dir){console.log(b);console.dir(a)}this._message=b},GetMessage:function(){return this._message}});

	


var STMCommonJS=new JS.Class("STMCommonJS",{initialize:function(){throw new STMException(this.klass.displayName+"should never be instantiated.")},extend:{CreateIFrame:function(a){if(Prototype.Browser.IE){a=$(a);var b=new Element("iframe").setStyle({position:"absolute",top:0,left:0,zIndex:"-1",filter:"mask()",width:"10000px",height:"10000px"});a.insert(b).setStyle({overflow:"hidden"})}},CreateOverlayLayer:function(c){var b=Object.extend({background_color:"#fff",opacity:0.5},arguments[1]||{});if(!$(c)){var a=new Element("div",{id:c}).setStyle({backgroundColor:b.background_color,display:"none",opacity:b.opacity,position:"absolute"});$(document.body).insert(a);STMCommonJS.CreateIFrame(a)}},ElementSelect:function(d,a){var c=arguments[2]||true;var b=$(d).select(a);if(b.length===1){return b[0]}if(c){throw new STMException(this.displayName+": Selection does not return exactly one element.",{element:d,selector:a})}return null},HideOverlayLayer:function(b){b=$(b);var a=$(b.identify()+"_stmcommon_overlay_layer");if(a){a.hide()}},ShowOverlayLayer:function(f){f=$(f);var c=f.identify();var g=c+"_stmcommon_overlay_layer";STMCommonJS.CreateOverlayLayer(g);var h=f.getStyle("zIndex");var e=f.getDimensions();var d=f.cumulativeOffset();var b=$(g);var a=Object.isUndeclared(h)?100:parseInt(h)+100;b.setStyle({left:d.left+"px",top:d.top+"px",height:e.height+"px",width:e.width+"px",zIndex:a}).show()}}});


	


var STMResponsesJS=new JS.Class("STMResponsesJS",{CustomCallbacks:undefined,callback_function_onSuccess:undefined,callback_function_onFailure:undefined,initialize:function(){this.CustomCallbacks=$H();this.callback_function_onSuccess=null;this.callback_function_onFailure=null},MakeRequest:function(b){var a=arguments[1]||{};if(Object.keys(a).indexOf("onSuccess")!==-1){this.callback_function_onSuccess=a.onSuccess}if(Object.keys(a).indexOf("onFailure")!==-1){this.callback_function_onFailure=a.onFailure}a.onSuccess=this.method("ServerResponse");a.onFailure=this.method("ServerResponse");if(!b.include("stmresponses=")){if(!b.include("?")){b+="?"}else{if(!b.endsWith("&")){b+="&"}}b+="stmresponses="+this.GetResponseType()}return new Ajax.Request(b,a)},GetResponseType:function(){throw new STMException("STMResponsesJS: This method was not declared in sub class.",{method:"GetResponseType",subclass:this.klass.displayName})},ServerResponse:function(a){throw new STMException("STMResponsesJS: This method was not declared in sub class.",{method:"ServerResponse",subclass:this.klass.displayName})}});
STMResponsesJS.Text=new JS.Class("STMResponsesJS.Text",STMResponsesJS,{initialize:function(){this.callSuper()},GetResponseType:function(){return"text"},ServerResponse:function(a){if(!a.request.success()&&Object.isFunction(this.callback_function_onFailure)){this.callback_function_onSuccess.apply(this,[a.responseText])}else{if(a.request.success()&&Object.isFunction(this.callback_function_onSuccess)){this.callback_function_onSuccess.apply(this,[a.responseText])}}}});
STMResponsesJS.JSON=new JS.Class("STMResponsesJS.JSON",STMResponsesJS,{initialize:function(){this.callSuper()},GetResponseType:function(){return"json"},ServerResponse:function(response){if(!response.request.success()&&Object.isFunction(this.callback_function_onFailure)){this.callback_function_onFailure.apply(this,[response.responseJSON]);return}else{if(response.request.success()&&Object.isFunction(this.callback_function_onSuccess)){this.callback_function_onSuccess.apply(this,[response.responseJSON]);return}}response.responseJSON.each(function(item){switch(item.type){case"alert":window.alert(item.message);break;case"callback":if(this.CustomCallbacks.hasKey(item.key)&&Object.isFunction(this.CustomCallbacks.get(item.key))){this.CustomCallbacks.get(item.key).apply(this,item.parameters)}break;case"element_replace":$(item.element_id).replace(item.html);break;case"element_update":$(item.element_id).update(item.html);break;case"function_call":var function_name=eval(item.function_name);var scope=eval(item.scope);function_name.apply(scope,item.parameters);break}}.bind(this))}});
STMResponsesJS.XML=new JS.Class("STMResponsesJS.XML",STMResponsesJS,{initialize:function(){this.callSuper()},GetResponseType:function(){return"xml"},ServerResponse:function(c){if(!c.request.success()&&Object.isFunction(this.callback_function_onFailure)){this.callback_function_onSuccess.apply(this,[c.responseText]);return}if(c.request.success()&&Object.isFunction(this.callback_function_onSuccess)){this.callback_function_onSuccess.apply(this,[c.responseXML]);return}var b=c.responseXML.firstChild;for(var d=0;d<b.childNodes.length;++d){var f=b.childNodes[d];var e=f.attributes.getNamedItem("type");switch(e.nodeValue){case"alert":window.alert(f.textContent);break;case"element_replace":var a=f.attributes.getNamedItem("element_id");$(a.nodeValue).replace(f.textContent);break;case"element_update":var a=f.attributes.getNamedItem("element_id");$(a.nodeValue).update(f.textContent);break}}}});


	


var STLibraryJS=new JS.Class("STLibraryJS",{initialize:function(){throw new STMException("STLibraryJS should never be instantiated.")},extend:{_GenericErrorMessage:"Oops, sorry! Something's not working quite right and we couldn't complete your request. Please contact help@smartertravel.com for assistance.",CreateIFrame:STMCommonJS.CreateIFrame,ElementSelect:STMCommonJS.ElementSelect,PreventPasting:function(a){a=$(a);a.observe("paste",function(b){b.stop()});a.store("old_value",a.value);a.observe("input",function(){if(this.value.length>this.retrieve("old_value").length+1){this.value=this.retrieve("old_value")}else{this.store("old_value",this.value)}}.bind(a))}}});
STLibraryJS._Observable=new JS.Class("STLibraryJS._Observable",{include:JS.Observable});STLibraryJS.Observable=new JS.Class("STLibraryJS.Observable",{_observables:undefined,initialize:function(){this._observables=$H()},AddObserver:function(b,a){if(!this._observables.hasKey(b)){this._observables.set(b,new STLibraryJS._Observable())}this._observables.get(b).addObserver(a)},HaveObservers:function(a){return this._observables.hasKey(a)&&(this._observables.get(a).countObservers()>0)},NotifyObservers:function(a){if(this.HaveObservers(a)){var b=$A(arguments);var c=this._observables.get(a);c.notifyObservers.apply(c,b.slice(1))}},RemoveAllObservers:function(){this._observerables=$H()},RemoveObserver:function(b,a){if(this.HaveObservers(b)){this._observables.get(b).removeObserve(a)}},RemoveObserversFromNamespace:function(a){this._observables.unset(a)}});
STLibraryJS.Initialize=new JS.Singleton("STLibraryJS.Initialize",{initialize:function(){this.AddFunction(this.method("MonitorTopNav"));this.AddFunction(this.method("SEOGuidesModuleHotelsNarrow"));this.AddFunction(this.method("DealsPageFooter"));this.AddFunction(this.method("CollapseUnwantedAds"));this.AddFunction(this.method("DHTMLLayers"));this.AddFunction(function(){STLibraryJS.Pluck.ShowCommentsAndRecommendationsCount()})},AddFunction:Event.observe.curry(document,"dom:loaded"),_nav_timeout:null,MonitorTopNav:function(){$$("#topnav_tabs > li").each(function(a){if(!a.hasClassName("nav_tab_div")){Event.observe(a,"mouseover",function(){this.addClassName("over")}.bind(a));Event.observe(a,"mouseout",function(){this.removeClassName("over")}.bind(a))}});if(ST_is_V2){$$(".hmenu > ul > li").each(function(a){a.observe("mouseover",function(){this.addClassName("hover")}.bind(a));a.observe("mouseout",function(){this.removeClassName("hover")}.bind(a))})}},SEOGuidesModuleHotelsNarrow:function(){$$("#module_st_top_1000_hotels_narrow_module li").each(function(c,a){var b={"float":"left",overflow:"hidden",width:"45%"};if(a%2===0){b.clear="left"}c.setStyle(b)})},CollapseUnwantedAds:function(){this.CollapseTopWideAds();this.CollapseSideAds();this.CollapseOtherAds()},CollapseAd:function(a){var b=a.select(".hide_this_ad");if(b.length>0){a.hide();return}a.select("img").each(function(c,d){if(d.src.endsWith("817-grey.gif")){c.hide()}}.curry(a))},CollapseOtherAds:function(){$$(".mpu").each(this.method("CollapseAd"))},CollapseSideAds:function(){$$(".right_ad").each(this.method("CollapseAd"))},CollapseTopWideAds:function(){var a=$("top_wide_ad");if(a){this.CollapseAd(a)}},DHTMLLayers:function(){var c=$("login_layer");if(c){var b=new STMLayersJS.Positioner.Community(-31,-160);var a=new STMLayersJS("login_popup",{url:c.href,positioner:b,template:STMLayersJS.Template.Community,refetch:true});Event.observe(c,"click",function(h,i){var g=Event.findElement(i,"a");if(g){Event.stop(i);h._options.positioner.SetOpener(g);h.OpenLayer()}}.curry(a))}var f=$("signup_layer");if(f){var e=new STMLayersJS.Positioner.Community(-31,-198);var d=new STMLayersJS("signup_popup",{url:f.href,positioner:e,template:STMLayersJS.Template.Community,refetch:true});Event.observe(f,"click",function(h,i){var g=Event.findElement(i,"a");if(g){Event.stop(i);h._options.positioner.SetOpener(g);h.OpenLayer()}}.curry(d))}},DealsPageFooter:function(){if($("DealsPageFooter")){$("SponsoredDealsModule").insert($("sponsor_deals"));$("TopHotels").insert($("module_st_top_1000_hotels_narrow_module"))}}});
STLibraryJS.Membership=new JS.Singleton("STLibraryJS.Membership",{initialize:function(){},MonitorUsername:function(c){var f=$(c);try{var a=STLibraryJS.ElementSelect(f,".st_username_field input");var b=STLibraryJS.ElementSelect(f,".st_username_field .st_check_username");b.setStyle({display:"inline-block"});Event.observe(b,"click",function(i,e,h){var g=Event.findElement(h,"a");if(g){Event.stop(h);this.ValidateUsername(i,e.value)}}.bind(this,f,a));Event.observe(a,"blur",function(h,g){var e=Event.findElement(g,"input");if(e){this.ValidateUsername(h,e.value)}}.bind(this,f))}catch(d){}},ValidateUsername:function(b,a){new Ajax.Request("/community/validateusername.php",{method:"get",parameters:{username:a},onSuccess:this.ValidateUsernameServerResponse.bind(this,b),onFailure:STMLayersJS.AlertMessage.UpdateAndShow.curry(STLibraryJS._GenericErrorMessage)})},ValidateUsernameServerResponse:function(h,g){try{var b=g.responseText.evalJSON()}catch(f){STMLayersJS.AlertMessage.UpdateAndShow(STLibraryJS._GenericErrorMessage);return}var d=STLibraryJS.ElementSelect(h,".st_username_field .st_small_error_message");var c=STLibraryJS.ElementSelect(h,".st_username_field .st_small_success_message");var a=STLibraryJS.ElementSelect(h,".st_username_field");if(b.success){d.update("");c.update(b.message);a.addClassName("st_success_field");a.removeClassName("st_error_field")}else{c.update("");d.update(b.message);a.addClassName("st_error_field");a.removeClassName("st_success_field")}}});
STLibraryJS.SmarterBuddy=new JS.Class("STLibraryJS.SmarterBuddy",{_forms:null,_tabs:null,initialize:function(b,a){b=$(b);this._forms=new Hash();this._forms.set("flights",STLibraryJS.ElementSelect(b,".st_content_body .st_airfare form"));this._forms.set("vacation_packages",STLibraryJS.ElementSelect(b,".st_content_body .st_vacation_packages form"));this._forms.set("hotels",STLibraryJS.ElementSelect(b,".st_content_body .st_hotel form"));this._forms.set("car_rentals",STLibraryJS.ElementSelect(b,".st_content_body .st_car_rental form"));this._forms.set("vacation_rentals",STLibraryJS.ElementSelect(b,".st_content_body .st_vacation_rentals form"));this._forms.set("cruises",STLibraryJS.ElementSelect(b,".st_content_body .st_cruise form"));this._tabs=new Hash();this._tabs.set("flights",STLibraryJS.ElementSelect(b,".st_navigation .st_airfare"));this._tabs.set("vacation_packages",STLibraryJS.ElementSelect(b,".st_navigation .st_vacation_packages"));this._tabs.set("hotels",STLibraryJS.ElementSelect(b,".st_navigation .st_hotel"));this._tabs.set("car_rentals",STLibraryJS.ElementSelect(b,".st_navigation .st_car_rental"));this._tabs.set("vacation_rentals",STLibraryJS.ElementSelect(b,".st_navigation .st_vacation_rentals"));this._tabs.set("cruises",STLibraryJS.ElementSelect(b,".st_navigation .st_cruise"));this.ShowForm(a);this.MonitorTabs();this.MonitorCalendars();this.MonitorLocationSuggests()},extend:{MonitorCalendar:function(b,a){STLibraryJS.ElementSelect(a,".st_departure_date_field .st_month").writeAttribute("id",b+"_departure_month");STLibraryJS.ElementSelect(a,".st_departure_date_field .st_day").writeAttribute("id",b+"_departure_day");STLibraryJS.ElementSelect(a,".st_departure_date_field .calendar").writeAttribute("id",b+"_departure_calendar");STLibraryJS.ElementSelect(a,".st_return_date_field .st_month").writeAttribute("id",b+"_return_month");STLibraryJS.ElementSelect(a,".st_return_date_field .st_day").writeAttribute("id",b+"_return_day");STLibraryJS.ElementSelect(a,".st_return_date_field .calendar").writeAttribute("id",b+"_return_calendar");BookingBuddy.Calendar.attach(b+"_departure_calendar",b+"_departure_month",b+"_departure");BookingBuddy.Calendar.attach(b+"_return_calendar",b+"_return_month",b+"_return");Event.observe(b+"_departure_day","change",BookingBuddy.Date.update.curry(b+"_departure",b+"_return",7));Event.observe(b+"_return_month","change",BookingBuddy.Date.updateDaysDrop.curry(b+"_return"));Event.observe(b+"_departure_month","change",function(c){BookingBuddy.Date.update(c+"_departure",c+"_return",7);BookingBuddy.Date.updateDaysDrop(c+"_departure")}.curry(b))},MonitorLocationSuggest:function(c){var b=c.select(".st_has_location_suggest").collect(function(d){return d.identify()});var a=b.collect(function(d){return{id:d,suggestion_types:["airport"]}});BookingBuddy.LS.init("/ajax/",a);BookingBuddy.LS.setMaxSuggestions(15)},MonitorSearchesForAd:function(b,a){b=$(b);a=$(a);if(!b||!a){return}[b,a].each(function(c){c.observe("blur",function(h,d){var g=h.value;var f=d.value;if(g.length>3&&f.length>3){var e=new Element("iframe",{src:"/ajax/ad_wrapper.php?from="+encodeURIComponent(g)+"&to="+encodeURIComponent(f)}).setStyle({display:"none"});document.body.appendChild(e)}}.curry(b,a))})}},MonitorCalendars:function(){var a=new Element("div");var b=a.identify();this._forms.each(function(d,c){if(c.key!=="cruises"){STLibraryJS.SmarterBuddy.MonitorCalendar(d+"_"+c.key,c.value)}}.curry(b))},MonitorLocationSuggests:function(){this._forms.each(function(a){if(a.key!=="cruises"){STLibraryJS.SmarterBuddy.MonitorLocationSuggest(a.value)}})},MonitorTabs:function(){this._tabs.each(function(a){Event.observe(a.value,"click",this.method("ShowForm").curry(a.key))}.bind(this))},ShowForm:function(a){this._tabs.each(function(c,b){if(c===b.key){b.value.up().addClassName("st_selected")}else{b.value.up().removeClassName("st_selected")}}.curry(a));this._forms.each(function(c,b){if(c===b.key){b.value.up().show()}else{b.value.up().hide()}}.curry(a))}});STLibraryJS.SmarterBuddy2=new JS.Class("STLibraryJS.SmarterBuddy2",STLibraryJS.SmarterBuddy,{initialize:function(a){a=$(a);this._forms=new Hash();this._forms.set("flights",STLibraryJS.ElementSelect(a,".tabbed_content .tab_airfare_content form"));this._forms.set("vacation_packages",STLibraryJS.ElementSelect(a,".tabbed_content .tab_vacation_packages_content form"));this._forms.set("hotels",STLibraryJS.ElementSelect(a,".tabbed_content .tab_hotel_content form"));this._forms.set("car_rentals",STLibraryJS.ElementSelect(a,".tabbed_content .tab_car_rental_content form"));this.MonitorLocationSuggests()}});
STLibraryJS.Pluck=new JS.Class("STLibraryJS.Pluck",{extend:{MonitorUserActionLinks:function(){var a=this.displayName+"_MonitorUserActionLinks";$$(".UserActionsLinks").invoke("show");$$(".UserActionsLinks .st_report_abuse a").each(function(d){if(d.readAttribute(a)!=="true"){var e=d.identify()+"_report_abuse_layer";if(!STMLayersJS._Instances.hasKey(e)){var b=new STMLayersJS.Positioner.Community(-10,-220);new STMLayersJS(e,{url:d.href,positioner:b,template:STMLayersJS.Template.Community,refetch:true,auto_close:true})}var c=STMLayersJS.GetInstance(e);d.observe("click",function(g,h){var f=Event.findElement(h,"a");if(f){Event.stop(h);g._options.positioner.SetOpener(f);g.OpenLayer()}}.curry(c));d.writeAttribute(a,"true")}});$$(".UserActionsLinks .st_recommendations").each(function(b){if(b.readAttribute(a)!=="true"){b.observe("click",function(e){var d=Event.findElement(e,"a");if(d){Event.stop(e);var c=new STMResponsesJS.JSON();c.MakeRequest(d.href)}});b.writeAttribute(a,"true")}})},ShowCommentsAndRecommendationsCount:function(){var b=$H();$$("."+this.displayName.gsub(".","_")+"_ShowCommentsAndRecommendationsCount").each(function(c){b.set(c.identify(),c.readAttribute("article_id"))});var a=new STMResponsesJS.JSON();a.CustomCallbacks.set("finish",this.method("MonitorUserActionLinks"));a.MakeRequest("/community/commentsandrecommendationscount.php",{method:"get",parameters:{articles:b.toJSON()}})},UpdateRecommendation:function(c){var b=$(c);if(!Object.isElement(b)){return}var a=b.up(1);a.removeClassName("st_recommend_switch");a.addClassName("st_recommended_switch");a.select(".st_recommendation_text").invoke("update","recommended");a.select(".st_recommendations_count").each(function(e){var d=parseInt(e.readAttribute("recommendation_count"));e.update("("+(d+1)+")")})},UpdateReportAbuse:function(c){var b=$(c);if(!Object.isElement(b)){return}var a=b.up(1);a.removeClassName("st_report_switch");a.addClassName("st_reported_switch");a.select(".st_report_abuse_text").invoke("update","reported")}}});STLibraryJS.Pluck.Comments=new JS.Class("STLibraryJS.Pluck.Comments",STLibraryJS.Pluck,{container:null,cache:null,comments_tpt:null,pagination_current_tpt:null,pagination_other_tpt:null,pagination_separator:null,is_editor:false,show_metadata:false,initialize:function(e,f,d,b,a,c){this.container=$(e);if(!Object.isElement(this.container)){return}this.cache=$H();this.comments_tpt=f;this.pagination_current_tpt=d;this.pagination_other_tpt=b;this.pagination_separator=a;Array.combineArrays(this.container.select(".st_sorting"),this.container.select(".st_navigation"),$$("#"+this.container.identify()+"Form")).invoke("show");if(c){this.is_editor=true;this.MonitorCommentMetadataToggle()}this.MonitorNavigationLinks();this.MonitorFormSubmission();STLibraryJS.Pluck.MonitorUserActionLinks()},extend:{GetCacheKey:function(b){var a=b;if(a.include("?")){var d=a.indexOf("?");var c=a.substr(d).split("&").sort();a=a.substr(0,d)+c.join("&")}return a}},FormSubmissionErrorMessageResponse:function(b,d){var c=$(this.container.identify()+"Form");var a=STMCommonJS.ElementSelect(c,".st_error_message");a.update(d);a.show();["st_comment","st_email_field","st_password_field"].each(function(e){if(b.indexOf(e)!==-1){c.select("."+e).invoke("addClassName","st_error_field")}else{c.select("."+e).invoke("removeClassName","st_error_field")}});$(c.identify()+"Overlay").hide()},FormSubmissionDisabled:function(b){this.FormSubmissionErrorMessageResponse([],b);var a=$(this.container.identify()+"Form");a.select('input[type="image"], input[type="submit"], input[type="button"]').each(function(c){c.hide()});$(a.identify()+"Overlay").hide()},FormSubmissionMoreFieldsResponse:function(a,c,b,e){var d=$(this.container.identify()+"Form");STMCommonJS.ElementSelect(d,".st_take_action_field").replace(a);STMCommonJS.ElementSelect(d,".st_password_field").replace(c);STMCommonJS.ElementSelect(d,".st_keep_me_logged_in_field").replace(b);STMCommonJS.ElementSelect(d,".st_forgot_password").replace(e);this.MonitorForgotPassword();$(d.identify()+"Overlay").hide()},FormSubmissionPublishToFacebookResponse:function(d,a){var c=$(this.container.identify()+"Form");var b=new STLibraryJS.Facebook.Comment(d,a);b.setCaption("My Comment:");b.setDescription(c.comment.value);b.setCallbackComplete(this.method("FormSubmissionSuccessResponse"));b.publish();FB.Connect.get_status().waitUntilReady(function(e){switch(e){case FB.ConnectState.userNotLoggedIn:this.FormSubmissionSuccessResponse()}}.bind(this))},FormSubmissionSignupRequiredResponse:function(d){var c=$(this.container.identify()+"Form");if(!STMLayersJS._Instances.hasKey("need_to_signup")){new STMLayersJS("need_to_signup",{positioner:new STMLayersJS.Positioner.Community(-60,-10),template:STMLayersJS.Template.Community})}var b=STMLayersJS.GetInstance("need_to_signup");var a=STLibraryJS.ElementSelect(c,".st_submit_field input");b._options.positioner.SetOpener(a);b.UpdateAndShow(d);b.SubmitForm($("SmarterTravelCommentsFormSignUp"));$(c.identify()+"Overlay").hide()},FormSubmissionSuccessResponse:function(){var b=window.location.href;if(b.indexOf("#"+this.container.identify())===-1){b+="#"+this.container.identify()}var a=new Element("form",{action:b,method:"post"});document.body.appendChild(a);a.submit()},MonitorForgotPassword:function(){var d=$(this.container.identify()+"Form");var b=STLibraryJS.ElementSelect(d,".st_forgot_password a");if(b){var a=new STMLayersJS.Positioner.Community(-96,-10);var c=new STMLayersJS(this.klass.displayName+"_MonitorForgotPassword",{url:b.href,positioner:a,template:STMLayersJS.Template.Community,refetch:true});b.observe("click",function(f,g){var e=Event.findElement(g,"a");if(e){Event.stop(g);f._options.positioner.SetOpener(e);f.OpenLayer()}}.curry(c))}},MonitorFormSubmission:function(){var d=$(this.container.identify()+"Form");if(!d){return}var c=this.klass.displayName+"_MonitorFormSubmission";if(d.readAttribute(c)!=="true"){d.observe("submit",function(g){var f=Event.findElement(g,"form");if(f){Event.stop(g);this.SubmitForm()}}.bind(this))}var e=STMCommonJS.ElementSelect(d,".st_comment .st_character_count .st_count");var b=STMCommonJS.ElementSelect(d,".st_comment textarea");if(b&&e){var a=parseInt(e.innerHTML,10);if(!Object.isNumber(a)){a=800}b.observe("keyup",function(f,g){if(this.value.length<=f){g.update(f-this.value.length);g.up(".st_character_count").down(".st_left_text").show();g.up(".st_character_count").down(".st_over_text").hide();this.up("div").removeClassName("st_error_field")}else{g.update(this.value.length-f);g.up(".st_character_count").down(".st_left_text").hide();g.up(".st_character_count").down(".st_over_text").show();this.up("div").addClassName("st_error_field")}}.bind(b,a,e))}},MonitorNavigationLinks:function(){var a=this.klass.displayName+"_MonitorNavigationLinks";this.container.select(".st_navigation a").each(function(b){if(b.readAttribute(a)!=="true"){b.observe("click",function(d){var c=Event.findElement(d,"a");if(c){Event.stop(d);this.ReloadComments(c.href)}}.bind(this));b.writeAttribute(a,"true")}}.bind(this));this.container.select(".st_sorting select").each(function(b){if(b.readAttribute(a)!=="true"){b.observe("change",function(d){var c=Event.findElement(d,"select");if(c){Event.stop(d);this.ReloadComments(c.value)}}.bind(this));b.writeAttribute(a,"true")}}.bind(this))},ReloadComments:function(c){STMCommonJS.ShowOverlayLayer(this.container);var b=this.klass.GetCacheKey(c);if(this.cache.hasKey(b)){this.method("ReloadCommentsFromCache").delay(1,b);return}var a=new STMResponsesJS.JSON();a.CustomCallbacks.set("success",this.ReloadCommentsFromServer.bind(this,b));a.CustomCallbacks.set("generic_error",function(){STMLayersJS.AlertMessage.UpdateAndShow(STLibraryJS._GenericErrorMessage);STMCommonJS.HideOverlayLayer(this.container)}.bind(this));a.MakeRequest(c)},ReloadCommentsFromCache:function(a){var b=this.cache.get(a);var c=[];b.comments.each(function(e){c.push(this.comments_tpt.evaluate(e))}.bind(this));var d=[];b.pagination_links.links.each(function(e){d.push(e.current?this.pagination_current_tpt.evaluate({page_text:e.page_text}):this.pagination_other_tpt.evaluate({base_url:b.pagination_links.base_url,id:b.pagination_links.id,sort:b.pagination_links.sort,page_number:e.page_number,page_text:e.page_text}))}.bind(this));this.container.select(".st_comments").invoke("update",c.join(""));this.container.select(".st_navigation").invoke("update",d.join(this.pagination_separator));if(c.length>0&&this.is_editor&&this.show_metadata&&b.comments.last().comment_metadata){$$(".st_comment_metadata").invoke("show")}STLibraryJS.Pluck.MonitorUserActionLinks();this.MonitorNavigationLinks();STMCommonJS.HideOverlayLayer(this.container);Effect.ScrollTo(this.container)},ReloadCommentsFromServer:function(a,b){this.cache.set(a,b);this.ReloadCommentsFromCache(a)},SubmitForm:function(){var d=$(this.container.identify()+"Form");var a=new STMResponsesJS.JSON();a.CustomCallbacks.set("error_message",this.method("FormSubmissionErrorMessageResponse"));a.CustomCallbacks.set("success",this.method("FormSubmissionSuccessResponse"));a.CustomCallbacks.set("signup_required",this.method("FormSubmissionSignupRequiredResponse"));a.CustomCallbacks.set("more_fields",this.method("FormSubmissionMoreFieldsResponse"));a.CustomCallbacks.set("publish_to_facebook",this.method("FormSubmissionPublishToFacebookResponse"));a.CustomCallbacks.set("comments_disabled",this.method("FormSubmissionDisabled"));a.MakeRequest(d.action,{method:d.method,parameters:d.serialize(true)});STMCommonJS.CreateOverlayLayer(d.identify()+"Overlay");var e=Element.getDimensions(d);var c=Element.cumulativeOffset(d);var b=$(d.identify()+"Overlay").setStyle({left:c.left+"px",top:c.top+"px",height:e.height+"px",width:e.width+"px"}).setOpacity(0.5).show()},MonitorCommentMetadataToggle:function(){if(!this.is_editor){return}var b=$$(".st_comment_metadata_toggle");if(b.length<1){var c=new Element("a",{"class":"st_comment_metadata_toggle",href:"#"});c.update(this.show_metadata?"Hide Comment Metadata":"Show Comment Metadata");this.container.down(".st_header_middle").update(c);b.push(c)}var a=function(d){if(!this.is_editor){return}d.stop();this.show_metadata=!this.show_metadata;$$(".st_comment_metadata_toggle").each(function(e){e.update(this.show_metadata?"Hide Comment Metadata":"Show Comment Metadata")}.bind(this));$$(".st_comment_metadata").invoke("toggle")}.bind(this);b.invoke("observe","click",a)}});STLibraryJS.Pluck.MySmarterTravel=new JS.Class("STLibraryJS.Pluck.MySmarterTravel",STLibraryJS.Pluck,{container:null,initialize:function(c){this.container=$(c);if(!Object.isElement(this.container)){return}this.MonitorLinks();this.container.select(".st_content_area .st_my_profile .st_avatar_upload input[type=file]").each(function(d){d.observe("click",function(e){this.container.select(".st_content_area .st_my_profile .st_avatar_upload input[type=radio]").each(function(f){f.checked=true})}.bind(this))}.bind(this));var b=this.container.select('.st_navigation_area .st_tab a[href="#show_account_settings"]');var a=this.container.select('.st_navigation_area .st_tab a[href="#show_profile"]');if((b.length>0)&&(window.location.search.indexOf("tab=account-settings")!==-1)){this.ShowTab("#show_account_settings")}else{if(a.length>0){this.ShowTab("#show_profile")}else{this.ShowTab("#show_comments")}}},MonitorLinks:function(){var a=this.klass.displayName+"_MonitorLinks";this.container.select("a[pluck=yes]").each(function(b){if(b.readAttribute(a)!=="true"){b.observe("click",function(d){var c=Event.findElement(d,"a");if(c){Event.stop(d);this.ShowTab(c.hash)}}.bind(this));b.writeAttribute(a,"true")}}.bind(this))},ShowTab:function(a){this.container.select(".st_navigation_area .st_tab a").each(function(b){if(b.hash===a){b.up().addClassName("st_selected")}else{b.up().removeClassName("st_selected")}});this.container.select(".st_content_area .st_content").each(function(b){if(b.hasClassName("st_"+a.substr(1))){b.show()}else{b.hide()}})}});
STLibraryJS.BBPopunder=new JS.Class("STLibraryJS.BBPopunder",{_cookiename:"BBDPopunder",_windowname:"STBBPopunder",_popped:false,_popWindow:null,_observer:null,_dest:null,_disabled:false,_submittedSearch:false,_observedInputs:$A(["arrival_city","pickup_city"]),onSemLandingPage:false,initialize:function(){this._observer=this.method("popunder");document.observe("dom:loaded",this.method("begin"))},addObservedInput:function(a){if(this._observedInputs.indexOf(a)>-1){return}if(Object.isArray(a)){this._observedInputs=this._observedInputs.concat(a)}else{if(Object.isString(a)){this._observedInputs.push(a)}else{if(Object.isElement(a)){this._observedInputs.push(a)}}}},setObservedInput:function(a){if(Object.isArray(a)){this._observedInputs=$A(a)}else{if(Object.isString(a)){this._observedInputs=$A([a])}else{if(Object.isElement(a)){this._observedInputs=$A([a])}}}},begin:function(){var a=BookingBuddy.getQSParam("source");if(a&&a.match(/^(yahoo|msn)_/)){this.onSemLandingPage=true}document.observe("click",this._observer);this.popunderOnExit();var b=$A();this._observedInputs.each(function(e){var d=$(e);if(Object.isElement(d)){b.push(d)}else{var c=$$('form input[name="'+e+'"]');if(c&&Object.isArray(c)){b=b.concat(c)}}});this._observedInputs=b;this._observedInputs.each(function(d){var c=$F(d);if(c){this.setDest(c)}d.observe("blur",function(f){var e=f.findElement("input");var g=$F(e);if(g){this.setDest(g)}}.bind(this))}.bind(this));if(this.onSemLandingPage&&!this._submittedSearch){BookingBuddy.Search.preSearchHook=this.method("validSearch")}},validSearch:function(){if(this._submittedSearch){return}this._submittedSearch=true;this.popunder()},disable:function(){this._disabled=true;document.stopObserving("click",this._observer)},shouldPop:function(){if(this._disabled){return false}if(this._popped){return false}if(BookingBuddy.getCookie(this._cookiename)){this.disable();return false}if(this.onSemLandingPage&&!this._submittedSearch){return false}return true},shouldPopExit:function(){var a=this.shouldPop();if(a&&this.onSemLandingPage){a=false}if(a){this._popped=true;BookingBuddy.createCookie(this._cookiename,true,1440)}return a},setDest:function(b){this._dest=b;if(b){}if(b&&this._popWindow&&!this._popWindow.closed){var a=this.getPopunderURL(b);if(a){this._popWindow.location.href=a}}},popunder:function(){if(!this.shouldPop()){return}var c=this._dest;if(!c){c=this.locationFromUrl()}if(!c){c=ST_contextual_destination}var b=this.getPopunderURL(c);var a=this._windowname;this._popped=true;this._popWindow=BookingBuddy.PopUnder.call({url:b,numOfSearches:null,center:"yes",params:"toolbar=1,location=1,directories=0,status=1,menubar=1,scrollbars=1,resizable=1",height:720,width:560,name:a});document.stopObserving("click",this._observer)},locationFromUrl:function(){var a=null;if("car"==BookingBuddy.searchMode){a=BookingBuddy.getQSParam("pickup_city")}else{a=BookingBuddy.getQSParam("arrival_city")}return a},popunderOnExit:function(){var b=this.getPopunderURL();var c=this.method("shouldPopExit");var a=this._windowname;ExitPopup.init({url:b+(-1==b.search(/\?/)?"?":"&")+"exit=1",num_searches:0,windowOptions:"toolbar=1,location=1,directories=0,status=1,menubar=1,scrollbars=1,resizable=1",resizetoW:560,resizetoH:720,popCallback:c,mode:"full",name:a})},getPopunderURL:function(a){return"/popunder/deals_popunder.php"+(a?"?arrival_city="+encodeURI(a):"")}});
STLibraryJS.Tabs=new JS.Singleton("STLibraryJS.Tabs",{startupObservers:$A(),tabs:$H(),tabObservers:$H(),pendingTabObservers:$A(),initialized:false,initialize:function(){document.observe("dom:loaded",this.method("_makeTabs"))},observeStartup:function(a){if(Object.isFunction(a)){if(this.initialized){a()}else{this.startupObservers.push(a)}return true}return false},observeTabClicks:function(b,a){if(Object.isUndefined(a)){return false}if(Object.isString(a)&&a.strip().empty()){return false}if(!Object.isFunction(b)){return false}if(!this.initialized){this.pendingTabObservers.push($A([b,a]))}else{this._registerTabObserver(b,a)}return true},forceActiveTab:function(b,a){if(Object.isUndefined(b)){return false}var c=$(b);if(!Object.isElement(c)){return false}if(c.hasClassName("active")){return true}var d=undefined;for(var g=0,m=$A(c.classNames()),o=m.length;g<o;g++){var f=m[g];if(f.match(/^tab_/)){d=f;break}}if(!Object.isUndefined(d)){var h=c.up(".tabbed");var k=h.down("."+d+"_content");if(k){if(!Object.isUndefined(a)){a.stop()}var l=undefined;var n=c.up(".tabs");var e=n.down(".active");for(var g=0,m=$A(e.classNames()),o=m.length;g<o;g++){var f=m[g];if(f.match(/^tab_/)){l=f+"_content";break}}var j=h.down("."+l);j.addClassName("inactive");e.removeClassName("active");k.removeClassName("inactive");c.addClassName("active");return true}}return false},_registerTabObserver:function(c,b){var a=$(b);var e;if(a.hasClassName("tabbed")){e=b}else{e=a.down(".tabbed");if(Object.isUndefined(e)){e=a.up(".tabbed");if(Object.isUndefined(e)){return}}}var d=e.identify();var f=this.tabObservers.get(d);if(Object.isUndefined(f)){f=$A()}f.push(c);this.tabObservers.set(d,f)},_registerPendingObservers:function(){this.pendingTabObservers.each(function(a){this._registerTabObserver(a[0],a[1])}.bind(this));this.pendingTabObservers=$A()},_notifyTabListeners:function(d,a){var c=d.findElement(".tabbed");var b=this.tabObservers.get(c.identify());if(!Object.isUndefined(b)){b.each(function(e){e(d,a)})}},_makeTabs:function(){var a=this._handleTabClick.bind(this);$$("div.tabbed").each(function(f){var d=f.down(".tabs");var j=d.down(".active");if(!j){var j=d.firstDescendant();j.addClassName("active")}var e="";for(var c=0,h=$A(j.classNames()),b=h.length;c<b;c++){var g=h[c];if(g.indexOf("tab_")===0){e=g;break}}f.down(".tabbed_content").childElements().each(function(n,m){var q="";for(var l=0,p=$A(n.classNames()),k=p.length;l<b;l++){var o=p[l];if(o.match(/^tab_.*_content$/)){q=o;break}}if(q&&q.indexOf(e)!==0){n.addClassName("inactive")}});d.childElements().each(function(k){var i=k.down("a");if(!Object.isUndefined(i)){i.observe("click",a)}k.observe("click",a)});this.tabs.set(f.identify(),f)}.bind(this));this.initialized=true;this.startupObservers.uniq().each(function(b){b()});this._registerPendingObservers()},_handleTabClick:function(b){var a=b.findElement("li");if(a.hasClassName("active")){this._notifyTabListeners(b,true);b.stop()}else{this.forceActiveTab(a,b);this._notifyTabListeners(b,false)}}});
STLibraryJS.Facebook=new JS.Class("STLibraryJS.Facebook",{});STLibraryJS.Facebook.Comment=new JS.Class("STLibraryJS.Facebook.Comment",{callbacks:undefined,caption:undefined,description:undefined,href:undefined,title:undefined,user_message_prompt:undefined,initialize:function(b,a){this.title=b;this.href=a;this.callbacks=new STLibraryJS.Observable()},publish:function(){if(Object.isUndefined(this.description)){throw new STMException("The description for the post has not been specified.")}var a={name:this.title,href:this.href,description:this.description};if(!Object.isUndeclared(this.caption)){a.caption=this.caption}this.callbacks.NotifyObservers("pre_popup",this);FB.Connect.streamPublish("",a,null,null,Object.isUndeclared(this.user_message_prompt)?null:this.user_message_prompt,this.callbacks.HaveObservers("complete")?this.callbacks.method("NotifyObservers").curry("complete",this):null);this.callbacks.NotifyObservers("post_popup",this)},setCallbackComplete:function(a){this.callbacks.AddObserver("complete",a)},setCallbackPostPopup:function(a){this.callbacks.AddObserver("post_popup",a)},setCallbackPrePopup:function(a){this.callbacks.AddObserver("pre_popup",a)},setCaption:function(a){this.caption=a},setDescription:function(a){this.description=a}});


	


var STMLayersJS=new JS.Class("STMLayersJS",{_exists:false,_containers:null,_id:"",_options:{},initialize:function(a){this.AddInstance(a);this._options=Object.extend({auto_close:false,class_name:"",content:"",posthide_cb:Prototype.emptyFunction,postopen_cb:Prototype.emptyFunction,positioner:STMLayersJS.Positioner.Default,prehide_cb:Prototype.emptyFunction,preopen_cb:Prototype.emptyFunction,refetch:false,template:STMLayersJS.Template.Default,url:""},arguments[1]||{});if(this._options.auto_close){STMLayersJS._AutoClose.push(this)}},extend:{_AutoClose:[],_Instances:new JS.Hash(),GetInstance:function(a){if(!STMLayersJS._Instances.hasKey(a)){throw new STMException("STMLayersJS: The provided identifier does not exist.",{id:a})}return STMLayersJS._Instances.get(a)}},AddInstance:function(a){if(STMLayersJS._Instances.hasKey(a)){throw new STMException("STMLayersJS: The provided identifier already exists.",{id:a})}this._id=a;STMLayersJS._Instances.store(a,this)},AlertError:function(){this.HideLoadingImage();STMLayersJS.AlertMessage.UpdateAndShow("Oops, sorry! Something's not working quite right and we couldn't complete your request. Please contact customer service for assistence.")},CreateLayer:function(){if($(this._id)){throw new STMException("STMLayersJS: There is already an element on the page with the provided identifier.",{id:this._id})}var c=this._options.template.GetCloseLinkTemplate(this).evaluate({class_name:"STMLayersJS_CloseLink"});var a=this._options.template.GetWrapperTemplate(this).evaluate({layer_id:this._id,close_link:c,content_body:this._options.template.GetContentBodyTemplate(this).evaluate({class_name:"STMLayersJS_ContentBody",close_link:c,content_body:""})});$(document.body).insert(a);this._exists=true;var b=this.GetContainers();if(!b.Wrapper){throw new STMException("STMLayersJS: The wrapper template did not contain the a placeholder for the ID of the layer.")}else{if(!b.CloseLink){throw new STMException("STMLayersJS: The close link is missing.")}else{if(!b.ContentBody){throw new STMException("STMLayersJS: The content body is missing.")}}}STMCommonJS.CreateIFrame(b.Wrapper);Event.observe(b.CloseLink,"click",function(e){var d=Event.findElement(e,"a");if(d){Event.stop(e)}this.HideLayer()}.bind(this))},GetContainers:function(){if(this._containers===null){this._containers={};this._containers.Wrapper=$(this._id);var a=this._containers.Wrapper.select(".STMLayersJS_ContentBody");this._containers.ContentBody=a.length===1?a[0]:null;var b=this._containers.Wrapper.select(".STMLayersJS_CloseLink");this._containers.CloseLink=b.length===1?b[0]:null}return this._containers},HideLayer:function(){this._options.prehide_cb.call(window,this);if(this._exists){var a=this.GetContainers();a.Wrapper.hide()}this._options.posthide_cb.call(window,this)},HideLoadingImage:function(){var a=$("STMLayersJS_Overlay_"+this._id);if(Object.isElement(a)){Element.remove(a)}},MonitorWidget:function(){var d=this.GetContainers();var b=d.ContentBody.select("a");for(var c=0;c<b.length;++c){if(b[c].readAttribute("stmlayersjs_ignore")!=="true"){Event.observe(b[c],"click",function(f){var e=Event.findElement(f,"a");if(e){Event.stop(f);this.OpenLink(e.href)}}.bind(this))}}var a=d.ContentBody.select("form");for(var c=0;c<a.length;++c){if(a[c].readAttribute("stmlayersjs_ignore")!=="true"){Event.observe(a[c],"submit",function(f){var e=Event.findElement(f,"form");if(e){Event.stop(f);this.SubmitForm(e)}}.bind(this))}}},OpenLayer:function(){if(!this._exists){this.CreateLayer()}this._options.preopen_cb.call(window,this);STMLayersJS._AutoClose.invoke("HideLayer");var a=this.GetContainers();if((this._options.url.length>0)&&(this._options.refetch||(a.ContentBody.readAttribute("stmlayerjs_content_loaded")!=="true"))){this.OpenLink(this._options.url,false)}else{this.UpdateContent(a.ContentBody.readAttribute("stmlayerjs_content_loaded")==="true"?null:this._options.content)}},OpenLink:function(a){if(arguments[1]!==false){this.ShowLoadingImage()}new Ajax.Request(a,{method:"get",parameters:{stmlayersjs:true},onSuccess:this.method("ServerResponse"),onFailure:this.method("AlertError")})},ServerResponse:function(c){try{var a=c.responseText.evalJSON();this.ServerResponseHelper(a)}catch(b){this.AlertError()}},ServerResponseHelper:function(data){switch(data.action){case"batch":for(var i=0;i<data.batches.length;++i){this.ServerResponseHelper(data.batches[i])}this.HideLoadingImage();this._options.postopen_cb.call(window,this);break;case"content":this.UpdateContent(data.content);this.HideLoadingImage();this._options.postopen_cb.call(window,this);break;case"function_call":var funct=eval(data.funct);funct.apply(window,[data.parameters]);this.HideLoadingImage();this._options.postopen_cb.call(window,this);break;case"redirect":window.location=data.url;break}},ShowLoadingImage:function(){var c=this.GetContainers();var d=Element.getDimensions(c.Wrapper);var b=Element.cumulativeOffset(c.Wrapper);var a=new Element("div",{className:"STMLayersJS_Overlay",id:"STMLayersJS_Overlay_"+this._id}).setStyle({left:b.left+"px",top:b.top+"px",height:d.height+"px",width:d.width+"px"}).setOpacity(0.5);STMCommonJS.CreateIFrame(a);document.body.appendChild(a)},SubmitForm:function(b){this.ShowLoadingImage();var a=b.serialize(true);a.stmlayersjs=true;new Ajax.Request(b.action,{method:b.method,parameters:a,onSuccess:this.method("ServerResponse"),onFailure:this.method("AlertError")});return false},UpdateAndShow:function(a){if(!this._exists){this.CreateLayer()}this.UpdateContent(a);this.OpenLayer();this._options.postopen_cb.call(window,this)},UpdateContent:function(a){var b=this.GetContainers();if(a!==null){b.ContentBody.update(a);b.ContentBody.writeAttribute("stmlayerjs_content_loaded","true");this.MonitorWidget()}b.Wrapper.setStyle({display:"block"});this._options.positioner.PositionWidget(this)}});
STMLayersJS.Template=new JS.Class("STMLayersJS.Template",{initialize:function(){},GetCloseLinkTemplate:function(a){throw new STMException("STMLayersJS.Template: This method was not declared in sub class.",{method:"GetCloseLinkTemplate",subclass:this.klass.displayName})},GetContentBodyTemplate:function(a){throw new STMException("STMLayersJS.Template: This method was not declared in sub class.",{method:"GetContentBodyTemplate",subclass:this.klass.displayName})},GetWrapperTemplate:function(a){throw new STMException("STMLayersJS.Template: This method was not declared in sub class.",{method:"GetWrapperTemplate",subclass:this.klass.displayName})}});STMLayersJS.Template.Default=new JS.Singleton("STMLayersJS.Template.Default",STMLayersJS.Template,{initialize:function(){this.callSuper()},GetCloseLinkTemplate:function(a){return new Template('<div class="#{class_name}"><a href="#">x Close</a></div>')},GetContentBodyTemplate:function(a){return new Template('<div class="#{class_name}">#{content_body}</div>')},GetWrapperTemplate:function(a){return new Template('<div id="#{layer_id}" class="STMLayersJS_Wrapper STMLayersJSDefaultTemplate">#{close_link}#{content_body}</div>')}});
STMLayersJS.Positioner=new JS.Class("STMLayersJS.Positioner",{_opener:null,initialize:function(){},SetOpener:function(a){this._opener=$(a)},PositionWidget:function(a){throw new STMException("STMLayersJS.Positioner: This method was not declared in sub class.",{method:"PositionWidget",subclass:this.klass.displayName})}});STMLayersJS.Positioner.Default=new JS.Singleton("STMLayersJS.Positioner.Default",STMLayersJS.Positioner,{initialize:function(){this.callSuper()},PositionWidget:function(d){var c=d.GetContainers();var b=document.viewport.getDimensions();var a=document.viewport.getScrollOffsets();var f=Math.floor((b.height-c.Wrapper.getHeight())/2)+a.top;var e=Math.floor((b.width-c.Wrapper.getWidth())/2)+a.left;c.Wrapper.setStyle({position:"absolute",left:e+"px",top:f+"px"})}});
STMLayersJS.Template.AlertMessage=new JS.Singleton("STMLayersJS.Template.AlertMessage",STMLayersJS.Template,{initialize:function(){this.callSuper()},GetCloseLinkTemplate:function(a){return new Template('<div class="#{class_name}"><a href="#">Close</a></div>')},GetContentBodyTemplate:function(a){return new Template('<div class="#{class_name}">#{content_body}</div>')},GetWrapperTemplate:function(a){return new Template('<div id="#{layer_id}" class="STMLayersJS_Wrapper">#{content_body}#{close_link}</div>')}});STMLayersJS.AlertMessage=new STMLayersJS("STMLayersJSAlertMessage",{template:STMLayersJS.Template.AlertMessage,preopen_cb:function(b){var a=$("STMLayersJS_AlertMessage_Overlay");if(!a){a=new Element("div",{id:"STMLayersJS_AlertMessage_Overlay"}).setStyle({position:"fixed",height:"100%",width:"100%",left:0,top:0,backgroundColor:"#000000",zIndex:1000,display:"none"}).update("&nbsp;");STMCommonJS.CreateIFrame(a);document.body.appendChild(a);Event.observe(a,"click",b.method("HideLayer"))}Effect.Appear(a,{from:0,to:0.5})},postopen_cb:function(b){var a=b.GetContainers();a.Wrapper.setStyle({zIndex:1001})},posthide_cb:function(b){var a=$("STMLayersJS_AlertMessage_Overlay");if(a){Effect.Fade(a,{from:0.5,to:0})}}});


	


STMLayersJS.Template.Community=new JS.Singleton("STMLayersJS.Template.Community",STMLayersJS.Template,{initialize:function(){this.callSuper()},GetCloseLinkTemplate:function(a){return new Template('<div class="#{class_name}"><a href="#">x close</a></div>')},GetContentBodyTemplate:function(a){return new Template('#{close_link}<div class="#{class_name}">#{content_body}</div>')},GetWrapperTemplate:function(a){return new Template('<div id="#{layer_id}" class="STMLayersJS_Wrapper CommunityLayer"><div class="header_area"><div class="left_area"><div class="right_area"><div class="middle_area"></div></div></div></div><div class="body_area"><div class="left_area"><div class="right_area"><div class="middle_area">#{content_body}</div></div></div></div><div class="footer_area"><div class="left_area"><div class="right_area"><div class="middle_area"></div></div></div></div></div>')}});
STMLayersJS.Positioner.Community=new JS.Class("STMLayersJS.Positioner.Community",STMLayersJS.Positioner,{_left:0,_top:0,initialize:function(){this.callSuper();this._top=arguments[0]||0;this._left=arguments[1]||0},PositionWidget:function(b){if(this._opener===null){throw new STMException("STMLayersJS.Positioner.Community: The opener was not set.")}var a=b.GetContainers();a.Wrapper.setStyle({position:"absolute",left:"0",top:"0"});var e=this._opener.cumulativeOffset();var d=e.top+this._top;var c=e.left+this._left;a.Wrapper.setStyle({position:"absolute",left:c+"px",top:d+"px"})}});

var ExitPopup={UnloadType:"browser_feature",BrowserSettings:{ie6:{width:1,height:1},ie7:{width:250,height:100},safari:{width:85,height:100},firefox:{width:85,height:100}},windowWidth:0,windowHeight:0,searchesPerformed:0,numOfSearches:0,cookieExpire:0,init:function(){var d=navigator.userAgent;var c="ie7";if(d.indexOf("MSIE")!=-1){c="ie6";if(window.XMLHttpRequest){c="ie7"}}else{if(d.indexOf("Gecko")!=-1){c="firefox"}else{if(d.indexOf("safari")!=-1){c="safari"}}}var g=(window.screenLeft||window.screenX);var e=(window.screenTop||window.screenY);ExitPopup.windowWidth=document.viewport.getWidth();ExitPopup.windowHeight=document.viewport.getHeight();if(typeof(g)=="undefined"){g=0;e=0;var a=g+window.screen.availWidth-ExitPopup.BrowserSettings[c].width;var f=e+window.screen.availHeight-ExitPopup.BrowserSettings[c].height}else{var a=g+ExitPopup.windowWidth-ExitPopup.BrowserSettings[c].width;var f=e+ExitPopup.windowHeight-ExitPopup.BrowserSettings[c].height}switch(c){case"ie7":f=f-95;a=a+13;break;case"safari":f=f-16;break;default:a=5000;f=5000}var b=Object.extend({url:"",name:"popupwindow",windowOptions:"toolbar=1,location=1,directories=0,status=1,menubar=1,scrollbars=1,resizable=1,copyhistory=1",width:ExitPopup.BrowserSettings[c].width,height:ExitPopup.BrowserSettings[c].height,left:a,top:f,movetoX:g,movetoY:e,resizetoW:"300",resizetoH:"300",popCallback:null,expire:ExitPopup.cookieExpire,num_searches:null,mode:"external"},arguments[0]||{});if(b.url.length<1){return}Event.observe(window,"load",ExitPopup._init.bind(this,b))},_init:function(c){var b=$$("a");for(var d=0;d<b.length;++d){if(b[d].href.indexOf(window.location.host)!=-1){b[d].observe("click",function(){ExitPopup.UnloadType="internal_link"})}else{b[d].observe("click",function(){ExitPopup.UnloadType="external_link"})}}var a=$$("form");for(d=0;d<a.length;++d){if(a[d].action.indexOf(window.location.host)!=-1||a[d].action.indexOf("/")===0){a[d].observe("submit",function(){ExitPopup.UnloadType="internal_link"})}else{a[d].observe("submit",function(){ExitPopup.UnloadType="external_link"})}}Event.observe(window,"unload",ExitPopup.openwindow.bind(this,c))},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}},openwindow:function(d){ExitPopup.searchesPerformed=parseInt(ExitPopup.getCookie("BBPopUnderNumOfSearches"));if(isNaN(ExitPopup.searchesPerformed)){ExitPopup.searchesPerformed=0}if(d.num_searches&&ExitPopup.searchesPerformed<d.num_searches){return}if(typeof d.popCallback=="function"&&!d.popCallback()){return}var c=ExitPopup.UnloadType=="external_link";if(d.mode=="full"){c=c||(ExitPopup.UnloadType=="browser_feature")}if(c){var b=d.name?d.name:"BBExitPopUp"+ExitPopup.searchesPerformed;var a=window.open(d.url,b,d.windowOptions,d.width,d.height,d.left,d.top);if(a!=null){a.blur();window.focus();a.moveTo(d.movetoX+(ExitPopup.windowWidth-d.resizetoW)/2,d.movetoY+(ExitPopup.windowHeight-d.resizetoH)/2);a.resizeTo(d.resizetoW,d.resizetoH)}}}};
var bubble_timeout_id=null;function show_bubble(i,j){i=$(i);var d=$(j);if(!d){return}var e=$("info_bubble");if(e){hide_bubble()}var k=$(d.cloneNode(true)).setStyle({display:"block"});e=new Element("div",{id:"info_bubble"}).addClassName("bubble");var b=new Element("div").addClassName("info_wrapper");b.insert(k);e.insert(b);var h=new Element("div").addClassName("bubble_bottom");e.insert(h);e.setStyle({visibility:"hidden"});i.up().insert(e);var g=i.positionedOffset();var c=e.offsetHeight;var f=g[1]-c;e.setStyle({left:(Prototype.Browser.IE?g[0]:(g[0]-5))+"px",top:(Prototype.Browser.IE?f:(f-20))+"px",visibility:"visible"});Event.observe(e,"mouseover",cancel_bubble_timeout);Event.observe(e,"mouseout",hide_bubble_timeout)}function hide_bubble(){cancel_bubble_timeout();var b=$("info_bubble");if(!b){return}b.remove();bubble_timeout_id=null}function hide_bubble_timeout(){bubble_timeout_id=window.setTimeout(hide_bubble,800)}function cancel_bubble_timeout(){if(bubble_timeout_id!=null){window.clearTimeout(bubble_timeout_id)}bubble_timeout_id=null}function add_to_facebook(){var j=document;var c="http://www.facebook.com/share";var b=j.location;var h=encodeURIComponent;var g=".php?src=bm&v=4&i=1174073866&u="+h(b.href)+"&t="+h(j.title);try{if(!/^(.*\.)?facebook\.[^.]*$/.test(b.host)){throw (0)}share_internal_bookmarklet(g)}catch(i){a=function(){if(!window.open(c+"r"+g,"sharer","toolbar=0,status=0,resizable=1,width=626,height=436,scrollbars=1")){b.href=c+g}};if(/Firefox/.test(navigator.userAgent)){window.setTimeout(a,0)}else{a()}}void (0)};
var mboxCopyright="&copy; 2004-2007 Offermatica &trade; Corporation";mboxUrlBuilder=function(d,c){this.a=d;this.b=c;this.c=new Array();this.d=function(a){return a};this.f=null};mboxUrlBuilder.prototype.addParameter=function(f,e){var d=new RegExp("('|\")");if(d.exec(f)){throw"Parameter '"+f+"' contains invalid characters"}for(var c=0;c<this.c.length;c++){var b=this.c[c];if(b.name==f){b.value=e;return this}}var a=new Object();a.name=f;a.value=e;this.c[this.c.length]=a;return this};mboxUrlBuilder.prototype.addParameters=function(d){if(!d){return this}for(var b=0;b<d.length;b++){var a=d[b].indexOf("=");if(a==-1||a==0){continue}this.addParameter(d[b].substring(0,a),d[b].substring(a+1,d[b].length))}return this};mboxUrlBuilder.prototype.setServerType=function(a){this.o=a};mboxUrlBuilder.prototype.setBasePath=function(a){this.f=a};mboxUrlBuilder.prototype.setUrlProcessAction=function(a){this.d=a};mboxUrlBuilder.prototype.buildUrl=function(){var f=this.f?this.f:"/m2/"+this.b+"/mbox/"+this.o;var d=document.location.protocol=="file:"?"http:":document.location.protocol;var g=d+"//"+this.a+f;var c=g.indexOf("?")!=-1?"&":"?";for(var b=0;b<this.c.length;b++){var a=this.c[b];g+=c+a.name+"="+encodeURIComponent(a.value);c="&"}return this.t(this.d(g))};mboxUrlBuilder.prototype.getParameters=function(){return this.c};mboxUrlBuilder.prototype.setParameters=function(a){this.c=a};mboxUrlBuilder.prototype.clone=function(){var b=new mboxUrlBuilder(this.a,this.b);b.setServerType(this.o);b.setBasePath(this.f);b.setUrlProcessAction(this.d);for(var a=0;a<this.c.length;a++){b.addParameter(this.c[a].name,this.c[a].value)}return b};mboxUrlBuilder.prototype.t=function(a){return a.replace(/\"/g,"&quot;").replace(/>/g,"&gt;")};mboxStandardFetcher=function(){};mboxStandardFetcher.prototype.getType=function(){return"standard"};mboxStandardFetcher.prototype.fetch=function(a){a.setServerType(this.getType());document.write('<script src="'+a.buildUrl()+'" language="JavaScript"><\/script>')};mboxStandardFetcher.prototype.cancel=function(){};mboxAjaxFetcher=function(){};mboxAjaxFetcher.prototype.getType=function(){return"ajax"};mboxAjaxFetcher.prototype.fetch=function(a){a.setServerType(this.getType());var b=a.buildUrl();this.x=document.createElement("script");this.x.src=b;document.body.appendChild(this.x)};mboxAjaxFetcher.prototype.cancel=function(){};mboxFactory=function(d,a){this.z=new mboxList();this.A=typeof document.createElement("div").replaceChild!="undefined"&&(function(){return true})()&&typeof document.getElementById!="undefined"&&typeof(window.attachEvent||document.addEventListener||window.addEventListener)!="undefined"&&typeof encodeURIComponent!="undefined";this.B=this.A;if(mboxGetPageParameter("mboxDisable")!=null){this.B=false}if(!mboxCookies.isEnabled()){this.B=false}if(mboxCookies.getCookie("disable")=="true"){this.B=false}if(this.isAdmin()){this.enable()}this.C=mboxGenerateId();this.D=new mboxSession(this.C,"mboxSession","session",31*60);this.E=new mboxPC(this.C,"PC",63072000);this.w=new mboxUrlBuilder(d,a);this.F();this.G=new Date().getTime();this.H=this.G;var c=this;this.addOnLoad(function(){c.H=new Date().getTime()});if(this.A){this.addOnLoad(function(){c.getMboxes().each(function(b){b.finalize()})});this.limitTraffic(100,10368000);if(this.B){this.K();this.L=new mboxSignaler(function(e,b){return c.create(e,b)})}}};mboxFactory.prototype.isEnabled=function(){return this.B};mboxFactory.prototype.isSupported=function(){return this.A};mboxFactory.prototype.disable=function(a){if(typeof duration=="undefined"){a=60*60}if(!this.isAdmin()){this.B=false;mboxCookies.setCookie("disable","true",a)}};mboxFactory.prototype.enable=function(){this.B=true;mboxCookies.deleteCookie("disable")};mboxFactory.prototype.isAdmin=function(){return document.location.href.indexOf("mboxEnv")!=-1};mboxFactory.prototype.limitTraffic=function(a,b){};mboxFactory.prototype.addOnLoad=function(a){if(window.addEventListener){window.addEventListener("load",a,false)}else{if(document.addEventListener){document.addEventListener("load",a,false)}else{if(document.attachEvent){window.attachEvent("onload",a)}}}};mboxFactory.prototype.getEllapsedTime=function(){return this.H-this.G};mboxFactory.prototype.getEllapsedTimeUntil=function(a){return a-this.G};mboxFactory.prototype.getMboxes=function(){return this.z};mboxFactory.prototype.get=function(b,a){return this.z.get(b).getById(a||0)};mboxFactory.prototype.update=function(b,a){if(!this.isEnabled()){return}if(this.z.get(b).length()==0){throw"Mbox "+b+" is not defined"}this.z.get(b).each(function(c){c.setFetcher(new mboxAjaxFetcher());c.getUrlBuilder().addParameter("mboxRandomRequestId",mboxGenerateId());c.load(a)})};mboxFactory.prototype.create=function(h,g){if(!this.isSupported()){return null}var f=this.w.clone();f.addParameter("mboxCount",this.z.length()+1);f.addParameters(g);try{var b=this;var d=new mbox(h,this.z.get(h).length(),f);d.setOnError(function(c,e){d.setMessage(c);if(e=="standard"){d.activate();if(!d.isActivated()){b.disable();window.location.reload(false)}}else{throw c}});d.setFetcher(new mboxStandardFetcher());this.z.add(d)}catch(a){this.disable();throw"Failed creating mbox, the error was: "+a}return d};mboxFactory.prototype.getPageId=function(){return this.C};mboxFactory.prototype.getPCId=function(){return this.E};mboxFactory.prototype.getSessionId=function(){return this.D};mboxFactory.prototype.getSignaler=function(){return this.L};mboxFactory.prototype.getUrlBuilder=function(){return this.w};mboxFactory.prototype.F=function(){var b=this.w;b.addParameter("mboxHost",document.location.hostname).addParameter("mboxSession",this.D.getId()).addParameter("mboxPC",this.E.getId()).addParameter("mboxPage",this.C);var a=mboxCookies.getCookie("edge");if(a!=null){b.addParameter("edge",a)}b.setUrlProcessAction(function(d){d+="&mboxURL="+escape(document.location);var c=escape(document.referrer);if(d.length+c.length<2000){d+="&mboxReferrer="+c}d+="&mboxVersion="+mboxVersion;return d})};mboxFactory.prototype.W=function(){return""};mboxFactory.prototype.K=function(){document.write("<style>.mboxDefault { visibility:hidden; }</style>")};mboxSignaler=function(f){var e=mboxCookies.getCookieNames("signal-");for(var c=0;c<e.length;c++){var d=e[c];var b=mboxCookies.getCookie(d).split("&");var a=f(b[0],b);a.put();a.load();mboxCookies.deleteCookie(d)}};mboxSignaler.prototype.signal=function(a,b){mboxCookies.setCookie("signal-"+a,mboxShiftArray(arguments).join("&"),45*60)};mboxList=function(){this.z=new Array()};mboxList.prototype.add=function(a){if(a!=null){this.z[this.z.length]=a}};mboxList.prototype.get=function(d){var c=new mboxList();for(var b=0;b<this.z.length;b++){var a=this.z[b];if(a.getName()==d){c.add(a)}}return c};mboxList.prototype.getById=function(a){return this.z[a]};mboxList.prototype.length=function(){return this.z.length};mboxList.prototype.each=function(b){if(typeof b!="function"){throw"Action must be a function, was: "+typeof(b)}for(var a=0;a<this.z.length;a++){b(this.z[a])}};mboxUpdate=function(a){mboxFactoryDefault.update(a,mboxShiftArray(arguments))};mboxCreate=function(b){var a=mboxFactoryDefault.create(b,mboxShiftArray(arguments));if(a){a.put();if(mboxFactoryDefault.isEnabled()){a.load()}}return a};mbox=function(c,b,a){this.eb=null;this.fb=0;this.gb=null;this.hb=new mboxOfferContent();this.ib=this.getDefaultDiv();this.w=a;this.message="";this.jb=new Object();this.kb=0;this.db=b;this.g=c;this.lb();this.mb=new mboxStandardFetcher();a.addParameter("mbox",c).addParameter("mboxId",b);this.nb=function(){};this.ob=function(){}};mbox.prototype.getId=function(){return this.db};mbox.prototype.lb=function(){if(this.g.length>250){throw"Mbox Name "+this.g+" exceeds max length of 250 characters."}else{if(this.g.match(/^\s+|\s+$/g)){throw"Mbox Name "+this.g+" has leading/trailing whitespace(s)."}}};mbox.prototype.getName=function(){return this.g};mbox.prototype.parameters=function(){return this.w.getParameters()};mbox.prototype.setOnLoad=function(a){this.ob=a;return this};mbox.prototype.setMessage=function(a){this.message=a;return this};mbox.prototype.setOnError=function(a){this.nb=a;return this};mbox.prototype.setFetcher=function(a){this.mb.cancel();this.mb=a;return this};mbox.prototype.getFetcher=function(){return this.mb};mbox.prototype.put=function(){document.write('<div id="'+this.getMarkerName()+'" style="visibility:hidden;display:none"></div>')};mbox.prototype.load=function(d){this.setEventTime("load.start");this.cancelTimeout();var a=(d&&d.length>0)?this.w.clone().addParameters(d):this.w;this.mb.fetch(a);var b=this;this.qb=setTimeout(function(){b.nb("Fetch of mbox timed out",b.mb.getType())},15000);this.setEventTime("load.end")};mbox.prototype.activate=function(){if(this.fb){return this.fb}this.setEventTime("activate"+ ++this.kb+".start");if(this.show()){this.cancelTimeout();this.fb=1}this.setEventTime("activate"+this.kb+".end");return this.fb};mbox.prototype.isActivated=function(){return this.fb};mbox.prototype.setOffer=function(a){if(a&&a.show&&a.setOnLoad){this.hb=a}else{throw"Invalid offer"}return this};mbox.prototype.getOffer=function(){return this.hb};mbox.prototype.show=function(){this.setEventTime("show.start");var a=this.hb.show(this);this.setEventTime(a==1?"show.end.ok":"show.end");return a};mbox.prototype.showContent=function(a){if(a==null){return 0}if(this.ib==null){this.ib=this.getDefaultDiv();if(this.ib==null){return 0}}this.sb(this.ib);this.ib.parentNode.replaceChild(a,this.ib);this.ib=a;this.tb(a);this.ob();return 1};mbox.prototype.hide=function(){this.setEventTime("hide.start");var a=this.showContent(this.getDefaultDiv());this.setEventTime(a==1?"hide.end.ok":"hide.end.fail");return a};mbox.prototype.finalize=function(){this.setEventTime("finalize.start");this.cancelTimeout();if(this.getDefaultDiv()==null){this.gb=document.createElement("div");this.gb.className="mboxDefault";var a=document.getElementById(this.getMarkerName());a.parentNode.insertBefore(this.gb,a);this.setMessage("No default content, an empty one has been added")}if(!this.activate()){this.hide();this.setEventTime("finalize.end.hide")}this.setEventTime("finalize.end.ok")};mbox.prototype.cancelTimeout=function(){if(this.qb){clearTimeout(this.qb)}this.mb.cancel()};mbox.prototype.getDiv=function(){return this.ib};mbox.prototype.getDefaultDiv=function(){if(this.gb!=null){return this.gb}var a=document.getElementById(this.getMarkerName());while(a!=null){if((a.nodeType==1)&&(a.nodeName=="DIV")){if(a.className.indexOf("mboxMarker-")>0){return null}else{if(a.className=="mboxDefault"){this.gb=a;return a}}}a=a.previousSibling}return null};mbox.prototype.getMarkerName=function(){return"mboxMarker-"+this.g+"-"+this.db};mbox.prototype.setEventTime=function(a){this.jb[a]=(new Date()).getTime()};mbox.prototype.getEventTimes=function(){return this.jb};mbox.prototype.getURL=function(){return this.w.buildUrl()};mbox.prototype.getUrlBuilder=function(){return this.w};mbox.prototype.xb=function(a){return a.style.display!="none"};mbox.prototype.tb=function(a){this.yb(a,true)};mbox.prototype.sb=function(a){this.yb(a,false)};mbox.prototype.yb=function(a,b){a.style.visibility=b?"visible":"hidden";a.style.display=b?"block":"none"};mboxOfferContent=function(){this.ob=function(){}};mboxOfferContent.prototype.show=function(a){var b=a.showContent(document.getElementById(this.Ab(a)));if(b==1){this.ob()}return b};mboxOfferContent.prototype.setOnLoad=function(a){this.ob=a};mboxOfferContent.prototype.Ab=function(a){return"mboxImported-"+a.getName()+"-"+a.getId()};mboxOfferAjax=function(a){this.rb=a;this.ob=function(){}};mboxOfferAjax.prototype.setOnLoad=function(a){this.ob=a};mboxOfferAjax.prototype.show=function(b){var a=document.createElement("div");a.id="mboxImported-"+b.getName()+"-"+b.getId();a.innerHTML=this.rb;var c=b.showContent(a);if(c==1){this.ob()}return c};mboxOfferDefault=function(){};mboxOfferDefault.prototype.setOnLoad=function(a){};mboxOfferDefault.prototype.show=function(a){return a.hide()};mboxCookieManager=function mboxCookieManager(b,a){this.g=b;this.Cb=a==""||a.indexOf(".")==-1?"":"; domain="+a;this.loadCookies()};mboxCookieManager.prototype.isEnabled=function(){this.setCookie("check","true",60);this.loadCookies();return this.getCookie("check")=="true"};mboxCookieManager.prototype.setCookie=function(e,c,f){if(typeof e!="undefined"&&typeof c!="undefined"&&typeof f!="undefined"){var a=this.Db.length;for(var b=0;b<this.Db.length;b++){if(this.Db[b].name==e){a=b;break}}var d=new Object();d.name=e;d.value=escape(c);d.expireOn=Math.ceil(f+new Date().getTime()/1000);this.Db[a]=d;this.saveCookies()}};mboxCookieManager.prototype.getCookie=function(c){for(var a=0;a<this.Db.length;a++){var b=this.Db[a];if(b.name==c){return unescape(b.value)}}return null};mboxCookieManager.prototype.deleteCookie=function(c){var d=new Array();for(var a=0;a<this.Db.length;a++){var b=this.Db[a];if(b.name!=c){d[d.length]=b}}this.Db=d;this.saveCookies()};mboxCookieManager.prototype.getCookieNames=function(d){var a=new Array();for(var b=0;b<this.Db.length;b++){var c=this.Db[b];if(c.name.indexOf(d)==0){a[a.length]=c.name}}return a};mboxCookieManager.prototype.saveCookies=function(){var b=new Array();var c=0;for(var a=0;a<this.Db.length;a++){var d=this.Db[a];b[b.length]=d.name+"#"+d.value+"#"+d.expireOn;if(c<d.expireOn){c=d.expireOn}}var e=new Date(c*1000);document.cookie=this.g+"="+b.join("|")+"; expires="+e.toGMTString()+"; path=/"+this.Cb};mboxCookieManager.prototype.loadCookies=function(){this.Db=new Array();var g=document.cookie.indexOf(this.g+"=");if(g!=-1){var a=document.cookie.indexOf(";",g);if(a==-1){a=document.cookie.indexOf(",",g);if(a==-1){a=document.cookie.length}}var b=document.cookie.substring(g+this.g.length+1,a).split("|");var d=Math.ceil(new Date().getTime()/1000);for(var c=0;c<b.length;c++){var f=b[c].split("#");if(d<=f[2]){var e=new Object();e.name=f[0];e.value=f[1];e.expireOn=f[2];this.Db[this.Db.length]=e}}}};mboxSession=function(c,d,b,a){this.Rb=d;this.Z=b;this.Sb=a;this.Tb=false;this.db=typeof mboxForceSessionId!="undefined"?mboxForceSessionId:mboxGetPageParameter(this.Rb);if(this.db==null||this.db.length==0){this.db=mboxCookies.getCookie(b);if(this.db==null||this.db.length==0){this.db=c;this.Tb=true}}mboxCookies.setCookie(b,this.db,a)};mboxSession.prototype.getId=function(){return this.db};mboxSession.prototype.forceId=function(a){this.db=a;mboxCookies.setCookie(this.Z,this.db,this.Sb)};mboxPC=function(c,b,a){this.Z=b;this.Sb=a;this.db=typeof mboxForcePCId!="undefined"?mboxForcePCId:mboxCookies.getCookie(b);if(this.db==null||this.db.length==0){this.db=c}mboxCookies.setCookie(b,this.db,a)};mboxPC.prototype.getId=function(){return this.db};mboxPC.prototype.forceId=function(a){if(this.db!=a){this.db=a;mboxCookies.setCookie(this.Z,this.db,this.Sb);return true}return false};mboxGetPageParameter=function(a){var d=null;var b=new RegExp(a+"=([^&]*)");var c=b.exec(document.location);if(c!=null&&c.length>=2){d=c[1]}return d};mboxSetCookie=function(b,a,c){return mboxCookies.setCookie(b,a,c)};mboxGetCookie=function(a){return mboxCookies.getCookie(a)};mboxCookiePageDomain=function(){var c=(/([^:]*)(:[0-9]{0,5})?/).exec(document.location.host)[1];var a=/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/;if(!a.exec(c)){var b=(/([^\.]+\.[^\.]{3}|[^\.]+\.[^\.]+\.[^\.]{2})$/).exec(c);if(b){c=b[0]}}return c?c:""};mboxShiftArray=function(b){var c=new Array();for(var a=1;a<b.length;a++){c[c.length]=b[a]}return c};mboxGenerateId=function(){return(new Date()).getTime()+"-"+Math.floor(Math.random()*999999)};if(typeof mboxVersion=="undefined"){var mboxVersion=28;var mboxCookies=new mboxCookieManager("mbox",(function(){return mboxCookiePageDomain()})());var mboxFactoryDefault=new mboxFactory("mbox5.offermatica.com","smartertravelmedia")}mboxDisplayDebugInfo=function(){mboxDebugger.show()};mboxCookieIsEnabled=function(){mboxCookies.setCookie("check","true",60);return mboxCookies.getCookie("check")=="true"};mboxDebug=function(b,c,d){this.cc=b;this.p=null;var a=mboxGetPageParameter(c);if(a==null){a=mboxCookies.getCookie(this.cc)}if(a!=null){if(a.indexOf("x")==0){this.p=new mboxDebugActionNone();document.write('<script language="Javascript1.2" src="http://admin5.offermatica.com/admin/mbox/mbox_debug_'+a+".jsp?mboxServerHost=mbox5.offermatica.com&clientCode=smartertravelmedia&session="+mboxCookies.getCookie("session")+'"><\/script>')}else{if(a.indexOf("log")==0){this.p=new mboxDebugActionLog(a)}else{if(a=="reset"){a=null}else{this.p=new mboxDebugActionDefault()}}}}if(this.p!=null){if(d.isSupported()){d.addOnLoad(mboxDisplayDebugInfo)}else{alert("mbox functionality is not supported on this browser");this.disable()}}if(a!=null){mboxCookies.setCookie(this.cc,a,45*60)}else{this.disable()}};mboxDebug.prototype.isEnabled=function(){return this.p!=null};mboxDebug.prototype.disable=function(){mboxCookies.deleteCookie(this.cc)};mboxDebug.prototype.setShowAction=function(a){this.p=a};mboxDebug.prototype.show=function(){if(this.p!=null){this.p.show()}};mboxDebugActionLog=function(a){this.dc=a;this.ec=(new Date()).getTime()};mboxDebugActionLog.prototype.show=function(){var a=(new Date()).getTime();var b=new mboxDebugWindow("Debug Log");b.putPageStart();b.put("<img src='"+document.location.protocol+"//mbox5.offermatica.com/images/log.gif?mboxDebug="+this.dc+"&mboxClient=smartertravelmedia&mboxPageLoadTime="+(a-this.ec)+"'/>");b.put("<br />");b.putCloseButton();b.putPageEnd()};mboxDebugActionNone=function(){};mboxDebugActionNone.prototype.show=function(){alert("Debug mode not defined\n('x-mode' not supported when debug is remote in mbox.js)")};mboxDebugActionDefault=function(){};mboxDebugActionDefault.prototype.show=function(){var a=new mboxDebugWindow("Debug");a.putPageStart();a.put("  <b>Mbox Debug Window (version:"+mboxVersion+")</b></br>");a.put("<p/>");a.put("<b>Page</b>: "+document.location);a.put(" <ul>");if(mboxFactoryDefault.isEnabled()){a.put("  <li>Enabled: true</li>")}else{a.put('  <li>Enabled: <span style="color:red"><b>false</b></span></li>')}a.put("  <li>Cookies enabled: "+mboxCookieIsEnabled()+"</li>");a.put("  <li>Page URL: '"+document.location+"'</li>");a.put("  <li>Cookies: '"+document.cookie+"'</li>");mboxFactoryDefault.getMboxes().each(function(b){var d=b.getName();a.put("  <li>mbox: '"+d+"'");a.put("   <ul>");if(b.message!=""){a.put('   <li><span style="color: red"><b>Error: '+b.message+"</b></span></li>")}var c=document.getElementById(b.getMarkerName());if(c==null){a.put('    <li><span style="color: red"><b>Error: can not find mbox in dom</b></span></li>')}a.put('    <li><a href="'+b.getURL()+'">'+b.getURL()+"</a></li>");a.put("   </ul>");a.put("  </li>")});a.put(" </ul>");a.putCloseButton();a.putPageEnd()};mboxDebugWindow=function(b){this.g=b+" "+document.location.hostname;var c=/\W/g;var a=this.g.replace(c,"_");this.gc=window.open("","mboxDebugWindow"+a,"width=600,height=300,resizable,scrollbars=yes,toolbar=yes");if(this.gc==null){alert("Unable to open Offermatica's mboxDebugWindow Window.\nAre you blocking popups?\n")}};mboxDebugWindow.prototype.put=function(a){if(this.gc==null){return}try{this.gc.document.writeln(a);this.gc.scrollBy(0,1000)}catch(b){alert("Unable to write to the current mboxDebug window.\nPlease close any open debug window");this.gc=null}};mboxDebugWindow.prototype.putCloseButton=function(){this.put('<a href="javascript:mboxDebugWindowClose()">click here to close debug window</a>')};mboxDebugWindow.prototype.putPageStart=function(){this.put("<html><head> <title>"+this.g+"</title>  <script>   function mboxDebugWindowClose() {     try {       window.opener.mboxDebugger.disable();     } catch(e) {       alert('Could not disable debug mode.\\n'         + 'Browse to a page containing an mbox and\\n'         + 'click on close link.');     }     window.close();   }  <\/script> </head> <body>")};mboxDebugWindow.prototype.putPageEnd=function(){this.put("</body></html>");if(this.gc!=null){this.gc.document.close()}};if(typeof mboxDebugger=="undefined"){mboxDebugger=new mboxDebug("debug","mboxDebug",mboxFactoryDefault)}offermaticatrackingdiv=null;function offermaticaCreateConfirm(a,c){try{var b=mboxFactoryDefault.get(a).getURL()}catch(d){return}b=b.replace("mbox="+a,"mbox="+c);b=b.replace("mboxPage="+mboxFactoryDefault.getPageId(),"mboxPage="+mboxGenerateId());b+="&t="+Math.floor(Math.random());if(offermaticatrackingdiv==null){var e=document.createElement("div");e.id="offermaticatrackingdiv";document.body.appendChild(e);offermaticatrackingdiv=$("offermaticatrackingdiv");offermaticatrackingdiv.hide()}offermaticatrackingdiv.update('<img src="'+b+'" />')}if(!window.XMLHttpRequest){mboxCreate=function(){};offermaticaCreateConfirm=function(){};Event.observe(window,"load",showMboxes)}function showMboxes(){var a=$$("div.mboxDefault");a.each(function(b){b.style.visibility="visible";b.style.display="block"})};
function blockedPopUp(){var a=document.getElementById("BookingBuddySearchBlockedPopUpDivID");a.style.visibility="visible";BookingBuddy.toggleCovered(a,"hidden");var b=BookingBuddy.getCookie("blocker_alert");if(b==1){return}s=s_gi(s_account);s.linkTrackVars="eVar8";s.linkTrackEvents="None";s.eVar8="blocker_alert";s.lnk=s.co(true);s.tl(this,"o","Search blocked by popup blocker");s_gs(s_account);s.linkTrackVars="None";s.linkTrackEvents="None";s.eVar8="";document.cookie="blocker_alert=1; path=/; domain=.smartertravel.com;"}function omnitureDealClick(c,a,b){s.linkType="o";s.linkName="ST Sponsored Deal Click";s.linkTrackVars="products,events";s.linkTrackEvents="purchase,event16";if(getCookie("entry_time")!="time"){s.eVar11=getESTHour();s.linkTrackVars+=",eVar11"}s.products=";bbdn_"+b+";1;bbdn_"+b;s.purchaseID=Math.floor(Math.random()*999999+1)+""+new Date().getTime();createCookie("entry_time","time",30);s.events="purchase,event16";s.lnk=s.co(c);s_gs(a)}function omnitureAFSClick(b){s=s_gi(s_account);var a=new Date();s.purchaseID=Math.floor(Math.random()*999999+1)+""+a.getTime();s.linkTrackVars="products,events";s.linkTrackEvents="purchase,event27";s.products=";stafs_1;1;stafs_1";s.events="purchase,event27";s.lnk=s_co(b);s.tl(this,"o","AFS Click")}function openDealWindow(a){var b=window.open(a,"deal_window");offermaticaCreateConfirm("st_conv_page_view","st_conv_sponsoreddealclicks");if(b){return true}else{window.scroll(0,0);blockedPopUp();return false}}function omnitureSendEvar(b,a){s=s_gi(s_account);s.linkTrackVars=b;s[b]=a;s.tl(this,"o",a);s.linkTrackVars=""}function omnitureSendEvent(b,a){s=s_gi(s_account);s.linkTrackVars="events";s.linkTrackEvents=b;s.events=b;s.tl(this,"o",a)}function getCookie(c){var b=document.cookie;var e=c+"=";var d=b.indexOf("; "+e);if(d==-1){d=b.indexOf(e);if(d!=0){return null}}else{d+=2}var a=document.cookie.indexOf(";",d);if(a==-1){a=b.length}return unescape(b.substring(d+e.length,a))}function createCookie(c,e,d){if(d){var b=new Date();b.setTime(b.getTime()+(d*60*1000));var a="; expires="+b.toGMTString()}else{var a=""}document.cookie=c+"="+e+a+"; path=/"}function getESTHour(){var b=new Date();var d=b.getTime();var e=b.getTimezoneOffset()*60000;var c=new Date(d+e-(300*60000));var a=c.getHours();if(a==0){a=24}return a};

	


var STMLayers=new JS.Class("STMLayers",{_layer:undefined,_observers:undefined,_shown:undefined,_template:undefined,content:undefined,identifier:undefined,max_show:undefined,refresh:undefined,url:undefined,initialize:function(a){if(this.klass.Instances.hasKey(a)){throw new STMException(this.klass.displayName+": A layer with the provided identifier has already been created",{identifier:a})}this.klass.Instances.set(a,this);this.identifier=a;this.refresh=false;this._observers=new STLibraryJS.Observable();this._shown=0},extend:{Instances:$H(),SampleCallbacks:{},InitializeFromSource:function(){$$(".stmlayers").each(function(item){var layer=new STMLayers(item.identify());var url=item.readAttribute("stmlayers_url");if(!Object.isNull(url)){layer.url=url;if(item.readAttribute("stmlayers_refresh")==="true"){layer.refresh=true}}["click_close_link","pre_close","post_close","pre_fetch","post_fetch","pre_popup","post_popup"].each(function(layer,item){var observers=item.readAttribute("stmlayers_observers_"+item);if(!Object.isNull(observers)){observers.split("-|-").each(function(layer,observer,item){var callback=eval(item);layer._observers.AddObserver(observer,callback)}.curry(layer,item))}}.curry(layer))})}},AddClickCloseLinkeObserver:function(a){this._observers.AddObserver("click_close_link",a)},AddFeature:function(a){a.Run(this)},AddPreCloseObserver:function(a){this._observers.AddObserver("pre_close",a)},AddPrePopupObserver:function(a){this._observers.AddObserver("pre_popup",a)},AddPreFetchObserver:function(a){this._observers.AddObserver("pre_fetch",a)},AddPostCloseObserver:function(a){this._observers.AddObserver("post_close",a)},AddPostFetchObserver:function(a){this._observers.AddObserver("post_fetch",a)},AddPostPopupObserver:function(a){this._observers.AddObserver("post_popup",a)},AttachEvents:function(){this._layer=$(this.identifier);this._layer.select(".stmlayers_close_link:not([stmlayers_event_attached=true])").each(function(a){if(Object.isElement(a)){a.writeAttribute("stmlayers_event_attached","true");a.observe("click",function(b){b.stop();this.Hide()}.bind(this))}}.bind(this));this._layer.select("a:not([stmlayers_event_attached=true])").each(function(a){a.writeAttribute("stmlayers_event_attached","true");a.observe("click",function(c,b){b.stop();this.RefreshLayer(c.href)}.bind(this,a))}.bind(this));this._layer.select("form:not([stmlayers_event_attached=true])").each(function(a){a.writeAttribute("stmlayers_event_attached","true");a.observe("submit",function(c,b){b.stop();this.RefreshLayer(c.action,{method:c.method,parameters:c.serialize(true)})}.bind(this,a))}.bind(this))},Create:function(){if(!$(this.identifier)){var a=this._template.GetHtml({identifier:this.identifier,content:""});$(document.body).insert(a);$(this.identifier).hide()}this.AttachEvents()},Hide:function(){if(!Object.isUndefined(this._layer)){this._observers.NotifyObservers("pre_close",this);this._layer.hide();this._observers.NotifyObservers("post_close",this)}},RefreshLayer:function(b){var a=Object.extend({method:"get",parameters:{}},arguments[1]||{});a.parameters.stmlayers="true";this._observers.NotifyObservers("pre_fetch",this);var c=new STMResponsesJS.JSON();c.MakeRequest(b,{method:a.method,parameters:a.parameters,onFailure:function(){window.alert(STLibraryJS._GenericErrorMessage);this.ShowHelper()}.bind(this),onSuccess:function(d){this._observers.NotifyObservers("post_fetch",this);this.ServerResponse(d)}.bind(this)})},ServerResponse:function(response){response.each(function(item){switch(item.type){case"new_content":this.content=item.data.content;break;case"function_call":var function_name=eval(item.function_name);var scope=eval(item.scope);function_name.apply(scope,item.parameters);break;case"redirect":window.location=item.data.url;break;default:break}}.bind(this));this.ShowHelper()},SetTemplate:function(a){this._template=a},Show:function(){if(!Object.isUndefined(this.max_show)&&(this._shown>=this.max_show)){return}++this._shown;this.Create();if(!Object.isUndefined(this.url)){var a=new STMResponsesJS.JSON();this._observers.NotifyObservers("pre_fetch",this);a.MakeRequest(this.url,{method:"get",parameters:{stmlayers:"true"},onFailure:function(){window.alert(STLibraryJS._GenericErrorMessage);--this._shown;this._observers.NotifyObservers("post_fetch",this)}.bind(this),onSuccess:function(b){if(!this.refresh){this.url=undefined}this._observers.NotifyObservers("post_fetch",this);this.ServerResponse(b)}.bind(this)})}else{this.ShowHelper()}},ShowHelper:function(){this.UpdateContent();this._observers.NotifyObservers("pre_popup",this);this._layer.show();this._observers.NotifyObservers("post_popup",this)},UpdateContent:function(){if(!Object.isUndefined(this.content)){this._layer.select(".stmlayers_content").invoke("update",this.content);this.content=undefined;this.AttachEvents()}}});STMLayers.Template=new JS.Class("STMLayers.Template",{_template:undefined,_variables:undefined,initialize:function(){var a=this.GetTemplate();if(!a.include("#{identifier}")){throw new STMException(this.klass.displayName+": Template missing identifier template varibale.")}this._template=new Template(a);this._variables={}},AddTemplateVariable:function(a,b){this._variables[a]=b},GetHtml:function(a){a=Object.extend(this._variables,a);return this._template.evaluate(a)},GetTemplate:function(){throw new STMException(this.klass.displayName+": Method GetTemplate has not been definded.")}});STMLayers.Feature=new JS.Class("STMLayers.Feature",{Run:function(a){throw new STMException(this.klass.displayName+": Method Run has not been definded.")}});document.observe("dom:loaded",STMLayers.InitializeFromSource);
STMLayers.Template.Subscriptions=new JS.Singleton("STMLayers.Template.Subscriptions",STMLayers.Template,{GetTemplate:function(){return'<div id="#{identifier}" class="subscriptions_layer"><div class="st_logo"><img src="http://i.slimg.com/st/stmlayers/subscriptions/1.0/logo.gif" alt="SmarterTravel\'s Logo" /></div><div class="stmlayers_close_link st_close_link"><img src="http://i.slimg.com/st/stmlayers/subscriptions/1.0/close.gif" alt="Close Layer" /></div><div class="stmlayers_content">#{content}</div></div>'}});
STMLayers.Feature.Draggable=new JS.Singleton("STMLayers.Feature.Draggable",STMLayers.Feature,{_records:undefined,initialize:function(){this._records=[]},Run:function(a){a.AddPrePopupObserver(this.method("MakeDraggable"))},MakeDraggable:function(a){if(!this._records.include(a.identifier)){new Draggable(a.identifier);this._records.push(a.identifier)}}});
STMLayers.Feature.Overlay=new JS.Class("STMLayers.Feature.Overlay",STMLayers.Feature,{_color:undefined,_identifier:undefined,_opacity:undefined,initialize:function(a,b){this._color=a;this._opacity=b},Create:function(){if(Object.isUndefined(this._identifier)){var a=new Element("div").setStyle({position:"fixed",top:0,left:0,zIndex:100,width:"100%",height:"100%",display:"none",backgroundColor:this._color,opacity:this._opacity});$(document.body).insert(a);this._identifier=a.identify()}},Hide:function(){$(this._identifier).hide()},Run:function(a){a.AddPrePopupObserver(this.method("Show"));a.AddPreCloseObserver(this.method("Hide"))},Show:function(){this.Create();$(this._identifier).show()}});STMLayers.Feature.Overlay.Black=new JS.Singleton("STMLayers.Feature.Overlay.Black",STMLayers.Feature.Overlay,{initialize:function(){this.callSuper("#000",0.5)}});STMLayers.Feature.Overlay.White=new JS.Singleton("STMLayers.Feature.Overlay.White",STMLayers.Feature.Overlay,{initialize:function(){this.callSuper("#fff",0.5)}});
STMLayers.Feature.PositionCenter=new JS.Singleton("STMLayers.Feature.PositionCenter",STMLayers.Feature,{Run:function(a){a.AddPostPopupObserver(this.method("PositionLayer"))},PositionLayer:function(c){var a=c._layer;var d=document.viewport.getDimensions();var b=document.viewport.getScrollOffsets();var f=Math.floor((d.height-a.getHeight())/2)+b.top;var e=Math.floor((d.width-a.getWidth())/2)+b.left;a.setStyle({position:"absolute",left:e+"px",top:f+"px"})}});STMLayers.Feature.PositionCenterHorizontally=new JS.Class("STMLayers.Feature.PositionCenterHorizontally",STMLayers.Feature,{_offset:undefined,initialize:function(a){this._offset=a},Run:function(a){a.AddPostPopupObserver(this.method("PositionLayer"))},PositionLayer:function(c){var a=c._layer;var d=document.viewport.getDimensions();var b=document.viewport.getScrollOffsets();var f=b.top+this._offset;var e=Math.floor((d.width-a.getWidth())/2)+b.left;a.setStyle({position:"absolute",left:e+"px",top:f+"px"})}});

