//BaseURL='http://test.hotelsolutions.uk.com/'
BaseURL='http://www.lthonline.co.uk/'

function DrawPlugin(sContainer, sHotels, sFormLayout, sDomain) {

	var oContainer=document.getElementById(sContainer);
	var sForm='';
	var sMonthOptions='';
	
	//if the domain is undefined (i.e. not passed in) then get the window location
	if (sDomain==undefined) {
	
		//get the window location
		var sURL=window.location;
		
		//first remove the //
		if (sURL.indexOf('//')>-1) {
			sURL=sURL.substring(sURL.indexOf('//')+2);
		}
				
		//then remove everything after the first slash
		if (sURL.indexOf('/')>-1) {
			sURL=sURL.substring(0,sURL.indexOf('/'));
		}
		
		sDomain=sURL;	
	}
	
	//build the controls - start with hotel dropdown
	var sHotelDropdown='';
	sHotelDropdown+='<select id="ddlHotel" name="ddlHotel">';
	var aHotels=sHotels.split('#');
	var sSelected;
	for (var i=0;i<=aHotels.length-1;i++) {
		
		if (aHotels[i].indexOf('*')==0) {
			sSelected=' selected="selected" ';
			aHotels[i]=aHotels[i].substr(1);
		} else {
			sSelected='';
		}
		
		sHotelDropdown+='<option'+sSelected+' value="'+aHotels[i].split(',')[1]+'">'+aHotels[i].split(',')[0]+'</option>';
	}	
	sHotelDropdown+='</select>';	
	
	
	//check in day
	var sCheckInDay='';
	var dNow=new Date();
	sCheckInDay+='<select id="ddlCheckInDay" name="ddlCheckInDay" onchange="CheckValidMonthDay(\'In\');CalculateCheckOutDate();">';	
	for (var i=1;i<=31;i++) {
		sCheckInDay+='<option value="'+i+'"';
		
		//check todays date
		if (dNow.getDate()==i) {
			sCheckInDay+=' selected="selected"';
		}
		sCheckInDay+='>'+i+'</option>';
	}	
	sCheckInDay+='</select>';	
	
	//check in month
	var sCheckInMonth='';
	sCheckInMonth+='<select id="ddlCheckInMonth" name="ddlCheckInMonth" onchange="CheckValidMonthDay(\'In\');CalculateCheckOutDate();">';
	var dDate=new Date(dNow.getFullYear(), dNow.getMonth(), 1);
	var iYear=dDate.getFullYear();
	for (var i=0;i<=11;i++) {
		sMonthOptions+='<option value="'+dDate.getMonth()+'#'+dDate.getFullYear()+'">'+GetDisplayMonth(dDate)+'</option>';
		
		//add a month
		var iNewMonth=dDate.getMonth()+1%12;
		if (iNewMonth==12) {
			iYear++;
		}
		
		dDate.setMonth(iNewMonth);
		dDate.setYear(iYear);			
	}
	sCheckInMonth+=sMonthOptions;
	sCheckInMonth+='</select>';
	
	
	//check out day
	var sCheckOutDay='';
	var dCheckOut=new Date();
	dCheckOut.setDate(dNow.getDate());
	sCheckOutDay+='<select id="ddlCheckOutDay" name="ddlCheckOutDay" onchange="CheckValidMonthDay(\'Out\');CalculateNewDuration();">';	
	for (var i=1;i<=31;i++) {
		sCheckOutDay+='<option value="'+i+'"';
		
		//check todays date
		if (dCheckOut.getDate()==i) {
			sCheckOutDay+=' selected="selected"';
		}
		sCheckOutDay+='>'+i+'</option>';
	}	
	sCheckOutDay+='</select>';
	
	//check out month
	var sCheckOutMonth='';
	sCheckOutMonth+='<select id="ddlCheckOutMonth" name="ddlCheckOutMonth" onchange="CheckValidMonthDay(\'Out\');CalculateNewDuration();">';
	if (dCheckOut.getMonth()>dNow.getMonth()) {	
		sMonthOptions=sMonthOptions.substring(sMonthOptions.indexOf('</option>')+9);
	}	
	sCheckOutMonth+=sMonthOptions;
	sCheckOutMonth+='</select>';
	
	
	//nights
	var sNights='';
	sNights+='<select id="ddlNights" name="ddlNights" onchange="CalculateCheckOutDate();">';
	sNights+='<option value="1">1</option><option value="2" selected="selected">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option><option value="10">10</option><option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18">18</option><option value="19">19</option><option value="20">20</option><option value="21">21</option>';
	sNights+='</select>';
	
	//persons
	var sPersons='';
	sPersons+='<select id="ddlPersons" name="ddlPersons">';
	sPersons+='<option>1</option><option>2</option><option>3</option><option>4</option><option>5</option>';
	sPersons+='</select>';
	
	//submit button
	var sSubmit='<input type="button" onclick="ValidateSubmit();" value=""/>';
	
	
	//always open the form in the same way
	sForm+='<form id="frmBooking" action="'+BaseURL+'redirect.aspx?Search=True&Domain='+sDomain+'" method="post">';
	
	//now branch for the different layouts
	if (sFormLayout=='Default') {
	
		//hotel
		sForm+=sHotelDropdown;
		
		//check in date
		sForm+='<label>Check in date</label>';
		sForm+=sCheckInDay;
		sForm+=sCheckInMonth;
	
		//check out date
		sForm+='<label>Check out date</label>';
		sForm+=sCheckOutDay;
		sForm+=sCheckOutMonth;
	
		//nights persons etc.
		sForm+='<div class="fauxcolumn1">';
		sForm+='<label>Nights</label>';
		sForm+=sNights;
		sForm+='</div>';
	
		sForm+='<div class="fauxcolumn1">';
		sForm+='<label>Persons</label>';
		sForm+=sPersons;
		sForm+='</div>';
	
		//button
		sForm+='<div class="fauxcolumn1">';
		sForm+=sSubmit;
		sForm+='</div>';
		
	}
	
	
	//now branch for the different layouts
	if (sFormLayout=='Default1') {
	
		//hotel
		sForm+=sHotelDropdown;
		
		//check in date
		sForm+='<div class="fauxcolumn">';
		sForm+='<label>Check in date</label>';
		sForm+=sCheckInDay;
		sForm+=sCheckInMonth;
	    sForm+='</div>';
			
		//check out date
		sForm+='<div class="fauxcolumn">';
		sForm+='<label>Check out date</label>';
		sForm+=sCheckOutDay;
		sForm+=sCheckOutMonth;
		sForm+='</div>';
		
		//nights persons etc.
		sForm+='<div class="fauxcolumn1">';
		sForm+='<label>Nights</label>';
		sForm+=sNights;
		sForm+='</div>';
	
		sForm+='<div class="fauxcolumn1">';
		sForm+='<label>Persons</label>';
		sForm+=sPersons;
		sForm+='</div>';
	
		//button
		sForm+='<div class="fauxcolumn1">';
		sForm+=sSubmit;
		sForm+='</div>';
		
	}
	
	//horizontal strip
	if (sFormLayout=='Strip') {
	
		sForm+='<table>';		
		sForm+='<tr class="top">';
		
		sForm+='<td rowspan="2">';
		sForm+='<label>Hotel</label>';
		sForm+=sHotelDropdown;
		sForm+='</td>';
		
		sForm+='<td>';
		sForm+='<label>Arrival Dt</label>';
		sForm+='</td>';
		
		sForm+='<td>';
		sForm+=sCheckInDay;
		sForm+=sCheckInMonth;
		sForm+='</td>';
		
		sForm+='<td>';
		sForm+='<label>Nights</label>';
		sForm+='</td>';
		
		sForm+='<td>';
		sForm+=sNights;
		sForm+='</td>';
		
		sForm+='</tr>';		
		sForm+='<tr class="bottom">';
		
		sForm+='<td>';
		sForm+='<label>Departure Dt</label>';		
		sForm+='</td>';
		
		sForm+='<td>';
		sForm+=sCheckOutDay;
		sForm+=sCheckOutMonth;
		sForm+='</td>';
		
		sForm+='<td>';
		sForm+='<label>Persons</label>';		
		sForm+='</td>';
		
		sForm+='<td>';
		sForm+=sPersons;
		sForm+=sSubmit;
		sForm+='</td>';
		
		sForm+='</tr>';
		sForm+='</table>';
	}
	
	
	//two columns
	if (sFormLayout=='Two Columns') {
	
		sForm+='<table>';
		sForm+='<tr>';
		
		sForm+='<th colspan="2">';
		sForm+='<label>Search London Hotels</label>';
		sForm+='</th>';
		
		sForm+='<th colspan="2" class="alignright">';
		sForm+=sHotelDropdown;
		sForm+='</th>';
		
		sForm+='</tr>';
		sForm+='<tr>';
		
		sForm+='<td>'
		sForm+='<label>Persons</label>';
		sForm+='</td>';
		
		sForm+='<td>';
		sForm+=sPersons;
		sForm+='</td>';
		
		sForm+='<td>';
		sForm+='<label>Arrival Date</label>';
		sForm+='</td>';
		
		sForm+='<td>';
		sForm+=sCheckInDay;
		sForm+=sCheckInMonth;
		sForm+='</td>';
		
		sForm+='</tr>';
		sForm+='<tr>';
		
		sForm+='<td>';
		sForm+='<label>Nights</label>';
		sForm+='</td>';
		
		sForm+='<td>';
		sForm+=sNights;
		sForm+='</td>';
		
		sForm+='<td>';
		sForm+='<label>Departure Date</label>';		
		sForm+='</td>';
		
		sForm+='<td>';
		sForm+=sCheckOutDay;
		sForm+=sCheckOutMonth;
		sForm+='</td>';
		
		sForm+='</tr>';
		sForm+='<tr>';
		
		sForm+='<td colspan="4" class="alignright">';
		sForm+=sSubmit;
		sForm+='</td>';
		
		sForm+='</tr>';
		sForm+='</table>';
	}
	
			
	//vertical strip
	if (sFormLayout=='Vertical Strip') {
		
		sForm+='<div class="header">Search Availability In</div>';
		sForm+=sHotelDropdown;
		
		sForm+='<div class="label">Arrival Date</div>';
		sForm+=sCheckInDay;
		sForm+=sCheckInMonth;
		
		sForm+='<div class="label">Departure Date</div>';
		sForm+=sCheckOutDay;
		sForm+=sCheckOutMonth;
		
		sForm+='<div class="label">Persons</div>';
		sForm+=sPersons;
		
		sForm+='<div class="label">Nights</div>';
		sForm+=sNights;
		
		sForm+='<div class="label">';
		sForm+=sSubmit;
		sForm+='</div>';
	}


	//close the form
	sForm+='</form>';
	
	oContainer.innerHTML=sForm;		
	CalculateCheckOutDate();
}

