	Date.prototype.isNorthAmerica = function(){
            return (this.getTimezoneOffset() < 660 && this.getTimezoneOffset() > 180);
            //return false;
	}
	Date.prototype.octopusDisplayFormat = function(){
	  var mm = this.getMonth()+1;
	  if(mm < 10) mm = "0" + mm;
	  var dd = this.getDate();
	  if(dd < 10) dd = "0" + dd;
	  if(this.isNorthAmerica()){
	      return mm + "/" + dd + "/" + this.getFullYear();
	  }
	  else{
	      return dd + "/" + mm + "/" + this.getFullYear();
	  }
	}

	today = new Date();
	dFormat = today.isNorthAmerica()?"mm/dd/yyyy":"dd/mm/yyyy";


	function makeEuroDate(str){
      var vals = str.split("/");
      var nDateString = vals[1] + "/" + vals[0] + "/" + vals[2];
      return new Date(nDateString);
	}
	function formatDateForURL(d){
	    var month = d.getMonth() + 1;
	    if(month < 10) month = "0" + month;
	    var date = d.getDate();
	    if(date < 10) date = "0" + date;
	    return d.getFullYear() + "-" + month + "-" + date;
	}

	function getSelectedValue(id){
	    try{
	        var theSelect = DGE(id);
	        return theSelect.options[theSelect.options.selectedIndex].value;
	    }
	    catch(Error){
	       return null;
	    }
	}
	expDate = /^\d{1,2}\/\d{1,2}\/\d{2,4}$/
	function DGE(x){return document.getElementById(x)}

	function validateDate(dateStr){
	    if(!expDate.test(dateStr)) {return false;}
	    var monthNumStr = today.isNorthAmerica() ? dateStr.split("/")[0]:dateStr.split("/")[1];
	    var dateNumStr = today.isNorthAmerica()?dateStr.split("/")[1]:dateStr.split("/")[0];
	    var yearNum = parseFloat(dateStr.split("/")[2]);
	    var monthNum = parseFloat(monthNumStr);
	    var dateNum = parseFloat(dateNumStr);
	    var maxDate = 31;
	    if(monthNum == 4 || monthNum == 5 || monthNum ==  6 || monthNum == 9 || monthNum == 11){
	      maxDate = 30;
	    }
	    else if (monthNum == 2){
	      if(yearNum %4 ==0) {maxDate = 29;}
	      else{
	         maxDate = 28;
	      }
	    }
	    var bValid= (dateNum <= maxDate && dateNum > 0 && monthNum <= 12 && monthNum > 0);
        return bValid;
	}

	function setCheckout(){
	    var aSpan = DGE("alertSpan");
	    //aSpan.innerHTML = "";
	    var numNights = parseInt(DGE("nights").value);
	    if(!isNaN(numNights)){
	        var checkinDateVal = DGE("checkin").value;
	        if(!expDate.test(checkinDateVal)){
                aSpan.innerHTML = "";
	        }
	        else if(!validateDate(checkinDateVal)){
	           aSpan.innerHTML = "";
	        }
            else{
	            var tDate = today.isNorthAmerica()?new Date(checkinDateVal):makeEuroDate(checkinDateVal);
	            tDate.setDate(tDate.getDate() + numNights);
              DGE("checkout").innerHTML = tDate.octopusDisplayFormat();
            }
	    }
	    else{
	        aSpan.innerHTML = "";
	    }
	}
	function makeURL(){
	    var aSpan = DGE("alertSpan");
	    //aSpan.innerHTML = "";
	    var destinationVal = getSelectedValue("destination");
	    var checkinVal = DGE("checkin").value;
	    var nightsVal = DGE("nights").value;
	    var roomtypeVal = getSelectedValue("roomtype");
	    var roomsVal = getSelectedValue("rooms");
	    var starratingVal = getSelectedValue("starrating");
	    var currencyVal = getSelectedValue("currency");
            var bErrors = false;
            var errorMsg = "";
            var linebreak = "\n";
	    if(destinationVal == 0){
	        errorMsg = "Please select a destination."  + linebreak;
	        errorMsg += linebreak;
	        bErrors = true;
	    }
	    if(!expDate.test(checkinVal) ){
	        errorMsg += "Please enter a checkin date in " + dFormat + " format."  + linebreak;
	        bErrors = true;
	    }
	    if(!validateDate(checkinVal)){
	        errorMsg += "Please check and re-enter the valid date";
	        bErrors = true;
	    }
	    if(isNaN(parseInt(nightsVal)))
	    {
	        errorMsg += "Please enter the number of nights."  + linebreak;
	        bErrors = true;
	    }
	    if(bErrors){
	        //aSpan.innerHTML = errorMsg;
	        alert(errorMsg);
	        return;
	    }
	    var destinationArg = "&destination=" + destinationVal;
        var checkinArg = "";
	        if(!expDate.test(checkinVal)){
                aSpan.innerHTML = "The checkin date you entered must be in " + dFormat + " format";
	        }
	        else if(!validateDate(checkinVal)){
	           aSpan.innerHTML = "Please enter a valid date";
	        }
            else{
	            var tDate = today.isNorthAmerica()?new Date(checkinVal):makeEuroDate(checkinVal);
                checkinArg = "&checkin=" + formatDateForURL(tDate);
            }
	    var nightsArg= nightsVal == ""?"":"&nights=" + nightsVal;
	    var roomtypeArg = "&roomtype=" + roomtypeVal;
	    var roomsArg = "&rooms=" + roomsVal;
	    var starratingArg = starratingVal == 0?"":"&starrating=" + starratingVal;
	    var currencyArg = currencyVal == "0"?"":"&currency=" + currencyVal;
	    //var URLRoot = "http://www.octopustravel.com/HotelLink?country=GB&siteid=fbureau&lang=E";
var URLRoot = "http://www.octopustravel.com/HotelLink?country=GB&siteid=fbureau&lang=E";
	    var URL = URLRoot + destinationArg + checkinArg + nightsArg + roomtypeArg + roomsArg + starratingArg + currencyArg;
      // alert(URL);
      window.open(URL,"_blank");
	   	}
	function init(){
	   var co = DGE("checkout");
	   var ci = DGE("checkin");
	   var ciDate = new Date(today);
	   ciDate.setDate(ciDate.getDate() + 1)
	   ci.value = ciDate.octopusDisplayFormat();
	   ciDate.setDate(ciDate.getDate() + 1);
	   co.innerHTML = ciDate.octopusDisplayFormat();

	}

