$.fn.UserManager=function(c){var a=this;if(typeof c==="function"){a.data("callback",c);return}c=jQuery.extend({userId:null,currencySelect:$(".jUserCurrencies",a),languageSelect:$(".jUserLanguages",a)},c);a.data("userId",c.userId);var b=function(e){if(e){var d=a.data("callback");if(d){d()}else{location=location}}};c.currencySelect.change(function(){_userProxy.UpdateUserCurrency(c.userId,$(this).val(),b,function(d){})});c.languageSelect.change(function(){_userProxy.UpdateUserLanguage(c.userId,$(this).val(),b,function(d){})})};$.fn.SearchControl=function(j){var e=this;var h=true;j=jQuery.extend({dates:null,place:null,roomsTemplating:null,validatorRules:null,noDates:$("#jNoDates",e),roomToggle:$("#jAddRoom",e),roomOptions:$(".jRoomOption",e),searchModeField:$("#hdnSearchMode",e)},j);j.FlightSearchOptions=jQuery.extend({MaxPassengers:{Economy:9,Premium:9,Business:5,First:5},MinimumFutureSearchDays:4,CabinClassSelect:$("#ddlCabinClass",e),NonStopFlights:$("#chkNonStopFlights",e),PreferredAirlineSelect:$("#ddlPreferredAirline",e)},j.FlightSearchOptions);e.data("dates",j.dates);e.data("place",j.place);j.roomToggle.change(function(){if($(this).attr("checked")){j.roomOptions.show()}else{j.roomOptions.hide()}});if(j.roomToggle.attr("checked")){j.roomToggle.trigger("change")}if(j.roomsTemplating&&j.roomsTemplating.roomsJson&&j.roomsTemplating.roomsContainer&&j.roomsTemplating.roomsTemplate){$.SearchControl.BindRooms(j.roomsTemplating);$(".jAddRoom").click(function(){var l=new Object();l.AdultCount=2;l.ChildAges=new Array();j.roomsTemplating.roomsJson.push(l);$.SearchControl.BindRooms(j.roomsTemplating)})}if(j.dates&&j.dates.checkIn&&j.dates.checkOut&&j.dates.dateFormat){j.dates.checkIn.datepicker({changeMonth:true,changeYear:true,showOn:"both",buttonImage:"/images/calendar.gif",buttonImageOnly:true,showButtonPanel:true,beforeShowDay:function(l){if(l<=new Date()){return[false]}else{return[true]}},yearRange:"+00:+02",showOtherMonths:true,selectOtherMonths:true,onSelect:function(){$.SearchControl.UpdateDates(j.dates.checkIn,j.dates.checkInDay,j.dates.checkInMonth,j.dates.dateFormat)}});j.dates.checkIn.blur(function(){$.SearchControl.UpdateDates(j.dates.checkIn,j.dates.checkInDay,j.dates.checkInMonth,j.dates.dateFormat)});j.dates.checkOut.datepicker({changeMonth:true,changeYear:true,showOn:"both",buttonImage:"/images/calendar.gif",buttonImageOnly:true,showButtonPanel:true,beforeShowDay:function(l){if(l<=new Date()){return[false]}else{return[true]}},yearRange:"+00:+02",showOtherMonths:true,selectOtherMonths:true,onSelect:function(){$.SearchControl.UpdateDates(j.dates.checkOut,j.dates.checkOutDay,j.dates.checkOutMonth,j.dates.dateFormat)}});j.dates.checkOut.blur(function(){$.SearchControl.UpdateDates(j.dates.checkOut,j.dates.checkOutDay,j.dates.checkOutMonth,j.dates.dateFormat)});$.SearchControl.SetUpDateDropDowns(j.dates.checkIn,j.dates.checkInDay,j.dates.checkInMonth,j.dates.dateFormat);$.SearchControl.SetUpDateDropDowns(j.dates.checkOut,j.dates.checkOutDay,j.dates.checkOutMonth,j.dates.dateFormat);var c=function(){if(h){return}try{var m=$.datepicker.parseDate(j.dates.dateFormat,j.dates.checkIn.val());var p=j.dates.checkOutMonth.val();var n=j.dates.checkOutDay.val();var l=$.datepicker.parseDate("ddmmyy",n+p);if(l<=m){var q=m;q.setDate(m.getDate()+7);j.dates.checkOut.val($.datepicker.formatDate(j.dates.dateFormat,q)).trigger("blur")}}catch(o){}};j.dates.checkInDay.change(function(){var l=j.dates.checkInDay.find("option[value='']");l.remove();c()});j.dates.checkOutDay.change(function(){var l=j.dates.checkOutDay.find("option[value='']");l.remove()});j.dates.checkInMonth.change(function(){if(!j.dates.checkOutMonth.val()){if(!j.dates.checkOutDay.val()){var l=$.datepicker.parseDate(j.dates.dateFormat,j.dates.checkIn.val());l.setDate(l.getDate()+1);j.dates.checkOutDay.val($.format(l,"dd"));j.dates.checkOutMonth.val($.format(l,"MMyyyy")).trigger("change")}else{j.dates.checkOutMonth.val(j.dates.checkInMonth.val()).trigger("change")}}else{c()}var m=j.dates.checkInMonth.find("option[value='']");m.remove()});j.dates.checkOutMonth.change(function(){if(!j.dates.checkInMonth.val()){j.dates.checkInMonth.val(j.dates.checkOutMonth.val()).trigger("change")}var l=j.dates.checkOutMonth.find("option[value='']");l.remove()})}var b=function(l,m){$.validator.addMethod("validateCheckOutDate",function(r){if(m.prop("checked")){return true}var n=l.checkIn.val();if(r.length===0){return false}try{var o=$.datepicker.parseDate(l.dateFormat,n);var q=$.datepicker.parseDate(l.dateFormat,r);if(q<o){return false}else{return true}}catch(p){return false}},"Check-out date must be a valid date and must not be before check-in date");$.validator.addMethod("validateCheckInDate",function(p){if(m.prop("checked")){return true}if(p.length===0){return false}try{var n=$.datepicker.parseDate(l.dateFormat,p);return(n>new Date())}catch(o){return false}},"Check-in date must be a valid date")};b(j.dates,j.noDates);$.validator.addMethod("ValidateDepartureDate",function(p){if(j.searchModeField.val()=="Hotels"){return true}try{var m=$.datepicker.parseDate(j.dates.dateFormat,p);var o=new Date();var l=new Date(o.getFullYear(),o.getMonth(),o.getDate());l.setDate(l.getDate()+j.FlightSearchOptions.MinimumFutureSearchDays);if(m<l){return false}return true}catch(n){return false}},"Departure date must be a valid date and at least "+j.FlightSearchOptions.MinimumFutureSearchDays+" days in the future.");$.validator.addMethod("ValidateInfantCount",function(s){if(j.searchModeField.val()=="Hotels"){return true}try{var r=j.roomsTemplating.roomsJson;var p=0;var q=0;for(var n=0;n<r.length;n++){p+=parseInt(r[n].AdultCount);var l=r[n].ChildAges;for(var o=0;o<l.length;o++){if(parseInt(l[o].age)<2){q++}}}return q<=p}catch(m){return false}},"<ul><li>The number of infants cannot exceed the number of adult passengers on flights that are bookable online.</li>Should your travel requirement include more infant passengers than adults please contact us on 0800 210 0428 and we will be able to assist you</li></ul>");$.validator.addMethod("ValidateCabinClass",function(u){if(j.searchModeField.val()=="Hotels"){return true}var s=0;var t=j.roomsTemplating.roomsJson;for(var m=0;m<t.length;m++){s+=parseInt(t[m].AdultCount);var l=t[m].ChildAges;for(var n=0;n<l.length;n++){if(parseInt(l[n].age)>1){s++}}}var o="<ul><li>The maximum number of passengers that you can book online for ";var p=" passengers.</li><li>Children under the age of 2 are classed as infants and a seat is not automatically requested for them.</li><li>Children under the age of 2 do not count to the maximum number of ";var q=" passengers that are bookable online.</li><li>Should you require more than ";var r=" class flight or require a seat for an infant, please contact us on  0800 210 0428 and we will be able to assist you.</li></ul>";switch(u){case"Any":if(s>j.FlightSearchOptions.MaxPassengers.Economy){j.FlightSearchOptions.CabinClassSelect.attr("title",o+" flights is "+j.FlightSearchOptions.MaxPassengers.Economy+p+"flight"+q+j.FlightSearchOptions.MaxPassengers.Economy+" passengers for a flight or require a seat for an infant, please contact us on  0800 210 0428 and we will be able to assist you.</li></ul>");return false}return true;case"Economy":if(s>j.FlightSearchOptions.MaxPassengers.Economy){j.FlightSearchOptions.CabinClassSelect.attr("title",o+" an economy class flight is "+j.FlightSearchOptions.MaxPassengers.Economy+p+j.FlightSearchOptions.MaxPassengers.Economy+q+j.FlightSearchOptions.MaxPassengers.Economy+" passengers for an economy"+r);return false}return true;case"Premium":if(s>j.FlightSearchOptions.MaxPassengers.Premium){j.FlightSearchOptions.CabinClassSelect.attr("title",o+" an enhanced economy class flight is "+j.FlightSearchOptions.MaxPassengers.Premium+p+j.FlightSearchOptions.MaxPassengers.Premium+q+j.FlightSearchOptions.MaxPassengers.Premium+" passengers for an enhanced economy"+r);return false}return true;case"Business":if(s>j.FlightSearchOptions.MaxPassengers.Business){j.FlightSearchOptions.CabinClassSelect.attr("title",o+" a business class flight is "+j.FlightSearchOptions.MaxPassengers.Business+p+j.FlightSearchOptions.MaxPassengers.Business+q+j.FlightSearchOptions.MaxPassengers.Business+" passengers for a business"+r);return false}return true;case"First":if(s>j.FlightSearchOptions.MaxPassengers.First){j.FlightSearchOptions.CabinClassSelect.attr("title",o+" a first class flight is "+j.FlightSearchOptions.MaxPassengers.First+p+j.FlightSearchOptions.MaxPassengers.First+q+j.FlightSearchOptions.MaxPassengers.First+" passengers for a first"+r);return false}return true}return false});var f=$("#ErrorMessages",e);var a=$('<form id="SearchForm" action="" />').submit($.watermark.hideAll);var k=$("#jFlightProcessing");e.wrap(a);$("#SearchForm").validate({errorContainer:f,errorClass:"validator_error",onfocusout:false,onkeyup:false,onclick:false,errorLabelContainer:$("ul",f),wrapper:"li",focusInvalid:false,rules:j.validatorRules,submitHandler:function(m){if(j.noDates.attr("checked")){_userProxy.DetermineSearchLocation(j.place.placeId.val(),(j.place.hotelId.val().length==0?null:j.place.hotelId.val()),function(q){location=q},function(q){location="/HotelSearchResults.aspx?q="+j.place.placeName.val()});return}$("#jRoomCount").val(j.roomsTemplating.roomsJson.length);switch(j.searchModeField.val()){case"Holidays":var n=0;var l=new Array();$.each(j.roomsTemplating.roomsJson,function(q,s){n+=parseInt(s.AdultCount);for(var r=0;r<s.ChildAges.length;r++){l.push(s.ChildAges[r].age)}});k.show();var o=j.FlightSearchOptions.PreferredAirlineSelect.val();var p=o.length>0?$("option:selected",j.FlightSearchOptions.PreferredAirlineSelect).text():"";_searchProxy.FlightAvailable($("#ddlDepartureAirport",e).val(),j.place.placeId.val(),j.dates.checkIn.val(),j.dates.checkOut.val(),j.FlightSearchOptions.CabinClassSelect.val(),j.FlightSearchOptions.NonStopFlights.is(":checked"),n,l,o,p,function(q){if(q){$("#jTempSessionId").val(q);e.unwrap();$("#btnHolidaySearch",e).trigger("click")}else{i()}},function(q){i()});break;default:e.unwrap();$("#btnHotelSearch",e).trigger("click");break}}});var g=$("#jNoFlightDialog");g.dialog({autoOpen:false,bgiframe:true,modal:true});var i=function(){k.hide();g.dialog("open");$("#jNoflightContinue").click(function(){j.searchModeField.val("Hotels");g.dialog("close");$("#SearchForm").trigger("submit")})};j.dates.checkIn.rules("add","ValidateDepartureDate");j.FlightSearchOptions.CabinClassSelect.rules("add","ValidateCabinClass");j.searchModeField.rules("add","ValidateInfantCount");if(j.place&&j.place.placeName&&j.place.placeId&&j.place.handler&&j.place.type){$(j.place.placeName).keydown(function(){if(j.place.hotelId.val().length>0){j.place.hotelId.val("")}});j.place.placeName.attr("title","Please enter a valid destination");$(j.place.placeName).autocomplete({source:function(o,p){var l=this.menu.element;var m=$(this.element).data("recent");var n=new Array();if(m&&m.length>0){n=$.map(m,function(q){return{label:q.Text,value:q.Text,id:q.Id,recent:true}})}if(o.term.length>1){$.ajax({url:j.place.handler,dataType:"text json",mode:"abort",data:{autoCompleteType:j.place.type,text:o.term},success:function(q){if(q){var r=$.map(q,function(s){return{label:s.name+(s.resort?" ("+s.resort+")":""),value:s.name,id:s.id,hotelId:s.hotelId}});r=$.merge(n,r);p(r);$("li",l).each(function(s,u){var t=$(this).data("item.autocomplete");if(t){$("a",this).addClass((t.hotelId)?"menu-hotel":(t.recent)?"menu-search":"menu-place");if(t.recent){$(this).append("<img class='jDeleteSearch' rel='"+t.id+"' src='/images/icons/search-delete.png' alt='delete'/>")}}});$("li:has(a.menu-search):first",l).before("<li><h3>Your Previous Searches</h3></li>");$("li:has(a.menu-search):last",l).after("<li class='break'>&nbsp;</li>")}}})}else{p(n);$("li",l).each(function(q,s){var r=$(this).data("item.autocomplete");if(r){$("a",this).addClass("menu-search");if(r.recent){$(this).append("<img class='jDeleteSearch' rel='"+r.id+"' src='/images/icons/search-delete.png' alt='delete'/>")}}});$("li:has(a.menu-search):first",l).before("<li><h3>Your Previous Searches</h3></li>")}},minLength:0,select:function(l,m){if(m.item.recent){_userProxy.RetrieveRecentSearch(m.item.id,function(n){n=$.parseJSON(n);if(n.SelectedHotel){j.place.placeName.val(n.SelectedHotel.HotelName);j.place.hotelId.val(n.SelectedHotel.AccommodationId)}else{j.place.placeName.val(n.PlaceName)}j.place.placeId.val(n.PlaceId);j.dates.checkIn.val($.datepicker.formatDate(j.dates.dateFormat,CreateISODate(n.CheckIn))).trigger("blur");j.dates.checkOut.val($.datepicker.formatDate(j.dates.dateFormat,CreateISODate(n.CheckOut))).trigger("blur");j.roomsTemplating.roomsJson=n.roomsJson;$.SearchControl.BindRooms(j.roomsTemplating)},function(){})}else{j.place.placeId.val(m.item.id);if(m.item.hotelId){j.place.hotelId.val(m.item.hotelId)}else{j.place.hotelId.val("")}l.cancelBubble=true;setTimeout(function(){j.place.placeName.focus()},10)}}});$(j.place.placeName).watermark();$(j.place.placeName).focus(function(){var m=$(this);var l=m.data("recent");if(!l){_userProxy.RetrieveRecentSearches(function(n){l=$.parseJSON(n);m.data("recent",l);if(m.val().length==0){m.autocomplete("search")}},function(n){})}if(m.val().length==0){m.autocomplete("search")}});$(".jDeleteSearch").live("click",function(){var o=$(j.place.placeName);var n=o.data("recent");if(n){var m=$(this).attr("rel");var l;$.each(n,function(q,p){if(p.Id==m){l=q;return true}});if(!isNaN(l)){n.splice(l,1)}o.autocomplete("search")}return false});if(j.dates.checkIn.val()){j.dates.checkIn.trigger("blur")}if(j.dates.checkOut.val()){j.dates.checkOut.trigger("blur")}}var d=function(o){var n=$(".jSearchTabLink",e);var p=n.parent("li");p.removeClass("selected");n.filter(".j"+o+"Tab").parent("li").addClass("selected");var m=n.filter(".jHotelsTab");var l=n.filter(".jHolidaysTab");switch(o){case"Hotels":$(".jHotelOnlySearch",e).show();$(".jHolidaySearch",e).hide();m.text("SEARCH HOTELS");l.text("HOLIDAYS");break;case"Holidays":$(".jHotelOnlySearch",e).hide();$(".jHolidaySearch",e).show();m.text("HOTELS");l.text("SEARCH HOLIDAYS");break;default:}};$(".jSearchTabLink",e).click(function(){var l=$(this).attr("rel");j.searchModeField.val(l);d(l)});if(j.searchModeField.val()){d(j.searchModeField.val())}h=false;return this};
