/*
 *	921
 *
 */

var defaultEmptyOK = false;

//set up basic character groups
var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyz";
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var whitespace = " \t\n\r";
var nameDelimiters = "-. ";
var decimalPointDelimiter = ".";
var daysInMonth = makeArrayFromString(31,29,31,30,31,30,31,31,30,31,30,31);

//set up allowed characters for specific data types

//phone numbers
var phoneNumberDelimiters = "()-. ";
var digitsInUSPhoneNumber = 10;
var validUSPhoneChars = digits + phoneNumberDelimiters;
var validWorldPhoneChars = digits + phoneNumberDelimiters + "+";

//electronic addresses
var validDomainNameChars = digits + uppercaseLetters + lowercaseLetters + "-_.";

//snail mail addresses
var addressDelimiters = ".,/-" + whitespace;
var validAddressCharacters = addressDelimiters + digits + uppercaseLetters + lowercaseLetters;

//US mail address parameters
var digitsInZIPCode1 = 5;
var digitsInZIPCode2 = 9;
var ZIPCodeDelimiters = "-";
var ZIPCodeDelimeter = "-";
var validZIPCodeChars = digits + ZIPCodeDelimiters;
var USStateCodes = "AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VI|VA|WA|WV|WI|WY|AE|AA|AE|AE|AP";
var USStateCodeDelimiter = "|";

//Canadian mail address parameters
var cdnProvCodes = "BC|AB|SK|MB|ON|QC|NF|PE|NS|NB|NT|YT|NU";
var postalCodeDelimiter = " ";
var validPostalCodeChars = digits + lowercaseLetters + uppercaseLetters + postalCodeDelimiter;
var charsInPostalCode = 6;
var cdnProvCodeDelimiter = "|";

//credit card parameters
var creditCardDelimiters = " -.";

