﻿
function validate_form(form) {
	var formValid = "0"
	var reqFields = form.elements["required"].value.split(",")
	for (var i = 0; i < reqFields.length; i++) {
		if (form.elements[reqFields[i]].value == "") {
			alert("All fields must be completed");
			form.elements[reqFields[i]].focus();
			form.elements[reqFields[i]].select();
			formValid = "1";
			return false;
		}
	}
	if (form.name == "booking_enquiry") {
		if ((form.start_mon.value == "Month") || (form.start_mday.value == "Date") || (form.start_year.value == "Year")) {
			alert("Please choose a valid arrival date");
			return false;
		}
		if ((form.end_mon.value == "Month") || (form.end_mday.value == "Date") || (form.end_year.value == "Year")) {
			alert("Please choose a valid departure date");
			return false;
		}
		var startDate = new Date(form.start_year.value,(form.start_mon.value - 1),form.start_mday.value);
		var nowDate = new Date();
		if (startDate.getTime() - nowDate.getTime() < 0 ) {
			alert("Please choose an arrival date in the future!");
			return false;
		}
		var endDate = new Date(form.end_year.value,(form.end_mon.value - 1),form.end_mday.value);
		var difference = (Math.floor((endDate.getTime() - startDate.getTime()) / (1000*60*60*24)));
		if (startDate.getTime() > endDate.getTime()) {
			alert("You have chosen to depart before you arrive!");
			return false;
		} else if (startDate.getTime() == endDate.getTime()) {
			alert("Arrival and departure dates are the same!");
			return false;
		} else if (difference > 7) {
			if (!confirm("You requested to stay for " + difference + " nights. Are you sure?")) {
				return false;
			}
		}
		//if (form.comment.value.match(/<a|href=|url=|link=|www\.|\.com|\.net|\.org|<\/a>|\/url|\/link|\/http|http\:\/\/|\/href/g) != null) {
		if (form.comment.value.match(/<a|href=|url=|link=|<\/a>|\/url|\/link|\/http|http\:\/\/|\/href/g) != null) {
			//form.comment.value = form.comment.value.replace(/<a|href=|url=|link=|www\.|\.com|\.net|\.org|<\/a>|\/url|\/link|\/http|http\:\/\/|\/href/g, "");
			form.comment.value = form.comment.value.replace(/<a|href=|url=|link=|<\/a>|\/url|\/link|\/http|http\:\/\/|\/href/g, "");
			alert("Your comments appear to contain HTML or other tags or web addresses which have been removed. Please check your comments and try again.");
			return false;
		}
		if (form.captcha_code.value == "") {
			alert("Please enter Captcha code");
			return false;
		}
		if (form.captcha_valid.value == "false") {
			alert("Captcha code incorrect! Please try again.");
			return false;
		}
	} else if (form.name == "contact_form") {
		//if (form.user_message.value.match(/<a|href=|url=|link=|www\.|\.com|\.net|\.org|<\/a>|\/url|\/link|\/http|http\:\/\/|\/href/g) != null) {
		if (form.user_message.value.match(/<a|href=|url=|link=|<\/a>|\/url|\/link|\/http|http\:\/\/|\/href/g) != null) {
			//form.user_message.value = form.user_message.value.replace(/<a|href=|url=|link=|www\.|\.com|\.net|\.org|<\/a>|\/url|\/link|\/http|http\:\/\/|\/href/g, "");
			form.user_message.value = form.user_message.value.replace(/<a|href=|url=|link=|<\/a>|\/url|\/link|\/http|http\:\/\/|\/href/g, "");
			alert("Your comments appear to contain HTML or other tags or web addresses which have been removed. Please check your comments and try again.");
			return false;
		}
	}
	if (formValid == "1") {
		alert("All required fields must be completed");
		return false;
	} else if (check_email(form) == false) {
		return false;
	} else {
		return true;
	}
}

