// JavaScript Document
var strValidation = "";

function checkBrowser(objTag) {
	
	if(objTag != "undefined") {
		return objTag;
	}
	return "This Field";
}

function format2Decimals(startVal) {
	
	newVal=startVal;
	
	dotPos = startVal.indexOf(".");
	
	if (startVal.substring(dotPos+1, startVal.length).length == 1 && dotPos > 0) {
		newVal = startVal + "0";
	}
		
	return newVal;
}

function checkDropDown(obj, objName) {
	if (obj.selectedIndex == 0) {
		strValidation = strValidation + objName + " is required.";
		return false;
	}
	return true;
}

function checkNumeric(obj, objName, intMin, intMax) {
	
	var reg = /^([0-9])$/;
	
	//if (intMin > 0 || intMax > 0) {
		//var rg = new RegExp(reg,"ig"); 
	//}
	
	var strVal = obj.value;
	
	var strValid = "0123456789.,+ ";
	
	for (i = 0;  i < strVal.length;  i++)
	{
		ch = strVal.charAt(i);

		if (strValid.indexOf(ch) == -1) {
			strValidation = strValidation + objName + " must be a numeric value.";
			return false;
		}
	}
	
	if (intMin > 0 || intMax > 0) {
		if (strVal < intMin) {
				strValidation = strValidation + objName + " must be atleast " + intMin + ".";
				return false;
		}
	
		if (strVal > intMax) {
				strValidation = strValidation + objName + " can not be higher than " + intMax + ".";
				return false;
		}
	}
	
	return true;
}

function checkNumericReg(obj, objName, intMin, intMax) {
	
	var numericReg = new RegExp(/^((?:\+|\-|\$)?(?:\d+|\d{1,3}(?:\,\d{3})*)(?:\.\d+)?(?:[a-zA-Z]{2}|\%)?)$/);
	
	//var reg = new RegExp(/^[-+]?\d*\.?\d*$/);
		
	strVal = obj.value;
	
	if (!numericReg.test(strVal)){
		return false;
	}

	return true;
}


function getReturnDate(obj, intNoOfDays) {

	if (!checkNumeric(intNoOfDays,'No Of Days')){
		return false;	 
	}
	intNoOfDays = parseInt(intNoOfDays);

	var strVal = obj.value;
	
	var intDay = strVal.substring(0,2);
	var intMonth = strVal.substring(3,5);
	var intYear = strVal.substring(6,10);
	
	
	var startDate = new Date(intYear,intMonth-1,intDay);
	
	var newDate = new Date(startDate.getYear(),startDate.getMonth(),startDate.getDate()+intNoOfDays);
	
	var strNewDate = newDate.getDate() + "/" + (newDate.getMonth()+1) + "/" + newDate.getYear();
		
	return strNewDate;
}

function isFutureDate(strDate, noOfDays, objName) {
	
	var intDate = strDate.substring(0,2);
	var intMonth = strDate.substring(3,5);
	var intYear = strDate.substring(6,11);
		
	var testDate = new Date(intYear, (intMonth-1), intDate);
	var dateNow = new Date();
	
	if (testDate < dateNow) {
		strValidation = strValidation + "The date for " + objName + " must be a future date.<br>";
		return false;
	} else {
		dateNow.setDate(dateNow.getDate() + (noOfDays +0));
		if (testDate > dateNow) {
			strValidation = strValidation + "The date for " + objName + " cannot exceed " + noOfDays + " days in the future.<br>";
			return false;
		}
	}
	
	return true;
}

function checkDate(obj, objName) {
	
	strVal = obj.value;

	if (strVal.length != 10) {
		strValidation = strValidation + objName + " is an invalid date.  It must be in the format dd/mm/yyyy.<br>";		
		return false;
	}

	var strValid = "0123456789/";
	
	for (i = 0;  i < strVal.length;  i++)
	{
		ch = strVal.charAt(i);
		
		if (strValid.indexOf(ch) == -1) {
			strValidation = strValidation + objName + " is an invalid date.  It must be in the format dd/mm/yyyy.<br>";
			return false;
		}
	}

	if (strVal.charAt(2) != "/") {
		strValidation = strValidation + objName + " is an invalid date.  It must be in the format dd/mm/yyyy.<br>";
		return false;
	}

	if (strVal.charAt(5) != "/") {
		strValidation = strValidation + objName + " is an invalid date.  It must be in the format dd/mm/yyyy.<br>";
		return false;
	}
	
	return true;

}


