/*
validation.js

Form Field Validation Routines

isEmpty(s)							Checks whether string s is null or 0 length
isLetter (c)						Check whether character c is a letter
isDigit (c)							Check whether character c is a digit
isInteger (s [,eok])				True if all characters in string s are numbers
isFloat (s [,eok])				    True if all characters in string s are a float number.
isValidPIN(s [,eok])				True if string s is a valid PIN number
isPINNumber (s, type [,eok])		True if string s is a valid PIN number
isAcctNumber (s, [,eok])			True if string s is a valid account number
isAbbrevAcct (s [,eok])				True if string s is a valid abbreviated purolator acct # (minus 01 prefix)
isPostalCode (s [,eok])				true if string s is a valid Postal Code
isZipCode (s [,eok])				True if string s is a valid US Zip Code
isZipOrPostal (s [,eok])				True if string s is a valid US Zip Code or Canada Postal Code
isPhoneNumber (s [,eok])			True if string s is a valid Phone Number
isInterPhone  (s [,eok])			True if string s is a valid Phone Number
isMoney (s [,eok])					True if string s is a valid monetary ammount
isProvinceCode (s [,eok])			True if string s is a valid Province Code
isStateCode (s [,eok])				True if string s is a valid US State Code
isEmail (s [,eok])					True if string s is a valid email address
isIntegerInRange (s, a, b [,eok])	True if string s is between  a and b
isYear (s [,eok])					True if string s is a valid 4 digit year
isMonth (s [,eok])					True if string s is a valid month number
isDay (s [,eok])					True if string s is a valid day number
daysInFebruary (year)				Number of days in February for given year
isDate (year, month, day)			True if string arguments form a valid date
isTime (s, [,eok])					True if string s is a valid time value
isCreditCard (s)					True if string s is a valid credit card #
isVisa (s)							True if string s is a valid Visa account #
isMastercard (s)					True if string s is a valid Mastercard account #
isAmericanExpress (s)				True if string s is a valid American Express account #
isDinersClub (s)					True if string s is a valid Diners Club account #

*/


//--------------- validation constants -------------

var valDigits = "0123456789";
var valLowerCase = "abcdefghijklmnopqrstuvwxyz";
var valUpperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

var valMoneyDelimiterE = ".";
var valMoneyDelimiterF = ",";

var valPhoneNumberDelimiters = "()- .";
var valValidPhoneChars = valDigits + valPhoneNumberDelimiters;
var valDigitsInPhoneNumber = 10;

var valZipCodeDelimiters = "-";
var valValidZipCodeChars = valDigits + valZipCodeDelimiters;
var valDigitsInZipCode1 = 5;
var valDigitsInZipCode2 = 9;

var valPostalCodeDelimiters = " ";
var valValidPostalCodeChars = valDigits + valLowerCase + valUpperCase + valPostalCodeDelimiters;
var valCharsInPostalCode = 6;

var valCreditCardDelimiters = " ";

var valDefaultEmptyOK = true;

var valDaysInMonth = new Array(12);
valDaysInMonth[1] = 31;
valDaysInMonth[2] = 29;  // must programmatically check this
valDaysInMonth[3] = 31;
valDaysInMonth[4] = 30;
valDaysInMonth[5] = 31;
valDaysInMonth[6] = 30;
valDaysInMonth[7] = 31;
valDaysInMonth[8] = 31;
valDaysInMonth[9] = 30;
valDaysInMonth[10] = 31;
valDaysInMonth[11] = 30;
valDaysInMonth[12] = 31;

var valProvinceCodeDelimiter = "|";
var valProvinceCodes = "AB|BC|MB|NB|NF|NS|NT|ON|PE|PQ|SK|YT";

