//Function to validate whether title of each passenger is entered or not
function ValidateTitle()
{
	var titles = null ;
	var titleEntered ;
	for (var room = 1; room <= 8; room ++)
	{
		if ((document.getElementsByName("title" + room + "_" + 1) == null || document.getElementsByName("title" + room + "_" + 1).length == 0) &&
			(document.getElementsByName("sn_title" + room + "_" + 1) == null || document.getElementsByName("sn_title" + room + "_" + 1).length == 0))
			break;
			
		for (i = 1;; i ++)
		{
			if (document.getElementsByName("title" + room + "_" + i) == null || document.getElementsByName("title" + room + "_" + i).length == 0)
				break;
			if (!validatePaxTitle("title" + room + "_" + i))
				return false;
		}
		for (i = 1;; i ++)
		{
			if (document.getElementsByName("sn_title" + room + "_" + i) == null || document.getElementsByName("sn_title" + room + "_" + i).length == 0)
				break;
				
			if (!validatePaxTitle("sn_title" + room + "_" + i))
				return false;
		}
		for (i = 1;; i ++)
		{
			if (document.getElementsByName("ch_title" + room + "_" + i) == null || document.getElementsByName("ch_title" + room + "_" + i).length == 0)
				break;
			if (!validatePaxTitle("ch_title" + room + "_" + i))
				return false;
		}
	}
	return true;
}

function validatePaxTitle(name)
{
	titles = document.getElementsByName(name);
	titleEntered = false;
	if (titles[0].tagName == "SELECT")
	{
		if (titles[0].value != '')
			titleEntered = true;
		else
			titles[0].focus();
	}
	else
	{
		for (j = 0; j < titles.length; j ++)
		{
			if (titles[j].checked)
			{
				titleEntered = true;
				break;
			}
		}
	}
	return titleEntered;
}

// Validates date
function IsValidDate(dateStr, format)
{
	if (format == null) 
	{
		format = g_locale == "FR" ? "DMY" : "MDY"; 
	}
	
	format = format.toUpperCase();
	if (format.length != 3) 
	{ 
		format = g_locale == "FR" ? "DMY" : "MDY"; 
	}
		
	if ( (format.indexOf("M") == -1) 
		|| (format.indexOf("D") == -1) 
		|| (format.indexOf("Y") == -1)) 
	{ 
		format = g_locale == "FR" ? "DMY" : "MDY"; 
	}
		
	if (format.substring(0, 1) == "Y") 
	{ 
		// If the year is first
		var reg1 = /^\d{2}(\-|\/|\.)\d{1,2}\1\d{1,2}$/
		var reg2 = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/
	} 
	else if (format.substring(1, 2) == "Y") 
	{ 
		// If the year is second
		var reg1 = /^\d{1,2}(\-|\/|\.)\d{2}\1\d{1,2}$/
		var reg2 = /^\d{1,2}(\-|\/|\.)\d{4}\1\d{1,2}$/
	}
	else 
	{ 
		// The year must be third
		var reg1 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{2}$/
		var reg2 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/
	}
   
	// If it doesn't conform to the right format (with either a 2 digit year or 4 digit year), fail
	if ( (reg1.test(dateStr) == false) && (reg2.test(dateStr) == false) ) 
	{ 
		return false; 
	}
   
	var parts = dateStr.split(RegExp.$1); // Split into 3 parts based on what the divider was
	
	// Check to see if the 3 parts end up making a valid date
   if (format.substring(0, 1) == "M") 
   { 
		var mm = parts[0]; 
	}
	else if (format.substring(1, 2) == "M") 
	{ 
		var mm = parts[1]; 
	}
	else
	{
		var mm = parts[2];
	}
	
	if (format.substring(0, 1) == "D")
	{ 
		var dd = parts[0]; 
	}
	else if (format.substring(1, 2) == "D") 
	{ 
		var dd = parts[1]; 
	}
	else
	{ 
		var dd = parts[2];
	}
	
	if (format.substring(0, 1) == "Y") 
	{ 
		var yy = parts[0]; 
	}
	else if (format.substring(1, 2) == "Y")
	{
		var yy = parts[1];
	}
	else
	{
		var yy = parts[2];
	}
   
	if (parseFloat(yy) <= 50) 
	{ 
		yy = (parseFloat(yy) + 2000).toString(); 
	}
	if (parseFloat(yy) <= 99)
	{ 
		yy = (parseFloat(yy) + 1900).toString();
	}
   
	var dt = new Date(parseFloat(yy), parseFloat(mm)-1, parseFloat(dd), 0, 0, 0, 0);
	if (parseFloat(dd) != dt.getDate()) 
	{ 
		return false; 
	}
	
	if (parseFloat(mm)-1 != dt.getMonth()) 
	{ 
		return false;
	}
	
	return true;
}