function mouse_over(el)
{
	el.style.background = "#697478";
	el.style.color = "#ffffff";
	el.style.cursor = "pointer";
}
function mouse_out(el)
{
	el.style.background = "#ffffff";
	el.style.color = "#000000";
	el.style.cursor = "default";
}
function ValidPhoneNumber(PhoneNumber)
{
	var PNum = new String(PhoneNumber);

	//  555.555.5555
	//	555-555-5555
	//	(555)555-5555
	//	(555) 555-5555

	var regex = /^[0-9]{3,3}\-[0-9]{3,3}\-[0-9]{4,4}$|^\([0-9]{3,3}\) [0-9]{3,3}\-[0-9]{4,4}$|^\([0-9]{3,3}\)[0-9]{3,3}\-[0-9]{4,4}$|^[0-9]{3,3}\.[0-9]{3,3}\.[0-9]{4,4}$/;

	return regex.test(PNum);
}
function ValidZipCode(ZipCode)
{
	//Your zip code must contain 5 or 9 digits.
	// 9 digit zip codes should contain no spaces and a
	// hyphen before the last 4 digits.

	var stringValue = new String(ZipCode);
	var stringLength = stringValue.length;

	if ((stringLength!=5)&&(stringLength!=9)&&(stringLength!=10))
		return false;

	switch (stringLength)
	{
		case 5:
			for (var i = 0; i < stringLength; i++)
			{
				value = stringValue.charAt(i)
				if (!((value >= 0) && (value <=9)))
					return false;
			}
			break;
		case  9:
			for (var i = 0; i < stringLength; i++)
			{
				value = stringValue.charAt(i)
				if (!((value >= 0) && (value <=9)))
					return false;
			}
			break;
		case 10:
			var zip=stringValue.substring(0,5)
			var symbol=stringValue.substring(5,6)
			var plus4=stringValue.substring(6,10)

			if(symbol != "-")
				return false;

			for (var i = 0; i < zip.length; i++)
			{
				value = zip.charAt(i)
				if (!((value >= 0) && (value <=9)))
					return false;
			}
			for (var i = 0; i < plus4.length; i++)
			{
				value = plus4.charAt(i)
				if (!((value >= 0) && (value <=9)))
					return false;
			}
			break;
		}
	return true;
}
function numbers_only(e)
{
	var keyCode = e.keyCode ? e.keyCode : e.which ? e.which : ex.charCode;
	var keychar = String.fromCharCode(keyCode);

	if ((keyCode == null) || (keyCode == 0) || (keyCode == 8) ||
		(keyCode == 9) || (keyCode == 13) || (keyCode == 27) || (keyCode == 45))
		return true;
	else if (("1234567890").indexOf(keychar) > -1)
		return true;
	else
		return false;
}
function handle_enter (field, e)
{
	var keyCode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;
	if (keyCode == 13)
	{
		var i;
		for (i = 0; i < field.form.elements.length; i++)
			if (field == field.form.elements[i])
				break;
		i = (i + 1) % field.form.elements.length;
		field.form.elements[i].focus();
		return false;
	}
	else
		return true;
}
function isEmail(s)
{
	if (isEmpty(s))
	{
		if (isEmail.arguments.length == 1)
			return defaultEmptyOK;
		else
			return (isEmail.arguments[1] == true);
	}

	if (isWhitespace(s))
		return false;

	var i = 1;
	var sLength = s.length;
	while ((i < sLength) && (s.charAt(i) != "@"))
		i++;

	if ((i >= sLength) || (s.charAt(i) != "@"))
		return false;
	else
		atloc = i;

	j = i+1;
	i += 1;
	while ((j < sLength) && (validDomainNameChars.indexOf(s.charAt(j)) != -1))
		j++;

	if (j < sLength)
		return false;

	while ((i < sLength) && (s.charAt(i) != "."))
		i++;

	if (i == sLength)
		return false;

	if (i == (atloc +1))
		return false;

	k = atloc+1;
	while (k < sLength)
	{
		if ((s.charAt(k) == ".") && (s.charAt(k+1) == "."))
			return false;

		k++;
	}
	l = sLength;
	while ((i < sLength -2) && (l != i) && (s.charAt(l) != "."))
		l = l-1

	if ((i >= sLength - 2) || (s.charAt(i) != ".") || (l >= sLength - 2))
		return false;
	else
		return true;
}
function checkZIPCode (theField, emptyOK)
{
	if (checkZIPCode.arguments.length == 1)
   	emptyOK = defaultEmptyOK;

  if ((emptyOK == true) && (isEmpty(theField.value)))
   	return true;
	else
	{
		var normalizedZIP = stripCharsInBag(theField.value, ZIPCodeDelimiters);
      if (!isZIPCode(normalizedZIP, false))
         return false;
      else
			{
         theField.value = reformatZIPCode(normalizedZIP);
         return true;
      }
   }
}
function reformatZIPCode (ZIPString)
{
	if (ZIPString.length == 5)
   	return ZIPString;
	else
		return (reformat (ZIPString, "", 5, "-", 4));
}
function isZIPCode (s)
{
	if (isEmpty(s))
	{
   	if (isZIPCode.arguments.length == 1)
   		return defaultEmptyOK;
		else
      return (isZIPCode.arguments[1] == true);
	}
   return (isInteger(s) && ((s.length == digitsInZIPCode1) || (s.length == digitsInZIPCode2)));
}
function checkUSPhone(theField, emptyOK)
{
	if (checkUSPhone.arguments.length == 1)
		emptyOK = defaultEmptyOK;

	if ((emptyOK == true) && (isEmpty(theField.value)))
		return true;
	else
	{
		var normalizedPhone = stripCharsInBag(theField.value, phoneNumberDelimiters);
		if (!isUSPhoneNumber(normalizedPhone, false))
	      return false;
		else
		{
	   	theField.value = reformatUSPhone(normalizedPhone);
	    return true;
		}
	}
}
function isUSPhoneNumber(s)
{
	if (isEmpty(s))
	{
   	if (isUSPhoneNumber.arguments.length == 1)
			return defaultEmptyOK;
		else
			return (isUSPhoneNumber.arguments[1] == true);
	}
	return (isInteger(s) && s.length == digitsInUSPhoneNumber)
}
function reformatUSPhone(USPhone)
{
	return (reformat (USPhone, "(", 3, ") ", 3, "-", 4));
}
function makeArray(n)
{
   for (var i = 1; i <= n; i++)
      this[i] = 0;

   this[length] = n;
   return this;
}
function makeArrayFromString()
{
   for (var i = 1; i <= makeArrayFromString.arguments.length; i++)
      this[i] = makeArrayFromString.arguments[i];

   this[length] = makeArrayFromString.arguments.length;
   return this;
}
function isEmpty(s) {
	return ((s == null) || (s.length == 0));
}
function isWhitespace(s)
{
	var i;

	if (isEmpty(s))
		return true;

	for (i = 0; i < s.length; i++)
	{
		var c = s.charAt(i);
		if (whitespace.indexOf(c) == -1) return false; // not whitespace
	}
	return true;
}
function stripCharsInBag(s, bag)
{
  var i;
  var returnString = "";
  for (i = 0; i < s.length; i++)
  {
      // Check that current character isn't whitespace.
      var c = s.charAt(i);
      if (bag.indexOf(c) == -1) returnString += c;
  }
  return returnString;
}
function stripCharsNotInBag(s, bag)
{
  var i;
  var returnString = "";
  for (i = 0; i < s.length; i++)
  {
      var c = s.charAt(i);
      if (bag.indexOf(c) != -1) returnString += c;
  }
	return returnString;
}
function isLetter(c)
{
   return (((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")));
}
function isDigit (c)
{
   return ((c >= "0") && (c <= "9"));
}
function isLetterOrDigit(c)
{
   return (isLetter(c) || isDigit(c));
}
function isInteger(s)
{
  var i;
  if (isEmpty(s))
  {
     if (isInteger.arguments.length == 1)
     	return defaultEmptyOK;
     else
     	return (isInteger.arguments[1] == true);
	}
  for (i = 0; i < s.length; i++)
  {
      var c = s.charAt(i);
      if (!isDigit(c)) return false;
  }
  return true;
}
function reformat(s)
{
  var arg;
  var sPos = 0;
  var resultString = "";
  for (var i = 1; i < reformat.arguments.length; i++)
  {
     arg = reformat.arguments[i];
     if (i % 2 == 1)
     	resultString += arg;
     else
			{
         resultString += s.substring(sPos, sPos + arg);
         sPos += arg;
     }
  }
  return resultString;
}
function checkCreditCard (cardType, theField)
{
    var normalizedCCN = stripCharsInBag(theField.value, creditCardDelimiters)
    if (!isCardMatch(cardType, normalizedCCN))
       return false;
    else
    {  theField.value = normalizedCCN
       return true
    }
}
function isCreditCard(st)
{
	if ((st.length > 19) && (st.length < 15))
   	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);
}
function isVisa(cc)
{
  if (((cc.length == 16) || (cc.length == 13)) && (cc.substring(0,1) == 4))
    return isCreditCard(cc);
  return false;
}
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;
}
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;
}
function isCardMatch (cardType, cardNumber)
{
	cardType = cardType.toUpperCase();
	var doesMatch = true;
	if ((cardType == "VISA") && (!isVisa(cardNumber)))
		doesMatch = false;
	if ((cardType == "MASTERCARD") && (!isMasterCard(cardNumber)))
		doesMatch = false;
	if ((cardType == "AMEX") && (!isAmericanExpress(cardNumber)))
		doesMatch = false;
	return doesMatch;
}