var valUSStateCodeDelimiter = "|";
var valUSStateCodes = "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 valDomesticDigits = 12;
var valDomesticLower = "32000000000";
var valDomesticUpper = "32999999999";
var valUSDigits = 11;
var valUSLower = "4998800001";
var valUSUpper = "4999800000";
var valInternationalDigits = 10;
var valInternationalLower = "729000000";
var valInternationalUpper = "729399999";

var valAccountDigits = 9;
var valAbbrevAccountDigits = 7;

var vINTEGER     = 1;
var vPOSTAL_CODE = 2;
var vPHONE       = 3;
var vEMAIL       = 4;
var vZIP_CODE    = 5;
var vMONEY       = 6;
var vFLOAT       = 7;
var vACCOUNT     = 8;
var vPIN         = 9;
var vCREDITCARD  = 10
var vINTERPHONE  = 11;
var vPOSINTEGER  = 12;
var vPOSFLOAT    = 13;
var vPOSMONEY    = 14;
var vZIP_OR_POSTAL = 15;
var vDAY   = 16;
var vMONTH = 17;
var vYEAR  = 18;
var vABBREVACCT = 19;

var vTIME		     = 88;
var vALPHA       = 99;

var vMANDATORY   = true;
var vOPTIONAL    = false;


//--------------- Default Message Array (Redefined in HTML.VB)-------------
var messageArray = new Array();
messageArray[0]  = "is required.";
messageArray[1]  = "is not a valid integer.";
messageArray[2]  = "is not a valid Postal Code.";
messageArray[3]  = "is not a valid Phone Number. Format: '999-999-9999'";
messageArray[4]  = "is not a valid Phone Number.'";
messageArray[5]  = "is not a valid Email format.";
messageArray[6]  = "is not a valid Zip code.";
messageArray[7]  = "is not a valid monetary amount.";
messageArray[8]  = "is not a valid number.";
messageArray[9]  = "is not a valid Account Number.\n\nPlease enter a complete 9-Digit account number. \nIf you have a 7-Digit account number, add '01' to the beginning.";
messageArray[10] = "is not a valid PIN Number.";
messageArray[11] = "is not a valid time.";
messageArray[12] = "must be a whole number > 0 without commas or decimals.";
messageArray[13] = "is not a valid number or must be > 0.";
messageArray[14] = "is not a valid money amount or must be > 0.";
messageArray[15] = "is not a valid Zip Code or Postal Code.";
messageArray[16] = "is not a valid Day.";
messageArray[17] = "is not a valid Month.";
messageArray[18] = "is not a valid Year.";
messageArray[19] = "is not a valid Account Number.\nPlease enter 7 digits.\n";
messageArray[20] = "is too large.";
messageArray[21] = "contains invalid characters.";

function getMessage( inMessageNum )
{
  var retVal = "";
  if (getMessage.arguments.length == 1) 
  {
    if (inMessageNum > messageArray.length)
    {
      retVal = "No Message Exists for Message ID " + inMessageNum
    }
    else
    {
      retVal = messageArray[inMessageNum];
    }
  }
  else
    return "Invalid Parameter Count Passed to javascript getmessage().";

  return retVal;
}


