var bool,
f = {
	$:function (id){
		return document.getElementById(id);
	},
	
	clearChildren:function (n){
		while (n.firstChild){
			n.removeChild(n.firstChild)
		}
		return n;
	}
};

var checkValidDate = function (o){
	var monthLength, now, dateToCheck, checkDate;
	
	monthLength = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	if (o.year * .25 == parseInt(o.year * .25)){
		monthLength[1] = 29;
	}

	if (!o.day || !o.month || !o.year){
		return false;
	}
	 
	
	switch (o.month){
		case "Jan":
		o.mthTxt = "January";
		o.month = new Number(1);
		break;
		case "Feb":
			o.mthTxt = "February";
			o.month = new Number(2);
			break;
		case "Mar":
			o.mthTxt = "March";
			o.month = new Number(3);
			break;
		case "Apr":
			o.mthTxt = "April";
			o.month = new Number(4);
			break;
		case "May":
			o.mthTxt = "May";
			o.month = new Number(5);
			break;
		case "Jun":
			o.mthTxt = "June";
			o.month = new Number(6);
			break;
		case "Jul":
			o.mthTxt = "July";
			o.month = new Number(7);
			break;
		case "Aug":
			o.mthTxt = "August";
			o.month = new Number(8);
			break;
		case "Sep":
			o.mthTxt = "September";
			o.month = new Number(9);
			break;
		case "Oct":
			o.mthTxt = "October";
			o.month = new Number(10);
			break;
		case "Nov":
			o.mthTxt = "November";
			o.month = new Number(11);
			break;
		case "Dec":
			o.mthTxt = "December";
			o.month = new Number(12);
			break;
		default:
		return false;
	}

	if (o.day > monthLength[o.month-1]){
		return {error: new String("Please select a different day as "+o.mthTxt+" only has "+monthLength[o.month-1]+" days")};
	}
	
	now = new Date();
	now = now.getTime();

	dateToCheck = new Date();
	dateToCheck.setYear(o.year);
	dateToCheck.setMonth(o.month-1);
	dateToCheck.setDate(o.day);
	dateToCheck.setHours(23);
	dateToCheck.setMinutes(59);
	dateToCheck.setSeconds(59);
	
	checkDate = dateToCheck.getTime();
	if (now >= checkDate){
		return {error: new String("Please select a date after today")}
	}
	
	return checkDate;
};

var getDateVal = function (str){
	var x, day, mth, tmp, arr, obj;
	
	x = document.getElementById("booking-form").elements;
	//x = document.forms[0].elements;
	day = x[str + "_day"];
	mth = x[str + "_month"];
	tmp = new String(mth.options[mth.selectedIndex].value);
	arr = tmp.split("-");
	
	obj = checkValidDate({
		day: new Number(day.options[day.selectedIndex].value),
		month: arr[0],
		year: new Number(arr[1])
	});
	
	return obj
}

var setAlert = function (o){
	var el = f.$(o.el);
	
	if (el){
		el.className = o.cls;
		f.clearChildren(el);
		el.appendChild(document.createTextNode(o.str))
	}
};

var checkDate = function (o){
	
	var dates, days;
	dates = {
		start:getDateVal(o.start),
		end:getDateVal(o.end)
	};
	
	if (dates.start.error){
		setAlert({
			el:o.el, 
			str:dates.start.error,
			cls:"err"
		});
		//return false;
	}else if (dates.end.error){
		setAlert({
			el:o.el,
			str:dates.end.error,
			cls:"err"
		});
		//return false;
	}else{
		if (dates.start >= dates.end){
			setAlert({
				el:o.el,
				str:"Please choose a check-in date that is before your check-out date",
				cls:"err"
			});
			//return false;
		}else{
			days = dates.end - dates.start;
			days = Math.round(days/86400000);
			setAlert({
				el:o.el,
				str:"No. of nights: " + days,
				cls:"norm"
			});
			//return true;
			
			//If not errors - create new fields and submit form
			submitForm();
		}
	}
	
	return false;
	
};