function GetDisplayMonth(dDate) {
	dDate=new Date(dDate)
	
	var aMonths=new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')
	return aMonths[dDate.getMonth()] + ' ' +dDate.getFullYear();
}

function ValidateSubmit() {

	var oDuration=document.getElementById('ddlNights');
	var oCheckInDay=document.getElementById('ddlCheckInDay');
	var oCheckInMonth=document.getElementById('ddlCheckInMonth');
	var oCheckOutDay=document.getElementById('ddlCheckOutDay');
	var oCheckOutMonth=document.getElementById('ddlCheckOutMonth');
	var dCheckInDate=new Date(oCheckInMonth.value.split('#')[1],oCheckInMonth.value.split('#')[0],oCheckInDay.value);
	var dCheckOutDate=new Date(oCheckOutMonth.value.split('#')[1],oCheckOutMonth.value.split('#')[0],oCheckOutDay.value);
	var iDuration=DateDiff(dCheckInDate,dCheckOutDate)-1;
	var dNow=new Date();
	var dCurrentDate=new Date(dNow.getFullYear(),dNow.getMonth(),dNow.getDate());
	var sWarn='';
	
	//check arrival date is not before today
	if (dCheckInDate<dCurrentDate) {
		sWarn+='The Check in date must be after the Current Date\n';
		oCheckInDay.className='error';
		oCheckInMonth.className='error';
	} else {
		oCheckInDay.className='';
		oCheckInMonth.className='';
	}
	
	//check departure date is after checl out date
	if (dCheckOutDate<=dCheckInDate) {
		sWarn+='The Check in date must be before the Check out date\n';
		oCheckOutDay.className='error';
		oCheckOutMonth.className='error';
	} else {
		oCheckOutDay.className='';
		oCheckOutMonth.className='';
	}
	
	//check duration is not > 21
	if (iDuration>21) {
		sWarn+='The number of nights cannot exceed 21\n';
		oCheckOutDay.className='error';
		oCheckOutMonth.className='error';
	} else {
		oCheckOutDay.className='';
		oCheckOutMonth.className='';
	}
	
	//pop up the warnings if there are any else submit the form
	if (sWarn=='') {
		document.getElementById('frmBooking').submit();
	} else {
		alert(sWarn);
	}

}

