/*************************************************************************************************************
*	name:			validations.js
*	path:			/commonFiles/validations.js
*	description:	form validations in Javascript
*	created by:		Nimrod Lehavi @ 4/8/03
*	modified by:	Nimrod Lehavi @ 9/8/03
************************************************************************************************************/


//user and pass can be alphnumeric at least 5 characters
function isValidUserPass(str)
{
   	return /^[a-zA-Z0-9]{5,10}$/.test(str)
}

//ID Number shoud be 9 digits
function isIDNumber(str)
{
   	return /^[0-9]{9}$/.test(str)
}

//is only alphnumeric
function isAlphanumeric(str)
{
   	return /^[a-zA-Z0-9]+$/.test(str)
}

//is alphnumeric or "-" 
function isAlphabetic(str)
{
   	return /^[-a-zA-Z\s]+$/.test(str)
}

//is only numeric
function isNumeric(str)
{
   	return /^[0-9]\.?[0-9]?/.test(str)
}

//is correct phone number
function isPhone(str)
{
   	return /^[\\(\\)\+\-0-9 ]+$/.test(str)
}

//is correct email
function isEmail(str)
{
	return /^.+\@.+\..+$/.test(str)
}

function isZip(str)
{
   	return /^[-a-zA-Z0-9]+$/.test(str)
	//return /^[0-9]{5,9}$/.test(str)
}

function isXalphnumeric(str)
{
   	return /^[-a-zA-Z0-9\s\\.]+$/.test(str)
}





////////////////////////////////////////////////////////////////////////////////////////////////
function isCardMatch (cardType, cardNumber)
{
	cardType = cardType.toUpperCase();
	//alert("cardType is " + cardType +"\n" + "cardNumber is " + cardNumber)
	var doesMatch = false;

	if ((cardType == "VISA") && (isVisa(cardNumber)))
		doesMatch = true;
	if ((cardType == "MASTERCARD") && (isMasterCard(cardNumber)))
		doesMatch = true;
	if ((cardType == "AMERICAN EXPRESS") && (isAmericanExpress(cardNumber))) 
		doesMatch = true;
	if ((cardType == "DISCOVER") && (isDiscover(cardNumber)))
		doesMatch = true;
	if ((cardType == "JCB") && (isJCB(cardNumber)))
		doesMatch = true;
	if ((cardType == "DINERS") && (isDinersClub(cardNumber)))
		doesMatch = true;
	if ((cardType == "CARTEBLANCHE") && (isCarteBlanche(cardNumber)))
		doesMatch = true;
	if ((cardType == "ENROUTE") && (isEnRoute(cardNumber)))
		doesMatch = true;
	return doesMatch;
}  



function isCreditCard(st) {
  	if (st.length > 19)
    	return false;
  	sum = 0; 
	mul = 1; 
	l = st.length;
  	for (i = 0; i < l; i++) {
    	digit = st.substring(l-i-1,l-i);
    	tproduct = parseInt(digit ,10)*mul;
    	if (tproduct >= 10)
      		sum += (tproduct % 10) + 1;
    	else
      		sum += tproduct;
    		if (mul == 1)
      			mul++;
    		else
      			mul--;
  	}
  	if ((sum % 10) == 0)
    	return true;
  	else
    	return false;
} 



//Sample number: 4111 1111 1111 1111 (16 digits)
function isVisa(cc)
{
  if (((cc.length == 16) || (cc.length == 13)) &&
      (cc.substring(0,1) == 4))
    return isCreditCard(cc);
  return false;
}  




//Sample number: 5500 0000 0000 0004 (16 digits)
function isMasterCard(cc)
{
  firstdig = cc.substring(0,1);
  seconddig = cc.substring(1,2);
  if ((cc.length == 16) && (firstdig == 5) &&
      ((seconddig >= 1) && (seconddig <= 5)))
    return isCreditCard(cc);
  return false;

} 




//Sample number: 340000000000009 (15 digits)
function isAmericanExpress(cc)
{
  firstdig = cc.substring(0,1);
  seconddig = cc.substring(1,2);
  if ((cc.length == 15) && (firstdig == 3) &&
      ((seconddig == 4) || (seconddig == 7)))
    return isCreditCard(cc);
  return false;
} 




//Sample number: 30000000000004 (14 digits)
function isDinersClub(cc)
{
  firstdig = cc.substring(0,1);
  seconddig = cc.substring(1,2);
  if ((cc.length == 14) && (firstdig == 3) &&
      ((seconddig == 0) || (seconddig == 6) || (seconddig == 8)))
    return isCreditCard(cc);
  return false;
}




function isCarteBlanche(cc)
{
  return isDinersClub(cc);
}




function isDiscover(cc)
{
  first4digs = cc.substring(0,4);
  if ((cc.length == 16) && (first4digs == "6011"))
    return isCreditCard(cc);
  return false;

} 





//Sample number: 201400000000009 (15 digits)
function isEnRoute(cc)
{
  first4digs = cc.substring(0,4);
  if ((cc.length == 15) &&
      ((first4digs == "2014") ||
       (first4digs == "2149")))
    return isCreditCard(cc);
  return false;
}




function isJCB(cc)
{
  first4digs = cc.substring(0,4);
  if ((cc.length == 16) &&
      ((first4digs == "3088") ||
       (first4digs == "3096") ||
       (first4digs == "3112") ||
       (first4digs == "3158") ||
       (first4digs == "3337") ||
       (first4digs == "3528")))
    return isCreditCard(cc);
  return false;
} // END FUNCTION isJCB()




function isAnyCard(cc)
{
  if (!isCreditCard(cc))
    return false;
  if (!isMasterCard(cc) && !isVisa(cc) && !isAmericanExpress(cc) && !isDinersClub(cc) &&
      !isDiscover(cc) && !isEnRoute(cc) && !isJCB(cc)) {
    return false;
  }
  return true;
} 

////////////////////////////////////////////////////////////////////////////////////////////////