/// Validation functions
function CheckAdultAge(age)
{
	if(age != null && age>=1 && age <=99)
		return true;
	else
		return false;
}

function ValidCard(cardTypeCode, cardNumber)
{
	if (cardNumber == "" || isNaN(cardNumber))
		return false;
	
	var i;
	
	//1. Calculate Luhn Sum
	var sum = 0;
	var IsEvenDigit = false;	//First digit is not even, second is, first is not...
	var digit, digitSum1, digitSum2;
	for (i = cardNumber.length-1; i >= 0; i--)
	{
		digit = parseInt(cardNumber.substr(i,1));
		if (! IsEvenDigit)
			sum += digit;
		else
		{
			digitSum1 = digit * 2;
			digitSum2 =	parseInt((digitSum1 / 10).toString()) + digitSum1 % 10;
			sum += digitSum2;
		}
		IsEvenDigit = ! IsEvenDigit;
	}
	//2. Check Luhn Sum
	if (sum % 10 != 0) 
	{
		return false; //Luhn summ check failed - Number is not valId
	}
	//3. Check criterias specific to a selected credit card type 
	switch (cardTypeCode)
	{
		case "VI": //VISA
			if (!((cardNumber.length==13 || cardNumber.length==16) &&
				(cardNumber.substr(0,1) == "4")))
				return false;
			break;
		case "MC": //MasterCard
			if (!((cardNumber.length==16) &&
				(parseInt(cardNumber.substr(0,2)) >= 51 
				&& parseInt(cardNumber.substr(0,2)) <= 55)))
				return false;
			break;
		case "AM": //AMEX
			if (!((cardNumber.length==15) &&
				(cardNumber.substr(0,2)=="34" || cardNumber.substr(0,2)=="37")))
				return false;
			break;
	}
	
	return true; 
}	

function IsValidCardNumber(cardTypeCode, cardNumber)
{
	if(isNaN(cardNumber))
	{
		return false;
	}
	
	var i;
	
	//1. Calculate Luhn Sum
	var sum = 0;
	var IsEvenDigit = false;	//First digit is not even, second is, first is not...
	var digit, digitSum1, digitSum2;
	for (i = cardNumber.length-1; i >= 0; i--)
	{
		digit = parseInt(cardNumber.substr(i,1));
		if (! IsEvenDigit)
			sum += digit;
		else
		{
			digitSum1 = digit * 2;
			digitSum2 =	parseInt((digitSum1 / 10).toString()) + digitSum1 % 10;
			sum += digitSum2;
		}
		IsEvenDigit = ! IsEvenDigit;
	}
	//2. Check Luhn Sum
	if (sum % 10 != 0) 
	{
		return false; //Luhn summ check failed - Number is not valId
	}
	//3. Check criterias specific to a selected credit card type 
	switch (parseInt(cardTypeCode))
	{
		case 1: //VISA
			if (!((cardNumber.length==13 || cardNumber.length==16) &&
				(cardNumber.substr(0,1) == "4")))
				return false;
			break;
		case 2: //MasterCard
			if (!((cardNumber.length==16) &&
				(parseInt(cardNumber.substr(0,2)) >= 51 
				&& parseInt(cardNumber.substr(0,2)) <= 55)))
				return false;
			break;
		case 3: //AMEX
			if (!((cardNumber.length==15) &&
				(cardNumber.substr(0,2)=="34" || cardNumber.substr(0,2)=="37")))
				return false;
			break;
	}
	
	return true; 
}	

function IsAlphabeticOnly(value)
{	
	var regex=/^[a-zA-Z\u00E0\u00E2\u00E7\u00E8\u00E9\u00EA\u00EB\u00EE\u00F4\u00F9\u00FB\u00C0\u00C2\u00C7\u00C8\u00C9\u00CA\u00CB\u00CE\u00D4\u00D9\u00DB]+$/;
	return regex.test(value);
	
}

function IsAlphabeticAndSpaceOnly(value)
{	
	var regex = /^[a-zA-Z\u00E0\u00E2\u00E7\u00E8\u00E9\u00EA\u00EB\u00EE\u00F4\u00F9\u00FB\u00C0\u00C2\u00C7\u00C8\u00C9\u00CA\u00CB\u00CE\u00D4\u00D9\u00DB]+[ ]+[a-zA-Z\u00E0\u00E2\u00E7\u00E8\u00E9\u00EA\u00EB\u00EE\u00F4\u00F9\u00FB\u00C0\u00C2\u00C7\u00C8\u00C9\u00CA\u00CB\u00CE\u00D4\u00D9\u00DB]+$/;
	return regex.test(value);
}

