function getAbsLeft(b){var a=b.offsetLeft;while(b=b.offsetParent){a+=b.offsetLeft}return a}function getAbsTop(b){var a=b.offsetTop;while(b=b.offsetParent){a+=b.offsetTop}return a}function changeBkgrnd(a){addClassName(a,"selected")}function changeBkgrnd_Blur(a){removeClassName(a,"selected")}function addClassName(a,b){if(!Element.hasClassName(a,b)){a.className=(a.className+" "+b)}}function removeClassName(a,b){if(Element.hasClassName(a,b)){a.className=a.className.replace(b,"")}}var FlightDataCache=Class.create();Object.extend(FlightDataCache.prototype,{initialize:function(){this.flightDataCacheArray=new Object()},getFlightDataItem:function(c,e,d){var a=this.flightDataCacheArray[e];if(a==null){a=new Object();this.flightDataCacheArray[e]=a}var b=a[d];if(b==null){b=new FlightData(c,e,d);a[d]=b}return b}});var FlightDataCache=new FlightDataCache();var FlightData=Class.create();FlightData.prototype={initialize:function(a,c,b){this.dataContainer=a;this.airports=a.getAirports();this.fromAirports=a.getFromAirports();this.toAirports=a.getToAirports();this.classes=a.getClasses();this.matrix=a.getMatrix();this.fromAirport=getObjectFromArrayByCode(c,this.airports);this.toAirport=getObjectFromArrayByCode(b,this.airports);this.fromAirportIndex=indexOfAirportByCode(c,this.fromAirports);this.toAirportIndex=indexOfAirportByCode(b,this.toAirports);this.matrixItem=getMatrixItem(this.fromAirportIndex,this.toAirportIndex,this.matrix,this.fromAirports.length,this.toAirports.length)},isValidFlight:function(a){if(this.matrixItem!=null){if(this.fromAirport!=this.toAirport){if(determineBooleanValueFromMatrixItem(this.matrixItem,this.dataContainer.getValidFlightIndex())){return true}}}return false},isDomestic:function(){if(this.fromAirport.country==this.toAirport.country){return true}return false},isInternational:function(){if(this.fromAirport.country!=this.toAirport.country&&!this.isTransTasman()){return true}return false},isTransTasman:function(){if((this.fromAirport.country.code=="AU"&&this.toAirport.country.code=="NZ")||(this.fromAirport.country.code=="NZ"&&this.toAirport.country.code=="AU")){return true}else{return false}},getClasses:function(a){if(this.matrixItem!=null){return getClassesForFlight(this.matrixItem,this.dataContainer,a,this.fromAirport,this.toAirport)}return new Array()}};var Airport=Class.create();Airport.prototype={initialize:function(c,d,b,a){this.code=c;this.airportName=d;this.country=getObjectFromArrayByCode(b,a)},getCountry:function(){return this.country},toStringNameOnly:function(){return this.airportName},toString:function(){return this.toStringNoCode()+" ("+this.code+")"},toStringAirportCodeOnly:function(){return this.toStringNoCode()+"<span class='aCode'> ("+this.code+")</span>"},toStringNoCode:function(){return this.airportName+", "+this.country.countryName},toStringWithHighlightedAirport:function(j){var d=this.toString();var p=d.toLowerCase().indexOf(j.toLowerCase());var q="flagno";if(p>this.airportName.length){var b=this.toStringNoCode().length;var f=d.substring(b).toLowerCase().indexOf(j.toLowerCase());p=b+f;q="flagyes"}if(q=="flagno"){var c=d.substring(0,p);var e=d.substring(p,p+j.length);var k=d.substring(p+j.length,d.length);var r=k.substring(k.lastIndexOf("("),k.lastIndexOf(")")+1);var o=k.substring(0,k.lastIndexOf("("));return c+"<strong>"+e+"</strong>"+o+"<span class='aCode'>"+r+"</span>"}else{var h=d.substring(0,p);var n=h.substring(d.lastIndexOf("("));var a=d.substring(0,(p-j.length));var l=d.substring(0,((p+1)-(j.length)));var m=d.substring(p,p+j.length);var g=d.substring(p+j.length,d.length);if(j.length==2){return a+"<span class='aCode'>"+n+"<strong>"+m+"</strong>"+g+"</span>"}else{if(j.length==1){return a+"<span class='aCode'>(<strong>"+m+"</strong>"+g+"</span>"}else{return l+"<span class='aCode'>(<strong>"+m+"</strong>"+g+"</span>"}}}}};function getAirportAsHTMLString(b,g,a){var c="";if(b.airportName.toLowerCase().indexOf(g.toLowerCase())==0){if(b.airportName.toLowerCase()==(g.toLowerCase())){c=' class="toBoxHighlight" '}}var e="<a onFocus='changeBkgrnd(this)' onBlur='changeBkgrnd_Blur(this)' href='javascript:void(0)' id='to"+b.code+"'"+c+"/>";var d;if(a){d=b.toStringWithHighlightedAirport(g)}else{d=b.toStringAirportCodeOnly()}var h="</a>";if(d.indexOf("airports")>=0){var f=b.airportName.substring(0,g.length);var j=b.airportName.substring(g.length,d.length);d="<strong>"+f+"</strong>"+j}return e+d+h}var BookingClass=Class.create();BookingClass.prototype={initialize:function(b,c,a){this.code=b;this.value=c;this.className=a}};var Country=Class.create();Country.prototype={initialize:function(a,b){this.code=a;this.countryName=b}};var FromBoxControl=Class.create();FromBoxControl.prototype={initialize:function(e,d,a,c,b){this.fromBox=$(e);this.popularFromAirports=d.getPopularFromAirports();this.fromAirports=d.getFromAirports();this.airports=d.getAirports();this.defaultValue=a;this.showCountries=c;this.fromHeader=b;this.fromBox.onchange=this.fromBoxChange.bindAsEventListener(this);this.populateFromBox()},fromBoxChange:function(a){},populateFromBox:function(){var f=false;var a=0;this.fromBox.options.length=0;var c=0;this.fromBox.options[c]=new Option(this.fromHeader,"");c++;this.fromBox.options[c]=new Option("-----------------","separator");c++;if(this.popularFromAirports!=null){var b=new Array();for(var e=0;e<this.popularFromAirports.length;++e){var h=getObjectFromArrayByCode(this.popularFromAirports[e],this.airports);b[e]=h}for(var e=0;e<b.length;++e,c++){var h=b[e];this.fromBox.options[c]=new Option(h.airportName,h.code);if(!f&&this.defaultValue==h.code){a=c;f=true}}this.fromBox.options[c]=new Option("-----------------","separator");c++}var g="";var d=new Array();for(var e=0;e<this.fromAirports.length;++e){var h=getObjectFromArrayByCode(this.fromAirports[e],this.airports);d[e]=h}for(var e=0;e<d.length;++e,c++){var h=d[e];if(this.showCountries&&h.country.countryName!=g){this.fromBox.options[c]=new Option(h.country.countryName,"");this.fromBox.options[c].className="cityDropDownCountry";c++;g=h.country.countryName}this.fromBox.options[c]=new Option(h.airportName,h.code);if(!f&&this.defaultValue==h.code){a=c;f=true}}this.fromBox.selectedIndex=a}};function compareAirportsByName(d,c){if(d.airportName<c.airportName){return -1}else{if(d.airportName>c.airportName){return 1}else{return 0}}}var ToDropControl=Class.create();ToDropControl.prototype={initialize:function(f,b,e,a,d,c){this.fromBox=$(f);this.toBox=$(b);this.departCalendar=a;this.dataContainer=e;this.showCountries=d;this.toHeader=c;this.toAirports=this.dataContainer.getToAirports();this.popularToAirports=this.dataContainer.popularToAirports;this.airports=this.dataContainer.getAirports();this.toBox.onchange=this.toBoxChange.bindAsEventListener(this);this.inputType="selectBox";this.populateToBox()},toBoxChange:function(a){},populateToBox:function(b){this.toBox.options.length=0;var d=0;var a=0;this.toBox.options[d]=new Option(this.toHeader,"");d++;this.toBox.options[d]=new Option("-----------------","separator");d++;if(this.popularToAirports!=null){for(var e=0;e<this.popularToAirports.length;++e,d++){var g=getObjectFromArrayByCode(this.popularToAirports[e],this.airports);this.toBox.options[d]=new Option(g.airportName,g.code);if(this.defaultValue==g.code){a=d}}this.toBox.options[d]=new Option("-----------------","separator");d++}var f="";for(var e=0;e<this.toAirports.length;e++){var g=getObjectFromArrayByCode(this.toAirports[e],this.airports);if(this.showCountries&&g.country.countryName!=f){this.toBox.options[d]=new Option(g.country.countryName,"");this.toBox.options[d].className="cityDropDownCountry";d++;f=g.country.countryName}if(this.fromBox.value!=""){var c=FlightDataCache.getFlightDataItem(this.dataContainer,this.fromBox.value,g.code);if(c.isValidFlight()){this.toBox.options[d]=new Option(g.airportName,g.code);if(g.code==b){a=d}d++}}else{this.toBox.options[d]=new Option(g.airportName,g.code);if(g.code==b){a=d}d++}}this.toBox.selectedIndex=a}};var ToBoxControl=Class.create();ToBoxControl.prototype={initialize:function(a,g,k,f,e,b,c,h,d,j){this.fromBox=$(a);this.toBox=$(g);this.toBoxListDiv=$(k);this.toSelectionField=$(e);this.toBoxPlusSign=$(f);this.thisForm=$(b);this.currentSelection="";this.fieldsToHide=c;this.dataContainer=h;this.isHomePage=j;this.toBoxCloseButton=$(d);this.toBox.onkeydown=this.toBoxKeyDown.bindAsEventListener(this);this.toBox.onkeyup=this.toBoxKeyUp.bindAsEventListener(this);this.toBox.onfocus=this.toBoxFocus.bindAsEventListener(this);this.toBoxPlusSign.onclick=this.toBoxPlusSignClick.bindAsEventListener(this);this.popularFromAirports=h.getPopularFromAirports();this.boxOpen=false;this.inputType="textBox"},toBoxKeyDown:function(b){if(b!=null&&(b.keyCode==40)){var d=$(this.toSelectionField.id+"predictiveLookUp");if(d!=null){var a=d.getElementsByTagName("a");if(this.currentSelection==""){var f=a[0];this.currentSelection=f;changeBkgrnd(f)}else{for(var c=0;c<a.length;c++){if(Element.hasClassName(a[c],"selected")){changeBkgrnd_Blur(a[c]);if(c<(a.length-1)){nextItem=a[c+1]}else{nextItem=a[0]}this.currentSelection=nextItem;changeBkgrnd(nextItem);c=a.length}}}}fixScrollPosition(this.toBoxListDiv,this.currentSelection);return false}else{if(b!=null&&b.keyCode==38){var d=$(this.toSelectionField.id+"predictiveLookUp");if(d!=null){var a=d.getElementsByTagName("a");if(this.currentSelection!=""){for(var c=0;c<a.length;c++){if(Element.hasClassName(a[c],"selected")){changeBkgrnd_Blur(a[c]);if(c>0){nextItem=a[c-1]}else{nextItem=a[a.length-1]}this.currentSelection=nextItem;changeBkgrnd(nextItem);c=a.length}}}else{var e=a[a.length-1];this.currentSelection=e;changeBkgrnd(e)}}fixScrollPosition(this.toBoxListDiv,this.currentSelection);return false}else{if(b!=null&&b.keyCode==13){if(this.currentSelection!=""){this.currentSelection.onclick()}else{if(this.toBoxListDiv.getElementsByTagName("a").length==1){this.toBoxListDiv.getElementsByTagName("a")[0].onclick()}}}}}},toBoxKeyUp:function(a){if(a==null||a.keyCode==40||a.keyCode==38||a.keyCode==13||a.keyCode==9||a.keyCode==37||a.keyCode==39){}else{this.currentSelection="";this.populateToMatchingAirports(a)}},toBoxFocus:function(a){this.toBox.select()},toBoxPlusSignClick:function(b){this.populateToAllAirports(b);this.toBox.focus();var d=$(this.toSelectionField.id+"predictiveLookUp");var a=d.getElementsByTagName("a");for(var c=0;c<a.length;c++){if(("to"+this.toSelectionField.value)==a[c].id){this.currentSelection=a[c];changeBkgrnd(a[c]);fixScrollPosition(this.toBoxListDiv,this.currentSelection)}}},populateToAllAirports:function(a){var b=getAirportsFromAirportCodes(this.dataContainer.getToAirports(),this.dataContainer.getAirports());var c=getValidToAirports(this.fromBox.value,b,this.dataContainer);this.populateToOptions(a,c,false)},populateToMatchingAirports:function(a){var b=getValidToAirportsThatMatchString(this.fromBox.value,this.toBox.value,this.dataContainer);this.populateToOptions(a,b,true)},populateToOptions:function(k,b,a){var l="";this.setBoxOpen(true);if(b.length==0){$j(".predictiveTextBox").parent().hide();$j(this.toBoxListDiv).attr("class","predictiveTextBox toCityBoxNoMatches");$j(this.toBoxListDiv).parent().show();this.toBoxListDiv.innerHTML=this.dataContainer.noMatchingCitiesText;this.toBoxCloseButton.onclick=this.closeToBoxListDiv.bindAsEventListener(this)}else{var f=new Array();var h="";var g="";var d=5;var e=0;d=(d<b.length/2)?(b.length/2):d;for(var j=0;j<b.length;j++){var c=b[j];if(e<d){h=h+"<li>"+getAirportAsHTMLString(c,this.toBox.value,a)+"</li>"}else{g=g+"<li>"+getAirportAsHTMLString(c,this.toBox.value,a)+"</li>"}e++}optionList='<div id="'+this.toSelectionField.id+'predictiveLookUp" class="clearit"><ul class="left">'+h+"</ul>";if(g!=""){optionList=optionList+'<ul class="left">'+g+"</ul>"}optionList=optionList+"</div>";if(e<"6"){$j(".predictiveTextBox").parent().hide();$j(this.toBoxListDiv).attr("class","predictiveTextBox toCityBoxSingleColumn");$j(this.toBoxListDiv).parent().show()}else{if(e>"5"){$j(".predictiveTextBox").parent().hide();$j(this.toBoxListDiv).attr("class","predictiveTextBox toCityBoxDoubleColumns");$j(this.toBoxListDiv).parent().show()}else{}}this.toBoxListDiv.innerHTML=optionList;this.toBoxCloseButton.onclick=this.closeToBoxListDiv.bindAsEventListener(this);for(var j=0;j<b.length;j++){var c=b[j];new ToSelection(c,this.toBox,this.toSelectionField,this.toBoxListDiv,this)}if(b.length>0){document.onclick=this.closeToBoxListDiv.bindAsEventListener(this)}}},closeToBoxListDiv:function(b){if(b.target){targ=b.target}else{if(b.srcElement){targ=b.srcElement}}if(targ.id!=this.toBoxPlusSign.id){if(this.boxOpen){$j(".predictiveTextBox").parent().hide();this.hideShowFields(false);if(this.toSelectionField.value==""){this.toBox.value=""}else{var a=getObjectFromArrayByCode(this.toSelectionField.value,this.dataContainer.getAirports());this.toBox.value=a.toStringNameOnly()}this.setBoxOpen(false)}}},setBoxOpen:function(a){this.boxOpen=a;this.hideShowFields(a);this.hideShowCloseButton(a);if(!a){this.currentSelection=""}},hideShowFields:function(b){for(var a=0;a<this.fieldsToHide.length;a++){if(b){if($j.browser.version.substr(0,3)=="6.0"&&$j.browser.msie){$j("#"+this.fieldsToHide[a]).css("visibility","hidden")}}else{if($j.browser.version.substr(0,3)=="6.0"&&$j.browser.msie){$j("#"+this.fieldsToHide[a]).css("visibility","visible")}}}},hideShowCloseButton:function(a){if(a){$j(this.toBoxCloseButton).parent().show()}else{$j(this.toBoxCloseButton).parent().hide()}}};function fixScrollPosition(b,a){if(a.offsetTop>(b.offsetHeight-20)){b.scrollTop=a.offsetTop}if(a.offsetTop<b.scrollTop){b.scrollTop=0}}var FromToHandler=Class.create();FromToHandler.prototype={initialize:function(c,d,e,b,f,a){this.fromBoxControl=c;this.toBoxControl=d;if(this.toBoxControl.inputType=="textBox"){this.toSelectionField=this.toBoxControl.toSelectionField}else{this.toSelectionField=this.toBoxControl.toBox}this.toBox=this.toBoxControl.toBox;this.classBox=$(e);this.departCalendar=a;this.intDomConvertFunction=b;this.fromBoxControl.fromBox.onchange=this.fromToChange.bindAsEventListener(this);this.toSelectionField.onchange=this.fromToChange.bindAsEventListener(this);this.dataContainer=f},fromToChange:function(a){if(this.toBoxControl.inputType=="textBox"&&this.toBoxControl.boxOpen){this.toBoxControl.populateToMatchingAirports(a)}else{if(this.toBoxControl.inputType=="selectBox"){this.toBoxControl.populateToBox(this.toSelectionField.value)}if(this.fromBoxControl.fromBox.value!=""&&this.toSelectionField.value!=""){var b=FlightDataCache.getFlightDataItem(this.dataContainer,this.fromBoxControl.fromBox.value,this.toSelectionField.value);if(!b.isValidFlight()){if(this.toBoxControl.inputType=="textBox"){this.toSelectionField.value="";this.toBox.value=""}else{this.toSelectionField.selectedIndex=0}this.intDomConvertFunction()}else{if(b.isInternational()){this.populateClasses(b)}this.intDomConvertFunction(b)}}else{this.populateClassesForRoute();this.intDomConvertFunction()}}},populateClasses:function(b){if(this.classBox!=null){if(b!=null){var d=b.getClasses(this.departCalendar)}else{var d=getClassesForFlight(null,this.dataContainer,this.departCalendar,this.fromAirport,this.toAirport)}var a=this.classBox.selectedIndex;this.classBox.options.length=0;for(var c=0;c<d.length;c++){var e=d[c];this.classBox.options[c]=new Option(e.className,e.value)}if(a!=-1){this.classBox.selectedIndex=a}}},populateClassesForRoute:function(){if(this.fromBoxControl.fromBox.value!=""&&this.toSelectionField.value!=""){var a=FlightDataCache.getFlightDataItem(this.dataContainer,this.fromBoxControl.fromBox.value,this.toSelectionField.value,this.toBoxControl.departCalendar);this.populateClasses(a)}else{this.populateClasses()}},setInitialValues:function(e,d){var b=false;for(var a=0;a<this.fromBoxControl.fromBox.options.length;++a){if(this.fromBoxControl.fromBox.options[a].value==e){this.fromBoxControl.fromBox.selectedIndex=a;b=true;break}}if(b==false&&e==""){this.fromBoxControl.fromBox.selectedIndex=0}if(this.toBoxControl.inputType=="textBox"&&d!=null&&d!=""){var c=getObjectFromArrayByCode(d,this.dataContainer.getAirports());if(c!=null){this.toBox.value=c.airportName;this.toSelectionField.value=c.code}}this.fromToChange();if(this.toBoxControl.inputType=="textBox"){}else{var b=false;for(var a=0;a<this.toBoxControl.toBox.options.length;++a){if(this.toBoxControl.toBox.options[a].value==d){this.toBoxControl.toBox.selectedIndex=a;b=true;break}}if(b==false&&e==""){this.toBoxControl.toBox.selectedIndex=0}}}};var ToSelection=Class.create();ToSelection.prototype={initialize:function(e,a,d,c,b){this.airport=e;this.toBox=a;this.toSelectionField=d;this.toBoxListDiv=c;this.toBoxControl=b;this.airportHref=$("to"+e.code);this.airportHref.onclick=this.airportHrefClick.bindAsEventListener(this)},airportHrefClick:function(a){this.toBoxControl.setBoxOpen(false);this.toSelectionField.value=this.airport.code;this.toBox.value=this.airport.toStringNameOnly();this.toBoxListDiv.innerHTML="";$j(".predictiveTextBox").parent().hide();if($j("div").find(".majorCitySelected").length>0){var b=$j("div").find(".majorCitySelected").attr("class").indexOf("majorCitySelected");if(b>0){var c=this.toBoxControl.popularFromAirports;arrivalCheckforMajorCities(c)}else{this.toSelectionField.onchange()}}else{this.toSelectionField.onchange()}}};function getValidToAirportsThatMatchString(f,c,g){var a=g.getToAirports();var e=g.getAirports();var b=getAirportsThatMatchString(c,a,e);var d=getValidToAirports(f,b,g);return d}function getValidToAirports(d,c,f){var a=new Array();for(var b=0;b<c.length;b++){var e=c[b];var g=FlightDataCache.getFlightDataItem(f,d,e.code);if(g.isValidFlight()||d.length=="0"){a.push(e)}}return a}function getAirportsFromAirportCodes(d,a){var c=new Array();for(var b=0;b<d.length;b++){var e=getObjectFromArrayByCode(d[b],a);c.push(e)}return c}function getAirportsThatMatchString(c,a,e){var b=new Array();if(c!=""&&c!=null){if(c.length==1){var f=new RegExp("^"+c,"i")}else{f=new RegExp(""+c,"i")}for(var d=0;d<a.length;d++){var g=getObjectFromArrayByCode(a[d],e);if(f.test(g.code)){b.push(g)}else{if(f.test(g.airportName)){b.push(g)}}}}return b}function indexOfAirportByCode(c,a){for(var b=0;b<a.length;b++){if(c==a[b]){return b}}return -1}function getObjectFromArrayByCode(c,b){for(var a=0;a<b.length;a++){if(c==b[a].code){return b[a]}}return null}function getMatrixItem(e,c,g,f,h){var a=(e*h)+c;var d=g.charAt(a);var j=parseInt(d,32);var b=j.toString(2);return b.padLeft(5,"0")}function determineBooleanValueFromMatrixItem(b,a){if(b.charAt(a)=="1"){return true}return false}function getClassesForFlight(h,g,k,c,j){var f=new Array();var e=getObjectFromArrayByCode("Y",g.getClasses());var a=getObjectFromArrayByCode("P",g.getClasses());var b=getObjectFromArrayByCode("J",g.getClasses());var d=getObjectFromArrayByCode("F",g.getClasses());if(h==null){if(e!=null){f.push(e)}if(b!=null){f.push(b)}if(d!=null){f.push(d)}}else{if(determineBooleanValueFromMatrixItem(h,g.getEconomyClassIndex())){if(e!=null){f.push(e)}}if(determineBooleanValueFromMatrixItem(h,g.getPremiumClassIndex())){if(a!=null){f.push(a)}}if(determineBooleanValueFromMatrixItem(h,g.getBusinessClassIndex())){if(b!=null){f.push(b)}}if(determineBooleanValueFromMatrixItem(h,g.getFirstClassIndex())){if(d!=null){f.push(d)}}}return f}String.prototype._pad=function(b,c,a){var d=[a?"":this,a?this:""];while(d[a].length<(b?b:0)&&(d[a]=d[1]+(c?c:" ")+d[0])){}return d[a]};String.prototype.padLeft=function(a,b){return this._pad(a,b,0)};String.prototype.padRight=function(a,b){return this._pad(a,b,1)};Number.prototype.padLeft=function(a,b){return(""+this).padLeft(a,b)};Number.prototype.padRight=function(a,b){return(""+this).padRight(a,b)};function arrivalCheckforMajorCities(f){departurePort=$j($j(".predictiveTextField")[0]).parent().find("input[type=hidden]").val();arrivalPort=$j($j(".predictiveTextField")[1]).parent().find("input[type=hidden]").val();var e=f;var c=false;var d=false;for(i=0;i<e.length;i++){if(e[i]==departurePort){d=true}if(e[i]==arrivalPort){c=true}}var a=document.getElementById("instanceLabel");if(a){a=a.value}else{a=""}a=a+"depHour";if(d&&c){var b=document.getElementById("instanceLabel").value.trim();document.getElementById(b+"majorDeparturePortFormObj").value="true";document.getElementById(b+"majorArrivalPortFormObj").value="true";$j(".majorCitySelected").show()}else{$j(".majorCitySelected").hide();var b=document.getElementById("instanceLabel").value.trim();document.getElementById(b+"majorDeparturePortFormObj").value="false";document.getElementById(b+"majorArrivalPortFormObj").value="false"}};