function checkDateReg(obj, objName) {
	
	var dateReg = new RegExp(/^(?=\d)(?:(?!(?:(?:0?[5-9]|1[0-4])(?:\.|-|\/)10(?:\.|-|\/)(?:1582))|(?:(?:0?[3-9]|1[0-3])(?:\.|-|\/)0?9(?:\.|-|\/)(?:1752)))(31(?!(?:\.|-|\/)(?:0?[2469]|11))|30(?!(?:\.|-|\/)0?2)|(?:29(?:(?!(?:\.|-|\/)0?2(?:\.|-|\/))|(?=\D0?2\D(?:(?!000[04]|(?:(?:1[^0-6]|[2468][^048]|[3579][^26])00))(?:(?:(?:\d\d)(?:[02468][048]|[13579][26])(?!\x20BC))|(?:00(?:42|3[0369]|2[147]|1[258]|09)\x20BC))))))|2[0-8]|1\d|0?[1-9])([-.\/])(1[012]|(?:0?[1-9]))\2((?=(?:00(?:4[0-5]|[0-3]?\d)\x20BC)|(?:\d{4}(?:$|(?=\x20\d)\x20)))\d{4}(?:\x20BC)?)(?:$|(?=\x20\d)\x20))?((?:(?:0?[1-9]|1[012])(?::[0-5]\d){0,2}(?:\x20[aApP][mM]))|(?:[01]\d|2[0-3])(?::[0-5]\d){1,2})?$/);
	
	strVal = obj.value;
	
	if (!dateReg.test(strVal)){
		return false;
	}
	
	return true;
}

function checkRequired(obj, objName) {
	strVal = obj.value;

	if (strVal == "" || strVal.charAt(0) == " ") {
		strValidation = strValidation + objName + " must have a value.<br>";
		
		return false;
	}
	
	return true;
}



function checkMinLength(obj, minLength, objName) {
	strVal = obj.value;

	if (strVal.length < minLength) {
		strValidation = strValidation + objName + " must be atleast " + minLength + " characters.<br>";
		
		return false;
	}
	
	return true;
}

function checkEmail(obj, objName) {
	
	strVal = obj.value;
	
	strPos1 = strVal.indexOf("@");
	strPos2 = strVal.indexOf(".", strPos1);
	
	if (strPos1 == -1 || strPos2 == -1) {
		strValidation = strValidation + objName + " is not valid.<br>";
		
		return false;
	}
	
	return true;
}

