function isAlphaNumericPlus(string)
{
	var invalidCharactersRegExp = /[^a-z\d-&.' ]/i;
	var isValid = !(invalidCharactersRegExp.test(string));
	
	return isValid;
}

function isOnlyAlphaNumeric(string)
{
	var invalidCharactersRegExp = /[^a-z\d ]/i;
	var isValid = !(invalidCharactersRegExp.test(string));
	
	return isValid;
}

function isOnlyAlphaNumericNoSpace(string)
{
   var invalidCharactersRegExp = /[^a-z\d]/i;
   var isValid = !(invalidCharactersRegExp.test(string));
      
   return isValid;
}

function isOnlyAlphabetic(string)
{
	invalidCharactersRegExp = /[^a-z ]/i;
	var isValid = !(invalidCharactersRegExp.test(string));
	
	return isValid;
}

function isOnlyNumeric(string)
{
	var invalidCharactersRegExp = /[^\d,]/;
	var isValid = !(invalidCharactersRegExp.test(string));
	
	return isValid;
}

function isValidInteger(string)
{
	var invalidCharactersRegExp = /[^\d-]/;
	var isValid = !(invalidCharactersRegExp.test(string));
	
	return isValid;
}

function isValidFloatingPoint(string)
{
	var invalidCharactersRegExp = /[^\d\.-]/;
	var isValid = !(invalidCharactersRegExp.test(string));
	
	return isValid;
}

function isValidAge(age)
{
	var isValid = false;
	if (this.isOnlyNumeric(age))
	{
		isValid = (parseInt(age) > 0 && parseInt(age) < 140)
	}
	
	return isValid;
}

function isValidPassword(password)
{
	var invalidCharactersRegExp = /[^a-z\d]/i
	var isValid = !(invalidCharactersRegExp.test(password));
	if (isValid)
	{
		isValid = (password.length >= 8 && password.length <= 16);
	}
	return isValid;
}

function isValidTelephoneNum(telephoneNum)
{
   var validFormatRegExp = /^(\+\d{1,3} ?)?(\(\d{1,5}\)|\d{1,5}) ?-?\d{3,4} ?-?\d{0,7}(?: (x|xtn|extn?|extension)\.? ?\d{1,5})?$/i;
//Remember to put this regular expression on one line.
   var isValid = validFormatRegExp.test(telephoneNum);
   return isValid;
}

function isValidPostalCode(postalCode)
{
   var validFormat = /^(\d{5}(-\d{4})?|[a-z]{1,2}[\da-z]{1,2} ?\d[a-z][a-z])$/i
   var isValid = validFormat.test(postalCode);
   return isValid;
}

function isValidEmail(email)
{
   var validFormatRegExp = /^\w(\.?\w)*@\w(\.?[-\w])*\.([a-z]{3}(\.[a-z]{2})?|[a-z]{2}(\.[a-z]{2})?)$/i
   var isValid = validFormatRegExp.test(email);
   return isValid;
}

function isValidTime(time)
{
   var validFormatRegExp = /^[0-1]?\d:[0-5]\d$/
   var isValid = validFormatRegExp.test(time);
   return isValid;
}

function isValidDate(day, month,year)
{
	var isValid = true;
	
	if (this.isValidInteger(month)) {
		var enteredDate = new Date(year,month,day);
	} else {
		var enteredDate = new Date(day + " " + month + " " + year);
	}
	
	if (enteredDate.getDate() != day)
	{
		isValid = false;
	}
	return isValid;
}

function isValidDateOfBirth(day, month, year)
{
	var isValid = true;
	var nowDate = new Date();
	year = parseInt(year);
	dateOfBirth =  new Date(day + " " + month + " " + year);
	if (!this.isValidDate(day,month,year))
	{
		isValid = false;
	}
	else if (dateOfBirth > nowDate || (year + 140) < nowDate.getFullYear())
	{
		isValid = false;
	}
	return isValid;
}

function isValidCreditCardExpiry(expiresMonth, expiresYear)
{
	var isValid = true;
	var nowDate = new Date();
	if (expiresMonth < (nowDate.getMonth() + 1) && expiresYear <= nowDate.getFullYear())
	{
		isValid = false;
	}
	else if (expiresYear < nowDate.getFullYear())
	{
		isValid = false;
	}
	return isValid;
}

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;

		for (digitCounter = cardNumberLength - 1; digitCounter > 0; digitCounter--) {
			checkSumTotal += parseInt(cardNumbersOnly.charAt(digitCounter));	
			digitCounter--;
			
			numberProduct = new String((cardNumbersOnly.charAt(digitCounter) * 2));
		  
		  for (	var productDigitCounter = 0; productDigitCounter < numberProduct.length; productDigitCounter++ ) {
				checkSumTotal += parseInt(numberProduct.charAt(productDigitCounter));
		  }
		  
	  }
	  isValid = (checkSumTotal % 10 == 0);
  }
	return isValid;
}
