﻿
function oDatePickerCalendar(){this.availDays=new Array();this.availUrlBase='/dateavailabilitycache/json/';this.availUrl;this.nextAvailUrlBase='/nextdateavailablecache/json/'
this.availDayClass='date-available';}
oDatePickerCalendar.prototype.SetAvailabilityUrl=function(dCurDate,sector,bFindNext){var sUrl;if(bFindNext==true){sUrl=_gDatePickerCalendar.nextAvailUrlBase;}
else{sUrl=_gDatePickerCalendar.availUrlBase;}
sUrl=sUrl+SearchExchangeContainer.SelectedGroup.toLowerCase();if(bFindNext==false){sUrl=sUrl+"/"+(dCurDate.getMonth()+1)+"/"+dCurDate.getFullYear();}
if(bFindNext==false){if(dCurDate.getMonth()==11){sUrl=sUrl+"/1/"+(dCurDate.getFullYear()+1);}else{sUrl=sUrl+"/"+(dCurDate.getMonth()+2)+"/"+dCurDate.getFullYear();}}
if(SearchExchangeContainer.Hierarchy){var hierarchy=SearchExchangeContainer.Hierarchy;var origin;if(hierarchy.origin==null)
origin='';else
origin=hierarchy.origin.toLowerCase();if(hierarchy.destination==null)
destination='';else
destination=hierarchy.destination.toLowerCase();if(SearchExchangeContainer.SelectedGroup.toLowerCase()=="flight"&&destination.length==4&&destination.substring(0,1)=="C")
destination=destination.substring(1,destination.length);if(hierarchy.region!=null)
var region=hierarchy.region.toLowerCase();if(SearchExchangeContainer.SelectedGroup.toLowerCase()=="accom"&&destination!=''&&region=='')
region=$("#Accom_region_dropdown").val();if(hierarchy.resort!=null)
var resort=hierarchy.resort.toLowerCase();if(origin=='')origin="any";if(destination=='')destination="any";if(sector=="2")
sUrl=sUrl+"/"+destination+"/"+origin;else
sUrl=sUrl+"/"+origin+"/"+destination;if(region!="Any"&&region!='')sUrl=sUrl+"/"+region;if(resort!="Any"&&resort!='')sUrl=sUrl+"/"+resort;}
_gDatePickerCalendar.availUrl=sUrl;}
oDatePickerCalendar.prototype.GetAvailability=function(dCurDate,year,month,sector){_gDatePickerCalendar.availDays=new Array();if(typeof(dCurDate)!="object"){dCurDate=new Date();}else{if(!dCurDate.getDate()){dCurDate=new Date();}}
if(year!=null&&month!=null){dCurDate.setMonth(month-1,1);dCurDate.setFullYear(year);}
_gDatePickerCalendar.SetAvailabilityUrl(dCurDate,sector,false);$.ajax({url:_gDatePickerCalendar.availUrl,dataType:"json",async:false,success:function(data){$.each(data,function(i,item){if(item.date!=""){var date=new Date(item.date.substring(6,10),item.date.substring(3,5)-1,item.date.substring(0,2));_gDatePickerCalendar.availDays[i]=date;}});}});}
oDatePickerCalendar.prototype.FindNextAvailability=function(dCurDate,sector){_gDatePickerCalendar.availDays=new Array();if(typeof(dCurDate)!="object"){dCurDate=new Date();}else{if(!dCurDate.getDate()){dCurDate=new Date();}}
_gDatePickerCalendar.SetAvailabilityUrl(dCurDate,sector,true);var date=null;$.ajax({url:_gDatePickerCalendar.availUrl,dataType:"json",async:false,success:function(data){if(data!=""){date=new Date(data.substring(6,10),data.substring(3,5)-1,data.substring(0,2));}}});return date;}
_gDatePickerCalendar=new oDatePickerCalendar();function cbCheckDayAvailable(date){for(i=0;i<_gDatePickerCalendar.availDays.length;i++){if(_gDatePickerCalendar.availDays[i]!=""){if(date.getMonth()==_gDatePickerCalendar.availDays[i].getMonth()&&date.getDate()==_gDatePickerCalendar.availDays[i].getDate()){return[true,_gDatePickerCalendar.availDayClass];}}}
return[false,''];}
function getMinDate(model,sector){var dDate=new Date();return _gDatePickerCalendar.FindNextAvailability(dDate,null,null,sector);}
function displayAvailabilityMessage(minDate,currentSelectedDate){var currentMonth=currentSelectedDate.getMonth();var minDateMonth=minDate.getMonth();var displayMessage=false;if(currentMonth!=10&&currentMonth!=11){if(currentMonth+1<minDateMonth)
displayMessage=true;}
else{if(currentMonth==10&&(minDate!=10||minDate!=11))
displayMessage=true;if(currentMonth==11&&(minDate!=11||minDate!=0))
displayMessage=true;}
if(displayMessage==true){alert('The next available date for your search criteria is : '+minDate.toString('dddd, MMMM dd, yyyy'));}
return displayMessage;}
function cbBeforeShow(dDate,model,sector,futureAvailabilityMonths){var availabilityDiv='#div-noavailabilty-'+model+'_DatePickerCalendar_'+sector;$('#ui-datepicker-div').hide();var prod=SearchExchangeContainer.SelectedGroup.toLowerCase();var hasOrigin=true;var hasDest=true;var hasRegion=true;if(SearchExchangeContainer.Hierarchy.origin==null||SearchExchangeContainer.Hierarchy.origin=='')
hasOrigin=false;if(SearchExchangeContainer.Hierarchy.destination==null||SearchExchangeContainer.Hierarchy.destination=='')
hasDest=false;if(SearchExchangeContainer.Hierarchy.region==null||SearchExchangeContainer.Hierarchy.region=='')
hasRegion=false;if((prod=='flight'&&(!hasOrigin||!hasDest))||(prod=='package'&&!hasDest)||(prod=='villapackage'&&!hasDest)||(prod=='accom'&&!hasDest)){;$(availabilityDiv).html('Sorry there are no available dates for your selection. Please ensure you have selected your departure airport and destination and try to search again');$(availabilityDiv).show();}
else
{_gDatePickerCalendar.GetAvailability(dDate,null,null,sector);setTimeout('$("#ui-datepicker-div")',800);$('#ui-datepicker-div').show();}}
function cbChangeMonthYear(year,month,model,sector,futureAvailabilityMonths){var availabilityDiv='#div-noavailabilty-'+model+'_DatePickerCalendar_'+sector;$(availabilityDiv).hide();_gDatePickerCalendar.GetAvailability("",year,month,sector);$('#ui-datepicker-div').show();}
function cbOnSelect(sDate,sPanelName,iSector){var dDate=$.datepicker.parseDate('dd/mm/yy',sDate);SearchExchangeContainer.TravelDates[iSector-1]=new TravelDate(iSector,dDate);if(iSector==1)setDateValues(sPanelName,dDate,null);if(iSector==2)setDateValues(sPanelName,null,dDate);if(iSector==1&&$('#'+sPanelName+'_DatePickerCalendar_2')){var dDateBack=new Date(sDate.substring(6,10),sDate.substring(3,5)-1,parseInt(sDate.substring(0,2),10)+7);SearchExchangeContainer.TravelDates[iSector]=new TravelDate(iSector,dDateBack);setDateValues(sPanelName,null,dDateBack);}}
function setDateValues(sPanelName,dDateOut,dDateBack){var sPan1='#'+sPanelName+'_DatePickerCalendar_1';var sPan2='#'+sPanelName+'_DatePickerCalendar_2';var dNightsDD='#'+sPanelName+'_Nights';var dNights;if($(sPan1)&&dDateOut!=""&&dDateOut!=null){$(sPan1).val($.datepicker.formatDate('dd/mm/yy',dDateOut));dNights=Monarch.Common.dateDiff("d",dDateOut,$.datepicker.parseDate('dd/mm/yy',$(sPan2).val()));$(sPan1+'_Full').html($.datepicker.formatDate('D dd M yy',dDateOut));}
if($(sPan2)&&dDateBack!=""&&dDateBack!=null){$(sPan2).val($.datepicker.formatDate('dd/mm/yy',dDateBack));dNights=Monarch.Common.dateDiff("d",$.datepicker.parseDate('dd/mm/yy',$(sPan1).val()),dDateBack);$(sPan2+'_Full').html($.datepicker.formatDate('D dd M yy',dDateBack)+" ("+dNights+" nights)");$(dNightsDD+'_Full').html($.datepicker.formatDate('D dd M yy',dDateBack));SearchExchangeContainer.Nights=dNights;}
if($(dNightsDD)&&dNights!=null)
{$(dNightsDD).val(dNights);}}
function cbOnClose(sPanelName,model,sector)
{var sPan1='#'+sPanelName+'_DatePickerCalendar_1';var sPan2='#'+sPanelName+'_DatePickerCalendar_2';var dNightsDD='#'+sPanelName+'_Nights';var dDateOut=$.datepicker.parseDate('dd/mm/yy',$(sPan1).val());var dDateBack=$.datepicker.parseDate('dd/mm/yy',$(sPan2).val());var dNights=Monarch.Common.dateDiff("d",dDateOut,$.datepicker.parseDate('dd/mm/yy',$(sPan2).val()));var availabilityDiv='#div-noavailabilty-'+model+'_DatePickerCalendar_'+sector;$(availabilityDiv).hide();if($(sPan1)&&dDateOut!=""&&dDateOut!=null){$(sPan1+'_Full').html($.datepicker.formatDate('D dd M yy',dDateOut));}
if($(sPan2)&&dDateBack!=""&&dDateBack!=null&&dNights!=null){$(sPan2+'_Full').html($.datepicker.formatDate('D dd M yy',dDateBack)+" ("+dNights+" nights)");}
else if($(sPan2)&&dDateBack!=""&&dDateBack!=null&&dNights==null){$(sPan2+'_Full').html($.datepicker.formatDate('D dd M yy',dDateBack)+" (undefined nights)");}}
function cbCheckGreaterThanDateOut(sPanelName)
{var sPan1='#'+sPanelName+'_DatePickerCalendar_1';var sPan2='#'+sPanelName+'_DatePickerCalendar_2';var dDateOut=$.datepicker.parseDate('dd/mm/yy',$(sPan1).val());var iDaysPastToday=Monarch.Common.dateDiff("d",new Date(),dDateOut);$(sPan2).datepicker({minDate:iDaysPastToday});}
function checkForEmptyAvailabilityForMonth(searchDate,year,month,model,sector,futureAvailabilityMonths){var availabilityDiv='#div-noavailabilty-'+model+'_DatePickerCalendar_'+sector;$(availabilityDiv).hide();if(typeof(searchDate)!="object"){searchDate=new Date();}else{if(!searchDate.getDate()){searchDate=new Date();}}
if(year!=null&&month!=null){searchDate.setMonth(month-1);searchDate.setFullYear(year);}
if(_gDatePickerCalendar.availDays.length==0){var nextAvailabledate=_gDatePickerCalendar.FindNextAvailability(searchDate,sector);if(nextAvailabledate!=null){$(availabilityDiv).html('Sorry there are no available dates for your selection until '+nextAvailabledate.toLocaleDateString()+'. <a onclick="setCalendarDate(\''+escape(nextAvailabledate.toDateString())+'\', \''+model+'\', \''+sector+'\');" style="cursor:pointer;" class="ui-datepicker-trigger">Go to next available date.</a>');}
else{if(SearchExchangeContainer.Hierarchy.resort==null){$(availabilityDiv).html('Sorry there are no more available dates for your selection. Please search Again');}else{if(model=="Package"){$(availabilityDiv).html('Sorry there are no available dates for your selection. Please try a different departure airport or resort or <a onclick="setCalendarDateRegionLevel(\''+escape(searchDate.toDateString())+'\',\''+model+'\', \''+SearchExchangeContainer.Hierarchy.region+'\'\, \''+sector+'\');" style="cursor:pointer;" class="ui-datepicker-trigger">click here to search for holidays in the same region.</a>');}else{$(availabilityDiv).html('Sorry there are no more available dates for your selection. Please search Again');}}}}
else{$(availabilityDiv).hide();}}
Date.prototype.addMonths=function(n){this.setMonth(this.getMonth()+n);return this;}
function setCalendarDate(date,model,sector){var availabilityDiv='#div-noavailabilty-'+model+'_DatePickerCalendar_'+sector;$(availabilityDiv).hide();var nextAvailableDate=new Date(unescape(date));var calendar='#'+model+'_DatePickerCalendar_'+sector;$(calendar).datepicker('setDate',nextAvailableDate);}
function setCalendarDateRegionLevel(date,panelName,code,sector){var availabilityDiv='#div-noavailabilty-'+panelName+'_DatePickerCalendar_'+sector;var calendar='#'+panelName+'_DatePickerCalendar_'+sector;$(calendar).datepicker('hide');$(availabilityDiv).hide();$('#ui-datepicker-div').hide();$("#"+panelName+"_resort_dropdown").removeOption(/./);$("#"+panelName+"_resort_dropdown").addOption("","Any");SearchExchangeContainer.Hierarchy.resort="";updateAutoComplete(panelName,$("#"+panelName+"_region_dropdown option[value='"+code+"']").text(),code,"G")
$(calendar).datepicker('show');}