function IsAlphabeticAndOrSpaceOnly(value)
{	
	var regex=/^[A-Za-z \u00E0\u00E2\u00E7\u00E8\u00E9\u00EA\u00EB\u00EE\u00F4\u00F9\u00FB\u00C0\u00C2\u00C7\u00C8\u00C9\u00CA\u00CB\u00CE\u00D4\u00D9\u00DB]+$/;
	return regex.test(value);
}

function IsAlphanumeric(value)
{	
	var regex=/^[A-Za-z\u00E0\u00E2\u00E7\u00E8\u00E9\u00EA\u00EB\u00EE\u00F4\u00F9\u00FB\u00C0\u00C2\u00C7\u00C8\u00C9\u00CA\u00CB\u00CE\u00D4\u00D9\u00DB0-9 ]+$/;
	return regex.test(value);
}

function IsUrlSafe(value)
{	
	var regex=/^[<>''""&%]+$/;
	return !regex.test(value);
}

function IsNumeric(value)
{	
	var regex=/^[0-9]+$/;
	//var regex=/^\d+\.\d{2}$/;
	return regex.test(value);
}

function IsDecimal(value)
{	
	var regex=/^\s*(\+|-)?((\d+(\.\d+)?)|(\.\d+))\s*$/;
	return regex.test(value);
}

function IsValidCardName(value)
{	
	var regex=/^[a-zA-Z_ \u00E0\u00E2\u00E7\u00E8\u00E9\u00EA\u00EB\u00EE\u00F4\u00F9\u00FB\u00C0\u00C2\u00C7\u00C8\u00C9\u00CA\u00CB\u00CE\u00D4\u00D9\u00DB-]+$/;
	return regex.test(value);
}

function IsValidStreetAddress(value)
{	
	var regex=/^[^@<>\\\/]+$/;
	return ( regex.test(value));
}

function IsValidAirportCode(value)
{	
	var regex=/^[a-zA-Z]{3}$/;
	return ( regex.test(value));
}

function CheckPostalCode(countryCode, value)
{
	var regex;
	switch(countryCode.toUpperCase())
	{
		case "US":
		case "UNITED STATES":
			regex=/(^\d{5}$)/;
			break;
		case "CA":
		case "CANADA":
			regex = /^\D{1}\d{1}\D{1}\-?\d{1}\D{1}\d{1}$/;
			break;
		default:
			return true;
	}
	return regex.test(value);
}

function IsDateOk(date)
{
	var dateSelected = new Date(date);
	var mm = dateSelected.getMonth() + 1;
	if (isNaN(mm))
	{
		return false;
	}
	var dd = dateSelected.getDate();
	if (isNaN(dd))
	{
		return false;
	}
	var yy = dateSelected.getFullYear();
	if (isNaN(yy))
	{
		return false;
	}
	var dateString = mm + "/" + dd + "/" + yy;
	return IsValidDate(dateString, "MDY");
}

function ValidPhone(number)
{
	if (number.length >= 10 && number.length <= 14)
	{
		var regex = /^\(?\d{3}\)?\.?-?\s*\d{3}\s*-?\.?\d{4}$/;	//	/^[0-9 \.\(\)-]+$/;
		return regex.test(number);
	}
	else
		return false;
}

function emailCheck(emailStr)
{
	if (emailStr=="")
	{
		return true;
	}
	
	var emailPat=/^(.+)@(.+)$/;
	var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
	var validChars="\[^\\s" + specialChars + "\]";
	var quotedUser="(\"[^\"]*\")";
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom=validChars + '+';
	var word="(" + atom + "|" + quotedUser + ")";
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");

	var matchArray=emailStr.match(emailPat);

	if (matchArray==null) 
	{
		return false;
	}

	var user=matchArray[1];
	var domain=matchArray[2];

	for (i=0; i<user.length; i++) 
	{
		if (user.charCodeAt(i)>127) 
		{
			return false;
		}
	}

	for (i=0; i<domain.length; i++) 
	{
		if (domain.charCodeAt(i)>127) 
		{
			return false;
		}
	}

	if (user.match(userPat)==null)
	{
		return false;
	}

	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) 
	{
		for (var i=1;i<=4;i++) 
		{
			if (IPArray[i]>255) 
			{
				return false;
			}
		}
		return true;
	}

	var atomPat=new RegExp("^" + atom + "$");
	var domArr=domain.split(".");
	var len=domArr.length;

	for (i=0;i<len;i++) 
	{
		if (domArr[i].search(atomPat)==-1) 
		{
			return false;
		}
	}

	if (len<2) 
	{
		return false;
	}

	return true;
}