//--------------- validation routines-------------
function validateField(formField, validateType, inLength, isMandatory, fieldMsg)
{
  var fieldValueArray;
  var fieldValue;
  var retVal = "";
  var msg_addition = "";

  fieldValueArray = getFieldValues(formField);

  if (fieldValueArray.length == 0 && isMandatory)
  { 
    retVal = fieldMsg + " " + getMessage(0) + '\n';
  } 
  else
  {
    for (var i=0; i < fieldValueArray.length; i++)
    {
      msg_addition = "";
      fieldValue = fieldValueArray[i];
      
      if (validateType == vINTEGER)
      {
       if(!isInteger(fieldValue)) msg_addition = fieldMsg + " " + getMessage(1);
      }
      else if (validateType == vPOSTAL_CODE)
      {
        if(!isPostalCode(fieldValue))
          msg_addition = fieldMsg + " " + getMessage(2);
      }
      else if (validateType == vPHONE)
      {
        if(!isPhoneNumber(fieldValue))
   	      msg_addition = fieldMsg + " " + getMessage(3);
      }
      else if (validateType == vINTERPHONE)
      {
        if(!isInterPhone(fieldValue))
   	      msg_addition = fieldMsg + " " + getMessage(4);
      }
      else if (validateType == vEMAIL)
      {
        if(!isEmail(fieldValue))
    	  msg_addition = fieldMsg + " " + getMessage(5);
      }
      else if (validateType == vZIP_CODE)
      {
        if(!isZipCode(fieldValue))
    	   msg_addition = fieldMsg + " " + getMessage(6);
      }
      else if (validateType == vMONEY)
      {
        if(!isMoney(fieldValue))
          msg_addition = fieldMsg + " " + getMessage(7);
        else if ( isTooLong(moneyFormat(fieldValue), inLength) )
          msg_addition = fieldMsg + " " + getMessage(20);
      }
      else if (validateType == vFLOAT)
      {
        if(!isFloat(fieldValue))
    	    msg_addition = fieldMsg + " " + getMessage(8);
      }
      else if (validateType == vACCOUNT)
      {
        if(!isAcctNumber(fieldValue))
    	   msg_addition = fieldMsg + " " + getMessage(9);
      }
      else if (validateType == vABBREVACCT)
      {
        if(!isAbbrevAcct(fieldValue))
    	   msg_addition = fieldMsg + " " + getMessage(19);
      }
      else if (validateType == vPIN)
      {
        if(!isValidPIN(fieldValue))
    	   //msg_addition = fieldMsg + " " + SE.jsPIN.text;
    	   msg_addition = fieldMsg + " " + getMessage(10);
      }
      else if (validateType == vTIME)
      {
        if(!isTime(fieldValue))
    	   msg_addition = fieldMsg + " " + getMessage(11);
      }
      else if (validateType == vPOSINTEGER)
      {
        if(!isPosInteger(fieldValue))
    	   msg_addition = fieldMsg + " " + getMessage(12);
      }
      else if (validateType == vPOSFLOAT)
      {
        if(!isPosFloat(fieldValue))
    	   msg_addition = fieldMsg + " " + getMessage(13);
      }
      else if (validateType == vPOSMONEY)
      {
        if(!isPosMoney(fieldValue))
    	   msg_addition = fieldMsg + " " + getMessage(14);
      }
      else if (validateType == vZIP_OR_POSTAL)
      {
        if(!isZipOrPostal(fieldValue))
    	   msg_addition = fieldMsg + " " + getMessage(15);
      }
      else if (validateType == vDAY)
      {
        if(!isDay(fieldValue))
    	   msg_addition = fieldMsg + " " + getMessage(16);
      }
      else if (validateType == vMONTH)
      {
        if(!isMonth(fieldValue))
    	   msg_addition = fieldMsg + " " + getMessage(17);
      }
      else if (validateType == vYEAR)
      {
        if(!isYear(fieldValue))
    	   msg_addition = fieldMsg + " " + getMessage(18);
      }      
      else if (validateType == vALPHA)
      {
        //if(!isValidString(fieldValue)) 
        //msg_addition = fieldMsg + " " + getMessage(20);
      }
      if (msg_addition.length > 0)
        retVal = retVal + msg_addition + '\n';
    }
  }
  return retVal;
}

