/* 
================================================

Original Author: Surabhi Gupta.
Creation Date: September 2007.
Rewritten, nourished, nurtured, reared, raised, fostered and sustained by: Ayoosh Joshi.
Modified by: Rajesh Parbat, Shailendra Kumar, Tejveer Singh, Rahul Tyagi, Vipin Bhardwaj.
Purpose: Serves as a common repository for all JS based validations. (or atleast, that was intended!) 
Copyright ©: QuadLabs Technologies Ltd. All Rights Reserved.

================================================
*/


var wrongInput;
var rightType;
var commonName;
var dom =new DOM();

function validateMisc(txtSet, ddlSet)
{
	if((validateText(txtSet) == true) && (validateDDL(ddlSet) == true))
		return true;
	else
		return false;
}


function validateText(txtNameSet)
{
	var retVal = true;
	var errMsg="";
	//	errMsg = "The form has certain errors; please rectify the following fields before proceeding:";
	var nameIdx;
	
	for (nameIdx in txtNameSet)
	{
		var shortName = txtNameSet[nameIdx];
		
		// Get the expanded NAME for this input element.
		var longName = getElementNameWithSeparator(shortName, false, "$");
		
		// Get all the input elements with this NAME.
		var txtSet = dom.$Name(longName);

		var idx;
		for (idx = 0; idx < txtSet.length; idx++)
		{
			var txt = txtSet[idx];
			
			// Get all the span errorlabel elements linked to this input.
			var errLabelSet = dom.$Name("lblErr" + shortName);
			var errLabel = errLabelSet[idx];
			
			// Get the span errorHeader element for the Error summary.
			var errHeaderText = getElementWithSeparator("lblErrHeaderText", false, "", "_");
			
			// Get the span ErrorSummary element.
			var err = getElementWithSeparator("lblErrSummary", false, "", "_");
            
			if (checkIfEmpty(txt) == true)
			{
				errLabel.style.visibility = "visible";
				var txtCommonName = getCommonName(shortName);
				errMsg += "•\t" + txtCommonName+"\n";
				retVal = false;
			}
			else
			{
			
				// Special case for txtEmail
				if (shortName == "txtEmail")
				{
					if (ValidateEmail(txt) == false)
					{
						errLabel.style.visibility = "visible";
						var txtCommonName = getErrMsg(shortName);
						errMsg += "\t\t•\t" + txtCommonName+"\n";
						retVal = false;
					}
					else
					{
						errLabel.style.visibility = "hidden";
					}
				}
				// Special case for txtPhone
				else if (shortName == "txtPhone")
				{
				  if (ValidatePhone(txt) == false)
					{
						errLabel.style.visibility = "visible";
						var txtCommonName = getErrMsg(shortName);
						errMsg += "\t\t•\t" + txtCommonName+"\n";
						retVal = false;
					}
					else
					{
						errLabel.style.visibility = "hidden";
					}
				}
				// Special case for Name fields
				else if (shortName.search("Name") >= 0)
				{
					var isFName = false;
					var nameValid = false;
					
					// Special case for First Name fields.
					if (shortName.search("FName") >= 0)
						isFName = true;
						
					if (ValidateName(txt, isFName) == false)
					{
						errLabel.style.visibility = "visible";
						var txtCommonName = getErrMsg("Name");
						errMsg += "\t\t•\t" + txtCommonName+"\n";
						retVal = false;
					}
					else
					{
						errLabel.style.visibility = "hidden";
					}
				}
				else
				{
					errLabel.style.visibility = "hidden";
					errMsg = "";
				}
			}
		}
	}
	 dom.SetElementInnerText(err,errMsg);
//	err.innerText = errMsg;
	err.style.visibility = (retVal == true) ? "hidden" : "visible";
	errHeaderText.style.visibility = (retVal == true) ? "hidden" : "visible";
	//err.focus();
	return retVal;
}

