// validation for e-mail
function isEmailAddr(email)
{
  var result = false
  var theStr = new String(email)
  var index = theStr.indexOf("@");
  if (index > 0)
  {
    var pindex = theStr.indexOf(".",index);
    if ((pindex > index+1) && (theStr.length > pindex+1))
	result = true;
  }
  return result;
}


function isEmailAddrOfficial(email)
{
	//alert("inside official mail check");
 // var result = false
  var theStr = new String(email)
  var index = theStr.indexOf("@");
   if (index > 0)
  {
    var pindex = theStr.indexOf(".",index);
    if ((pindex > index+1) && (theStr.length > pindex+1))
	{
	result = true;
	}
	else
	{
		result = false;
	}
	if(result = true)	
	{	
	 //var theStr = new String(email)
	 var domain = theStr.substring(index)
	 //alert(domain)
	  if ((domain=="@absiweb.com") || (domain=="@absicorp.com"))
	  {
		//alert("Congrats, your domain is allowed");
		result = true;
	  }
	  else
	  {
		alert("Please provide an Email-Id having absicorp.com or absiweb.com as domain name"); 
		result = false;
	  }
	}
  }
    return result; 
 
}

// this function used to check valid chars
function check_validchar(pattern,str)
{
  var re = new RegExp(pattern,"g");
  var arr = re.test(str);
   return arr;
}  

// get element value after removing leading and trailing spaces
function RemoveLTSpace(elemval)
{
	var val=elemval.replace(/\s*/,"")
	var val=val.replace(/\s*$/,"")
	return val;
}
function JSvalid_form(formnm)
{
formnm=eval(formnm);
for(var i=0;i<formnm.elements.length;i++)
	{
if(formnm.elements[i].alt){
// START CHECK FOR BLANK
var altval=formnm.elements[i].alt;
var altval1=altval.split("~DM~");
if(altval1[0]=="BC" && RemoveLTSpace(formnm.elements[i].value)=="")
		{
		formnm.elements[i].value=RemoveLTSpace(formnm.elements[i].value);
		alert("Please enter "+altval1[1]);
		formnm.elements[i].focus();
		return false;
		}
// END CHECK FOR BLANK
// VALID CHAR CHECK
if(altval1[2]!="" && formnm.elements[i].value!="")
	{
var re1 = new RegExp ('&q', 'g') ;
var pattern_val = altval1[2].replace(re1,'"') ;
var pattern="["+pattern_val+"]";
var re = new RegExp(pattern,"g");
if(re.test(formnm.elements[i].value)==true)
		{
		alert("Please avoid to enter \""+pattern_val+"\" in "+altval1[1]);
		formnm.elements[i].focus();
		formnm.elements[i].select();
		return false;
		}
	}
//START EMAIL CHECK
if(altval1[0]=="EMC")
{
  if (formnm.elements[i].value == "")
  {
    alert("Please enter a value for the \"email\" field.");
    formnm.elements[i].focus();
    return (false);
  }
  if (!isEmailAddr(formnm.elements[i].value))
  {
    alert("Please enter a complete email address in the form: yourname@yourdomain.com");
    formnm.elements[i].focus();
	formnm.elements[i].select();
    return (false);
  }
  if (formnm.elements[i].value.length < 3)
  {
    alert("Please enter at least 3 characters in the \"email\" field.");
    formnm.elements[i].focus();
	formnm.elements[i].select();
    return (false);
  }
}
// END EMAIL CHECK

//START OFFICIAL EMAIL CHECK
if(altval1[0]=="OEMC")
{
  if (formnm.elements[i].value == "")
  {
    alert("Please enter a value for the \"email\" field.");
    formnm.elements[i].focus();
    return (false);
  }
  if (!isEmailAddrOfficial(formnm.elements[i].value))
  {
    alert("Please provide email address in the form: yourname@yourdomain.com");
    formnm.elements[i].focus();
	formnm.elements[i].select();
    return (false);
  }
  if (formnm.elements[i].value.length < 3)
  {
    alert("Please enter at least 3 characters in the \"email\" field.");
    formnm.elements[i].focus();
	formnm.elements[i].select();
    return (false);
  }
  //isEmailAddrOfficial
}
// END OFFICIAL EMAIL CHECK


//START EMAIL CHECK
if(altval1[0]=="CEMC")
{
  if (formnm.elements[i].value == "")
  {
    alert("Please enter a value for the \"Confirm email\" field.");
    formnm.elements[i].focus();
    return (false);
  }
  if (!isEmailAddr(formnm.elements[i].value))
  {
    alert("Please enter a complete email address in the form: yourname@yourdomain.com");
    formnm.elements[i].focus();
	formnm.elements[i].select();
    return (false);
  }
  if (formnm.elements[i].value.length < 3)
  {
    alert("Please enter at least 3 characters in the \"Confirm email\" field.");
    formnm.elements[i].focus();
	formnm.elements[i].select();
    return (false);
  }

  if (formnm.elements[i].value != formnm.elements[i-1].value)
  {
    alert("Please enter correct \"Email Addresses\" field.");
    formnm.elements[i].focus();
	formnm.elements[i].select();
    return (false);
  }
  
}
// END EMAIL CHECK


	}
}
return true;
}