//--------------- validation functions -------------
function isPostalCode(s) 
{
  var stripCode;
  
	if (isEmpty(s)) 
	{
		if (isPostalCode.arguments.length == 1) 
		{
			return valDefaultEmptyOK;
		} 
		else 
		{
			return (isPostalCode.arguments[1] == true);
		}
	}
	if (s.length == 6) 
	{
	  stripCode = s;
	}
	else if (s.length == 7) 
	{
	  if ( s.charAt(3) != " " && s.charAt(3) != "-" )
        return false
      else
      {
        stripCode = s.substr( 0, 3 ) + s.substr( 4, 3 );
      }
	}
	else
      return false;
 
	for (var i = 0; i < valCharsInPostalCode; i++) 
	{
		if (i % 2 == 1) 
		{
			if (!isDigit(stripCode.charAt(i)) ) 
			{
				return false;
			}
		} else 
		{
			if (!isLetter(stripCode.charAt(i))) 
			{
				return false;
			}
		}
	}
	return true;
}

function isEmail (s) 
{
	if (isEmpty(s)) {
		if (isEmail.arguments.length == 1) {
			return valDefaultEmptyOK;
		} else {
			return (isEmail.arguments[1] == true);
		}
	}
	// must be at least one character before "@" so look for "@" starting at character 1
	var i = 1;
	var sLength = s.length;
	while ((i < sLength) && (s.charAt(i) != "@")) {
		i++;
	}
	if ((i >= sLength) || (s.charAt(i) != "@")) {
		return false;
	} else {
		i += 2;
	}
	// look for "." at least 2 characters after "@"
	while ((i < sLength) && (s.charAt(i) != ".")) {
		i++;
	}
	// must be at least one character after "."
	if ((i >= sLength - 1) || (s.charAt(i) != ".")) {
		return false;
	} else {
		return true;
	}
}

function isPhoneNumber(s) 
{
	if (isEmpty(s)) 
	{
		if (isPhoneNumber.arguments.length == 1) {
			return valDefaultEmptyOK;
		} else {
			return (isPhoneNumber.arguments[1] == true);
		}
	}
	
  var stripPhone = "";
  var foundIt;
	for (var i=0; i < s.length; i++)
	{
	  foundIt = false;
	  for (var j=0; (!foundIt && j < valValidPhoneChars.length); j++)
  	{
  	  if (s.charAt(i) == valValidPhoneChars.charAt(j))
  	  {
        foundIt = true;
        if (isDigit(s.charAt(i))) stripPhone = stripPhone + s.charAt(i);
  	  }
    }
 	  if (!foundIt)
      return false;
	}	
	return (isInteger(stripPhone) && stripPhone.length == valDigitsInPhoneNumber);
}

function isInterPhone(s) 
{
	if (isEmpty(s)) 
	{
		if (isInterPhone.arguments.length == 1) {
			return valDefaultEmptyOK;
		} else {
			return (isInterPhone.arguments[1] == true);
		}
	}
	
  var stripPhone = "";
  var foundIt;
	for (var i=0; i < s.length; i++)
	{
	  foundIt = false;
	  for (var j=0; (!foundIt && j < valValidPhoneChars.length); j++)
  	{
  	  if (s.charAt(i) == valValidPhoneChars.charAt(j))
  	  {
        foundIt = true;
        if (isDigit(s.charAt(i))) stripPhone = stripPhone + s.charAt(i);
  	  }
    }
 	  if (!foundIt)
      return false;
	}	
	return isInteger(stripPhone);
}



function isFloat(s)
{
  oneDecimal = false;

  if (isEmpty(s)) 
  {
	  if (isFloat.arguments.length == 1) 
	  {
	  	return valDefaultEmptyOK;
	  } 
	  else 
	  {
	  	return (isFloat.arguments[1] == true);
	  }
  }

  for (var i = 0; i < s.length; i++)
  {
    var oneChar = s.charAt(i);
    if (i == 0 && oneChar == "-")
    {
      continue;
    }
    if (oneChar == "." && !oneDecimal)
    {
      oneDecimal = true;
      continue;
    }
    if (oneChar < "0" || oneChar > "9")
    {
      return false;
    }
  }
  return true;
}