// Calendar Functions *****************************************************
var target;
var pop_top;
var pop_left;
var cal_Day;
var oPopup = window.createPopup();

function Calendar_Click(e) {
	cal_Day = makeEuroDate(e.title);
	if (cal_Day.length > 6) {
		target.value = cal_Day;
	}
	oPopup.hide();
}

function Calendar_D(obj) {
	var now = obj.value.split("-");
	target = obj;
	//pop_top = document.body.clientTop + GetObjectTop(obj) - document.body.scrollTop;
	//pop_left = document.body.clientLeft + GetObjectLeft(obj) -  document.body.scrollLeft;

	if (now.length == 3) {
		Show_cal(now[0],now[1],now[2]);					
	} else {
		now = new Date();
		Show_cal(now.getFullYear(), now.getMonth()+1, now.getDate());
	}
}

function Calendar_M(obj) {
	var now = obj.value.split("-");
	target = obj;
	pop_top = document.body.clientTop + GetObjectTop(obj) - document.body.scrollTop;
	pop_left = document.body.clientLeft + GetObjectLeft(obj) -  document.body.scrollLeft;

	if (now.length == 2) {
		Show_cal_M(now[0],now[1]);					
	} else {
		now = new Date();
		Show_cal_M(now.getFullYear(), now.getMonth()+1);
	}
}

function doOver(el) {
	cal_Day = el.title;

	if (cal_Day.length > 7) {
		el.style.borderColor = "#FF0000";
	}
}

