/* JavaScript Data Validation Utilities
 *	Author: Sam Tsvilik
 *
 */

	function isEmpty(str) {
		str = String(str);
		var pattern = /\w+/;
		return !pattern.test(str);
	}
	
	function isEmail(str) {
		str = String(str);
		var pattern = /^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/;
		return pattern.test(str);
	}

	function isInteger(str) {
		str = String(str);
		var pattern = /^(([0-9]+)$)/;
		return pattern.test(str);
	}
	//Checks if number is numeric
	function isNumeric(str) {
		str = String(str);
		var pattern = /^((-)?([0-9]*)((\.{0,1})([0-9]+))?$)/;
		return pattern.test(str);
	}
	//Checks if number is a float
	function isFloat(str) {
		str = String(str);
		var pattern = /^((-)?([0-9]*)((\.{0,1})([0-9]+))?$)/;
		return pattern.test(str);
	}
	//Checks if number is an integer
	function isCurrency(str) {
		str = String(str);
		var pattern = /^((-)?([0-9]{1,3})(\,[0-9]{3})*?((\.{0,1})([0-9]+))?$)/;
		return pattern.test(str);
	}
	//Checks if number is Alphanumeric
	function isAlphanumeric(str) {
		str = String(str);
		var pattern = /^\w+$/;
		return pattern.test(str);
	}
	
	//Checks for a valid credit card number format
	function isValidCreditCardNumber(cardNumber, cardType)
	{
	  var isValid = false;
	  var ccCheckRegExp = /[^\d ]/;
	  isValid = !ccCheckRegExp.test(cardNumber);
	
	  if (isValid)
	  {
		var cardNumbersOnly = cardNumber.replace(/ /g,"");
		var cardNumberLength = cardNumbersOnly.length;
		var lengthIsValid = false;
		var prefixIsValid = false;
		var prefixRegExp;
	
		switch(cardType)
		{
		  case "mastercard":
			lengthIsValid = (cardNumberLength == 16);
			prefixRegExp = /^5[1-5]/;
			break;
	
		  case "visa":
			lengthIsValid = (cardNumberLength == 16 || cardNumberLength == 13);
			prefixRegExp = /^4/;
			break;
	
		  case "amex":
			lengthIsValid = (cardNumberLength == 15);
			prefixRegExp = /^3(4|7)/;
			break;
	
		  default:
			prefixRegExp = /^$/;
			alert("Card type not found");
		}
	
		prefixIsValid = prefixRegExp.test(cardNumbersOnly);
		isValid = prefixIsValid && lengthIsValid;
	  }
	
	  if (isValid)
	  {
		var numberProduct;
		var numberProductDigitIndex;
		var checkSumTotal = 0;
		var digitCounter = cardNumberLength - 1;
		do {
		  checkSumTotal += parseInt (cardNumbersOnly.charAt(digitCounter));
		  digitCounter--;
		  numberProduct = String((cardNumbersOnly.charAt(digitCounter) * 2));
		  for (var productDigitCounter = 0;
			productDigitCounter < numberProduct.length; 
			productDigitCounter++)
		  {
			checkSumTotal += 
			  parseInt(numberProduct.charAt(productDigitCounter));
		  }
		} while(digitCounter--);
	
		isValid = (checkSumTotal % 10 == 0);
	  }
	
	  return isValid;
	}