// function for password match
function password_match(pass1,pass2)
{
pass1=eval(pass1);
pass2=eval(pass2);
	if(pass1.value!=pass2.value)
	{
		return false;
	}
return true;
}


//function for validation of credit card

//CARD VERIFICATION HERE
requiredFields = new Array();
function checkRequired(id) {
	var errors = new Array();
	var cnt, x, id_element, true_id;
	if(!requiredFields)
		return true;
	if(requiredFields.length == 0)
		return true;
	if(id != '' && id != undefined) {
		for(x = 0; x < requiredFields.length; x++)
			if(requiredFields[x][0] == id)
				id_element = requiredFields[x];
		true_id = ((id_element[2] && document.getElementById("_"+id))?"_":"")+id;
		if(document.getElementById(true_id))
			if(document.getElementById(true_id).value == '' && (document.getElementById(true_id).type == 'text' || document.getElementById(true_id).type == 'password'))
				errors[0] = id_element;
	} else {
		cnt = 0;
		for(x = 0; x < requiredFields.length; x++) {
			true_id = ((requiredFields[x][2] && document.getElementById("_"+requiredFields[x][0]))?"_":"")+requiredFields[x][0];
			if(document.getElementById(true_id))
				if(document.getElementById(true_id).value == '' && (document.getElementById(true_id).type == 'text' || document.getElementById(true_id).type == 'password'))
					errors[cnt++] = requiredFields[x];
		}
	}

	if(errors.length == 0)
		return true;
	alert("The required field '"+errors[0][1]+"' is empty!");
	if(document.getElementById(errors[0][0]))
		document.getElementById(errors[0][0]).focus();
	return false;
}

var cctypes=new Array();
var cvm=new Array();
cctypes["VISA"] = "Visa";
cvm["VISA"] = "1";
cctypes["MC"] = "MasterCard";
cvm["MC"] = "1";
cctypes["AMEX"] = "American Express";
cvm["AMEX"] = "1";
cctypes["DICL"] = "Diners Club";
cvm["DICL"] = "";
cctypes["JCB"] = "JCB";
cvm["JCB"] = "";
cctypes["CARTE"] = "Carte Blanche";
cvm["CARTE"] = "";
cctypes["ABC"] = "Australian BankCard";
cvm["ABC"] = "";
cctypes["DINO"] = "Discover/Novus";
cvm["DINO"] = "";
cctypes["SW"] = "Switch";
cvm["SW"] = "";
cctypes["SO"] = "Solo";
cvm["SO"] = "";
cctypes["ERT"] = "enRoute";
cvm["ERT"] = "";
var txt_cc_number_invalid = "Credit Card Number is invalid ! Please correct";
var current_year = parseInt('2008');
var current_month = parseInt('10');