function check_captcha(form) {
	document.getElementById('busy').style.visibility = "visible";
	document.getElementById('busy').style.display = "block";
	document.getElementById('bad_captcha').style.visibility = "hidden";
	document.getElementById('bad_captcha').style.display = "none";
	var xhri = xhrRequest('html');
	var qry = 'captcha_code=' + form.captcha_code.value;
	var url = 'captcha.php';
	xhr[xhri].open('POST', url, true);
	xhr[xhri].onreadystatechange = function () {
			if (xhr[xhri].readyState == 4 && xhr[xhri].status == 200) {
				if (xhr[xhri].responseText == "pass") {
					form.captcha_valid.value = "true";
					document.getElementById('form_content').style.visibility = "visible";
					document.getElementById('form_content').style.display = "block";
				} else {
					form.captcha_valid.value = "false";
					document.getElementById('form_content').style.visibility = "hidden";
					document.getElementById('form_content').style.display = "none";
					document.getElementById('bad_captcha').style.visibility = "visible";
					document.getElementById('bad_captcha').style.display = "block";
					document.getElementById('captcha').src = 'securimage/securimage_show.php?' + Math.random();
				}
				document.getElementById('busy').style.visibility = "hidden";
				document.getElementById('busy').style.display = "none";
			} else {
				try {
					var alertStr = "xhr[xhri].readyState=" + xhr[xhri].readyState + " xhr[xhri].status=" + xhr[xhri].status;
				}
				catch (e) {
					var alertStr = "error getting xhr[xhri].readyState and xhr[xhri].status";
				}
			}
		};
	xhr[xhri].setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	xhr[xhri].send(qry);
}

function check_email(form) {
	if (form.email.value == "") {
		alert("Please enter your email address");
		form.email.focus();
		form.email.select();
		return false;
	}
	if (form.email.value.indexOf(" ") != -1) {
		alert("Your email address appears to be invalid (it contains 1 or more spaces)");
		form.email.focus();
		form.email.select();
		return false;
	}
	if (form.email.value.indexOf("@") != -1) {
		var email_array = form.email.value.split("@");
		if (email_array[1].indexOf(".") != -1) {
			var domain_array = email_array[1].split(".");
			for (i=0; i<=domain_array.length; i++) {
				if (domain_array[i] == "") {
					alert("Your email address appears to be invalid; please check it");
					form.email.focus();
					form.email.select();
					return false;
				}
			}
		} else {
			alert("Your email address appears to be invalid; please check it");
			form.email.focus();
			form.email.select();
			return false;
		}
	} else {
		alert("Your email address appears to be invalid (there is no @ symbol)");
		form.email.focus();
		form.email.select();
		return false;
	}
}

function mon_change(form, this_target, this_index) {
	if (this_index == "2") {
		no_days = get_feb_days(this_target, this_index);
	} else if ((this_index == "4") || (this_index == "6") || (this_index == "9") || (this_index == "11")) {
		no_days = 30;
	} else {
		no_days = 31;
	}
	if (this_target == "start") {
		this_list = form.start_mday;
		this_list_index = form.end_mday.selectedIndex;
	} else if (this_target == "end") {
		this_list = form.end_mday;
		this_list_index = form.start_mday.selectedIndex;
	}
	write_date(form, this_target, this_list, no_days);
	write_mon(form, this_target, this_index);
	if (form.end_mday.options.length == 1) {
		this_list = form.end_mday;
		write_date(form, 'start', this_list, no_days);
	}
	check_day(form, this_target, this_list_index);
}

function year_change(form, this_target, this_index) {
	if (this_target == "start") {
		this_month = form.start_mon.options[form.start_mon.selectedIndex].value;
	} else if (this_target == "end") {
		this_month = form.end_mon.options[form.end_mon.selectedIndex].value;
	}
	if (this_month == 2) {
		no_days = get_feb_days(form, this_target, this_index);
		if (this_target == "start") {
			this_list = form.start_mday;
		} else if (this_target == "end") {
			this_list = form.end_mday;
		}
		write_date(form, this_target, this_list, no_days);
	}
	if (form.start_year.selectedIndex > form.end_year.selectedIndex) {
		form.end_year.options[form.start_year.selectedIndex].selected = true;
	}
}

function get_feb_days(form, this_target, this_index) {
	if (this_target == "start") {
		the_year = form.start_year.options[form.start_year.selectedIndex].value;
	} else if (this_target == "end") {
		the_year = form.start_year.options[form.end_year.selectedIndex].value;
	}
	if (the_year % 4 == 0) {
		if (the_year % 100 == 0) {
			if (the_year % 400 == 0) {
				no_days = 29;
			} else {
				no_days = 28;
			}
		} else {
			no_days = 29;
		}
	} else {
		no_days = 28;
	}
	return no_days;
}