function CheckValidMonthDay(sType) {
	
	var oDay=document.getElementById('ddlCheck'+sType+'Day');
	var oMonth=document.getElementById('ddlCheck'+sType+'Month');
	var iDay=oDay.value;
	var iMonth=oMonth.value.split('#')[0];
	var iYear=oMonth.value.split('#')[1];
	var bOk;
	
	if (iMonth==1 && CheckLeapYear(iYear) && iDay > 29) {
		bOk=false;
	} else if (iMonth==1 && CheckLeapYear(iYear)==false && iDay > 28	) {
		bOk=false;
	} else if ((iMonth==3||iMonth==5||iMonth==8||iMonth==10)&&iDay==31) {
		bOk=false;
	} else {
		bOk=true;
	}
		
	//if it's an invalid date then take one off and call the function again
	if (bOk==false) {
		oDay.value=parseInt(oDay.value)-1;
		CheckValidMonthDay(sType);
	}
}

function SetDateDropDown(sType, dDate) {

	var oDay=document.getElementById('ddlCheck'+sType+'Day');
	var oMonthYear=document.getElementById('ddlCheck'+sType+'Month');
	
	oDay.value=dDate.getDate();
	oMonthYear.value=dDate.getMonth()+'#'+dDate.getFullYear();
	
}


