﻿function validEmail(addr) {
	var i, re, eArr, uArr, dArr, uArrLen, dArrLen;
	eArr = addr.split("@");
	if (eArr.length != 2) {
		return false;
	}
	uArr = eArr[0].split(".");
	uArrLen = uArr.length;
	re = /^[a-zA-Z0-9+\-=\^_{}~]+$/;
	for (i=0;i<uArrLen;i++) {
		if (!re.test(uArr[i])) {
			return false;
		}
	}
	dArr = eArr[1].split(".");
	dArrLen = dArr.length;
	if (dArrLen < 2) {
		return false;
	}
	re = /^[a-zA-z]{2,4}$/;
	if (!re.test(dArr[dArrLen-1])) {
		return false;
	}
	re = /^([a-zA-Z0-9][a-zA-Z0-9\-]*)?[a-zA-Z0-9]$/;
	for (i=0;i<(dArrLen-1);i++) {
		if (!re.test(dArr[i])) {
			return false;
		}
	}
	return true;
}

function validDate(d, m, y) {
	if (y < 2008 || y > 2100) {
		return false;
	}
	else if (d < 1 || d > 31) {
		return false;
	}
	else if (m < 1 || m > 12) {
		return false;
	}
	else if ((m == 4 || m== 6 || m == 9 || m == 11) && d > 30) {
		return false;
	}
	else if (m == 2 && (d > 29 || (((y % 4) != 0 || ((y % 100) == 0 && (y % 400) != 0)) && d > 28))) {
		return false;
	}
	return true;
}

var errMsg;

function addErr(txt) {
	errMsg += (errMsg == "" ? "" : "\n") + txt;
}

function chkText(val, mChr, fldName) {
	if (val == "" && mChr > 0) {
		addErr(fldName + " must be provided!");
		return false;
	}
	else if (val.length < mChr) {
		addErr(fldName + " is not valid!");
		return false;
	}
	return true;
}

function getMonth(m) {
	switch(m) {
		case 1:
			return "January";
		case 2:
			return "February";
		case 3:
			return "March";
		case 4:
			return "April";
		case 5:
			return "May";
		case 6:
			return "June";
		case 7:
			return "July";
		case 8:
			return "August";
		case 9:
			return "September";
		case 10:
			return "October";
		case 11:
			return "November";
		case 12:
			return "December";
	}
}

