// Replace getElementById and getElementByTagName functions
function id(elem) { return document.getElementById(elem); };
function tag(tag, elem) { return (elem || document).getElementsByTagName(tag); };

// Replace 'new window' links
function linkReplace() {
	var As = tag("a");
	for(var i = 0; i < As.length; i++) if(As[i].className.indexOf("_blank") > -1) As[i].onclick = function() { window.open(this.getAttribute("href")); return false; };
};
		
// Remove whitespace nodes in DOM tree
function removeWhitespace(elem, includeChildNodes) {
	if(typeof(elem) == "string") elem = id(elem);
	var n = elem.firstChild;
	while(n) {
		var nn = n.nextSibling;
		if(n.nodeType == 3 && !/\S/.test(n.nodeValue)) {
			elem.removeChild(n);
		} else if(n.nodeType == 1 && includeChildNodes) {
			removeWhitespace(n, true);
		};
		n = nn;
	};	
};

// Add new function to run when DOM loaded
function addDOMLoadEvent(func) {
	var oldOnDOMLoadEvents = window.onDOMLoadEvents;
	if(typeof(window.onDOMLoad) == "function") {
		window.onDOMLoadEvents = function() {
			if(oldOnDOMLoadEvents) oldOnDOMLoadEvents();
			func();
		};
	} else {
		window.onDOMLoadEvents = func;
	};
};

// DOM loaded function
function onDOMLoad() {
	if(arguments.callee.done) return;
	arguments.callee.done = true;
	if(typeof(window.onDOMLoad) == "function") onDOMLoadEvents();
};

// Setup call to onDOMLoad() after DOM is loaded
if(document.addEventListener) document.addEventListener("DOMContentLoaded", onDOMLoad, false);
/*@cc_on @*/ /*@if (@_win32) document.write("<script id=\"IE_onDOMLoad\" defer=\"defer\" src=\"javascript:void(0)\;\"><\/script>"); document.getElementById("IE_onDOMLoad").onreadystatechange = function() { if (this.readyState == "complete") onDOMLoad(); }; /*@end @*/
if (/KHTML|WebKit/i.test(navigator.userAgent)) { var _timer = setInterval(function() { if (/loaded|complete/.test(document.readyState)) onDOMLoad(); }, 1); };
window.onload = onDOMLoad;

// IE6 page hover
function pagemenuSetup() {
	var LIs = tag("li", id("pages-menu"));
	for (var i = 0; i < LIs.length; i++) {
		LIs[i].onmouseover = LIs[i].onfocus = function() { this.className += " hover"; };
		LIs[i].onmouseout  = LIs[i].onblur  = function() { this.className = this.className.replace(/\s*(hover)/, ""); };
	};
};

// Datepicker
var dimensions = {
	screenPos: function(obj) {
		var curleft = curtop = 0;
		if (obj.offsetParent) {
			do {
				if (obj.getBoundingClientRect) {
					obj = obj.getBoundingClientRect();
					curleft += obj.left;
					curtop += obj.top;
				} else {
					curleft += obj.offsetLeft;
					curtop += obj.offsetTop;
				};				
			} while (obj = obj.offsetParent);
			return [curleft, curtop];
		};
	},
	scrollPos: function() {
		var scrollX = document.documentElement.scrollLeft || 0;
		var scrollY = document.documentElement.scrollTop ||  0;
		return [scrollX, scrollY];
	}
};