function CalculateCheckOutDate() {

	var oDuration=document.getElementById('ddlNights');
	var oCheckInDay=document.getElementById('ddlCheckInDay');
	var oCheckInMonth=document.getElementById('ddlCheckInMonth');
	var oCheckOutDay=document.getElementById('ddlCheckOutDay');
	var oCheckOutMonth=document.getElementById('ddlCheckOutMonth');

	var dCheckInDate=new Date(oCheckInMonth.value.split('#')[1],oCheckInMonth.value.split('#')[0],oCheckInDay.value);
	var dCheckOutDate=dCheckInDate;
	var iDuration=parseInt(oDuration.value);
	dCheckOutDate.setDate(dCheckOutDate.getDate()+iDuration);


	SetDateDropDown('Out',dCheckOutDate);
	
}

function HasMonth(oDropDown, dDate) {

	var sMonthYear=dDate.getMonth()+'#'+dDate.getFullYear();
	var bHasMonth=false;
	for (var i=0;i<oDropDown.options.length;i++) {
		if (oDropDown.options[i].value==sMonthYear) {
			bHasMonth=true;
			continue;
		}
	}
	
	return bHasMonth;
	
}

function CalculateNewDuration() {

	var oDuration=document.getElementById('ddlNights');
	var oCheckInDay=document.getElementById('ddlCheckInDay');
	var oCheckInMonth=document.getElementById('ddlCheckInMonth');
	var oCheckOutDay=document.getElementById('ddlCheckOutDay');
	var oCheckOutMonth=document.getElementById('ddlCheckOutMonth');
	var dCheckInDate=new Date(oCheckInMonth.value.split('#')[1],oCheckInMonth.value.split('#')[0],oCheckInDay.value);
	var dCheckOutDate=new Date(oCheckOutMonth.value.split('#')[1],oCheckOutMonth.value.split('#')[0],oCheckOutDay.value);

	//work out the new duration
	var iDuration=DateDiff(dCheckInDate,dCheckOutDate)-1;
	var sWarning='';
	
	/*
	if (iDuration<1) {
		sWarning='The Check Out date must be after the Check In date';
	} else if (iDuration>21) {
		sWarning='The maximum number of nights that can be booked is 21';
	}
	*/
	
	if (sWarning!='') {
		var iDuration=parseInt(oDuration.value);
		var dCheckOut=new Date(dCheckInDate);
		dCheckOut.setDate(dCheckOut.getDate()+iDuration);
		SetDateDropDown('Out',dCheckOut);
		alert(sWarning);
	} else {
		oDuration.value=iDuration;
	}
	
}