function doOut(el) {
	cal_Day = el.title;

	if (cal_Day.length > 7) {
		el.style.borderColor = "#FFFFFF";
	}
}

function day2(d) {	// Change to 2 digit number
	var str = new String();
	
	if (parseInt(d) < 10) {
		str = "0" + parseInt(d);
	} else {
		str = "" + parseInt(d);
	}
	return str;
}

function Show_cal(sYear, sMonth, sDay) {
	var Months_day = new Array(0,31,28,31,30,31,30,31,31,30,31,30,31)
	var Month_Val = new Array("01","02","03","04","05","06","07","08","09","10","11","12");
	var intThisYear = new Number(), intThisMonth = new Number(), intThisDay = new Number();

	datToday = new Date();													// Set the current date
	
	intThisYear = parseInt(sYear,10);
	intThisMonth = parseInt(sMonth,10);
	intThisDay = parseInt(sDay,10);
	
	if (intThisYear == 0) intThisYear = datToday.getFullYear();				// If there is no value
	if (intThisMonth == 0) intThisMonth = parseInt(datToday.getMonth(),10)+1;	// Value for month is the negative 1 lesser than the real value.
	if (intThisDay == 0) intThisDay = datToday.getDate();
	
	switch(intThisMonth) {
		case 1:
				intPrevYear = intThisYear -1;
				intPrevMonth = 12;
				intNextYear = intThisYear;
				intNextMonth = 2;
				break;
		case 12:
				intPrevYear = intThisYear;
				intPrevMonth = 11;
				intNextYear = intThisYear + 1;
				intNextMonth = 1;
				break;
		default:
				intPrevYear = intThisYear;
				intPrevMonth = parseInt(intThisMonth,10) - 1;
				intNextYear = intThisYear;
				intNextMonth = parseInt(intThisMonth,10) + 1;
				break;
	}
	intPPyear = intThisYear-1
	intNNyear = intThisYear+1

	NowThisYear = datToday.getFullYear();									// current year
	NowThisMonth = datToday.getMonth()+1;									// current month
	NowThisDay = datToday.getDate();											// current day
	
	datFirstDay = new Date(intThisYear, intThisMonth-1, 1);			// Create the date object of the 1st of the month(Month presented from 0 to 11( Jan to Dec))
	intFirstWeekday = datFirstDay.getDay();									// Check the day of the 1st date of current month (0:Sun, 1:Mon)
	//intSecondWeekday = intFirstWeekday;
	intThirdWeekday = intFirstWeekday;
	
	datThisDay = new Date(intThisYear, intThisMonth, intThisDay);	// Create the day of the value got
	//intThisWeekday = datThisDay.getDay();										// 
	
	intPrintDay = 1;																// the 1st day of the 1st date
	secondPrintDay = 1;
	thirdPrintDay = 1;

	Stop_Flag = 0
	
	if ((intThisYear % 4)==0) {												// once for every 4 years (divided by 4 without the rest)
		if ((intThisYear % 100) == 0) {
			if ((intThisYear % 400) == 0) {
				Months_day[2] = 29;
			}
		} else {
			Months_day[2] = 29;
		}
	}
	intLastDay = Months_day[intThisMonth];						// Check for the last date

	Cal_HTML = "<html><body>";
	Cal_HTML += "<form name='calendar'>";
	Cal_HTML += "<table id=Cal_Table border=0 bgcolor='#f4f4f4' cellpadding=1 cellspacing=1 width=100% onmouseover='parent.doOver(window.event.srcElement)' onmouseout='parent.doOut(window.event.srcElement)' style='font-size : 12;font-family:±¼¸²;'>";
	Cal_HTML += "<tr height='35' align=center bgcolor='#f4f4f4'>";
	Cal_HTML += "<td colspan=7 align=center>";
	Cal_HTML += "	<select name='selYear' STYLE='font-size:11;' OnChange='parent.fnChangeYearD(calendar.selYear.value, calendar.selMonth.value, "+intThisDay+")';>";
	for (var optYear=(intThisYear-2); optYear<(intThisYear+2); optYear++) {
		Cal_HTML += "		<option value='"+optYear+"' ";
		if (optYear == intThisYear) Cal_HTML += " selected>\n";
		else Cal_HTML += ">\n";
		Cal_HTML += optYear+"</option>\n";
	}
	Cal_HTML += "	</select>";
	Cal_HTML += "&nbsp;&nbsp;&nbsp;<a style='cursor:hand;' OnClick='parent.Show_cal("+intPrevYear+","+intPrevMonth+","+intThisDay+");'>¢¸</a> ";
	Cal_HTML += "<select name='selMonth' STYLE='font-size:11;' OnChange='parent.fnChangeYearD(calendar.selYear.value, calendar.selMonth.value, "+intThisDay+")';>";
	for (var i=1; i<13; i++) {	
		Cal_HTML += "		<option value='"+Month_Val[i-1]+"' ";
		if (intThisMonth == parseInt(Month_Val[i-1],10)) Cal_HTML += " selected>\n";
		else Cal_HTML += ">\n";
		Cal_HTML += Month_Val[i-1]+"</option>\n";
	}
	Cal_HTML += "	</select>&nbsp;";
	Cal_HTML += "<a style='cursor:hand;' OnClick='parent.Show_cal("+intNextYear+","+intNextMonth+","+intThisDay+");'>¢º</a>";
	Cal_HTML += "</td></tr>";
	Cal_HTML += "<tr align=center bgcolor='#87B3D6' style='color:#2065DA;' height='25'>";
	Cal_HTML += "	<td style='padding-top:3px;' width='24'><font color=black>Sun</font></td>";
	Cal_HTML += "	<td style='padding-top:3px;' width='24'><font color=black>Mon</font></td>";
	Cal_HTML += "	<td style='padding-top:3px;' width='24'><font color=black>Tue</font></td>";
	Cal_HTML += "	<td style='padding-top:3px;' width='24'><font color=black>Wed</font></td>";
	Cal_HTML += "	<td style='padding-top:3px;' width='24'><font color=black>Thr</font></td>";
	Cal_HTML += "	<td style='padding-top:3px;' width='24'><font color=black>Fri</font></td>";
	Cal_HTML += "	<td style='padding-top:3px;' width='24'><font color=black>Sat</font></td>";
	Cal_HTML += "</tr>";
		
	for (intLoopWeek=1; intLoopWeek < 7; intLoopWeek++) {	// Start a loop in a week unit, max 6 weeks
		Cal_HTML += "<tr height='24' align=right bgcolor='white'>"
		for (intLoopDay=1; intLoopDay <= 7; intLoopDay++) {	// Start a loop in days from Sunday
			if (intThirdWeekday > 0) {											// 
				Cal_HTML += "<td>";
				intThirdWeekday--;
			} else {
				if (thirdPrintDay > intLastDay) {								
					Cal_HTML += "<td>";
				} else {																
					Cal_HTML += "<td onClick=parent.Calendar_Click(this); title="+intThisYear+"-"+day2(intThisMonth).toString()+"-"+day2(thirdPrintDay).toString()+" style=\"cursor:Hand;border:1px solid white;";
					if (intThisYear == NowThisYear && intThisMonth==NowThisMonth && thirdPrintDay==intThisDay) {
						Cal_HTML += "background-color:#C6F2ED;";
					}
					
					switch(intLoopDay) {
						case 1:															
							Cal_HTML += "color:red;"
							break;
						//case 7:
						//	Cal_HTML += "color:blue;"
						//	break;
						default:
							Cal_HTML += "color:black;"
							break;
					}
					Cal_HTML += "\">"+thirdPrintDay;
				}
				thirdPrintDay++;
				
				if (thirdPrintDay > intLastDay) {								
					Stop_Flag = 1;
				}
			}
			Cal_HTML += "</td>";
		}
		Cal_HTML += "</tr>";
		if (Stop_Flag==1) break;
	}
	Cal_HTML += "</table></form></body></html>";

	var oPopBody = oPopup.document.body;
	oPopBody.style.backgroundColor = "lightyellow";
	oPopBody.style.border = "solid black 1px";
	oPopBody.innerHTML = Cal_HTML;

	var calHeight = oPopBody.document.all.Cal_Table.offsetHeight;
	//Check if the row is 6 or 5
	if (intLoopWeek == 6)	calHeight = 214;
	else	calHeight = 189;
	
	oPopup.show(pop_left, (pop_top + target.offsetHeight), 170, calHeight, document.body);
}


