function getAbsLeft(c){var d=c.offsetLeft;while(c=c.offsetParent){d+=c.offsetLeft}return d}function getAbsTop(c){var d=c.offsetTop;while(c=c.offsetParent){d+=c.offsetTop}return d}function changeBkgrnd(b){addClassName(b,"selected")}function changeBkgrnd_Blur(b){removeClassName(b,"selected")}function addClassName(d,c){if(!Element.hasClassName(d,c)){d.className=(d.className+" "+c)}}function removeClassName(d,c){if(Element.hasClassName(d,c)){d.className=d.className.replace(c,"")}}var FlightDataCache=Class.create();Object.extend(FlightDataCache.prototype,{initialize:function(){this.flightDataCacheArray=new Object()},getFlightDataItem:function(g,j,f){var i=this.flightDataCacheArray[j];if(i==null){i=new Object();this.flightDataCacheArray[j]=i}var h=i[f];if(h==null){h=new FlightData(g,j,f);i[f]=h}return h}});var FlightDataCache=new FlightDataCache();var FlightData=Class.create();FlightData.prototype={initialize:function(d,e,f){this.dataContainer=d;this.airports=d.getAirports();this.fromAirports=d.getFromAirports();this.toAirports=d.getToAirports();this.classes=d.getClasses();this.matrix=d.getMatrix();this.fromAirport=getObjectFromArrayByCode(e,this.airports);this.toAirport=getObjectFromArrayByCode(f,this.airports);this.fromAirportIndex=indexOfAirportByCode(e,this.fromAirports);this.toAirportIndex=indexOfAirportByCode(f,this.toAirports);this.matrixItem=getMatrixItem(this.fromAirportIndex,this.toAirportIndex,this.matrix,this.fromAirports.length,this.toAirports.length)},isValidFlight:function(b){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(b){if(this.matrixItem!=null){return getClassesForFlight(this.matrixItem,this.dataContainer,b,this.fromAirport,this.toAirport)}return new Array()}};var Airport=Class.create();Airport.prototype={initialize:function(f,e,g,h){this.code=f;this.airportName=e;this.country=getObjectFromArrayByCode(g,h)},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(C){var s=this.toString();var t=s.toLowerCase().indexOf(C.toLowerCase());var r="flagno";if(t>this.airportName.length){var v=this.toStringNoCode().length;var F=s.substring(v).toLowerCase().indexOf(C.toLowerCase());t=v+F;r="flagyes"}if(r=="flagno"){var u=s.substring(0,t);var G=s.substring(t,t+C.length);var B=s.substring(t+C.length,s.length);var H=B.substring(B.lastIndexOf("("),B.lastIndexOf(")")+1);var w=B.substring(0,B.lastIndexOf("("));return u+"<B>"+G+"</B>"+w+"<span class='aCode'>"+H+"</span>"}else{var D=s.substring(0,t);var x=D.substring(s.lastIndexOf("("));var y=s.substring(0,(t-C.length));var A=s.substring(0,((t+1)-(C.length)));var z=s.substring(t,t+C.length);var E=s.substring(t+C.length,s.length);if(C.length==2){return y+"<span class='aCode'>"+x+"<B>"+z+"</B>"+E+"</span>"}else{if(C.length==1){return y+"<span class='aCode'>(<B>"+z+"</B>"+E+"</span>"}else{return A+"<span class='aCode'>(<B>"+z+"</B>"+E+"</span>"}}}}};function getAirportAsHTMLString(p,j,o){var l="";var m="";if(p.airportName.toLowerCase().indexOf(j.toLowerCase())==0){l='<font id="anchor"></font>';if(p.airportName.toLowerCase()==(j.toLowerCase())){m=' class="toBoxHighlight" '}}var n=l+"<a onFocus='changeBkgrnd(this)' onBlur='changeBkgrnd_Blur(this)' href='javascript:void(0)' id='to"+p.code+"'"+m+"/>";var k;if(o){k=p.toStringWithHighlightedAirport(j)}else{k=p.toStringAirportCodeOnly()}var i="</A>";return n+k+i}var BookingClass=Class.create();BookingClass.prototype={initialize:function(f,e,d){this.code=f;this.value=e;this.className=d}};var Country=Class.create();Country.prototype={initialize:function(d,c){this.code=d;this.countryName=c}};var FromBoxControl=Class.create();FromBoxControl.prototype={initialize:function(j,f,i,g,h){this.fromBox=$(j);this.popularFromAirports=f.getPopularFromAirports();this.fromAirports=f.getFromAirports();this.airports=f.getAirports();this.defaultValue=i;this.showCountries=g;this.fromHeader=h;this.fromBox.onchange=this.fromBoxChange.bindAsEventListener(this);if(this.fromAirports!=null&&this.fromAirports.length>1){this.fromAirports=RemoveDuplicates(this.fromAirports)}if(this.popularFromAirports!=null&&this.popularFromAirports.length>1){this.popularFromAirports=RemoveDuplicates(this.popularFromAirports)}this.populateFromBox()},fromBoxChange:function(b){},populateFromBox:function(){var g=false;var j=0;this.fromBox.options.length=0;var i=0;this.fromBox.options[i]=new Option(this.fromHeader,"");i++;this.fromBox.options[i]=new Option("-----------------","separator");i++;if(this.popularFromAirports!=null){for(var h=0;h<this.popularFromAirports.length;++h,i++){var k=getObjectFromArrayByCode(this.popularFromAirports[h],this.airports);this.fromBox.options[i]=new Option(k.airportName,k.code);if(!g&&this.defaultValue==k.code){j=i;g=true}}this.fromBox.options[i]=new Option("-----------------","separator");i++}var l="";for(var h=0;h<this.fromAirports.length;++h,i++){var k=getObjectFromArrayByCode(this.fromAirports[h],this.airports);if(this.showCountries&&k.country.countryName!=l){this.fromBox.options[i]=new Option(k.country.countryName,"");this.fromBox.options[i].className="cityDropDownCountry";i++;l=k.country.countryName}this.fromBox.options[i]=new Option(k.airportName,k.code);if(!g&&this.defaultValue==k.code){j=i;g=true}}this.fromBox.selectedIndex=j}};var ToDropControl=Class.create();ToDropControl.prototype={initialize:function(k,i,l,j,g,h){this.fromBox=$(k);this.toBox=$(i);this.departCalendar=j;this.dataContainer=l;this.showCountries=g;this.toHeader=h;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";if(this.fromAirports!=null&&this.fromAirports.length>1){this.fromAirports=RemoveDuplicates(this.fromAirports)}if(this.popularFromAirports!=null&&this.popularFromAirports.length>1){this.popularFromAirports=RemoveDuplicates(this.popularFromAirports)}this.populateToBox()},toBoxChange:function(b){},populateToBox:function(k){this.toBox.options.length=0;var i=0;var l=0;this.toBox.options[i]=new Option(this.toHeader,"");i++;this.toBox.options[i]=new Option("-----------------","separator");i++;if(this.popularToAirports!=null){for(var h=0;h<this.popularToAirports.length;++h,i++){var m=getObjectFromArrayByCode(this.popularToAirports[h],this.airports);this.toBox.options[i]=new Option(m.airportName,m.code);if(this.defaultValue==m.code){l=i}}this.toBox.options[i]=new Option("-----------------","separator");i++}var n="";for(var h=0;h<this.toAirports.length;h++){var m=getObjectFromArrayByCode(this.toAirports[h],this.airports);if(this.showCountries&&m.country.countryName!=n){this.toBox.options[i]=new Option(m.country.countryName,"");this.toBox.options[i].className="cityDropDownCountry";i++;n=m.country.countryName}if(this.fromBox.value!=""){var j=FlightDataCache.getFlightDataItem(this.dataContainer,this.fromBox.value,m.code);if(j.isValidFlight()){this.toBox.options[i]=new Option(m.airportName,m.code);if(m.code==k){l=i}i++}}else{this.toBox.options[i]=new Option(m.airportName,m.code);if(m.code==k){l=i}i++}}this.toBox.selectedIndex=l}};var ToBoxControl=Class.create();ToBoxControl.prototype={initialize:function(r,m,j,n,o,q,p,k,l){this.fromBox=$(r);this.toBox=$(m);this.toBoxListDiv=$(j);this.toSelectionField=$(o);this.toBoxPlusSign=$(n);this.thisForm=$(q);this.currentSelection="";this.fieldsToHide=p;this.dataContainer=k;this.hideOnlyCloseButton=l;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.boxOpen=false;this.inputType="textBox"},toBoxKeyDown:function(i){if(i!=null&&(i.keyCode==40)){var g=$("predictiveLookUp");if(g!=null){var j=g.getElementsByTagName("a");if(this.currentSelection==""){var k=j[0];this.currentSelection=k;changeBkgrnd(k)}else{for(var h=0;h<j.length;h++){if(Element.hasClassName(j[h],"selected")){changeBkgrnd_Blur(j[h]);if(h<(j.length-1)){nextItem=j[h+1]}else{nextItem=j[0]}this.currentSelection=nextItem;changeBkgrnd(nextItem);h=j.length}}}}fixScrollPosition(this.toBoxListDiv,this.currentSelection);return false}else{if(i!=null&&i.keyCode==38){var g=$("predictiveLookUp");if(g!=null){var j=g.getElementsByTagName("a");if(this.currentSelection!=""){for(var h=0;h<j.length;h++){if(Element.hasClassName(j[h],"selected")){changeBkgrnd_Blur(j[h]);if(h>0){nextItem=j[h-1]}else{nextItem=j[j.length-1]}this.currentSelection=nextItem;changeBkgrnd(nextItem);h=j.length}}}else{var l=j[j.length-1];this.currentSelection=l;changeBkgrnd(l)}}fixScrollPosition(this.toBoxListDiv,this.currentSelection);return false}else{if(i!=null&&i.keyCode==13){if(this.currentSelection!=""){this.currentSelection.onclick()}else{if(this.toBoxListDiv.getElementsByTagName("a").length==1){this.toBoxListDiv.getElementsByTagName("a")[0].onclick()}}}}}},toBoxKeyUp:function(b){if(b==null||b.keyCode==40||b.keyCode==38||b.keyCode==13||b.keyCode==9||b.keyCode==37||b.keyCode==39){}else{this.currentSelection="";this.populateToMatchingAirports(b)}},toBoxFocus:function(b){this.toBox.select()},toBoxPlusSignClick:function(g){this.populateToAllAirports(g);this.toBox.focus();var e=$("predictiveLookUp");var h=e.getElementsByTagName("a");for(var f=0;f<h.length;f++){if(("to"+this.toSelectionField.value)==h[f].id){this.currentSelection=h[f];changeBkgrnd(h[f]);fixScrollPosition(this.toBoxListDiv,this.currentSelection)}}},populateToAllAirports:function(d){var f=getAirportsFromAirportCodes(this.dataContainer.getToAirports(),this.dataContainer.getAirports());var e=getValidToAirports(this.fromBox.value,f,this.dataContainer);this.populateToOptions(d,e,false)},populateToMatchingAirports:function(d){var c=getValidToAirportsThatMatchString(this.fromBox.value,this.toBox.value,this.dataContainer);this.populateToOptions(d,c,true)},populateToOptions:function(t,q,r){var s="";var m=$("homePageTabs");this.toBoxListDiv.style.display="block";this.setBoxOpen(true);if(q.length==0){if(m!=null){this.toBoxListDiv.style.left=getAbsLeft(this.toBox)-getAbsLeft(this.thisForm)+"px";this.toBoxListDiv.style.top=getAbsTop(this.toBox)-getAbsTop(this.thisForm)+55+"px"}else{this.toBoxListDiv.style.left=getAbsLeft(this.toBox)+"px";this.toBoxListDiv.style.top=getAbsTop(this.toBox)+20+"px"}this.toBoxListDiv.innerHTML="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;There are no cities matching your request. Try again or click on the + to see valid destination cities.";this.toBoxListDiv.style.width="250px";$("toBoxCloseButton").onclick=this.closeToBoxListDiv.bindAsEventListener(this)}else{var x=new Array();this.toBoxListDiv.style.width="480px";var v="";var w="";var o=5;var n=0;o=(o<q.length/2)?(q.length/2):o;for(var u=0;u<q.length;u++){var p=q[u];if(n<o){v=v+getAirportAsHTMLString(p,this.toBox.value,r)+"<BR>"}else{w=w+getAirportAsHTMLString(p,this.toBox.value,r)+"<BR>"}n++}optionList='<table id="predictiveLookUp"><tr><td width=\'10px\' valign="top"></td><td valign="top">'+v;"</td>";if(w!=""){optionList=optionList+'<td valign="top">'+w+"</td>"}optionList=optionList+"</tr></table>";if(n<"6"){this.toBoxListDiv.style.width="280px"}else{if(n>"5"){this.toBoxListDiv.style.width="480px"}else{this.toBoxListDiv.style.width=""}}this.toBoxListDiv.innerHTML=optionList;$("toBoxCloseButton").onclick=this.closeToBoxListDiv.bindAsEventListener(this);if(m!=null){this.toBoxListDiv.style.left=getAbsLeft(this.toBox)-getAbsLeft(this.thisForm)+"px";this.toBoxListDiv.style.top=getAbsTop(this.toBox)-getAbsTop(this.thisForm)+55+"px"}else{this.toBoxListDiv.style.left=getAbsLeft(this.toBox)+"px";this.toBoxListDiv.style.top=getAbsTop(this.toBox)+20+"px"}for(var u=0;u<q.length;u++){var p=q[u];new ToSelection(p,this.toBox,this.toSelectionField,this.toBoxListDiv,this)}if(q.length>0){document.onclick=this.closeToBoxListDiv.bindAsEventListener(this)}}},closeToBoxListDiv:function(c){if(c.target){targ=c.target}else{if(c.srcElement){targ=c.srcElement}}if(targ.id!="toBoxPlusSign"){if(this.boxOpen){this.toBoxListDiv.style.display="none";this.hideShowFields(false);if(this.toSelectionField.value==""){this.toBox.value=""}else{var d=getObjectFromArrayByCode(this.toSelectionField.value,this.dataContainer.getAirports());this.toBox.value=d.toStringNameOnly()}this.setBoxOpen(false)}}},setBoxOpen:function(b){this.boxOpen=b;this.hideShowFields(b);this.hideShowCloseButton(b);if(!b){this.currentSelection=""}},hideShowFields:function(c){for(var d=0;d<this.fieldsToHide.length;d++){if(c){$(fieldsToHide[d]).style.visibility="hidden"}else{$(fieldsToHide[d]).style.visibility="visible"}}},hideShowCloseButton:function(c){for(var d=0;d<this.hideOnlyCloseButton.length;d++){if(c){$(hideOnlyCloseButton[d]).style.display="block"}else{$(hideOnlyCloseButton[d]).style.display="none"}}}};function fixScrollPosition(c,d){if(d.offsetTop>(c.offsetHeight-20)){c.scrollTop=d.offsetTop}if(d.offsetTop<c.scrollTop){c.scrollTop=0}}var FromToHandler=Class.create();FromToHandler.prototype={initialize:function(h,g,l,i,k,j){this.fromBoxControl=h;this.toBoxControl=g;if(this.toBoxControl.inputType=="textBox"){this.toSelectionField=this.toBoxControl.toSelectionField}else{this.toSelectionField=this.toBoxControl.toBox}this.toBox=this.toBoxControl.toBox;this.classBox=$(l);this.departCalendar=j;this.intDomConvertFunction=i;this.fromBoxControl.fromBox.onchange=this.fromToChange.bindAsEventListener(this);this.toSelectionField.onchange=this.fromToChange.bindAsEventListener(this);this.dataContainer=k},fromToChange:function(d){if(this.toBoxControl.inputType=="textBox"&&this.toBoxControl.boxOpen){this.toBoxControl.populateToMatchingAirports(d)}else{if(this.toBoxControl.inputType=="selectBox"){this.toBoxControl.populateToBox(this.toSelectionField.value)}if(this.fromBoxControl.fromBox.value!=""&&this.toSelectionField.value!=""){var c=FlightDataCache.getFlightDataItem(this.dataContainer,this.fromBoxControl.fromBox.value,this.toSelectionField.value);if(!c.isValidFlight()){if(this.toBoxControl.inputType=="textBox"){this.toSelectionField.value="";this.toBox.value=""}else{this.toSelectionField.selectedIndex=0}this.intDomConvertFunction()}else{if(c.isInternational()){this.populateClasses(c)}this.intDomConvertFunction(c)}}else{this.populateClassesForRoute();this.intDomConvertFunction()}}},populateClasses:function(h){if(this.classBox!=null){if(h!=null){var f=h.getClasses(this.departCalendar)}else{var f=getClassesForFlight(null,this.dataContainer,this.departCalendar,this.fromAirport,this.toAirport)}var i=this.classBox.selectedIndex;this.classBox.options.length=0;for(var g=0;g<f.length;g++){var j=f[g];this.classBox.options[g]=new Option(j.className,j.value)}if(i!=-1){this.classBox.selectedIndex=i}}},populateClassesForRoute:function(){if(this.fromBoxControl.fromBox.value!=""&&this.toSelectionField.value!=""){var b=FlightDataCache.getFlightDataItem(this.dataContainer,this.fromBoxControl.fromBox.value,this.toSelectionField.value,this.toBoxControl.departCalendar);this.populateClasses(b)}else{this.populateClasses()}},setInitialValues:function(j,f){var h=false;for(var i=0;i<this.fromBoxControl.fromBox.options.length;++i){if(this.fromBoxControl.fromBox.options[i].value==j){this.fromBoxControl.fromBox.selectedIndex=i;h=true;break}}if(h==false&&j==""){this.fromBoxControl.fromBox.selectedIndex=0}if(this.toBoxControl.inputType=="textBox"&&f!=null&&f!=""){var g=getObjectFromArrayByCode(f,this.dataContainer.getAirports());if(g!=null){this.toBox.value=g.airportName;this.toSelectionField.value=g.code}}this.fromToChange();if(this.toBoxControl.inputType=="textBox"){}else{var h=false;for(var i=0;i<this.toBoxControl.toBox.options.length;++i){if(this.toBoxControl.toBox.options[i].value==f){this.toBoxControl.toBox.selectedIndex=i;h=true;break}}if(h==false&&j==""){this.toBoxControl.toBox.selectedIndex=0}}}};var ToSelection=Class.create();ToSelection.prototype={initialize:function(j,i,f,g,h){this.airport=j;this.toBox=i;this.toSelectionField=f;this.toBoxListDiv=g;this.toBoxControl=h;this.airportHref=$("to"+j.code);this.airportHref.onclick=this.airportHrefClick.bindAsEventListener(this)},airportHrefClick:function(b){this.toBoxControl.setBoxOpen(false);this.toSelectionField.value=this.airport.code;this.toBox.value=this.airport.toStringNameOnly();this.toSelectionField.onchange();this.toBoxListDiv.innerHTML="";this.toBoxListDiv.style.display="none"}};function getValidToAirportsThatMatchString(n,j,m){var l=m.getToAirports();var h=m.getAirports();var k=getAirportsThatMatchString(j,l,h);var i=getValidToAirports(n,k,m);return i}function getValidToAirports(i,j,n){var l=new Array();for(var k=0;k<j.length;k++){var h=j[k];var m=FlightDataCache.getFlightDataItem(n,i,h.code);if(m.isValidFlight()||i.length=="0"){l.push(h)}}return l}function getAirportsFromAirportCodes(f,i){var g=new Array();for(var h=0;h<f.length;h++){var j=getObjectFromArrayByCode(f[h],i);g.push(j)}return g}function getAirportsThatMatchString(j,l,h){var k=new Array();if(j!=""&&j!=null){if(j.length==1){var n=new RegExp("^"+j,"i")}else{n=new RegExp(""+j,"i")}for(var i=0;i<l.length;i++){var m=getObjectFromArrayByCode(l[i],h);if(n.test(m.code)){k.push(m)}else{if(n.test(m.airportName)){k.push(m)}}}}return k}function indexOfAirportByCode(e,d){for(var f=0;f<d.length;f++){if(e==d[f]){return f}}return -1}function getObjectFromArrayByCode(e,f){for(var d=0;d<f.length;d++){if(e==f[d].code){return f[d]}}return null}function getMatrixItem(n,p,l,m,k){var r=(n*k)+p;var o=l.charAt(r);var j=parseInt(o,32);var q=j.toString(2);return q.padLeft(5,"0")}function determineBooleanValueFromMatrixItem(c,d){if(c.charAt(d)=="1"){return true}return false}function getClassesForFlight(A,p,w,u,y){var q=new Array();var B=w.getDate().format("YYYYmmDD");var i=p.getTravelDate();var x=new Array(["SYD","BOM"],["SYD","LHR"],["SYD","MEL"]);for(var t=0;t<x.length;t++){if(u==x[t][0]&&y==x[t][1]){}}if(p.getIsSaleDate()=="true"&&B>=i&&A!=null){var r=getObjectFromArrayByCode("Y",p.getClasses());var z=getObjectFromArrayByCode("P",p.getClasses());var v=getObjectFromArrayByCode("J",p.getClasses());var s=getObjectFromArrayByCode("F",p.getClasses());if(determineBooleanValueFromMatrixItem(A,p.getEconomyClassIndex())){if(r!=null){q.push(r)}}if(determineBooleanValueFromMatrixItem(A,p.getPremiumClassIndex())){if(z!=null){q.push(z)}}if(determineBooleanValueFromMatrixItem(A,p.getBusinessClassIndex())){if(v!=null){q.push(v)}}if(determineBooleanValueFromMatrixItem(A,p.getFirstClassIndex())){if(s!=null){q.push(s)}}}else{var r=getObjectFromArrayByCode("Y",p.getClasses());var v=getObjectFromArrayByCode("J",p.getClasses());var s=getObjectFromArrayByCode("F",p.getClasses());if(A==null){if(r!=null){q.push(r)}if(v!=null){q.push(v)}if(s!=null){q.push(s)}}else{if(determineBooleanValueFromMatrixItem(A,p.getEconomyClassIndex())){if(r!=null){q.push(r)}}if(determineBooleanValueFromMatrixItem(A,p.getBusinessClassIndex())){if(v!=null){q.push(v)}}if(determineBooleanValueFromMatrixItem(A,p.getFirstClassIndex())){if(s!=null){q.push(s)}}}}return q}String.prototype._pad=function(g,f,h){var e=[h?"":this,h?this:""];while(e[h].length<(g?g:0)&&(e[h]=e[1]+(f?f:" ")+e[0])){}return e[h]};String.prototype.padLeft=function(d,c){return this._pad(d,c,0)};String.prototype.padRight=function(d,c){return this._pad(d,c,1)};Number.prototype.padLeft=function(d,c){return(""+this).padLeft(d,c)};Number.prototype.padRight=function(d,c){return(""+this).padRight(d,c)};function RemoveDuplicates(h){if(h!=null&&h.length>1){var i=new Array();var g="";for(var f=0;f<h.length;f++){var j=h[f];if(j!=g){i[i.length]=j}g=j}}return i};