function isSwitchSolo(cardType, cardNbr) {

var result    = false;

var switchRules  = new Array("490302,490309,18,1","490335,490339,18,1","491101,491102,16,1","491174,491182,18,1","493600,493699,19,1","564182,564182,16,2","633300,633300,16,0","633301,633301,19,1","633302,633349,16,0","675900,675900,16,0","675901,675901,19,1","675902,675904,16,0","675905,675905,19,1","675906,675917,16,0","675918,675918,19,1","675919,675937,16,0","675938,675940,18,1","675941,675949,16,0","675950,675962,19,1","675963,675997,16,0","675998,675998,19,1","675999,675999,16,0");
var soloRules    = new Array("633450,633453,16,0","633454,633457,16,0","633458,633460,16,0","633461,633461,18,1","633462,633472,16,0","633473,633473,18,1","633474,633475,16,0","633476,633476,19,1","633477,633477,16,0","633478,633478,18,1","633479,633480,16,0","633481,633481,19,1","633482,633489,16,0","633490,633493,16,1","633494,633494,18,1","633495,633497,16,2","633498,633498,19,1","633499,633499,18,1","676700,676700,16,0","676701,676701,19,1","676702,676702,16,0","676703,676703,18,1","676704,676704,16,0","676705,676705,19,1","676706,676707,16,2","676708,676711,16,0","676712,676715,16,0","676716,676717,16,0","676718,676718,19,1","676719,676739,16,0","676740,676740,18,1","676741,676749,16,0","676750,676762,19,1","676763,676769,16,0","676770,676770,19,1","676771,676773,16,0","676774,676774,18,1","676775,676778,16,0","676779,676779,18,1","676780,676781,16,0","676782,676782,18,1","676783,676794,16,0","676795,676795,18,1","676796,676797,16,0","676798,676798,19,1","676799,676799,16,0");

	switch(cardType) {
		case "SO": thisRules = soloRules;
			break;
		case "SW": thisRules = switchRules;
			break;
		default  : thisRules = new Array();
			break;
	}

	var ndx;
	var ruleDetails;
	var done = false;
	for(ndx = 0 ; ndx < thisRules.length && !done ; ++ndx) {
		thisRule    = thisRules[ndx];
		ruleDetails = thisRule.split(",");

		var hiPrefix        = ruleDetails[0];
		var loPrefix        = ruleDetails[1];
		var valLength       = parseInt(ruleDetails[2]);
		var issueLength     = ruleDetails[3];
		var startDateLength = ruleDetails[4];

		var cardPrefix = cardNbr.substr(0,hiPrefix.length);
		if(cardPrefix >= hiPrefix && cardPrefix <= loPrefix) {
			if(cardNbr.length == valLength) {
				result = true;
				done   = true;
			}
		}
	}

	return result;
}

/*
* This function cheks the checksum of CreditCard
* @param cc - the string with credit card number
* @param accepted - the array of allowed CC types
* if(accepted==null) { all CC types are allowed }
*/
function isCreditCard(cc,accepted) {
	cc=String(cc);
	if(cc.length<4 || cc.length>30)
		return false;

// Start the Mod10 checksum process...
	var checksum=0;

// Add even digits in even length strings or odd digits in odd length strings.
	for (var location=1-(cc.length%2); location<cc.length; location+=2) {
		var digit=parseInt(cc.substring(location,location+1));
		if(isNaN(digit))
			return false;
		checksum+=digit;
	}

// Analyze odd digits in even length strings or even digits in odd length strings.
	for (var location=(cc.length%2); location<cc.length; location+=2) {
		var digit=parseInt(cc.substring(location,location+1));
		if(isNaN(digit))
			return false;
		if(digit<5)
			checksum+=digit*2;
		else
			checksum+=digit*2-9;
	}

	if(checksum%10!=0)
		return false;

	if(accepted!=null) {
		var checkPresent = false;
		var accepted_array = new Array("Diners Club","American Express","JCB","Carte Blanche","Visa","MasterCard","Australian BankCard","Discover/Novus","Switch","Solo", "enRoute");

		for (var i in accepted_array) {
			if(accepted[0] == accepted_array[i])
				checkPresent = true;
		}

	    var type="not";
		var accept=false;

		if(checkPresent == true) {
			var t=parseInt(cc.substring(0,4)), l=cc.length;

			if(t>=3000 && t<3060 && l==14)
				type="Diners Club";
			else if(isSwitchSolo("SW",cc.substring(0, cc.length)))
				type="Switch";
			else if(isSwitchSolo("SO",cc.substring(0, cc.length)))
				type="Solo";
			else if(t>=3400 && t<3500 && l==15)
				type="American Express";
			else if(t>=3528 && t<3590 && l==16)
				type="JCB";
			else if(t>=3600 && t<3700 && l==14)
				type="Diners Club";
			else if(t>=3700 && t<3800 && l==15)
				type="American Express";
			else if(t>=3800 && t<3890 && l==14)
				type="Diners Club";
			else if(t>=3890 && t<3900 && l==14)
				type="Carte Blanche";
			else if(t>=4000 && t<5000 && (l==13 || l==16))
				type="Visa";
			else if(t>=5100 && t<5600 && l==16)
				type="MasterCard";
			else if(t==5610 && l==16)
				type="Australian BankCard";
			else if(t==6011 && l==16)
				type="Discover/Novus";
			else if(t==2014 && l==15)
				type="enRoute";
			else if(t==2149 && l==15)
				type="enRoute";
			else
				type="not";
// accepted and recognized types are not equal
		} else {
// we don't know this card's type so pass it as correct
			return true;
		}

		return (accepted[0]==type);
	}

  return true;
}