function validateCheck(chkNameSet)
{
  var retVal = true;
	var errMsg="";
	var nameIdx = 0;
	var err = getElementWithSeparator("lblErrSummary", false, "", "_")
	dom.SetElementInnerText(err, "");
	
	for (nameIdx = 0; nameIdx < chkNameSet.length; nameIdx++)
	{
		var shortName = chkNameSet[nameIdx];
		var longName = getElementNameWithSeparator(shortName, false, "_");
		var chk = document.getElementById(longName);

		var errLabel = getElementWithSeparator("lblErr" + shortName, false, "", "_")
		var err = getElementWithSeparator("lblErrSummary", false, "", "_")
		
		if (chk.checked == false)
		{
			errLabel.style.visibility = "visible";
			var txtCommonName = getCommonName(shortName);
			errMsg += "\t\t•\t" + txtCommonName+"\n";
			retVal = false;
		}
		else
		{
			errLabel.style.visibility = "hidden";
			errMsg = "";
		}
	}
	var innText = dom.GetElementInnerText(err) + errMsg;
	dom.SetElementInnerText(err, innText);
	err.style.visibility = ((retVal == true) && (err.innerText == errMsg)) ? "hidden" : "visible";
	//err.focus();
	return retVal;
}

function validateDDL(ddlNameSet)
{
	var nameIdx;
	var retVal = true;
//	var numAdt;
//	var numChd;
//	var numInf;
	var errMsg="";
	var errHeaderText;
	var ErrSummary;
	//var errMsg = "The form has certain errors; please rectify the following fields before proceeding:";
	for (nameIdx in ddlNameSet)
	{
		var shortName = ddlNameSet[nameIdx];
		if(shortName=='ddlDay' || shortName=='ddlMonth' || shortName=='ddlYear')
		{
			// There are 3 types of pax - Adult, Child and Infant.
			// Don't waste time validating the Adult DOB.
			// And don't unecessarily convolute the logic.
	    for (i = 2; i <= 3; i++)
	    {
		    var longName = getDDLNameWithSeparator(shortName, true, "dob" + i, "$");
		    var ddlSet = dom.$Name(longName);
		    
		    var errLabelSet = dom.$Name("lblErrDate" + i);

		    for (var idx = 0; idx < ddlSet.length; idx++)
		    {
			    var errLabel = errLabelSet[idx];
			    var ddl = ddlSet[idx];

			    var err = getElementWithSeparator("lblErrSummary", false, "", "_");
			    errHeaderText = getElementWithSeparator("lblErrHeaderText", false, "", "_");
			    ErrSummary = dom.$("divErrSummary");
			    if (checkIfEmpty(ddl) == true)
			    {
				    errLabel.style.visibility = "visible";
				    var ddlCommonName = getCommonName(shortName);
				    errMsg += "\t\t•\t" + ddlCommonName+"\n";
				    retVal = false;
			    }
			    else
			    {
				    errLabel.style.visibility = "hidden";
			    }
		    }
	    }
		}
		else
		{
			var longName = getDDLNameWithSeparator(shortName, false, "", "$");
      var ddlSet = dom.$Name(longName);
  	
      var idx;
      for (idx = 0; idx < ddlSet.length; idx++)
      {
        var ddl = ddlSet[idx];
        var errLabelSet = dom.$Name("lblErr" + shortName);
        var errLabel = errLabelSet[idx];

        var err = getElementWithSeparator("lblErrSummary", false, "", "_");
        errHeaderText = getElementWithSeparator("lblErrHeaderText", false, "", "_");
        ErrSummary = dom.$("divErrSummary");
        if (checkIfEmpty(ddl) == true)
        {
          errLabel.style.visibility = "visible";
          var ddlCommonName = getCommonName(shortName);
          errMsg += "\t\t•\t" + ddlCommonName + "\n";
          retVal = false;
        }
        else
        {
          errLabel.style.visibility = "hidden";
        }
      }
		}
	}
	
	if (err != undefined)
	{
		dom.SetElementInnerText(err, errMsg);
		err.style.visibility = (retVal == true) ? "hidden" : "visible";
		errHeaderText.style.visibility = (retVal == true) ? "hidden" : "visible";
		//err.focus();
	}
	return retVal;
}

function checkIfEmpty(field)
{
	//if ((field.value == "") || (field.value == field.defaultValue) || (field.value == "0"))
	if ((field.value == "") || (field.value == "0"))
		return true;	// Field is empty !
	else
		return false;
}

function ValidateEmail(txtField)
{
	var reg = /^([0-9A-Za-zÀ-Ýà-ÿ]([-.\w]*[0-9A-Za-zÀ-Ýà-ÿ])*@([0-9A-Za-zÀ-Ýà-ÿ][-\w]*[0-9A-Za-zÀ-Ýà-ÿ]\.)+[A-Za-zÀ-Ýà-ÿ]{2,9})$/;
	var val = txtField.value;
	return reg.test(val);
}