function validate() {
	var i, str, obj;
	var d1, d2, today, c1 = true, c2 = true;
	var na = d.getElementById("name").value;
	var em = d.getElementById("email-address").value;
	var ad = parseInt(d.getElementById("adult").value, 10);
	var ch = parseInt(d.getElementById("child").value, 10);
	var aDay = parseInt(d.getElementById("aday").value, 10);
	var aMonth = parseInt(d.getElementById("amonth").value, 10);
	var aYear = parseInt(d.getElementById("ayear").value, 10);
	var dDay = parseInt(d.getElementById("dday").value, 10);
	var dMonth = parseInt(d.getElementById("dmonth").value, 10);
	var dYear = parseInt(d.getElementById("dyear").value, 10);
	var doub = parseInt(d.getElementById("double").value, 10);
	var lux = parseInt(d.getElementById("luxury").value, 10);
	var pat = parseInt(d.getElementById("patio").value, 10);
	
	if (isNaN(ad)) ad = 0;
	if (isNaN(ch)) ch = 0;
	if (isNaN(aDay)) aDay = 0;
	if (isNaN(aMonth)) aMonth = 0;
	if (isNaN(aYear)) aYear = 0;
	if (isNaN(dDay)) dDay = 0;
	if (isNaN(dMonth)) dMonth = 0;
	if (isNaN(dYear)) dYear = 0;
	
	errMsg = "";

	chkText(na, 2, "Name");
	chkText(d.getElementById("country").value, 2, "Country");
	if (em == "") addErr("Email Address must be provided!");
	else if (!validEmail(em)) addErr("Email Address is not valid!");
	if (ad == 0) addErr("Number of Adults must be provided!");
	if (!validDate(aDay, aMonth, aYear)) {
		addErr("Date of Arrival is not valid!");
		c1 = false;
	}
	if (!validDate(dDay, dMonth, dYear)) {
		addErr("Date of Departure is not valid!");
		c2 = false;
	}
	if (c1 && c2) {
		d1 = new Date(aYear, aMonth - 1, aDay);
		d2 = new Date(dYear, dMonth - 1, dDay);
		d1 = d1.getTime();
		d2 = d2.getTime();
		if (d1 == d2) addErr("Date of Arrival and Date of Departure are the same!");
		else if (d2 < d1) addErr("Date of Departure is before Date of Arrival!");
	}
	if (doub + lux + pat < 1) addErr("At least one room must be chosen in Accommodation Requirements!");
	
	if (errMsg != "") {
		alert(errMsg);
		return;
	}
	
	d.getElementById("realname").value = na;
	d.getElementById("email").value = em;
	
	str = "Adults: " + ad + ", ";
	str += "Children Below 12 Years: " + ch;
	d.getElementById("visit").value = str;
	
	d.getElementById("arrival").value = aDay + " " + getMonth(aMonth) + " " + aYear;
	d.getElementById("departure").value = dDay + " " + getMonth(dMonth) + " " + dYear;
	
	str = (doub == 0 ? "" : doub + " double room" + (doub > 1 ? "s" : ""));
	str += (lux == 0 ? "" : (str == "" ? "" : ", ") + lux + " luxury room" + (lux > 1 ? "s" : ""));
	str += (pat == 0 ? "" : (str == "" ? "" : ", ") + pat + " luxury room" + (pat > 1 ? "s" : "") + " with patio");
	d.getElementById("accom").value = str;
	
	d.getElementById("mail-form").submit();
}

function getKeyCode(e) {
	try {
		return event.keyCode;
	}
	catch(err) {
		return e.which;
	}
}

function testRegEx(e, re) {
	var kc = getKeyCode(e);
	var key = String.fromCharCode(kc);
	return (re.test(key) || kc == 0 || kc == 8 || kc == 9);
}

function onlyDigits(e) {
	return testRegEx(e, /[\d]/);
}

function onlyPhone(e) {
	return testRegEx(e, /[\d #*()+\-]/);
}

function clearDate() {
	if (this.value == "dd" || this.value == "mm" || this.value == "yyyy") this.value = "";
	this.select();
}

function dateOK(val, min, max) {
	var val = parseInt(val, 10);
	if (isNaN(val) || val < min || val > max) {
		return false;
	}
	return true;
}

function setDay() {
	if (!dateOK(this.value, 1, 31)) this.value = "dd";
}

function setMonth() {
	if (!dateOK(this.value, 1, 12)) this.value = "mm";
}

function setYear() {
	if (!dateOK(this.value, 2008, 2100)) this.value = "yyyy";
}

function initLocal() {
	var i, arr, obj;
	init();
	arr = ["tel", "fax", "cell"];
	for (i=0;i<3;i++) {
		d.getElementById(arr[i]).onkeypress = onlyPhone;
	}
	arr = ["adult", "child", "aday", "amonth", "ayear", "dday", "dmonth", "dyear"];
	for (i=0;i<8;i++) {
		d.getElementById(arr[i]).onkeypress = onlyDigits;
	}
	
	obj = d.getElementById("aday");
	obj.onfocus = clearDate;
	obj.onblur = setDay;
	obj = d.getElementById("amonth");
	obj.onfocus = clearDate;
	obj.onblur = setMonth;
	obj = d.getElementById("ayear");
	obj.onfocus = clearDate;
	obj.onblur = setYear;
	obj = d.getElementById("dday");
	obj.onfocus = clearDate;
	obj.onblur = setDay;
	obj = d.getElementById("dmonth");
	obj.onfocus = clearDate;
	obj.onblur = setMonth;
	obj = d.getElementById("dyear");
	obj.onfocus = clearDate;
	obj.onblur = setYear;

	d.getElementById("sbut").onclick = validate;
}

window.onload = initLocal;