function checkCCNumber(field_cc,field_accepted,amt,cardholder) {
	var cc=field_cc.value;
	var accepted=null;

	if(cardholder.value==""){
		alert("Please Enter a card holder name");
		cardholder.focus();
		return false;
	}


	if(field_accepted!=null)
	    accepted=new Array(cctypes[field_accepted.value]);
	if (isCreditCard(cc,accepted))
	return true;
	else {
		alert(txt_cc_number_invalid);
		field_cc.focus();
		field_cc.select();
		return false;
	}
}

/*
* This function checks CVV2 field
*/
function checkCVV2(cvv2,cc) {
	if(!cvv2 || !cc)
		return true;
	var num=cc.value;

	if (cvm[num]=='')
		return true;
	cvv2 = cvv2.value;
	cvv2 = String(cvv2);

	if(cvv2.length==0) {
		alert("CVV2 is empty");
		return false;
	} else if(cvv2.length!=3 && cvv2.length!=4) {
		alert("CVV2 isn't correct");
		return false;
	}

	for (var location=0; location<cvv2.length; location++) {
		var digit=parseInt(cvv2.substring(location,location+1));
		if(isNaN(digit)) {
			alert("CVV2 must be a number");
			return false;
		}
	}

	return true;
}

/*
* This function checks expiration CC date
*/
function checkExpirationDate(ed_month, ed_year) {
	var yy = parseInt(ed_year.value);
	var mm = parseInt(ed_month.value);
	if(yy < 1000)
		yy += 2000;
	if(yy < current_year || (yy == current_year && mm < current_month)) {
		alert("Is this card expired?");
		return false;
	}
	return true;
}

function validateFloat(obj, nLength, nPrecision){
	var strVal = new String(obj.value);
	var nIndexOfDot = strVal.indexOf('.');
	var nValidLength = nIndexOfDot==-1?strVal.length:strVal.length+1
	if(nValidLength<strVal.length){
		alert('Maximum length can be '+nLength);
		strVal = strVal.substring(0,nValidLength);
	}
	if(strVal.charAt(strVal.length-1)!='.' || nIndexOfDot!=(strVal.length-1)){
		if(isNaN(parseFloat(strVal))){
			strVal='0';
		}
			obj.value=parseFloat(strVal);
	}
	if(-1!=nIndexOfDot && strVal.substring(nIndexOfDot+1).length>nPrecision){
		strVal=strVal.substring(0, strVal.length-1);
	obj.value=strVal;
	}
}

function chkAddress(txtAddress)
{
 if (txtAddress.value == "")
  {
    alert("Please enter the Address");
    txtAddress.focus();
    return (false);
  }
  return true;
}

function chkZip(txtZip)
{
 if (txtZip.value == "")
  {
    alert("Please enter the Zip Code");
    txtZip.focus();
    return (false);
  }
  return true;
}