function write_date(form, this_target, this_list, no_days) {
	this_list.options.length = 0;
	this_list.options[this_list.options.length] = new Option("1", "1", false, true)
	for ( var i=2; i<=no_days; i++) {
		this_list.options[this_list.options.length] = new Option(i, i, false, false)
	}
	if (this_target == 'start') {
		this_index = form.end_mday.selectedIndex;
	} else if (this_target == 'end') {
		this_index = form.start_mday.selectedIndex;
	}
	check_day(form, this_target, this_index);
}

function write_mon(form, this_target, this_index) {
	start_year = form.start_year.selectedIndex;
	end_year = form.end_year.selectedIndex;
	if (this_target == "start") {
		end_month = form.end_mon.selectedIndex;
		if ((end_month < this_index) && (end_year <= start_year)) {
			form.end_mon.options[this_index].selected = true;
		}
	} else if (this_target == "end") {
		if (end_year = start_year) {
			form.end_year.options[this_index + 1].selected = true;
		} else if (end_year < start_year) {
			start_month = form.start_mon.selectedIndex;
			if (start_month > this_index) {
				form.start_mon.options[this_index].selected = true;
			}
		}
	}
}

function check_day(form, this_target, this_index) {
	if (form.start_mon.selectedIndex >= form.end_mon.selectedIndex) {
		if (form.start_year.selectedIndex >= form.end_year.selectedIndex) {
		if (this_target == "start") {
			if (form.start_mday.selectedIndex > this_index) {
				form.start_mday.options[this_index].selected = true;
			}
		} else if (this_target == "end") {
			if (form.end_mday.selectedIndex < this_index) {
				form.end_mday.options[this_index].selected = true;
			}
		}
		}
	}
}

function setDay() {
	var arriveDay =  document.booking_enquiry.arrive_day
	var selectedArriveDay = arriveDay.selectedIndex
	document.booking_enquiry.depart_day.selectedIndex = selectedArriveDay
	//document.booking_enquiry.depart_day.text = selectedArriveDay
}

function setMonth() {
	var arriveMonth = document.booking_enquiry.arrive_month
	var selectedArriveMonth = arriveMonth.options[arriveMonth.selectedIndex].value
	document.booking_enquiry.depart_month.value = selectedArrivMonth
	//document.booking_enquiry.depart_month.text = selectedArrivMonth
}

function setYear() {
	var arriveYear = document.booking_enquiry.arrive_year
	var selectedArriveYear = arriveYear.options[arriveYear.selectedIndex].value
	document.booking_enquiry.depart_year.value = selectedArriveYear
	//document.booking_enquiry.depart_year.text = selectedArriveYear
}

var xhr = new Array(); // ARRAY OF XML-HTTP REQUESTS
var xi = new Array(0); // ARRAY OF XML-HTTP REQUEST INDEXES
xi[0] = 1; // FIRST INDEX SET TO 1 MAKING IT AVAILABLE


function xhrRequest(type) {
	if (!type) {
		type = 'html';
	}

	// xhrsend IS THE xi POSITION THAT GETS PASSED BACK
	// INITIALIZED TO THE LENGTH OF THE ARRAY(LAST POSITION + 1)
	// IN CASE A FREE RESOURCE ISN'T FOUND IN THE LOOP
	var xhrsend = xi.length;

	// GO THROUGH AVAILABLE xi VALUES
	for (var i=0; i<xi.length; i++) {

		// IF IT'S 1 (AVAILABLE), ALLOCATE IT FOR USE AND BREAK
		if (xi[i] == 1) {
			xi[i] = 0;
			xhrsend = i;
			break;
		}
	}

	// SET TO 0 SINCE IT'S NOW ALLOCATED FOR USE
	xi[xhrsend] = 0;

	// SET UP THE REQUEST
	if (window.ActiveXObject) {
		try {
			xhr[xhrsend] = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				xhr[xhrsend] = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	} else if (window.XMLHttpRequest) {
		xhr[xhrsend] = new XMLHttpRequest();
		if (xhr[xhrsend].overrideMimeType) {
			xhr[xhrsend].overrideMimeType('text/' + type);
		}
	}
	return (xhrsend);
}