var submitForm = function(){

	
	//Get the values from the check in dates
	var arrDay = document.getElementById("in_day").options[document.getElementById("in_day").selectedIndex].value;
	var arrMonth = document.getElementById("in_month").options[document.getElementById("in_month").selectedIndex].value;
	
	//Split the month field into month and year
	var arrMonth = arrMonth.split("-");
	
	//Create a new object with the month, then use findMonth to get the numerical value
	arrMonthObj = new Object();
	arrMonthObj.text = arrMonth[0];
	var __arrMonth = findMonth(arrMonthObj);
	
	//Build the new date string
	var arrDate = arrMonth[1]+"-"+__arrMonth+"-"+arrDay;
	
	
	
	//Get the values from the check out dates
	var depDay = document.getElementById("out_day").options[document.getElementById("out_day").selectedIndex].value;
	var depMonth = document.getElementById("out_month").options[document.getElementById("out_month").selectedIndex].value;
	
	//Split the month field into month and year
	var depMonth = depMonth.split("-");
	
	//Create a new object with the month, then use findMonth to get the numerical value
	depMonthObj = new Object();
	depMonthObj.text = depMonth[0];
	var __depMonth = findMonth(depMonthObj);
	
	//Build the new date string
	var depDate = depMonth[1]+"-"+__depMonth+"-"+depDay;
	

	//Get booking form tag
	var fo = document.getElementById("booking-form");
	var fieldset = fo.getElementsByTagName("fieldset");	
	
	//Remove any existing hidden fields
	if(document.getElementById("calArrivalDateField")){
		fieldset[0].removeChild(document.getElementById("calArrivalDateField"));
	}
	if(document.getElementById("calDepartureDateField")){
		fieldset[0].removeChild(document.getElementById("calDepartureDateField"));
	}
	
	//Create hidden arrival date field
	var arrField = createNamedElement("input","calArrivalDateField");
	arrField.type="hidden";
	arrField.id="calArrivalDateField";
	arrField.value=arrDate;

	//Create hidden departure date field
	var depField = createNamedElement("input","calDepartureDateField");
	depField.type="hidden";
	depField.id = "calDepartureDateField";
	depField.value=depDate;
	
	//Add the two hidden fields to the form
	fieldset[0].appendChild(arrField);
	fieldset[0].appendChild(depField);
	
	//Submit the form
	fo.submit();
	
}

function createNamedElement(type, name) {
   var element = null;
   // Try the IE way; this fails on standards-compliant browsers
   try {
      element = document.createElement('<'+type+' name="'+name+'">');
   } catch (e) {
   }
   if (!element || element.nodeName != type.toUpperCase()) {
      // Non-IE browser; use canonical method to create named element
      element = document.createElement(type);
      element.name = name;
   }
   return element;
}




var findMonth = function(o){

	switch (o.text){
		case "Jan":
			o.month = new Number(1)
			break;
		case "Feb":
			o.month = new Number(2);
			break;
		case "Mar":
			o.month = new Number(3);
			break;
		case "Apr":
			o.month = new Number(4);
			break;
		case "May":
			o.month = new Number(5);
			break;
		case "Jun":
			o.month = new Number(6);
			break;
		case "Jul":
			o.month = new Number(7);
			break;
		case "Aug":
			o.month = new Number(8);
			break;
		case "Sep":
			o.month = new Number(9);
			break;
		case "Oct":
			o.month = new Number(10);
			break;
		case "Nov":
			o.month = new Number(11);
			break;
		case "Dec":
			o.month = new Number(12);
			break;
		default:
		return false;
	}
	
	if(o.month<10){
		o.month = "0" + o.month;	
	}
	
	return o.month;
	
}










var chkNights = function (o){
	
	var dates, days;
	dates = {
		start:getDateVal(o.start),
		end:getDateVal(o.end)
	};
	
	
	days = dates.end - dates.start;
	if (!isNaN(days)){
		days = Math.round(days/86400000);
		setAlert({
			el:o.el,
			str:"No. of nights: " + days,
			cls:"norm"
		});
	}
	else{
		setAlert({
			el:o.el,
			str:"No. of nights: -",
			cls:"norm"
		});
	}
	
};



var setDays = function (o, id){
	if (id.indexOf(o.end) !== -1){ 
		bool = true
	}
	
	if (bool === true){
		//checkDate(o);
		chkNights(o);
	}
	
};