function DateDiff(sStartDate,sEndDate) {
	
	var dStartDate=new Date(sStartDate);
	var dEndDate=new Date(sEndDate);
	var iStartYear;
	var iEndYear;
	var iStartDayOfYear;
	var iEndDayOfYear;
	var iDiff;	
	
	//get the years and day of years, if end date is before start date then swap them round
	if (dStartDate<=dEndDate) {
		iStartYear=dStartDate.getYear();
		iEndYear=dEndDate.getYear();
		iStartDayOfYear=this.DayOfYear(dStartDate);
		iEndDayOfYear=this.DayOfYear(dEndDate);
	} else {
		iStartYear=dEndDate.getYear();
		iEndYear=dStartDate.getYear();
		iStartDayOfYear=this.DayOfYear(dEndDate);
		iEndDayOfYear=this.DayOfYear(dStartDate);
	}	
		
	
	//2 possibilities, same year, different years
	if (iStartYear==iEndYear) {
		
		iDiff=iEndDayOfYear-iStartDayOfYear;
	
	} else {
	
		//one or more years apart starts with same calculation
		iDiff=iEndDayOfYear+(365-iStartDayOfYear);
		
		//if it's a leap year and next year is different then add
		if (this.CheckLeapYear(iStartYear)==1  && iEndYear!=iStartYear) {
			iDiff+=1;
		}
		
		//now loop through all (if any years inbetween)
		for (var iLoop=iStartYear+1;iLoop<iEndYear;iLoop++) {			
	
			//add 365 for a normal year, 366 for a leap year
			if (this.CheckLeapYear(iLoop)==1) {
				iDiff+=366;
			} else {
				iDiff+=365;
			}			
		}		
	}
	
	// add one to the datediff as this is an inclusive function
	iDiff+=1;
	
	// if start date > end date invert the difference
	if(dStartDate>dEndDate) {
		iDiff=iDiff*(-1);
	}
	
	return iDiff;
}
	
function CheckLeapYear(iYear) {
	return (((iYear % 4 == 0) && (iYear % 100 != 0)) || (iYear % 400 == 0)) ? 1 : 0;
}
	
function DayOfYear(dDate) {
		
	//start with current day of month and then add on preivous mointh days
	var iDayOfYear=dDate.getDate();
	var iMonth=dDate.getMonth();
	var iYear=dDate.getYear();
	
	//if it's a leap year and we are past Februrary then add 1
	if((this.CheckLeapYear(iYear)==1)&&(iMonth>=2)) {
		iDayOfYear++;
	}
	
	//now do a huge ugly if statement adding the rest on for the months
	if (iMonth==1) {
		iDayOfYear+=31;
	} else if (iMonth==2) {
		iDayOfYear+=59;
	} else if (iMonth==3) {
		iDayOfYear+=90;
	} else if (iMonth==4) {
		iDayOfYear+=120;
	} else if (iMonth==5) {
		iDayOfYear+=151;
	} else if (iMonth==6) {
		iDayOfYear+=181;
	} else if (iMonth==7) {
		iDayOfYear+=212;
	} else if (iMonth==8) {
		iDayOfYear+=243;
	} else if (iMonth==9) {
		iDayOfYear+=273;
	} else if (iMonth==10) {
		iDayOfYear+=304;
	} else if (iMonth==11) {
		iDayOfYear+=334;
	}
	
	return iDayOfYear;
}