function isInteger (s) {
	var i;
	
	if (isEmpty(s)) {
		if (isInteger.arguments.length == 1) {
			return valDefaultEmptyOK;
		} 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 isEmpty(s) 
{
  var retVal = true;
  var i;
  
  if ((s == null) || (s.length == 0))
  {
    retVal = true;
  }
  else
  {
    for (var i=0; ((i < s.length) && (retVal == true)); i++)
    {
      if (s.charAt(i) != " ")
        retVal = false;
    }
  }
  return retVal;
}

function isLetter (c) {
	return (c.toUpperCase() >= "A") && (c.toUpperCase() <= "Z");
}

function isDigit (c) {
	return (c >= "0") && (c <= "9");
}


function isAcctNumber(s) 
{
	if (isEmpty(s)) 
	{
		if (isAcctNumber.arguments.length == 1)
		{
			return valDefaultEmptyOK;
		} 
		else 
		{
			return (isAcctNumber.arguments[1] == true);
		}
	}
	if (!isInteger(s)) 
	  return false
	else
	{
		if (s.length == valAccountDigits)
		  return true
		else	
		  return false;
	}
}

function isAbbrevAcct(s) 
{
	if (isEmpty(s)) 
	{
		if (isAbbrevAcct.arguments.length == 1)
		{
			return valDefaultEmptyOK;
		} 
		else 
		{
			return (isAbbrevAcct.arguments[1] == true);
		}
	}
	if (!isInteger(s)) 
	  return false
	else
	{
		if (s.length == valAbbrevAccountDigits)
		  return true
		else	
		  return false;
	}
}

function isValidPIN(s) 
{ 
  if (isEmpty(s)) 
  {
    if (isValidPIN.arguments.length == 1)
	{
	  return valDefaultEmptyOK;
	 } 
	else 
	{
	  return (isValidPIN.arguments[1] == true);
	}
  }
  if (isPINNumber(s, "D")) return true;
  if (isPINNumber(s, "U")) return true;
  if (isPINNumber(s, "I")) return true;
  return false;
}


function isPINNumber (s, type) 
{
	if (isEmpty(s)) {
		if (isPINNumber.arguments.length == 2) {
			return valDefaultEmptyOK;
		} else {
			return (isPINNumber.arguments[2] == true);
		}
	}
	if (!isInteger(s)) {
		return false;
	}
	switch (type) {
		case "D":
			// Domestic
			if ((s.length == valDomesticDigits) && (s.substring(0, valDomesticDigits - 1) >= valDomesticLower) && (s.substring(0, valDomesticDigits - 1) <= valDomesticUpper) ) {
				return true;
			}
			break;
		case "U":
			// US
			if ((s.length == valUSDigits) && (s.substring(0, valUSDigits - 1) >= valUSLower) && (s.substring(0, valUSDigits - 1) <= valUSUpper) ) {
				return true;
			}
			break;
		case "I":
			// International
			if ((s.length == valInternationalDigits) && (s.substring(0, valInternationalDigits - 1) >= valInternationalLower) && (s.substring(0, valInternationalDigits - 1) <= valInternationalUpper) ) {
				return true;
			}
			break;
		default:
			return false;
	}
}

function isZipCode (s) {
	if (isEmpty(s)) {
		if (isZipCode.arguments.length == 1) {
			return valDefaultEmptyOK;
		} else {
			return (isZipCode.arguments[1] == true);
		}
	}
	return (isInteger(s) &&
		 ((s.length == valDigitsInZipCode1) || 
		  (s.length == valDigitsInZipCode2)))
}

function isMoney (s) 
{
	var seenDelimiter = false;
	var decimalCharacter;
	
	if (isEmpty(s)) 
	{
		if (isMoney.arguments.length == 1) 
		{
			return valDefaultEmptyOK;
		} 
		else 
		{
			return (isMoney.arguments[1] == true);
		}
	}
  
	if ( (s == valMoneyDelimiterE) || (s == valMoneyDelimiterF) ) 
	{
		return false;
	}
	for (var i = 0; i < s.length; i++) 
	{
		var c = s.charAt(i);
		if ( ((c == valMoneyDelimiterE) || (c == valMoneyDelimiterF)) && !seenDelimiter) 
		{
			seenDelimiter = true;
			decimalCharacter = c;
		} 
		else 
		{
			if (!isDigit(c)) 
			{
				return false;
			}
		}
	}
	if ( seenDelimiter && (s.length - s.indexOf(decimalCharacter)) > 3 ) 
	{
		return false;
	}
	else 
	{
		return true;
  }
}


function isProvinceCode(s) {
	if (isEmpty(s)) {
		if (isProvinceCode.arguments.length == 1) {
			return valDefaultEmptyOK;
		} else {
			return (isProvinceCode.arguments[1] == true);
		}
	}
	return ( (valProvinceCodes.indexOf(s.toUpperCase()) != -1) && (s.indexOf(valProvinceCodeDelimiter) == -1) )
}

function isStateCode(s) {
	if (isEmpty(s)) {
		if (isStateCode.arguments.length == 1) {
			return valDefaultEmptyOK;
		} else {
			return (isStateCode.arguments[1] == true);
		}
	}
	return ( (valUSStateCodes.indexOf(s.toUpperCase()) != -1) && (s.indexOf(valUSStateCodeDelimiter) == -1) )
}

function isIntegerInRange (s, a, b) {
	var num
	if (isEmpty(s)) {
		if (isIntegerInRange.arguments.length == 1) {
			return valDefaultEmptyOK;
		} else {
			return (isIntegerInRange.arguments[1] == true);
		}
	}
	if (!isInteger(s, false)) {
		return false;
	}
	if (s.substr(0, 1) == "0") {
		s = s.substr(1, 1);
	}
	num = parseInt(s, 10);
	//alert("s=" + s + "; a=" + a + "; b=" + b + "; num=" + num);
	return ((num >= a) && (num <= b));
}

function isYear (s) {
	if (isEmpty(s)) {
		if (isYear.arguments.length == 1) {
			return valDefaultEmptyOK;
		} else {
			return (isYear.arguments[1] == true);
		}
	}
	return ((isInteger(s)) && (s.length == 4));
}

function isMonth (s) {
	if (isEmpty(s)) {
		if (isMonth.arguments.length == 1) {
			return valDefaultEmptyOK;
		} else {
			return (isMonth.arguments[1] == true);
		}
	}
	//alert("[" + s + "] [" + isIntegerInRange(s, 1, 12) + "]");
	return isIntegerInRange(s, 1, 12);
}

function isDay (s) {
	if (isEmpty(s)) {
		if (isDay.arguments.length == 1) {
			return valDefaultEmptyOK;
		} else {
			return (isDay.arguments[1] == true);
		}
	}
	return isIntegerInRange(s, 1, 31);
}

function daysInFebruary (year) {
	return ( ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) )) ? 29 : 28);
}