//------ SET DATE DROPDOWNS ------//
function setupDates(){
	var mth = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
	
	var d = f.$("in_day");
	var m = f.$("in_month");
	var d1 = f.$("out_day");
	var ml = f.$("out_month");
	var dOpt = d.getElementsByTagName("option");
	var mOpt = m.getElementsByTagName("option");
	var dlOpt = d1.getElementsByTagName("option");
	var mlOpt = ml.getElementsByTagName("option");

	var current = new Date();
	current.setDate(current.getDate() + 1);
	var currDate = current.getDate();
	var currMth = current.getMonth();

	//currMth = mth[currMth] + '-' + current.getFullYear();

	var future = new Date();
	future.setDate(future.getDate() + 2);
	var futDate = future.getDate();
	var futMth = future.getMonth();

	futMth = mth[futMth] + '-' + future.getFullYear();

	var numToString = function (val){
		if (val < 10){
			val = "0" + val;
		} else {
			val.toString();
		}
		
		return val;
	};
	
	numToString(currDate);
	numToString(futDate);
	
	var setDaySelect = function (o){
		var opt;
		for (var i = Number(0), j = Number(o.optArr.length); i < j; i++){
			opt = o.optArr[i];
			if (opt.value == o.checkVal){
				opt.selected = "selected";
				break;
			}	
		}
	};
	
	setDaySelect({optArr:dOpt, checkVal:currDate});
	setDaySelect({optArr:dlOpt, checkVal:futDate});
	
	/*this old version of the function takes the select list for the months, and just removes all the month options prior to the current month
	It has been superseded by the function below which clears out the options, and then creates a new set of options based on the current month + 12
	
	var setMonthSelect = function (o){
		var opt;
		var remove = [];
		for (var i=0; i < o.optArr.length; i++){
			opt = o.optArr[i];
			if (opt.value.indexOf(o.checkVal) !== -1){
				opt.selected = "selected";
				break;
			}
			else {
				remove.push(opt);
			}
		}
		for(i=0; i < remove.length; i++) {
			remove[i].parentNode.removeChild(remove[i]);
		}
	};
	
	setMonthSelect({optArr:mOpt, checkVal:currMth});
	setMonthSelect({optArr:mlOpt, checkVal:futMth});*/
	
	var setMonthSelect = function (o){
		o.optMthList.options.length = 0
		var y = current.getFullYear();
		// cycle through 12 and add the 12 months into the array
		for (var i=0; i < 12; i++){
			var monthVal = o.optMth[o.checkVal] + '-' + y;
			var monthText = o.optMth[o.checkVal] + ' ' + (y-2000);
			
			var sel;
			i==0?sel=true:sel=false;
			
			AddSelectOption(o.optMthList, monthText, monthVal, sel);
			//if the current month is Dec, make it Jan, otherwise add one
			if (o.checkVal == 11){
				o.checkVal=0
				y++;
			}else{
				o.checkVal++;
			}
		}
	};
	
	
	setMonthSelect({optMth:mth, checkVal:currMth, optMthList:m});
	setMonthSelect({optMth:mth, checkVal:currMth, optMthList:ml});
	
	setDays({el:'nights', start:'in', end:'out'}, d1.id);
}





function AddSelectOption(selectObj, text, value, isSelected){
    if (selectObj != null && selectObj.options != null){
        selectObj.options[selectObj.options.length] = new Option(text, value, false, isSelected);
    }
}


//Sets up dates fo rthe events and restaurant booking forms
var setupFormDates = function (d,m,y,l){
	
	var d = f.$(d);
	var m = f.$(m);
	var y = f.$(y);
	var dOpt = d.getElementsByTagName("option");
	var mOpt = m.getElementsByTagName("option");
	var yOpt = y.getElementsByTagName("option");

	var current = new Date();
	
	if(l){current.setDate(current.getDate() + 2);}
	else{current.setDate(current.getDate() + 1);}
	var currDate = current.getDate();
	var currMth = current.getMonth();
	var currYr = current.getFullYear();
	currMth = currMth+1;


	for(i=0;i<dOpt.length;i++){
		if(dOpt[i].value==currDate){dOpt[i].selected="selected"}	
	}
	for(i=0;i<mOpt.length;i++){
		if(mOpt[i].value==currMth){mOpt[i].selected="selected"}	
	}
	for(i=0;i<yOpt.length;i++){
		if(yOpt[i].value==currYr){yOpt[i].selected="selected"}	
	}

}







