function TicketSearchControl(E,B,A,D,C){this.ticketSearchControlId=E;this.ticketSearchControlIdPrefix=B;this.ticketSearchControlNamePrefix=A;this.locationControlsValid=new Object;this.dtEarliestAvailable=new Date(D);this.dtLatestAvailable=new Date(C);this.returnDateChanged=false}TicketSearchControl.prototype.Initialise=function(){this.locationsValid=true;if(this.ticketSearchControl==undefined){this.ticketSearchControl=document.getElementById(this.ticketSearchControlId);this.divErrorSection=document.getElementById(this.ticketSearchControlIdPrefix+"divError");this.divErrorText=document.getElementById(this.ticketSearchControlIdPrefix+"divErrorText");this.divPassengerError=document.getElementById(this.ticketSearchControlIdPrefix+"divPassengerError");this.divRailcardDetails=document.getElementById(this.ticketSearchControlIdPrefix+"divRailcardDetails");this.pnlReturnTravelDates=document.getElementById(this.ticketSearchControlIdPrefix+"pnlReturnTravelDates");this.closeButtons=new Array();var B=0;do{var A=document.getElementById(this.ticketSearchControlIdPrefix+"btnClose"+B);if(A==undefined){break}else{this.closeButtons.push(A);B++}}while(true);if(this.divErrorText){this.SetError(this.divErrorText.innerHTML)}this.lcOrigin=document.getElementById(this.ticketSearchControlIdPrefix+"lcOrigin");if(this.lcOrigin){this.lcOrigin.checkValidityEvent=new YAHOO.util.CustomEvent("CheckValidity");this.lcOrigin.checkValidityEvent.subscribe(this.CheckLocationValidity,this,true);this.locationControlsValid[this.lcOrigin.id]=(this.lcOrigin.value.length!=0)}this.lcDestination=document.getElementById(this.ticketSearchControlIdPrefix+"lcDestination");if(this.lcDestination){this.lcDestination.checkValidityEvent=new YAHOO.util.CustomEvent("CheckValidity");this.lcDestination.checkValidityEvent.subscribe(this.CheckLocationValidity,this,true);this.locationControlsValid[this.lcDestination.id]=(this.lcDestination.value.length!=0)}this.lcOptionLocation=document.getElementById(this.ticketSearchControlIdPrefix+"lcOptionLocation");if(this.lcOptionLocation){this.lcOptionLocation.checkValidityEvent=new YAHOO.util.CustomEvent("CheckValidity");this.lcOptionLocation.checkValidityEvent.subscribe(this.CheckLocationValidity,this,true);this.lcOptionLocation.zeroLengthValid=true;this.locationControlsValid[this.lcOptionLocation.id]=true}this.lstOutwardDay=document.getElementById(this.ticketSearchControlIdPrefix+"lstOutwardDay");this.lstOutwardMonthYear=document.getElementById(this.ticketSearchControlIdPrefix+"lstOutwardMonthYear");this.lstOutwardHour=document.getElementById(this.ticketSearchControlIdPrefix+"lstOutwardHour");this.lstOutwardMinute=document.getElementById(this.ticketSearchControlIdPrefix+"lstOutwardMinute");this.lstOutwardTimeOption=document.getElementById(this.ticketSearchControlIdPrefix+"lstOutwardTimeOption");this.lstReturnDay=document.getElementById(this.ticketSearchControlIdPrefix+"lstReturnDay");this.lstReturnMonthYear=document.getElementById(this.ticketSearchControlIdPrefix+"lstReturnMonthYear");this.lstReturnHour=document.getElementById(this.ticketSearchControlIdPrefix+"lstReturnHour");this.lstReturnMinute=document.getElementById(this.ticketSearchControlIdPrefix+"lstReturnMinute");this.lstReturnTimeOption=document.getElementById(this.ticketSearchControlIdPrefix+"lstReturnTimeOption");YAHOO.util.Event.addListener(this.lstOutwardDay,"change",this.OutwardDateChanged,this,true);YAHOO.util.Event.addListener(this.lstOutwardMonthYear,"change",this.OutwardDateChanged,this,true);YAHOO.util.Event.addListener(this.lstOutwardHour,"change",this.OutwardDateChanged,this,true);YAHOO.util.Event.addListener(this.lstOutwardMinute,"change",this.OutwardDateChanged,this,true);YAHOO.util.Event.addListener(this.lstReturnDay,"change",this.ReturnDateChanged,this,true);YAHOO.util.Event.addListener(this.lstReturnMonthYear,"change",this.ReturnDateChanged,this,true);YAHOO.util.Event.addListener(this.lstReturnHour,"change",this.ReturnDateChanged,this,true);YAHOO.util.Event.addListener(this.lstReturnMinute,"change",this.ReturnDateChanged,this,true);this.chkFirstClass=document.getElementById(this.ticketSearchControlIdPrefix+"chkFirstClass");this.chkStandardClass=document.getElementById(this.ticketSearchControlIdPrefix+"chkStandardClass");this.chkShowItsoSmartCard=document.getElementById(this.ticketSearchControlIdPrefix+"chkShowItsoSmartCard");this.lstAdults=document.getElementById(this.ticketSearchControlIdPrefix+"lstAdults");this.lstChildren=document.getElementById(this.ticketSearchControlIdPrefix+"lstChildren");this.passengersValid=true;this.chkOpenReturn=document.getElementById(this.ticketSearchControlIdPrefix+"chkOpenReturn");YAHOO.util.Event.addListener(this.chkOpenReturn,"click",this.SetOpenReturn,this,true);this.chkRailcards=document.getElementById(this.ticketSearchControlIdPrefix+"chkRailcards");this.rdoOneWay=document.getElementById(this.ticketSearchControlIdPrefix+"rdoOneWay");this.rdoReturn=document.getElementById(this.ticketSearchControlIdPrefix+"rdoReturn");if(this.rdoOneWay){if(this.rdoOneWay.checked){this.rdoOneWay.click()}YAHOO.util.Event.addListener(this.rdoOneWay,"click",this.CheckDateValidity,this,true);YAHOO.util.Event.addListener(this.rdoOneWay,"click",this.EnableReturnPanel,this,true)}if(this.rdoReturn){if(this.rdoReturn.checked){this.rdoReturn.click()}YAHOO.util.Event.addListener(this.rdoReturn,"click",this.CheckDateValidity,this,true);YAHOO.util.Event.addListener(this.rdoReturn,"click",this.EnableReturnPanel,this,true)}this.divOutwardDepartureError=document.getElementById(this.ticketSearchControlIdPrefix+"divOutwardDepartureError");this.divReturnDepartureError=document.getElementById(this.ticketSearchControlIdPrefix+"divReturnDepartureError");this.searchButton=document.getElementById(this.ticketSearchControlIdPrefix+"btnSearch");this.datesValid=true;this.btnShowOptions=document.getElementById(this.ticketSearchControlIdPrefix+"btnShowOptions");this.divOptionDetails=document.getElementById(this.ticketSearchControlIdPrefix+"divOptionDetails");timer.SetTimer(100,this,this.SetInitialControlState);this.GetRailcardArray();if(this.lstAdults){this.SetPassengerListboxes(this.lstAdults.value*1,this.lstChildren.value*1)}}};TicketSearchControl.prototype.SearchForNonDirectTrains=function(){var A=document.getElementById(this.ticketSearchControlIdPrefix+"chkNoChanges");A.checked=false;this.searchButton.parentNode.onclick()};TicketSearchControl.prototype.SearchForNonSmartcardFares=function(){var A=document.getElementById(this.ticketSearchControlIdPrefix+"chkItsoSmartCard");A.checked=false;this.searchButton.parentNode.onclick()};TicketSearchControl.prototype.SetInitialControlState=function(){if(this.rdoOneWay){this.EnableReturnPanel()}if(this.chkRailcards&&this.chkRailcards.checked){this.chkRailcards.onclick()}if(this.chkOpenReturn&&this.chkOpenReturn.checked){this.SetOpenReturn()}if(this.lcOrigin){this.locationControlsValid[this.lcOrigin.id]=(this.lcOrigin.value.length!=0)}if(this.lcDestination){this.locationControlsValid[this.lcDestination.id]=(this.lcDestination.value.length!=0)}this.locationsValid=true;for(var A in this.locationControlsValid){this.locationsValid=this.locationsValid&&this.locationControlsValid[A]}if(this.lcOptionLocation){if(this.lcOptionLocation.value.length>0){SetWTButtonText(this.btnShowOptions.parentNode,"hide options");ShowElement(this.divOptionDetails,true)}}this.SetSearchButtonState()};TicketSearchControl.prototype.CheckPassengerValidity=function(){if((this.lstAdults.value*1)==0&&(this.lstChildren.value*1)==0){this.passengersValid=false;this.divPassengerError.innerHTML=this.minPassengersError;ShowElement(this.divPassengerError,true)}else{if((this.lstAdults.value*1)+(this.lstChildren.value*1)>this.maxPassengers){this.passengersValid=false;this.divPassengerError.innerHTML=this.maxPassengersError;ShowElement(this.divPassengerError,true)}else{this.passengersValid=true;this.divPassengerError.innerHTML="";ShowElement(this.divPassengerError,false)}}this.SetPassengerListboxes(this.lstAdults.value*1,this.lstChildren.value*1);this.SetSearchButtonState()};TicketSearchControl.prototype.ToggleMoreOptions=function(B,A){var C=document.getElementById(A);if(C.style.display=="block"){ShowElement(C,false);SetWTButtonText(B,this.moreOptions)}else{ShowElement(C,true);SetWTButtonText(B,this.hideOptions)}};TicketSearchControl.prototype.SetRailcardListboxNames=function(A){for(var B=0;B<this.lstDetails.length;B++){this.lstDetails[B].id=this.ticketSearchControlIdPrefix+"lstRailcardDetails"+B;this.lstDetails[B].name=this.ticketSearchControlNamePrefix+"lstRailcardDetails"+B;this.lstNumber[B].id=this.ticketSearchControlIdPrefix+"lstRailcardNumber"+B;this.lstNumber[B].name=this.ticketSearchControlNamePrefix+"lstRailcardNumber"+B;this.lstDetailsAdults[B].id=this.ticketSearchControlIdPrefix+"lstRailcardDetailsAdults"+B;this.lstDetailsAdults[B].name=this.ticketSearchControlNamePrefix+"lstRailcardDetailsAdults"+B;this.lstDetailsChildren[B].id=this.ticketSearchControlIdPrefix+"lstRailcardDetailsChildren"+B;this.lstDetailsChildren[B].name=this.ticketSearchControlNamePrefix+"lstRailcardDetailsChildren"+B}};TicketSearchControl.prototype.SetRailcardDetailsVisibility=function(D){var C=D.parentNode;var A=YAHOO.util.Dom.getElementsByClassName("RailcardDetailsLine",undefined,C);for(var B=0;B<A.length;B++){ShowElement(A[B],D.value.charAt(3)!="0")}};TicketSearchControl.prototype.SetAddRemoveButton=function(B,A){if(A){SetWTButtonText(B,this.removeRailcards);B.className="liremove"}else{SetWTButtonText(B,this.addMoreRailcards);B.className="liarrowpr"}};TicketSearchControl.prototype.SetAllRailcardDetailsVisibility=function(C){var E=document.getElementById(C);var F=YAHOO.util.Dom.getElementsByClassName("RailcardDetails",undefined,E);for(var B=0;B<F.length;B++){this.SetRailcardDetailsVisibility(F[B])}var D=YAHOO.util.Dom.getElementsByClassName("liarrowpr",undefined,E);for(var A=0;A<D.length;A++){this.SetAddRemoveButton(D[A],(A!=0))}};TicketSearchControl.prototype.AddRemoveRailcard=function(A){var D=A.parentNode.parentNode;if(A.className=="liremove"){D.parentNode.removeChild(D)}else{var B=D.cloneNode(true);D.parentNode.appendChild(B);this.RemoveRailcardErrorMessage(B);this.SetRailcardDetailsVisibility(GetChildWithStyle(B,"RailcardDetails",true));var C=YAHOO.util.Dom.getElementsByClassName("liarrowpr",undefined,B)[0];this.SetAddRemoveButton(C,true)}this.GetRailcardArray();this.SetRailcardListboxNames(D.parentNode)};TicketSearchControl.prototype.RemoveRailcardErrorMessage=function(B){var A=GetChildWithStyle(B,"ErrorText",false);if(A){A.parentNode.removeChild(A)}};TicketSearchControl.prototype.GetRailcardArray=function(){this.lstDetails=YAHOO.util.Dom.getElementsByClassName("RailcardDetails",undefined,this.divRailcardDetails);this.lstNumber=YAHOO.util.Dom.getElementsByClassName("RailcardNumber",undefined,this.divRailcardDetails);this.lstDetailsAdults=YAHOO.util.Dom.getElementsByClassName("RailcardDetailsAdults",undefined,this.divRailcardDetails);this.lstDetailsChildren=YAHOO.util.Dom.getElementsByClassName("RailcardDetailsChildren",undefined,this.divRailcardDetails)};TicketSearchControl.prototype.EnableReturnPanel=function(B,A){ShowElement(this.pnlReturnTravelDates,this.rdoReturn.checked)};TicketSearchControl.prototype.CopyListOptions=function(A,C){C.length=A.length;for(var B=0;B<A.length;B++){C[B]=A[B]}};TicketSearchControl.prototype.SetOpenReturn=function(){var B=YAHOO.util.Dom.get(this.chkOpenReturn.parentNode.parentNode.parentNode);var C=B.getElementsByTagName("SELECT");for(var D=0;D<C.length;D++){if(C[D].disabled!=this.chkOpenReturn.checked){if(this.chkOpenReturn.checked){C[D].currentlySelctedIndex=C[D].selectedIndex;if(C[D].disabledOptions==undefined){C[D].disabledOptions=new Array()}this.CopyListOptions(C[D].options,C[D].disabledOptions);C[D].options.length=0}else{this.CopyListOptions(C[D].disabledOptions,C[D].options);C[D].selectedIndex=C[D].currentlySelctedIndex}C[D].disabled=this.chkOpenReturn.checked}}var A=B.getElementsByTagName("IMG");if(this.chkOpenReturn.checked){A[0].src=ImagePath+"CalendarDisabled.gif"}else{A[0].src=ImagePath+"Calendar.gif"}this.CheckDateValidity()};TicketSearchControl.prototype.SelectFavourite=function(C,G,E,I,F,A,K){var B=C.value.split("~");if(B.length==22){document.getElementById(G).value=B[0];document.getElementById(E).value=B[1];document.getElementById(I).value=B[2];document.getElementById(F).value=B[3];this.rdoOneWay.checked=B[4]=="0";this.rdoReturn.checked=B[4]!="0";this.chkStandardClass.checked=B[5]!="0";this.chkFirstClass.checked=B[6]!="0";this.lstOutwardTimeOption.value=B[7];this.lstReturnTimeOption.value=B[8];if(B[17].substring(1)=="True"){this.lstOutwardHour.value=B[9]}if(B[17].substring(1)=="True"){this.lstOutwardMinute.value=B[10]}if(B[17].substring(1)=="True"){this.lstReturnHour.value=B[11]}if(B[17].substring(1)=="True"){this.lstReturnMinute.value=B[12]}this.lstOutwardDay.value=B[13];this.lstOutwardMonthYear.value=B[14];this.lstReturnDay.value=B[15];this.lstReturnMonthYear.value=B[16];if(B[17].substring(1)=="True"){this.lstAdults.value=B[17].substring(0,1)}if(B[18].substring(1)=="True"){this.lstChildren.value=B[18].substring(0,1)}if(parseInt(B[19])>0){this.chkRailcards.checked=true;ShowElement(this.divRailcardDetails,true);var J=B[20].split("@@");var D=J[0].split(",");var H=0;for(i=0;i<this.lstDetails[H].length;i++){if(this.lstDetails[H].options[i].value.substring(0,3)==D[3]){this.lstDetails[H].value=this.lstDetails[H].options[i].value;this.SetRailcardDetailsVisibility(this.lstDetails[H]);this.lstNumber[H].value=D[2];this.lstDetailsAdults[H].value=D[0];this.lstDetailsChildren[H].value=D[1]}}}else{this.chkRailcards.checked=false;ShowElement(this.divRailcardDetails,false)}this.SetInitialControlState()}};TicketSearchControl.prototype.SetSearchButtonState=function(){if(this.searchButton){DisableWTButton(this.searchButton,!this.datesValid||!this.locationsValid||!this.passengersValid)}};TicketSearchControl.prototype.GetDate=function(D,A,E,F){var C=A.value.split("/");var B=new Date(C[1],C[0]-1,D.value,E.value,F.value,0);if(!B||B.getDate()!=D.value){return undefined}else{return B}};TicketSearchControl.prototype.SetErrorText=function(A,B){A.innerHTML=B;if(B.length>0){ShowElement(A,true)}else{ShowElement(A,false)}};TicketSearchControl.prototype.AreDatesValid=function(){var C=true;if(this.lstOutwardDay==undefined){return C}var B=this.GetDate(this.lstOutwardDay,this.lstOutwardMonthYear,this.lstOutwardHour,this.lstOutwardMinute);if(!B){this.SetErrorText(this.divOutwardDepartureError,this.notValid);C=false}else{if(B<this.dtEarliestAvailable){this.SetErrorText(this.divOutwardDepartureError,this.tooEarly);C=false}else{if(B>this.dtLatestAvailable){this.SetErrorText(this.divOutwardDepartureError,this.tooLate);C=false}else{this.SetErrorText(this.divOutwardDepartureError,"")}}}if(this.lstReturnDay==undefined){return C}var D=true;if(!this.rdoOneWay){D=(this.lstReturnDay==null)}else{D=this.rdoOneWay.checked}if(D||this.chkOpenReturn.checked){this.SetErrorText(this.divReturnDepartureError,"");return C}var A=this.GetDate(this.lstReturnDay,this.lstReturnMonthYear,this.lstReturnHour,this.lstReturnMinute);if(!A){this.SetErrorText(this.divReturnDepartureError,this.notValid);C=false}else{if(A<this.dtEarliestAvailable){this.SetErrorText(this.divReturnDepartureError,this.tooEarly);C=false}else{if(A>this.dtLatestAvailable){this.SetErrorText(this.divReturnDepartureError,this.tooLate);C=false}else{if(A<B){this.SetErrorText(this.divReturnDepartureError,this.inwardBeforeOutward);C=false}else{this.SetErrorText(this.divReturnDepartureError,"")}}}}return C};TicketSearchControl.prototype.CheckDateValidity=function(){this.datesValid=this.AreDatesValid();this.SetSearchButtonState()};TicketSearchControl.prototype.OutwardDateChanged=function(){if(!this.returnDateChanged){var C;var B=this.lstOutwardMonthYear.value;B=B.split("/");var A=new Date(B[1],B[0]-1,this.lstOutwardDay.value);if(this.lstReturnDay){C=this.lstReturnMonthYear.value;C=C.split("/");var D=new Date(C[1],C[0]-1,this.lstReturnDay.value);if(D<A){this.lstReturnDay.value=this.lstOutwardDay.value}}if(this.lstReturnMonthYear){if(B[0]>=C[0]){this.lstReturnMonthYear.value=this.lstOutwardMonthYear.value}}}this.CheckDateValidity()};TicketSearchControl.prototype.ReturnDateChanged=function(){this.returnDateChanged=true;this.CheckDateValidity()};TicketSearchControl.prototype.CalendarDateChanged=function(B,A){if(B==this.lstReturnDay){this.ReturnDateChanged()}else{this.OutwardDateChanged()}};TicketSearchControl.prototype.CheckLocationValidity=function(C,D){var B=D[0]._oTextbox;var E=D[1];if(!B.zeroLengthValid){E=E&&B.value.length>2}this.locationControlsValid[B.id]=E;var A=true;for(var F in this.locationControlsValid){A=A&&this.locationControlsValid[F]}this.locationsValid=A;this.SetSearchButtonState()};TicketSearchControl.prototype.SetError=function(A,B){this.divErrorText.innerHTML=A;ShowElement(this.divErrorSection,A.length>0);if(this.closeButtons[0]){ShowWTButton(this.closeButtons[0],B)}if(this.closeButtons[1]){ShowWTButton(this.closeButtons[1],A.length==0)}};TicketSearchControl.prototype.DisableClose=function(){if(this.closeButtons[0]){ShowWTButton(this.closeButtons[0],false)}if(this.closeButtons[1]){ShowWTButton(this.closeButtons[1],false)}};TicketSearchControl.prototype.EnsureOneClassIsSelected=function(A){if(!A.checked){if(A==this.chkStandardClass){this.chkFirstClass.checked=true}else{this.chkStandardClass.checked=true}}};TicketSearchControl.prototype.FillListBox=function(C,B,A){var D=C.value;C.options.length=0;for(var E=B;E<=A;E++){C.options[C.options.length]=new Option(E,E)}C.value=D};TicketSearchControl.prototype.SetPassengerListboxes=function(B,A){for(var C=0;C<this.lstDetails.length;C++){this.FillListBox(this.lstNumber[C],1,B+A);this.FillListBox(this.lstDetailsAdults[C],0,B);this.FillListBox(this.lstDetailsChildren[C],0,A)}};TicketSearchControl.prototype.ShowTicketSearchControl=function(A,B){ShowElement(document.getElementById(ticketSearchControlColapsableContentsClientID),A);ShowElement(document.getElementById(ticketSearchControlHeaderContentClientID),!A);if(this.rdoOneWay){this.CheckDateValidity();this.EnableReturnPanel()}if(typeof (helpPanels)!="undefined"){helpPanels.SetTicketSearchControlHelpZIndex(!A)}if(typeof (mixingDeck)!="undefined"){if(B){this.rdoReturn.checked=true;this.rdoReturn.onclick()}this.showing=A;mixingDeck.filterPanel.Show(!A);if(mixingDeck.lowestFareFinder){mixingDeck.lowestFareFinder.ShowMinimised(!A);mixingDeck.lowestFareFinder.ShowMaximised(false)}mixingDeck.ShowTransparentDiv(A)}};TicketSearchControl.prototype.UpdateOnlySmartcardFares=function(A){if(this.chkShowItsoSmartCard!=null){mixingDeck.ShowOnlySmartCardFares(this.chkShowItsoSmartCard.checked)}if(typeof (mixingDeck)!="undefined"){mixingDeck.UpdateFilter()}}