function ValidatePhone(txtField)
{
//	var reg = /^[1-9][\d]{0,1}[\d]{0,1}(?:[\d][\d]{1,5}[\)|-][1-9][\d]{4,9}|[1-9][\d]{9})$/;
//	var val = txtField.value;
//	return reg.test(val);
	var reg = /^[\d\s]{9,14}$/;
	var val = txtField.value;
	
	if (txtField.length > 14)
	  return false
	else
	  return reg.test(val);
 }

function ValidateName(txtField, isFirstName)
{
	// Special characters disallowed in Passenger names as per GK sir - 14/07/2009.[Ayoosh]
	var reg;
	if (isFirstName == true)
		reg = /^[A-Za-z\s]{1,}$/;
	else
		reg = /^[A-Za-z]{2,}$/;
		
	var val = txtField.value;
	return reg.test(val);
}


function ValidateCC(sourceValidator, args)
{
var trCNumber=document.getElementById("ctl00_contentMain_trCNumber");
if(trCNumber.style.display=="none")
{
args.IsValid = true;
return;
}
else
{

	//type, ccnum
	//var re = null;
	var ccnum = args.Value;
	if(ccnum.charAt(0) == "X") 
	{
	args.IsValid = true;
  return;
	}
	
	if(ccnum=="")
	{
	sourceValidator.errormessage="Card Number is a Required Field.";//"Card Number is a Required Field.";
	args.IsValid = false;
return;
	}
	sourceValidator.errormessage="Credit Card number should be in correct format.";//"Credit Card number should be in correct format.";
	var ccType = getElement("ddlCard", false);
	if (ccType)
	{
		var val = ccType.value;
//		if (val == "0")
//		{
//			args.IsValid = false;
//			return;
//		}
		
//		if (type == "VI") {
//		// Visa: length 16, prefix 4, dashes optional.
//			re = /^4\d{3}-?\d{4}-?\d{4}-?\d{4}$/;
//		}
//		else if (type == "ZI")
//		{ // Mastercard: length 16, prefix 51-55, dashes optional.
//			re = /^5[1-5]\d{2}-?\d{4}-?\d{4}-?\d{4}$/;
//		}
//		else if (type == "DS")
//		{ // Discover: length 16, prefix 6011, dashes optional.
//			re = /^6011-?\d{4}-?\d{4}-?\d{4}$/;
//		}
//		else if (type == "AX")
//		{ // American Express: length 15, prefix 34 or 37.
//			re = /^3[4,7]\d{13}$/;
//		}
//		else if (type == "DC")
//		{ // Diners: length 14, prefix 30, 36, or 38.
//			re = /^3[0,6,8]\d{12}$/;
//		}
//		else if ((type == "DL") || (type == "EL") || (type == "MO") || (type == "VD") || (type == "SL") || (type == "SW"))
//		{
//			re = /^\d+$/
//		}
//		if (!re.test(ccnum))
//		{
//			args.IsValid = false;
//			return;
//		}
		// Remove all dashes for the checksum checks to eliminate negative numbers
		ccnum = ccnum.split("-").join("");
		// Checksum ("Mod 10")
		// Add even digits in even length strings or odd digits in odd length strings.
		var checksum = 0;
		for (var i=(2-(ccnum.length % 2)); i<=ccnum.length; i+=2)
		{
			checksum += parseInt(ccnum.charAt(i-1));
		}
		// Analyze odd digits in even length strings or even digits in odd length strings.
		for (var i=(ccnum.length % 2) + 1; i<ccnum.length; i+=2)
		{ 
			var digit = parseInt(ccnum.charAt(i-1)) * 2;
			if (digit < 10)
			{
				checksum += digit;
			}
			else
			{
				checksum += (digit-9);
			}
		}
		if ((checksum % 10) == 0)
		{
			args.IsValid = true;
		}
		else
		{
			args.IsValid = false;
		}
		return;
	}
	}
}