var datepicker = {
	months: [["January", 31], ["February", 28], ["March", 31], ["April", 30], ["May", 31], ["June", 30], ["July", 31], ["August", 31], ["September", 30], ["October", 31], ["November", 30], ["December", 31]],
	days:   ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
	timeout: false,
	init: function() {
		if(id("fInlineBook")) {
			// Reveal booking form
			id("fInlineBook").style.display = "block";
			id("fInlineBook").target = "_blank";
			id("inlinebook").style.display = "none";
			
			// Set dates
			today = new Date()
			today.setHours(today.getHours() + 6);
			datepicker.setDates(id("ftCheckIn"), today);
			today.setDate(today.getDate() + 2)
			datepicker.setDates(id("ftCheckOut"), today);
			
			// Set submit function
			id("fInlineBook").onsubmit = function() { datepicker.formsubmit(); };
			var INPUTs = tag("input", id("i13"));
			for (var i = 0; i < INPUTs.length; i++) {
				if (INPUTs[i].className.indexOf("_date") > -1) {
					var LABEL = tag("label", INPUTs[i].parentNode)[0];
					A = LABEL.appendChild(document.createElement("a"));
					A.id = "dp_" + INPUTs[i].id;
					A.className = "datepicker";
					A.onmouseover = function() { datepicker.hide(); datepicker.show(this.id.substr(3)); };
					A.onmouseout  = function() { datepicker.timeout = setTimeout("datepicker.hide()", 500); };
				};
			};
		};
	},
	setDates: function(field, date) {
		field.value = (date.getDate() < 10 ? "0" : "") + date.getDate() + "/" + (date.getMonth() < 9 ? "0" : "") + (date.getMonth() + 1) + "/" + date.getFullYear()
	},
	formsubmit: function() {
		id("daysI").value = parseFloat(id("ftCheckIn").value.substr(0, 2));
		id("monthsI").value = parseFloat(id("ftCheckIn").value.substr(3, 2));
		id("yearI").value = parseFloat(id("ftCheckIn").value.substr(6, 4));
		id("daysS").value = parseFloat(id("ftCheckOut").value.substr(0, 2));
		id("monthsS").value = parseFloat(id("ftCheckOut").value.substr(3, 2));
		id("yearS").value = parseFloat(id("ftCheckOut").value.substr(6, 4));
		id("guests").value = id("fsGuests").value;
	},
	hide: function() {
		if(id("datepicker")) {
			document.body.removeChild(id("datepicker"));
			if (id("dp_iframe")) document.body.removeChild(id("dp_iframe"));
		};
	},
	show: function(field, month, year) {
		if(datepicker.timeout) clearTimeout(datepicker.timeout);
		if (id("datepicker")) {
			if(isNaN(month) || month == null) return;
			datepicker.hide();
		};
		
		field = id(field);
				
		var selectedDate = /\d\d\/\d\d\/\d\d\d\d/.test(field.value) ? new Date(field.value.substr(6, 4), field.value.substr(3, 2) - 1, field.value.substr(0, 2)) : new Date();
		
		month = (isNaN(month) || month == null) ? selectedDate.getMonth() : month;
		year  = (isNaN(year) || year == null) ? selectedDate.getFullYear() : year;
		
		thisDate = new Date();
		thisDate = new Date(thisDate.getFullYear(), thisDate.getMonth(), thisDate.getDate());
		
		firstDay  = new Date(year, month, 1);
		firstDay.setDate(firstDay.getDate() - (firstDay.getDay() || 7) + 1);
		
		// Create Wrapper and Title
		var picker = document.createElement("div");
		picker.id = "datepicker";
		picker.appendChild(document.createElement("h5")).appendChild(document.createTextNode(datepicker.months[month][0] + " " + year));
		
		// Build Table Headings
		table = picker.appendChild(document.createElement("table"))
		tr = table.appendChild(document.createElement("thead")).appendChild(document.createElement("tr"));
		for (i = 0; i < 7; i++) {
			th = tr.appendChild(document.createElement("th"));
			th.appendChild(document.createTextNode(datepicker.days[i].substr(0, 1)));
			th.setAttribute("scope", "col")
			th.setAttribute("abbr", datepicker.days[i])
			th.setAttribute("title", datepicker.days[i])
			if (i > 4) th.className = "wend";
		};
		
		// Build Table Body
		day = firstDay;
		tbody = table.appendChild(document.createElement("thead"))
		do {
			tr = tbody.appendChild(document.createElement("tr"));
			for (i = 0; i < 7; i++) {
				td = tr.appendChild(document.createElement("td"));
				if (day < thisDate) {
					td.appendChild(document.createElement("span")).appendChild(document.createTextNode(day.getDate()));
				} else {
					a = td.appendChild(document.createElement("a"));
					a.appendChild(document.createTextNode(day.getDate()));
					var dateString = (day.getDate() < 10 ? "0" : "") + day.getDate() + "/" + (day.getMonth() < 9 ? "0" : "") + (day.getMonth() + 1) + "/" + day.getFullYear()
					a.href = "javascript:datepicker.set('" + field.id + "', '" + dateString + "');";
				};
				if (i > 4) td.className += " wend";
				if (day.getMonth() !== month) td.className = "preview";
				if (day.toDateString() == thisDate.toDateString()) td.className += " today";
				if (day.toDateString() == selectedDate.toDateString()) td.className += " selected";
				day.setDate(day.getDate() + 1);
			};
		} while (day.getMonth() <= month && day.getFullYear() <= year);
		
		// Add controls
		ul = picker.appendChild(document.createElement("ul"))
		
		a = ul.appendChild(document.createElement("li")).appendChild(document.createElement("a"));
		a.appendChild(document.createTextNode("prev"));
		a.parentNode.className = "prev";
		a.href = "javascript:datepicker.show('" + field.id + "', " + (month - 1 < 0 ? 11 : month - 1) + ", " + (month - 1 < 0 ? year - 1 : year) + ");"
		
		a = ul.appendChild(document.createElement("li")).appendChild(document.createElement("a"));
		a.appendChild(document.createTextNode("next"));
		a.parentNode.className = "next";
		a.href = "javascript:datepicker.show('" + field.id + "', " + (month + 1 > 11 ? 0 : month + 1) + ", " + (month + 1 > 11 ? year + 1 : year) + ");"
		
		// Calculate Position
		var linkPos   = dimensions.screenPos(id("dp_" + field.id));
		var scrollPos = dimensions.scrollPos();
		
		// Add iFrame in IE6
		var ltIE7 = false /*@cc_on || @_jscript_version < 5.7 @*/;
		if (ltIE7) {
			iframe = document.createElement("iframe");
			iframe.setAttribute("id", "dp_iframe");
			iframe.setAttribute("src","about:blank");
			iframe.setAttribute("scrolling","no");
			iframe.setAttribute("frameBorder","0");
			iframe.className = "datepicker";
			document.body.appendChild(iframe);
		};
		
		picker.onmouseout = function() {
			datepicker.timeout = setTimeout("datepicker.hide()", 500);
		};
		picker.onmouseover = function() {
			clearTimeout(datepicker.timeout);
		};

		document.body.appendChild(picker);
		picker.style.left = (linkPos[0] + scrollPos[0] + 23 - picker.offsetWidth) + "px";
		picker.style.top  = (linkPos[1] + scrollPos[1] + 22) + "px";
		
		if (ltIE7) {
			iframe.style.height = picker.offsetHeight + "px";
			iframe.style.width = picker.offsetWidth + "px";
			iframe.style.left = (linkPos[0] + scrollPos[0] + 23 - picker.offsetWidth) + "px";
			iframe.style.top = (linkPos[1] + scrollPos[1] + 22) + "px";
		};
	},
	set: function(fieldId, value) {
		id(fieldId).value = value;
		datepicker.hide();
	}
};


// Add DOMLoaded functions
addDOMLoadEvent(linkReplace);
addDOMLoadEvent(datepicker.init);

// Add DOMLoaded functions
/*@cc_on @*/ /*@if (@_win32) addDOMLoadEvent(pagemenuSetup); /*@end @*/