function isDate (inDay, inMonth, inYear) 
{
  if (!(isYear(inYear) && isMonth(inMonth) && isDay(inDay))) return false;
  var oneDate = new Date( "February 28, 1964" );
  var myDate = (inDay + "-" + (inMonth-1) + "-" + inYear );
  if (inYear >= 1900 && inYear <= 1999) inYear = inYear - 1900;
  oneDate.setYear( inYear );
  oneDate.setMonth( (inMonth - 1) );
  oneDate.setDate( inDay );
  var myYear
  myYear = oneDate.getFullYear();
  newDate = (oneDate.getDate() + "-" + oneDate.getMonth() + "-" + myYear );
  if (myDate == newDate)  
    return true
  else
    return false;
}

function isTime (s) {

	if (isEmpty(s)) {
		if (isTime.arguments.length == 1) {
			return valDefaultEmptyOK;
		} else {
			return (isTime.arguments[1] == true);
		}
	}
	if (isInteger && s.length == 4)
		return true
	else
		return false;
}

function isCreditCard (s) {
	if ((s.length > 19) || (isEmpty(s))) {
		return false;
	}
	var sum = 0;
	var mul = 1;
	var l = s.length;
	var digit;
	var tproduct;
	for (var i = 0; i < l; i++) {
		digit = s.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 (s) {
	if (((s.length == 16) || (s.length == 13)) && (s.substring(0, 1)== 4)) {
		return isCreditCard(s);
	} else {
		return false;
	}
}

function isMastercard (s) {
	var firstdig = s.substring(0, 1);
	var seconddig = s.substring (1, 2);
	if ((s.length == 16) && (firstdig == 5) && ((seconddig >= 1) && (seconddig <= 5))) {
		return isCreditCard(s);
	} else {
		return false;
	}
}

function isAmericanExpress (s) {
	var firstdig = s.substring(0, 1);
	var seconddig = s.substring (1, 2);
	if ((s.length == 15) && (firstdig == 3) && ((seconddig == 4) || (seconddig == 7))) {
		return isCreditCard(s);
	} else {
		return false;
	}
}

function isDinersClub (s) {
	var firstdig = s.substring(0, 1);
	var seconddig = s.substring (1, 2);
	if ((s.length == 14) && (firstdig == 3) && ((seconddig == 0) || (seconddig == 6) || (seconddig == 8))) {
		return isCreditCard(s);
	} else {
		return false;
	}
}

function roundMoney(n)
{
  if (isFloat(n))
    return (Math.round(n*100)/100)
  else
    return n;
}

function moneyFormat( inValue )
{
  var myValue;
  
  if (isFloat(inValue))
  {
    var myValue = "" + roundMoney(inValue);
    if (myValue.indexOf(".") < 0)
        myValue = myValue + ".00"
    else if ((myValue.length - myValue.indexOf(".")) ==  2)
        myValue = myValue + "0";
  }
  else
    myValue = "";
    
  return myValue;
}

function moneyDisplay( inValue )
{
  var myVal = moneyFormat(inValue);
  if (!isEmpty(myVal))
    myVal = "$ " + myVal;
  return myVal;
}

function isPositive( inValue )
{
  if (!isEmpty(inValue) && inValue > 0)
    return true
  else
    return false;
}

function isPosInteger(s)
{
  return (isInteger(s) && (isEmpty(s) || isPositive(s)) );
}
function isPosFloat(s)
{
  return (isFloat(s) && (isEmpty(s) || isPositive(s)) );
}
function isPosMoney(s)
{
  return (isMoney(s) && (isEmpty(s) || isPositive(s)) );
}

function isZipOrPostal(s) 
{
	if (isEmpty(s)) 
	{
		if (isZipOrPostal.arguments.length == 1) 
		{
			return valDefaultEmptyOK;
		} 
		else 
		{
			return (isZipOrPostal.arguments[1] == true);
		}
	}
	else
    return ( isZipCode(s) || isPostalCode(s) );
}

function isDomesticPIN(s)
{
	if (isDomesticPIN.arguments.length == 1)
	{
		if (s.substr(0, 1) == valDomesticLower.substr(0, 1))
		{
			return true;
		}
		else
		{
			return (isDomesticPIN.arguments[1] == true);
		}
	}
}

function isTooLong( s, inLength )
{
  var testString;
	if (isTooLong.arguments.length == 2)
	{
	  if ( isInteger(inLength) )
	  {
	    return ( s.length > inLength );
	  }
	}
}

function isValidString( s )
{
  var retVal = true;
	if (isValidString.arguments.length == 1)
	{
    var illegalChars = new Array("<",">","\"" );
    for (var i = 0; i <= illegalChars.length; i++)
    {
      if (s.indexOf(illegalChars[i]) != -1)
      {
        retVal = false;
        break
      }
    }
    return retVal;
  }
}