function ValidateTrip(ReqdFields, OptionalFields)
{

	var retVal = true;
	var ErrSummary;
	var errSummaryMsg="";
	//var errSummaryMsg = "The form has certain errors; please rectify the following fields before proceeding:";
	var errSummary = getElementWithSeparator("lblErrSummary", false, "", "_");
	
	var nameIdx;
	for (nameIdx in ReqdFields)
	{
		var shortName = ReqdFields[nameIdx];
		var errMsg = new Object();
		errMsg.value = "";
		retVal = ValidateSingleField(shortName, errMsg);
		errSummaryMsg += errMsg.value;
	}
	
	var retOptional = false;
	for (nameIdx in OptionalFields)
	{
		// Only iterate if all fields till now are invalid.
		if (retOptional == false)
		{
			var shortName = OptionalFields[nameIdx];
			var errMsg = new Object();
			retOptional = ValidateSingleField(shortName, errMsg);
		}
	}
	if (retOptional == false)
	{
		errSummaryMsg +="\t\t•\t" + "Atleast one of Booking Ref. or PNR No. are required." +"\n";
		retVal = false;
	}

	errSummary.innerText = errSummaryMsg;
	ErrSummary.style.display = (retVal == true) ? "none" : "block";
	return retVal;
}

function ValidateSingleField(shortName, errMsg)
{
	var retVal = true;
	var txt = getElementWithSeparator(shortName, false, "", "_");
	var errLabel = getElementWithSeparator("lblErr" + shortName, false, "", "_");

	if (checkIfEmpty(txt) == true)
	{
		errLabel.style.visibility = "visible";
		var txtCommonName = getCommonName(shortName);
		
		// Don't append error message for Optional fields.
		if (typeof(errMsg.value) == "undefined")
			errMsg.value = "";
		else
		{
			errMsg.value += "\t\t•\t" + txtCommonName+"\n";
		}
		errLabel.style.visibility = "visible";
		retVal = false;
	}
	else
	{
		errMsg.value = "";
		errLabel.style.visibility = "hidden";
	}
	return retVal;
}

function ValidatePhone1(source, args)
{

var text1=document.getElementById("ctl00$contentMain$Contacts1$txtPhoneH").value;
var text2=document.getElementById("ctl00$contentMain$Contacts1$txtPhoneMob").value;
var text3=document.getElementById("ctl00$contentMain$Contacts1$txtPhoneO").value;

if( (text1=="") && (text2 =="") && (text3==""))
{
args.IsValid = false;

return;
}
else
{
var reg=/^[\d]*$/;

if(text1 !="")
{
    if(!(reg.test(text1)))
    {
source.errormessage="Home Phone is incorrect";//"Home Phone is incorrect";
    args.IsValid = false;
    return;
    }
}
if(text2 !="")
{
 if(!(reg.test(text2)))
    {
source.errormessage="Mobile Number is incorrect";//"Mobile Number is incorrect";
    args.IsValid = false;
    return;
    }
}
if(text3 !="")
{
 if(!(reg.test(text3)))
    {
source.errormessage= "Office Phone is incorrect";//"Office Phone is incorrect";
    args.IsValid = false;
    return;
    }
}
}
args.IsValid=true;
 
}

 function ValidateCCType(sourceValidator, args)
{
	var ccType = getElement("ddlCard", false);
	var valCC=getElement("hdnValidateCC", false);
	if (ccType)
	{ 
		if (valCC.value == "true")
		{
			var optSkipPayment = getElement("optSkipPayment", false);
			if (optSkipPayment)
			{
				if(optSkipPayment.checked==true)
				{
					args.IsValid = true;	
					return;
				}
			}
		}
		else
		{
			args.isValid = true;
			return;
		}
	  var val = ccType.value;
		if (val == "0")
		{
			args.IsValid = false;
			return;
		}
		else
		{
		args.IsValid = true;
			return;
		}
	}
	return;

	}