function checkEmailReg(obj, objName) {
	strVal = obj.value;
	
	var emailRegExp = /^[\w-]+(\.[\w-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)*?\.[a-z]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?$/;	
	
	if (!emailRegExp.test(strVal)){
		return false;
	}
	
	return true;
}


function checkTextAreaML(obj, maxLength, objName){
	strVal = obj.value;

	if (strVal.length > maxLength) {
		strValidation = strValidation + objName + " is " + strVal.length + " characters and can not be more then " + maxLength + " characters.<br>";
		
		return false;
	}
	
	return true;
}


function checkCheckBoxSelected(obj, maxNum, objName) {
		
	var intNumCheck = 0
		
	if(obj.type == "checkbox") {
		if (!obj.checked) {
			strValidation = strValidation + "Please make sure you have answered the '" + objName + "' question.<br>";
			return false;
		}
	} else {
		for (i = 0;  i < obj.length;  i++)
		{
			if (obj[i].checked){
				intNumCheck++;
			}
		}
		
		if (intNumCheck == 0) {
			strValidation = strValidation + "Please make sure you have answered the '" + objName + "' question.<br>";
			return false;
		}
	
		if (intNumCheck > maxNum) {
			strValidation = strValidation + objName + " can only have a maximum of " + maxNum + " options selected.<br>";
			return false;
		}
	}
	return true;
}

function checkRadioSelected(obj, maxNum, objName) {
		
	var intNumCheck = 0
		
	for (i = 0;  i < obj.length;  i++)
	{
		if (obj[i].checked){
			intNumCheck++;
		}
	}

	if (intNumCheck == 0) {
		strValidation = strValidation + "Please make sure you have answered the '" + objName + "' question.<br>";
		return false;
	}

	return true;
}

function checkUKPhoneNumberReg(obj, objName){
	var phoneNumberReg = new RegExp(/^(\+44\s?7\d{3}|\(?07\d{3}\)?)\s?\d{3}\s?\d{3}$/);
	
	strVal = obj.value;
	
	if (!phoneNumberReg.test(strVal)){
		return false;
	}
	
	return true; 
}

function checkUKPostCodeReg(obj, objName) {
	var postCodeReg =  new RegExp(/^(([a-zA-Z]{1,2}[0-9][0-9a-zA-Z]{0,1})\ ([0-9][a-zA-Z]{2}))|(GIR\ 0AA)$/); 

	strVal = obj.value;
	
	if (!postCodeReg.test(strVal)){
		return false;
	}
	
	return true; 
}

function dateDiff(stDate,edDate,ret) {
	
	if (!checkDate(stDate, "Departure Date")) {
		return false;
	}
	if (!checkDate(edDate, "Return Date")) {
		return false;
	}
	
	var intStartDay = stDate.value.substring(0,2);
	var intStartMonth = stDate.value.substring(3,5);
	var intStartYear = stDate.value.substring(6,10);

	var intEndDay = edDate.value.substring(0,2);
	var intEndMonth = edDate.value.substring(3,5);
	var intEndYear = edDate.value.substring(6,10);


	var start = new Date(intStartYear,(intStartMonth-1),intStartDay); 

	
	var end = new Date(intEndYear,(intEndMonth-1),intEndDay);
	
	//ret should contain one of the following, defaults to milliseconds 
	
	if(ret=='days') {  
		return Math.floor((end.getTime() - start.getTime()) / (24*60*60*1000));  
	} else if(ret=='hours') {  
		return Math.floor((end.getTime() - start.getTime()) / (60*60*1000));  
	} else if(ret=='minutes') {  
		return Math.floor((end.getTime() - start.getTime()) / (60*1000));  
	} else if(ret=='seconds') {   
		return Math.floor((end.getTime() - start.getTime()) / 1000);
	} else {  
		return Math.floor(end.getTime() - start.getTime());  
	} 

} 

function setValToDisabled(objName, val){
	document.getElementById(objName).disabled = false;
	document.getElementById(objName).value = val;
	document.getElementById(objName).disabled = true;
}

function isFutureDate(strDate, noOfDays, objName) {

	var intDate = strDate.substring(0,2);
	var intMonth = strDate.substring(3,5);
	var intYear = strDate.substring(6,11);

	var testDate = new Date(intYear, (intMonth-1), intDate);
	var dateNow = new Date();

	if (Math.floor((testDate.getTime() - dateNow.getTime()) / (24*60*60*1000)) < 0 ) {
		alert("The date for " + objName + " must be a future date.");
		return false;
	} else {
		if (noOfDays > 0) {
			dateNow.setDate(dateNow.getDate() + (noOfDays +0));

			if (Math.floor((testDate.getTime() - dateNow.getTime()) / (24*60*60*1000)) > 0) {
				alert("The date for " + objName + " cannot exceed " + noOfDays + " days in the future.");
				return false;
			}
		}
	}

	return true;
}

function checkBothDates(departureDate, returnDate){
	
	var frm = document.quote;
	
	if (!departureDate.value == ""  && !returnDate.value == ""){
		if (checkDate(departureDate, 'Departure Date') && checkDate(returnDate, 'Return Date')){
			
			//create the two dates as objects and do compare: Math.floor((return_date .getTime() - departure_date.getTime()) / (24*60*60*1000)) < 0
			
			//if (frm.departure_date.value >= frm.return_date.value){
			//	alert("Return Date must be greater than the Departure Date");
			//}else{
				return true;
			//}
		}
	}

	return false;
}