function Show_cal_M(sYear, sMonth) {
	var intThisYear = new Number(), intThisMonth = new Number()
	datToday = new Date();													// Set the current date
	
	intThisYear = parseInt(sYear,10);
	intThisMonth = parseInt(sMonth,10);
	
	if (intThisYear == 0) intThisYear = datToday.getFullYear();				// If no value
	if (intThisMonth == 0) intThisMonth = parseInt(datToday.getMonth(),10)+1;	
			
	switch(intThisMonth) {
		case 1:
				intPrevYear = intThisYear -1;
				intNextYear = intThisYear;
				break;
		case 12:
				intPrevYear = intThisYear;
				intNextYear = intThisYear + 1;
				break;
		default:
				intPrevYear = intThisYear;
				intNextYear = intThisYear;
				break;
	}
	intPPyear = intThisYear-1
	intNNyear = intThisYear+1

	Cal_HTML = "<html><head>\n";
	Cal_HTML += "</head><body>\n";
	Cal_HTML += "<table id=Cal_Table border=0 bgcolor='#f4f4f4' cellpadding=1 cellspacing=1 width=100% onmouseover='parent.doOver(window.event.srcElement)' onmouseout='parent.doOut(window.event.srcElement)' style='font-size : 12;font-family:±¼¸²;'>\n";
	Cal_HTML += "<tr height='30' align=center bgcolor='#f4f4f4'>\n";
	Cal_HTML += "<td colspan='4' align='center'>\n";
	Cal_HTML += "<a style='cursor:hand;' OnClick='parent.Show_cal_M("+intPPyear+","+intThisMonth+");'>¢¸</a>&nbsp;";
	Cal_HTML += "<select name='selYear' STYLE='font-size:11;' OnChange='parent.fnChangeYearM(this.value, "+intThisMonth+")';>";
	for (var optYear=(intThisYear-2); optYear<(intThisYear+2); optYear++) {
			Cal_HTML += "		<option value='"+optYear+"' ";
			if (optYear == intThisYear) Cal_HTML += " selected>\n";
			else Cal_HTML += ">\n";
			Cal_HTML += optYear+"</option>\n";
	}
	
	var oPopBody = oPopup.document.body;
	oPopBody.style.backgroundColor = "lightyellow";
	oPopBody.style.border = "solid black 1px";
	oPopBody.innerHTML = Cal_HTML;

	oPopup.show(pop_left, (pop_top + target.offsetHeight), 160, 99, document.body);
}


//----------------------------------
//	Select year from the year list
//----------------------------------
function fnChangeYearD(sYear,sMonth,sDay){
	Show_cal(sYear, sMonth, sDay);
}


//----------------------------------
//	Select month from the year list
//----------------------------------
function fnChangeYearM(sYear,sMonth){
	Show_cal_M(sYear, sMonth);
}


/**
	HTML Utility Functions for Objects
**/
function GetObjectTop(obj)
{
	if (obj.offsetParent == document.body)
	  return target.offsetTop;
	else
		return obj.offsetTop + GetObjectTop(obj.offsetParent);
}

function GetObjectLeft(obj)
{
	if (obj.offsetParent == document.body)
		return obj.offsetLeft;
	else
		return obj.offsetLeft + GetObjectLeft(obj.offsetParent);
}