function getCommonName(fieldName)
{
	var commonName;
	switch (fieldName)
	{
		case "chkIndRez":
			commonName = "Checkbox for Indian nationality is unchecked.";
			break;
		case "txtBookRefNo":
			commonName = "Booking Ref. No.";
			break;
		case "txtPNRNo":
			commonName = "PNR No.";
			break;
		case "ddlFLDepart":
			commonName = "Departure city is a required field.";
			break;
		case "ddlFLArrival":
			commonName = "Arrival city is a required field.";
			break;
		case "txtFLDepart":
			commonName = "Departure city";
			break;
		case "txtFLArrival":
			commonName =  "Arrival city";
			break;
		case "txtFName":
			commonName =  "First Name is a required field.";
			break;
		case "txtLName":
			commonName = "Last Name is a required field.";
			break;
		case "txtPhone":
			commonName = "Phone no. is a required field.";
			break;
		case "txtEmail":
			commonName = "Email address is a required field.";
			break;
		case "chkTerms":
			commonName = "Terms and Conditions is unchecked. Click Cancel below if you do not agree.";//"Terms and Conditions is unchecked. Click 'Cancel' below if you do not agree.";
			break;
		case "txtFLDepDate":
			commonName = "Flight Departure date";//"Flight Departure date";
			break;
		case "txtFLRetDate":
			commonName = "Flight Arrival date";//"Flight Arrival date";
			break;
		case "txtHTCity":
			commonName = "Hotel City";//"Hotel City";
			break;
		case "txtHTCheckIn":
			commonName = "Hotel Checkin date";//"Hotel Checkin date";
			break;
		case "txtHTCheckOut":
			commonName = "Hotel Checkout date";//"Hotel Checkout date";
			break;
		case "txtCRPickup":
			commonName = "Car Pickup point";//"Car Pickup point";
			break;
		case "txtCRPickupDate":
			commonName = "Driver\\'s age";//"Driver's age";
			break;
		case "txtCRPickupDate":
			commonName = "Car Pickup date";//"Car Pickup date";
			break;
		case "txtCRDropDate":
			commonName = "Car Drop date";//"Car Drop Date"
			break;
		case "txtINDepartDate":
			commonName = "Departure date";//Departure date
			break;
		case "txtINRetDate":
			commonName ="Return date"; //"Return date";
			break;
		case "ddlDay":
			commonName = "Day is blank. (DOB)";//"Day is blank. (DOB)";
			break;
		case "ddlMonth":
			commonName = "Month is blank. (DOB)";//"Month is blank. (DOB)";
			break;
		case "ddlYear":
			commonName = "Year is blank. (DOB)";//"Year is blank. (DOB)";
			break;
		case "ddlRooms":
		    commonName= "Room is not selected.";//"Room is not selected.";
		    break;
		case "ddlTravelWith":
				commonName = "Infants must be travelling with a particular adult.";//"Infants must be travelling with a particular adult.";
		case "txtPaxID":
				commonName = "~Translate~(Validations_PaxID)"; // ID number is a required field.
				break;
	}
	return commonName;
}

function getErrMsg(fieldName)
{
	var commonName;
	switch (fieldName)
	{
		case "txtPhone":
			commonName = "Please enter a valid Phone no.";//"Please enter a valid Phone no.";
			break;
		case "txtEmail":
			commonName = "Please enter a valid Email address."; //"Please enter a valid Email address.";
			break;
		case "Name":
			commonName ="Please enter a valid Name.";//"Please enter a valid Name.";
			break;
	}
	return commonName;
}

function ValidateCVV(sourceValidator, args)
{
var trCVV=document.getElementById("ctl00_contentMain_trCVV");
if(trCVV.style.display=="none")
{
args.IsValid = true;
return;
}
else
{
var CVV =args.Value;
if(CVV=="")
	{
	sourceValidator.errormessage= "CVV is a Required Field.";//"CVV is a Required Field.";
	args.IsValid = false;
return;
	}
	 var reg//=/^\d{3,4}$/;
			var ddlCard = document.getElementById("ctl00_contentMain_ddlCard");
		var CardCode=ddlCard.value;
		if(CardCode=="MX")
		{
		reg=/^\d{4}$/;
		}
		else
		{
		reg=/^\d{3}$/;
		}
	if(!(reg.test(CVV)))
    {
sourceValidator.errormessage= "CVV should be in correct format.";//"CVV should be in correct format.";
    args.IsValid = false;
    return;
    }
    else
    {
     args.IsValid = true;
    return;
    }
    }
}

function ValidateCCName(sourceValidator, args)
{
 var trCCName =document.getElementById("ctl00_contentMain_trCCName");
if(trCCName.style.display=="none")
{
args.IsValid = true;
return;
}

if(args.Value=="")
{
args.IsValid = false;
return;
}
else
{
  var _regex = new RegExp(/^[^\s][A-Za-zÀ-Ýà-ÿ\s]+$/)
    
   if (args.Value.match(_regex))
    {
    args.IsValid = true;
    return;
    }
    else
    {
    args.IsValid = false;
    return;
    }
}
}