//---- NAVIGATION ROLLOVERS & MENU EVENTS ----//
function setupNav(){
	var nItems = new Array(), nItemsI;
	
	if (n = f.$("navigation")){
		nItems = n.getElementsByTagName("a");
		
		for (var i = Number(0), j = Number(nItems.length); i < j; i++){
			nItemsI = nItems[i];
			navImg = nItemsI.getElementsByTagName("img");
			
			if (navImg[0]){
				if (navImg[0].src.indexOf("-sel") == -1){
					nItemsI.stored = navImg[0].id;
					nItemsI.onmouseover = imgRoll;
					nItemsI.onmouseout = imgOff;
				}
			}
		}
	}
	
}

//---- NAVIGATION ROLLOVERS PRE-LOADERS ----//
if(document.images){
nav01Roll = new Image();
nav01Roll.src = "../images/nav-rooms-on.gif";
nav01Off = new Image();
nav01Off.src = "../images/nav-rooms.gif";

nav02Roll = new Image();
nav02Roll.src = "../images/nav-rates-on.gif";
nav02Off = new Image();
nav02Off.src = "../images/nav-rates.gif";

nav03Roll = new Image();
nav03Roll.src = "../images/nav-restaurant-on.gif";
nav03Off = new Image();
nav03Off.src = "../images/nav-restaurant.gif";

nav04Roll = new Image();
nav04Roll.src = "../images/nav-events-on.gif";
nav04Off = new Image();
nav04Off.src = "../images/nav-events.gif";

nav05Roll = new Image();
nav05Roll.src = "../images/nav-about-on.gif";
nav05Off = new Image();
nav05Off.src = "../images/nav-about.gif";

nav06Roll = new Image();
nav06Roll.src = "../images/nav-health-on.gif";
nav06Off = new Image();
nav06Off.src = "../images/nav-health.gif";

nav07Roll = new Image();
nav07Roll.src = "../images/nav-jersey-on.gif";
nav07Off = new Image();
nav07Off.src = "../images/nav-jersey.gif";

nav08Roll = new Image();
nav08Roll.src = "../images/nav-location-on.gif";
nav08Off = new Image();
nav08Off.src = "../images/nav-location.gif";

}

//---- NAVIGATION ROLLOVERS ----//
function imgRoll(){
	var n = this.stored;
	if(document.getElementById(n)){
		document.getElementById(n).src = eval(n+"Roll").src;
	}
}

function imgOff(){
	var n = this.stored;
	if(document.getElementById(n)){
		document.getElementById(n).src = eval(n+"Off").src;	
	}
}



//---- RANDOM QUOTES ----//
function ranQuo(){
	var ranNum = Math.floor(Math.random()*6);
	f.$("home-quote-0").className="quote hide";
	f.$("home-quote-" + ranNum).className="quote";
}

//---- RANDOM IMAGES ----//
function ranImg(){

		var ranNum = Math.floor(Math.random()*2);
		var newImg = ("../images/gallery-t/img" + ranNum + ".jpg");
		f.$("gallery-t").src=newImg;

}

//---- TABS ----//
function showHideTab(){
	f.$("advancedPurchase").className = "hide";
	f.$("advPurchTitle").className = "hide"; 
	f.$("reg").onclick=function(){
		f.$("regular").className="show";
		f.$("advancedPurchase").className="hide";
		f.$("reg").className = "sel";		
		f.$("adv").className = "";
		return false;
	}
	f.$("adv").onclick=function(){
		f.$("advancedPurchase").className="show";
		f.$("regular").className="hide";
		f.$("adv").className = "sel";
		f.$("reg").className = "";
		return false;
	}	
}

//initialisation function
var init = function (){
	setupNav();
	if (f.$("booking-form")){
		setupDates();
	}
};

window.onload = init;
