function Validate() {
}

Validate.prototype.isAlphaNumeric = function(string) {
  var invalidCharsRegExp = /[^a-z\d ,'-]/i;
  var isValid = !(invalidCharsRegExp.test(string));
  
  return isValid;
};

Validate.prototype.isNotAlphaNumeric = function(string) {
  var invalidCharsRegExp = /[^a-z\d ,'-]/i;
  var isValid = invalidCharsRegExp.test(string);
  
  return isValid;
};

Validate.prototype.isAlpha = function(string) {
  var invalidCharsRegExp = /[^a-z ,'-]/i;
  var isValid = !(invalidCharsRegExp.test(string));
  
  return isValid;
};

Validate.prototype.isNotAlpha = function(string) {
  var invalidCharsRegExp = /[^a-z ,'-]/i;
  var isValid = invalidCharsRegExp.test(string);
  
  return isValid;
};

Validate.prototype.isNameAddress = function(string) {
  var invalidCharsRegExp = /[^a-z\d \/&'-]/i;
  var isValid = !(invalidCharsRegExp.test(string));
  
  return isValid;
};

Validate.prototype.isNotNameAddress = function(string) {
  var invalidCharsRegExp = /[^a-z\d \/&'-]/i;
  var isValid = (invalidCharsRegExp.test(string));
  
  return isValid;
};

Validate.prototype.isNumeric = function(string) {
  var invalidCharsRegExp = /[^\d]/;
  var isValid = !(invalidCharsRegExp.test(string));
  
  return isValid;
};

Validate.prototype.isNotNumeric = function(string) {
  var invalidCharsRegExp = /[^\d]/;
  var isValid = invalidCharsRegExp.test(string);
  
  return isValid;
};

Validate.prototype.isInteger = function(string) {
  var invalidCharsRegExp = /[^\d-]/;
  var isValid = !(invalidCharsRegExp.test(string));
  
  return isValid;
};

Validate.prototype.isNotInteger = function(string) {
  var invalidCharsRegExp = /[^\d-]/;
  var isValid = invalidCharsRegExp.test(string);
  
  return isValid;
};

Validate.prototype.isFloat = function(string) {
  var invalidCharsRegExp = /[^\d\.-]/;
  var isValid = !(invalidCharsRegExp.test(string));
  
  return isValid;
};

Validate.prototype.isNotFloat = function(string) {
  var invalidCharsRegExp = /[^\d\.-]/;
  var isValid = invalidCharsRegExp.test(string);
  
  return isValid;
};

Validate.prototype.isCurrency = function(currency) {
  var validFormat = /^\$?[1-9]\d{0,2}(\d)*(\.\d{0,2})?$/;
  var isValid = validFormat.test(currency);
  
  return isValid;
};

Validate.prototype.isNotCurrency = function(currency) {
  var validFormat = /^\$?[1-9]\d{0,2}(\d)*(\.\d{0,2})?$/;
  var isValid = !(validFormat.test(currency));
  
  return isValid;
};

Validate.prototype.isValidPassword = function(password, min, max) {
  var invalidCharsRegExp = /[^a-z\&\!\@\#\$\%\^\*\(\)\d]/i;
  var isValid = !(invalidCharsRegExp.test(password));
  
  if (isValid) {
    isValid = (password.length >= min && password.length <= max);
  }    
  
  return isValid;
};

Validate.prototype.isNotValidPassword = function(password, min, max) {
  var invalidCharsRegExp = /[^a-z\&\!\@\#\$\%\^\*\(\)\d]/i;
  var isValid = invalidCharsRegExp.test(password);
  
  if (isValid) {
    isValid = (password.length >= min && password.length <= max);
  }    
  
  return isValid;
};

Validate.prototype.isUsZip = function(zipCode) {
  var validFormat = /^\d{5}(-? ?\d{4})?$/;
  var isValid = validFormat.test(zipCode);
  
  return isValid;
};

Validate.prototype.isNotUsZip = function(zipCode) {
  var validFormat = /^\d{5}(-? ?\d{4})?$/;
  var isValid = !(validFormat.test(zipCode));
  
  return isValid;
};

Validate.prototype.isCanZip = function(zipCode) {
  var validFormat = /^[a-z]{1}[\d{1}][a-z]{1}[\d]{1}[a-z]{1}[\d]{1}$/i;
  var isValid = validFormat.test(zipCode);
  
  return isValid;
};

Validate.prototype.isNotCanZip = function(zipCode) {
  var validFormat = /^[a-z]{1}[\d{1}][a-z]{1}[\d]{1}[a-z]{1}[\d]{1}$/i;
  var isValid = !(validFormat.test(zipCode));
  
  return isValid;
};

Validate.prototype.isEmail = function(eMail) {
  var validFormat = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/i;
  var isValid = validFormat.test(eMail);
  
  return isValid;
};

Validate.prototype.isNotEmail = function(eMail) {
  var validFormat = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/i;
  var isValid = !(validFormat.test(eMail));
  
  return isValid;
};

Validate.prototype.isPhoneNbr = function(string) {
  var validFormat = /^(\(?\d{3}\)? ?\d{3}( ?|-?)\d{4}|\d{3}\.\d{3}\.\d{4}|\d{3}-\d{3}-\d{4}|\d{3}\d{3}\d{4})?$/;
  var isValid = validFormat.test(string);
  
  return isValid;
};

Validate.prototype.isNotPhoneNbr = function(string) {
  var validFormat = /^(\(?\d{3}\)? ?\d{3}( ?|-?)\d{4}|\d{3}\.\d{3}\.\d{4}|\d{3}-\d{3}-\d{4}|\d{3}\d{3}\d{4})?$/;
  var isValid = !(validFormat.test(string));
  
  return isValid;
};

Validate.prototype.isCreditCardNumber = function(cardNumber, cardType) {
  var isValid = false;
  var ccCheckRegExp = /[^\d]/;
  isValid = !ccCheckRegExp.test(cardNumber);

  if (isValid) {  	
		var cardNumberLength = cardNumber.length;
		var parity = cardNumberLength % 2;
		var lengthIsValid = false;
		var prefixIsValid = false;
		var prefixRegExp;
			
		switch(cardType) {
	    case 'mscd':
	    	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;
		  
		  case 'disc':
			  lengthIsValid = (cardNumberLength == 16);
			  prefixRegExp = /^6011/;
			  break;
			 
		  case 'dine':
			  lengthIsValid = (cardNumberLength == 14);
			  prefixRegExp = /^3[0,6,8]/;
			  break;
					
		  default:
		  	prefixRegExp = /^$/;
		    break;
		}
	  prefixIsValid = prefixRegExp.test(cardNumber);
		isValid = prefixIsValid && lengthIsValid;
  }
  
  if (isValid) {
    // Loop through each digit
    var checkSumTotal = 0;
    for (i = 0; i < cardNumberLength; i++) {
      var digit = cardNumber.charAt(i);
      // Multiply alternate digits by two
      if (i % 2 == parity) {
        digit = digit * 2;
        // If the sum is greater than 9, subtract 9
        if (digit > 9) {
          digit = digit - 9;
        }
      }
      // running total
      checkSumTotal = checkSumTotal + parseInt(digit);
    }

    // If the checkSumTotal mod 10 equals 0, the cardNumber is valid
    isValid = (checkSumTotal % 10 == 0);
	}
  return isValid;
};

Validate.prototype.isCreditCardExpiry = function(expDate, transDate) {
  var isValid = expDate.length == 4 ? true : false;
  var isValidDate = false;
  
  if (isValid) {
	  var expDateObj = new Date('20' + expDate.substring(2, 4), expDate.substring(0, 2), 0, 0, 0, 0);
	  var transDateObj = new Date(transDate.substring(2, 6), transDate.substring(0, 2), 0, 0, 0, 0);
	  
	  if (expDateObj.getTime() > transDateObj.getTime()) {
	  	isValidDate = true;
	  }
  }
  return isValidDate;
};

Validate.prototype.isPositiveNumber = function(p_inputVal) {
  oneDecimal = false;
  inputStr = p_inputVal.toString();
  for (var i = 0; i < inputStr.length; i++)
  {
    var oneChar = inputStr.charAt(i);
    if (i == 0 && oneChar == "-") return false;
    if (oneChar == "." && !oneDecimal)
    {
      oneDecimal = true;
      continue;
    }
    if (oneChar < "0" || oneChar > "9") return false;
  }
  return true;
};

Validate.prototype.isDate = function(p_inputVal) {
	if (p_inputVal == null) {
			return false;
		}	

	var datePat = /^(\d{2})(\/)(\d{2})(\/)(\d{4})$/;
	if (!p_inputVal.match(datePat)) {
		return false;
	}

	return !isNaN(new Date(p_inputVal));
};
//Validate.prototype.isDate = function(p_inputVal) {
//	var bLeapYear = false;
//	var strLength = p_inputVal.length;
//
//	if (strLength > 10) {return false;}
//	
//	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
//	var matchArray = p_inputVal.match(datePat);
//	
//	if (matchArray == null) {
//		return false;
//	}
//	
//	// parse date into variables
//	var month = matchArray[1]; 
//	var day = matchArray[3];
//	var year = matchArray[5];	
//
//	// Year validation, get information about corresponding months
//	if (year.length != 4)	{
//		return false;
//	}	else {
//		if (this.isPositiveNumber(year)) {
//			year = parseInt(year);
//			if (!(year >= 1700)) return false;
//
//			var arrNonLeapMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
//			var arrLeapMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
//    /* Check for leap year ..
//			1.Years evenly divisible by four are normally leap years, except for...
//			2.Years also evenly divisible by 100 are not leap years, except for...
//			3.Years also evenly divisible by 400 are leap years.
//     */
//			if ((year % 4) == 0) {
//				if ((year % 100) == 0 && (year % 400) != 0) {
//					bLeapYear = false;
//				}	else {
//					bLeapYear = true;
//				}
//			}	else {
//				bLeapYear = false;
//			}
//		}	else {
//			return false;
//		}	
//	}
//
//	// Month validation
//	if (!(this.isPositiveNumber(month))) {
//		return false;
//	}	else {
//		month = parseFloat(month);
//		if (!(month >= 1 && month <= 12)) {return false;}
//	}
//
//	// Day validation
//	if (!(this.isPositiveNumber(day))) {
//		return false;
//	}	else {
//		day = parseFloat(day);
//		if (bLeapYear) {
//			if (!(day >= 1 && day <= arrLeapMonth[month - 1])) {return false;}
//		} else {
//			if (!(day >= 1 && day <= arrNonLeapMonth[month - 1])) {return false;}
//		}
//	}
//	return true;
//};