var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyz"
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var whitespace = " \t\n\r";
var decimalPointDelimiter = "."
var phoneNumberDelimiters = "()- ";
var validUSPhoneChars = digits + phoneNumberDelimiters;
var validWorldPhoneChars = digits + phoneNumberDelimiters + "+";
var ScoreDelimiters = "%."
var SSNDelimiters = "- ";
var validSSNChars = digits + SSNDelimiters;
var digitsInSocialSecurityNumber = 9;
var digitsInUSPhoneNumber = 10;
var ZIPCodeDelimiters = "-";
var ZIPCodeDelimeter = "-"
var validZIPCodeChars = digits + ZIPCodeDelimiters
var digitsInZIPCode1 = 5
var digitsInZIPCode2 = 9
var creditCardDelimiters = " "
var mPrefix = "You did not enter a value into the "
var mSuffix = " field. This is a required field."
var sUSLastName = "Please enter your last name."
var sUSFirstName = "Please enter your first name."
var sUSAddress = "Please enter your street address."
var sCity = "Please enter a city."
var sAge = "Please enter your age."
var sPassport = "Please enter your passport number."
var sPassportCountry = "Please enter country where passport was issued."
var sPlaceOfBirth = "Please enter your place of birth."

var sWorldState = "State, Province, or Prefecture"

var sZIPCode = "ZIP Code"
var sWorldPostalCode = "Postal Code"
var sPhone = "Phone Number"
var sFax = "Fax Number"
var sDateOfBirth = "Date of Birth"
var sExpirationDate = "Expiration Date"
var sEmail = "Email"
var sSSN = "Social Security Number"
var sCreditCardNumber = "Credit Card Number"
var sOtherInfo = "Other Information"
var iStateCode = "This field must be a valid two character U.S. state abbreviation (like CA for California). Please reenter it now."
var iZIPCode = "This field must be a 5 or 9 digit U.S. ZIP Code (like 94043). Please reenter it now."
var iUSPhone = "Please enter a 10 digit U.S. phone number.\n"
var iWorldPhone = "Please enter a valid international phone number.\n"
var iEmail = "Please enter a valid email address.\n"
var iCreditCardPrefix = "Please enter a valid "
var iCreditCardSuffix = " credit card number.\n"
var iMonth = "Please enter a month number between 1 and 12.\n"
var iYear = "Please enter a 2 or 4 digit year number.\n"


var pStateCode = "Please select a state or province."
var pCountry="Please select a country"
var pZIPCode = "Please enter your zip or postal code."
var pUSPhone = "Please enter your phone number"
var pWorldPhone = "Please enter an international phone number."
var pEmail = "Please enter a valid email address (like foo@bar.com)."
var pCardType = "Please select a credit card type."
var pCreditCard = "Please enter a valid credit card number."
var pExpirationMonth = "Please enter a two digit month (like 04)."
var pExpirationYear = "Please enter a four digit year (like 2001)."
var pMonth = "Please enter a month number between 1 and 12."
var pYear = "Please enter a 2 or 4 digit year number."
var pParentName = "Please enter your parent's name."
var pRelationship = "Please enter relationship."
var pEmergencyContact = "Please enter additional emergency contact name."
var pEmergencyPhone = "Please enter additional emergency contact phone number."
var pEmergencyRelationship = "Please enter additional emergency contact relationship."
var pGraduationYear = "Please enter your graduation year."
var pGPA = "Please enter your Current Grade Average."
var pScale = "Please enter a scale."
var pHighSchool = "Please enter your high school name."
var pSchoolAddr1 = "Please enter your school address."
var pSchoolCity = "Please enter your school city."
var pGuidanceCounselor = "Please enter your guidance counselor's name."
var pDisability = "Please explain your medical condition."
var pNameOfCardholder = "Please enter name of cardholder."
var pCheckNumber = "Please enter check number."

var defaultEmptyOK = false
var allowsubmit = 0

function makeArray(n) {
   for (var i = 1; i <= n; i++) {
      this[i] = 0
   }
   return this
}

var daysInMonth = makeArray(12);
daysInMonth[1] = 31;
daysInMonth[2] = 29;
daysInMonth[3] = 31;
daysInMonth[4] = 30;
daysInMonth[5] = 31;
daysInMonth[6] = 30;
daysInMonth[7] = 31;
daysInMonth[8] = 31;
daysInMonth[9] = 30;
daysInMonth[10] = 31;
daysInMonth[11] = 30;
daysInMonth[12] = 31;
var USStateCodeDelimiter = "|";
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"

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;
    }
    return true;
}
function stripCharsInBag (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 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 stripWhitespace(s)
{   
	return stripCharsInBag(s, whitespace)
}
function charInString (c, s)
{   for (i = 0; i < s.length; i++)
    {   if (s.charAt(i) == c) return true;
    }
    return false
}
function stripInitialWhitespace (s)
{   var i = 0;
    while ((i < s.length) && charInString (s.charAt(i), whitespace))
       i++;
    return s.substring (i, s.length);
}
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 isSignedInteger (s)
{   if (isEmpty(s))
       if (isSignedInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isSignedInteger.arguments[1] == true);
    else {
        var startPos = 0;
        var secondArg = defaultEmptyOK;
        if (isSignedInteger.arguments.length > 1)
            secondArg = isSignedInteger.arguments[1];
        if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
           startPos = 1;
        return (isInteger(s.substring(startPos, s.length), secondArg))
    }
}
function isPositiveInteger (s)
{   var secondArg = defaultEmptyOK;
    if (isPositiveInteger.arguments.length > 1)
        secondArg = isPositiveInteger.arguments[1];
    return (isSignedInteger(s, secondArg)
         && ( (isEmpty(s) && secondArg)  || (parseInt (s) > 0) ) );
}
function isNonnegativeInteger (s)
{   var secondArg = defaultEmptyOK;
    if (isNonnegativeInteger.arguments.length > 1)
        secondArg = isNonnegativeInteger.arguments[1];
    return (isSignedInteger(s, secondArg)
         && ( (isEmpty(s) && secondArg)  || (parseInt (s) >= 0) ) );
}
function isNegativeInteger (s)
{   var secondArg = defaultEmptyOK;
    if (isNegativeInteger.arguments.length > 1)
        secondArg = isNegativeInteger.arguments[1];
    return (isSignedInteger(s, secondArg)
         && ( (isEmpty(s) && secondArg)  || (parseInt (s) < 0) ) );
}
function isNonpositiveInteger (s)
{   var secondArg = defaultEmptyOK;
    if (isNonpositiveInteger.arguments.length > 1)
        secondArg = isNonpositiveInteger.arguments[1];
    return (isSignedInteger(s, secondArg)
         && ( (isEmpty(s) && secondArg)  || (parseInt (s) <= 0) ) );
}
function isFloat (s)
{   var i;
    var seenDecimalPoint = false;
    if (isEmpty(s))
       if (isFloat.arguments.length == 1) return defaultEmptyOK;
       else return (isFloat.arguments[1] == true);
    if (s == decimalPointDelimiter) return false;
    for (i = 0; i < s.length; i++)
    {
        var c = s.charAt(i);
        if ((c == decimalPointDelimiter) && !seenDecimalPoint) seenDecimalPoint = true;
        else if (!isDigit(c)) return false;
    }
    return true;
}
function isSignedFloat (s)
{   if (isEmpty(s))
       if (isSignedFloat.arguments.length == 1) return defaultEmptyOK;
       else return (isSignedFloat.arguments[1] == true);
    else {
        var startPos = 0;
        var secondArg = defaultEmptyOK;
        if (isSignedFloat.arguments.length > 1)
            secondArg = isSignedFloat.arguments[1];
        if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
           startPos = 1;
        return (isFloat(s.substring(startPos, s.length), secondArg))
    }
}
function isAlphabetic (s)
{   var i;
    if (isEmpty(s))
       if (isAlphabetic.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphabetic.arguments[1] == true);
    for (i = 0; i < s.length; i++)
    {
        var c = s.charAt(i);
        if (!isLetter(c))
        return false;
    }
    return true;
}
function isAlphanumeric (s)
{   var i;
    if (isEmpty(s))
       if (isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);
    for (i = 0; i < s.length; i++)
    {
        var c = s.charAt(i);
        if (! (isLetter(c) || 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 isSSN (s)
{   if (isEmpty(s))
       if (isSSN.arguments.length == 1) return defaultEmptyOK;
       else return (isSSN.arguments[1] == true);
    return (isInteger(s) && s.length == digitsInSocialSecurityNumber)
}
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 isInternationalPhoneNumber (s)
{   if (isEmpty(s))
       if (isInternationalPhoneNumber.arguments.length == 1) return defaultEmptyOK;
       else return (isInternationalPhoneNumber.arguments[1] == true);
    return (isPositiveInteger(s))
}
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 isStateCode(s)
{   if (isEmpty(s))
       if (isStateCode.arguments.length == 1) return defaultEmptyOK;
       else return (isStateCode.arguments[1] == true);
    return ( (USStateCodes.indexOf(s) != -1) &&
             (s.indexOf(USStateCodeDelimiter) == -1) )
}
function isEmail (s)
{   if (isEmpty(s))
       if (isEmail.arguments.length == 1) return defaultEmptyOK;
       else return (isEmail.arguments[1] == true);
    if (isWhitespace(s)) return false;
	if (s.indexOf(",")>=0) 
		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 i += 2;
    while ((i < sLength) && (s.charAt(i) != "."))
    { i++
    }
    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}
function isYear (s)
{   if (isEmpty(s))
       if (isYear.arguments.length == 1) return defaultEmptyOK;
       else return (isYear.arguments[1] == true);
    if (!isNonnegativeInteger(s)) return false;
    return ((s.length == 2) || (s.length == 4));
}
function isIntegerInRange (s, a, b)
{   if (isEmpty(s))
       if (isIntegerInRange.arguments.length == 1) return defaultEmptyOK;
       else return (isIntegerInRange.arguments[1] == true);
    if (!isInteger(s, false)) return false;
    return ((s >= a) && (s <= b));
}
function isMonth (s)
{   if (isEmpty(s))
       if (isMonth.arguments.length == 1) return defaultEmptyOK;
       else return (isMonth.arguments[1] == true);
    return isIntegerInRange (s, 1, 12);
}
function isDay (s)
{   if (isEmpty(s))
       if (isDay.arguments.length == 1) return defaultEmptyOK;
       else return (isDay.arguments[1] == true);
    return isIntegerInRange (s, 1, 31);
}
function daysInFebruary (year)
{   // February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (  ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
}
function isDate (year, month, day)
{
    if (! (isYear(year, false) && isMonth(month, false) && isDay(day, false))) return false;
    var intYear = parseInt(year);
    var intMonth = parseInt(month);
    var intDay = parseInt(day);
    if (intDay > daysInMonth[intMonth]) return false;
    if ((intMonth == 2) && (intDay > daysInFebruary(intYear))) return false;
    return true;
}
function prompt (s)
{   window.status = s
}
function promptEntry (s)
{   window.status = s
}
function warnEmpty (s,ind)
{  
	eval("document.images.img"+ind +".src='errorflag.gif'")
    return s + "\n"

}
function warnInvalid (s,ind)
{  
	eval("document.images.img"+ind +".src='errorflag.gif'")
    return s
}
function checkString (theField, s, emptyOK,ind)
{   // Next line is needed on NN3 to avoid "undefined is not a number" error
    // in equality comparison below.
    if (checkString.arguments.length == 2) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return "";
    if (isWhitespace(theField.value))
       return warnEmpty (s,ind);
		//return mPrefix + s + mSuffix +"\n"
    else return "";
}
function checkStateCode (theField,country,ind)
{   
if (country=="USA")
{
       if (!isStateCode(theField, false))
          return warnInvalid("Enter a valid US State\n",ind);
       else return "";
   
}
else
{
	return ""
}

}

function reformatZIPCode (ZIPString)
{   if (ZIPString.length == 5) return ZIPString;
    else return (reformat (ZIPString, "", 5, "-", 4));
}
function checkZIPCode (theField,country,ind)
{   
	var msg;
	var normalizedZIP = stripCharsInBag(theField.value, ZIPCodeDelimiters)

	normalizedZIP = stripWhitespace(normalizedZIP)
	if (country == "CAN") 
	{

		if (normalizedZIP.length != 6)
		{
			//a Canadian zip will have 6 characters
			msg = "Please check the postal code. Canadian postal codes require 6 characters.\n";	
			return warnInvalid(msg,ind);
		}

	} 
	else 
	{
		if (country == "USA")
		{ 
			if (normalizedZIP.length != 5 && normalizedZIP.length != 9)
			{
			//a valid US zip will have 5 or 9 digits, a valid Canadian zip will have 6 digits
			msg = "Please check the zip code.  US zip codes require either 5 or 9 digits.\n";
			return warnInvalid(msg,ind);
			}
		}
		else	
		{	
			if (normalizedZIP=="")
			 return warnInvalid("Please enter a postal code.\n",ind)
		}
	}
	
	return "";

}
function reformatUSPhone (USPhone)
{   return (reformat (USPhone, "(", 3, ") ", 3, "-", 4))
}
function checkUSPhone (theField, emptyOK,ind)
{   if (checkUSPhone.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return "";
    else
    {  var normalizedPhone = stripCharsInBag(theField.value, phoneNumberDelimiters)
       if (!isUSPhoneNumber(normalizedPhone, false))
          return warnInvalid (iUSPhone,ind);
       else
       {  // if you don't want to reformat as (123) 456-789, comment next line out
          theField.value = reformatUSPhone(normalizedPhone)
          return "";
       }
    }
}
function checkInternationalPhone (theField, emptyOK,ind)
{   
	if (checkInternationalPhone.arguments.length == 1) emptyOK = defaultEmptyOK;
    	if ((emptyOK == true) && (isEmpty(theField.value))) return "";
    	else
    	{  
		var normalizedPhone = stripCharsInBag(theField.value, phoneNumberDelimiters)
		if (!isInternationalPhoneNumber(normalizedPhone, false))
          		return warnInvalid (iWorldPhone,ind);
       	else return "";
    	}
}
function checkEmail (theField, emptyOK,ind)
{   if (checkEmail.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return "";
    else if (!isEmail(theField.value, false))
       return warnInvalid (iEmail,ind);
    else return "";
}
function checkYear (theField, emptyOK,ind)
{   if (checkYear.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (!isYear(theField.value, false))
       return warnInvalid (iYear,ind);
    else return true;
}
function checkMonth (theField, emptyOK,ind)
{   if (checkMonth.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (!isMonth(theField.value, false))
       return warnInvalid (iMonth,ind);
    else return true;
}
function checkDate (monthField,yearField,ind)
{   
	if (yearField.value.length==2)
		yearField.value = "20" + yearField.value
	var d = new Date()
	var year = d.getFullYear()
	var month = d.getMonth()+1
	if (month<10)
		today=year.toString(10)+"0"+ month.toString(10)
	else
		today=year.toString(10)+month.toString(10)
	var dateentered =  yearField.value+monthField.value

    	if ((dateentered<today)||(!isYear(yearField.value))||(!isMonth(monthField.value)))
		return warnInvalid("Your card expiration date is invalid.\n",ind) ;
    	else
 		return ""
}
function checkDOB(m,d,y,ind,msg)
{  
	if (!isDate(y,m,d))
       return warnInvalid (msg,ind);
    else return "";
}

function reformatSSN (SSN)
{   
	return (reformat (SSN, "", 3, "-", 2, "-", 4))
}

function checkSSN(theField, ind)
{   
	var msg;
	if (isEmpty(theField.value))
	{
		msg = "Please enter your social security number.\n"
		return warnInvalid(msg,ind);
	}
 	var normalizedSSN = stripCharsInBag(theField.value, SSNDelimiters)
      if (normalizedSSN.length!=9)
	{
		msg = "Please enter a 9 digit U.S. social security number.\n"
        	return warnInvalid (msg, ind)
	}
	if ((isNaN(normalizedSSN))||(normalizedSSN=="111111111")||(normalizedSSN=="222222222")||(normalizedSSN=="333333333")||(normalizedSSN=="444444444")||(normalizedSSN=="555555555")||(normalizedSSN=="666666666")||(normalizedSSN=="777777777")||(normalizedSSN=="888888888")||(normalizedSSN=="999999999")||(normalizedSSN=="000000000")||(normalizedSSN=="123456789"))
	{
		msg = "Please enter a valid social security number.\n"
        	return warnInvalid (msg, ind)
	}

      theField.value = reformatSSN(normalizedSSN)
      return "";


}

function getRadioButtonValue (radio)
{   for (var i = 0; i < radio.length; i++)
    {   if (radio[i].checked)
    	{
    		return radio[i].value;
    	}
    }
    return "";
}

function DownloadAlert()

{
var CourseMedium = document.PersonalInfo.medium.value;
if ((CourseMedium == 'down')&&(allowsubmit == 0))
	{
	alert("The course that you ordered will be downloaded soon.  If the download does not complete please refer to an email message that will be sent to you shortly.  To install your course, simply double-click (run) the file you downloaded.  The course installation will start automatically.  Again, thank you for choosing MicroMash.");
	}
	return true
}


function checkCreditCard(cardType, theField,ind)
{   
    var normalizedCCN = stripCharsInBag(theField.value, creditCardDelimiters)
    if (!isCardMatch(cardType, normalizedCCN))
       return warnInvalid(iCreditCardPrefix + cardType + iCreditCardSuffix,ind);
    else
    {  
		theField.value = normalizedCCN
       	return ""
    }
}
function isCreditCard(st) 
{
  if (st.length > 19)
    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 isDinersClub(cc)
{
  firstdig = cc.substring(0,1);
  seconddig = cc.substring(1,2);
  if ((cc.length == 14) && (firstdig == 3) &&
      ((seconddig == 0) || (seconddig == 6) || (seconddig == 8)))
    return isCreditCard(cc);
  return false;
}
function isCarteBlanche(cc)
{
  return isDinersClub(cc);
}
function isDiscover(cc)
{
  first4digs = cc.substring(0,4);
  if ((cc.length == 16) && (first4digs == "6011"))
    return isCreditCard(cc);
  return false;

}
function isEnRoute(cc)
{
  first4digs = cc.substring(0,4);
  if ((cc.length == 15) &&
      ((first4digs == "2014") ||
       (first4digs == "2149")))
    return isCreditCard(cc);
  return false;
}
function isJCB(cc)
{
  first4digs = cc.substring(0,4);
  if ((cc.length == 16) &&
      ((first4digs == "3088") ||
       (first4digs == "3096") ||
       (first4digs == "3112") ||
       (first4digs == "3158") ||
       (first4digs == "3337") ||
       (first4digs == "3528")))
    return isCreditCard(cc);
  return false;

}
function isAnyCard(cc)
{
  if (!isCreditCard(cc))
    return false;
  if (!isMasterCard(cc) && !isVisa(cc) && !isAmericanExpress(cc) && !isDinersClub(cc) &&
      !isDiscover(cc) && !isEnRoute(cc) && !isJCB(cc)) {
    return false;
  }
  return true;

}
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 == "AMERICANEXPRESS") || (cardType == "AMEX") )
                && (!isAmericanExpress(cardNumber))) doesMatch = false;
	if ((cardType == "DISCOVER") && (!isDiscover(cardNumber)))
		doesMatch = false;
	if ((cardType == "JCB") && (!isJCB(cardNumber)))
		doesMatch = false;
	if ((cardType == "DINERS") && (!isDinersClub(cardNumber)))
		doesMatch = false;
	if ((cardType == "CARTEBLANCHE") && (!isCarteBlanche(cardNumber)))
		doesMatch = false;
	if ((cardType == "ENROUTE") && (!isEnRoute(cardNumber)))
		doesMatch = false;
	return doesMatch;
}

var NumberBag = "0123456789."

function FormatCurrency (Val, DollarSign)  {
	Val=""+Val;
	if (Val.indexOf (".", 0)!=-1) {
		Dollars = Val.substring(0, Val.indexOf (".", 0));
		Cents = Val.substring(Val.indexOf (".", 0)+1, Val.indexOf (".", 0)+3);
		if (Cents.length==0)
			Cents="00";
		if (Cents.length==1)
			Cents=Cents+"0";
	} else {
		Dollars = Val;
		Cents = "00";
	}
	OutString="";
	len=Dollars.length;
	if (len>=3) {
		while (len>0) {
			TempString=Dollars.substring(len-3, len)
			if (TempString.length==3) {
				OutString=","+TempString+OutString
				len=len-3;
			} else {
				OutString=TempString+OutString
				len=0
			}
		}
		if (OutString.substring(0, 1)==",")
			Dollars=OutString.substring (1, OutString.length)
		else
			Dollars=OutString
	}
	if (DollarSign)
		return ("$"+Dollars+"."+Cents);
	else
		return (Dollars+"."+Cents);
}


function checkScore(theField,ind)
{   
	if (isEmpty(theField.value))
		return ""
	else
	{
		var msg;
		var normalizedScore = stripWhitespace(theField.value)
		if (isNaN(normalizedScore))
		{
			msg = "Please enter a valid score (numbers only) or leave it blank.\n"
        		return warnInvalid (msg, ind)
		}
	}
	return ""
}

function checkSecurityCode(theField,ind)
{
	if (isEmpty(theField.value))
	{
		msg = "Please enter your credit card security code.\n"
		return warnInvalid(msg,ind);
	}
	if (theField.value.length!=3)
	{
		msg = "Please enter a valid security code.\n"
        	return warnInvalid(msg, ind);
	}	
	return "";
}

function checkUSLacrosseID(theField,ind)
{
	if (isEmpty(theField.value))
	{
		msg = "Please enter US Lacrosse Member ID.\n"
		return warnInvalid(msg,ind);
	}
	if (theField.value.length<7)
	{
		msg = "Please enter a valid US Lacrosse Member ID.\n"
        	return warnInvalid(msg, ind);
	}	

	if (!isInteger(theField.value))
	{
		msg = "Please enter a valid US Lacrosse Member ID.\n"
        	return warnInvalid(msg, ind);
	}
	return "";
}

function checkGPA(theField,ind)
{   
	var msg = "Please enter your GPA on a 4.0 scale.\n";
	if (isEmpty(theField.value))
		return warnInvalid(msg,ind);
	else
	{
		var normalizedScore = stripWhitespace(theField.value)
		if (isNaN(normalizedScore))
		{
        		return warnInvalid (msg, ind)
		}
		if ((parseFloat(normalizedScore)>4)||(parseFloat(normalizedScore)<0))
		{
			return warnInvalid (msg, ind)
		}
	}
	return ""
}
function checkGradYear(theField,ind)
{   
	var msg = "Please enter your high school graduation year.\n";
	if (isEmpty(theField.value))
		return warnInvalid(msg,ind);
	else
	{
		var normalizedGrade = stripWhitespace(theField.value)
		if (isNaN(normalizedGrade))
		{
        		return warnInvalid (msg, ind)
		}
		if (normalizedGrade.length!=4)
		{
			return warnInvalid (msg, ind)
		}
		var d = new Date()
		var year = d.getFullYear()
		if (parseInt(normalizedGrade,10)<year-2)	
		{
			return warnInvalid (msg, ind)
		}

	}
	return ""
}
function checkHeight(theField,ind)
{   
	var msg = "Please enter player's height.\n";
	if (isEmpty(theField.value))
		return warnInvalid(msg,ind);
	else
	{
		var normalizedHeight = stripWhitespace(theField.value)
		if (isNaN(normalizedHeight))
		{
        		return warnInvalid (msg, ind)
		}
		if ((parseInt(normalizedHeight,10)>7)||(parseInt(normalizedHeight,10)<2))
		{
			return warnInvalid (msg, ind)
		}
	}
	return ""
}
function checkPasswords(field1,field2,ind1,ind2)
{
	if (isEmpty(field1.value))
		return warnInvalid("Please enter password.\n",ind1);
	if (isEmpty(field2.value))
		return warnInvalid("Please confirm password.\n",ind2);
	if (field1.value!=field2.value)
		return warnInvalid("Your passwords do not match.\n",ind2);
	return ""
}
function RoundToCents(value)
{
	return Math.round((parseFloat(value)*100.))/100.
}
function DoSubmitLoginInfo()
{
	if (validateLoginInfo(document.PersonalInfo))
	{
		document.PersonalInfo.submit()		
	}	
}
function validateLoginInfo(form)
{
	var msg=""
	if (isEmpty(form.Email.value)||isEmpty(form.Password.value))
		msg="Please enter your email address and password"
	else
	if (!isEmail(form.Email.value, false))
		msg = "Please enter a valid email address"

		if (msg!="")
	{
		alert(msg)
		return false
	}
	else
 		return true	
}

function ForgotPassword()
{
if (isEmpty(document.PersonalInfo.Email.value))
{
	alert("Please enter your email address")
}
else
{
	document.PersonalInfo.action="password.asp"
	document.PersonalInfo.submit()
}
}
function DoSubmitContactInfo()
{
	if (validateContactInfo(document.PersonalInfo))
	{
		document.PersonalInfo.submit()		
	}	
}
function validateContactInfo(form)
{
	var msg=""
	for (i=0;i<document.images.length;i++)
	{
		if (document.images[i].name.substring(0,3)=="img")
			document.images[i].src='trans.gif'
	}
	msg = msg + checkEmail(form.Email,false,1)
	msg = msg + checkPasswords(form.Password,form.Password2,2,3)

	msg = msg + checkString(form.Addr1,sUSAddress,false,4)
	msg = msg + checkString(form.City,sCity,false,5)
	state = form.State.options[form.State.selectedIndex].value
	if (state=="")
		msg = msg + warnInvalid ("Please select a state.\n",6)
	msg = msg + checkZIPCode(form.ZIP,"USA",7)
	msg = msg + checkUSPhone(form.HomePhone,false,8)
	msg = msg + checkString(form.Subdivision,"Please enter subdivision you reside in.",false,20)
	msg = msg + checkString(form.HSTerritory,"Please enter high school territory you reside in.",false,21)
	msg = msg + checkString(form.LastNameContact1,"Please enter primary parent/guardian last name.",false,9)
	msg = msg + checkString(form.FirstNameContact1,"Please enter primary parent/guardian first name.",false,10)

	if (!isEmpty(form.WorkPhoneContact1.value))
		msg = msg + checkUSPhone(form.WorkPhoneContact1,false,11)
	if (!isEmpty(form.CellPhoneContact1.value))
		msg = msg + checkUSPhone(form.CellPhoneContact1,false,12)

	//msg = msg + checkString(form.LastNameContact2,"Please enter secondary parent/guardian last name.",false,13)
	//msg = msg + checkString(form.FirstNameContact2,"Please enter secondary parent/guardian first name.",false,14)

	if (!isEmpty(form.WorkPhoneContact2.value))
		msg = msg + checkUSPhone(form.WorkPhoneContact2,false,15)
	if (!isEmpty(form.CellPhoneContact2.value))
		msg = msg + checkUSPhone(form.CellPhoneContact2,false,16)
	msg = msg + checkString(form.EmergencyName,"Please enter emergency contact name.",false,18)

	msg = msg + checkUSPhone(form.EmergencyPhone,false,19)
	if (!form.codeofconduct.checked)
	{
		msg=msg+ warnInvalid ("You must agree to abide by the Code of Conduct.\n",17)
	}
	if (msg!="")
	{
		alert(msg)
		return false
	}
	else
 		return true	
}
function DoSubmitMemberInfo()
{
	if (validateMemberInfo(document.PersonalInfo))
	{
		document.PersonalInfo.submit()		
	}	
}

function validateMemberInfo(form)
{
	var i
	var msg=""
	var gender=""
	var grade=""
	var school=""
	for (i=0;i<document.images.length;i++)
	{
		if (document.images[i].name.substring(0,3)=="img")
			document.images[i].src='trans.gif'
	}
	
	msg = msg + checkString(form.LastName,"Please enter player last name." ,false,1)
	msg = msg + checkString(form.FirstName,"Please enter player first name.",false,2)
	//g = form.Gender.options[form.Gender.selectedIndex].value
	
	for (i=0;i<=1;i++)
	{
		if (form.Gender[i].checked)
			gender=form.Gender[i].value
	}
	if (gender=="")
		msg = msg + warnInvalid ("Please select gender.\n",3)
	msg = msg + checkString(form.School,"Please enter your school." ,false,4)

	grade=form.Grade.options[form.Grade.selectedIndex].value
	if (grade=="")
		msg = msg + warnInvalid("Please select grade.\n",5)

	msg = msg + checkDOB(form.DateOfBirthMonth.options[form.DateOfBirthMonth.selectedIndex].value,form.DateOfBirthDay.options[form.DateOfBirthDay.selectedIndex].value,form.DateOfBirthYear.options[form.DateOfBirthYear.selectedIndex].value,6, "Please enter date of birth.\n")

	if (form.programid.value == "3")
	{
		msg = msg + checkHeight(form.HeightFt,7)
		msg = msg + checkString(form.Weight,"Please enter player's weight.",false,8)
	}	
	msg = msg + checkString(form.Doctor,"Please enter doctor's name.",false,9)	
	msg = msg + checkUSPhone(form.DocPhone,false,10)
	
	if (form.BirthCert!=null)
	{
	if (!form.BirthCert.checked)
	{
		msg=msg+ warnInvalid ("You must agree to provide the player's birth certificate.\n",13)
	}
	}
	//if (form.programid.value == "5")
	//{
	//msg = msg + checkUSLacrosseID(form.USMemberID,14)
	//}	
	PlayedBefore=""
	for (i=0;i<=1;i++)
	{
		if (form.PlayedBefore[i].checked)
			PlayedBefore=form.PlayedBefore[i].value
	}
	if (PlayedBefore=="")
		msg = msg + warnInvalid("Please select Yes or No.\n",11)	

	if (form.programid.value == "5")
	{
		msg = msg + checkString(form.YearsPlayed,"Please enter number of years playing lacrosse.",false,24)
		NeedUniform=""
		for (i=0;i<=1;i++)
		{
		if (form.NeedUniform[i].checked)
			NeedUniform=form.NeedUniform[i].value
		}
		if (NeedUniform=="")
		msg = msg + warnInvalid("Please select Yes or No.\n",19)
		if (NeedUniform=="yes")
		{
		jerseysize=form.JerseySize.options[form.JerseySize.selectedIndex].value
		if (jerseysize=="") 		
			msg = msg + warnInvalid("Please enter jersey size.\n",17)
		pantssize=form.PantsSize.options[form.PantsSize.selectedIndex].value
		if (jerseysize=="") 		
			msg = msg + warnInvalid("Please enter pants size.\n",18)
		}
		AllowedToPlayUp=""
		for (i=0;i<=1;i++)
		{
			if (form.AllowedToPlayUp[i].checked)
				AllowedToPlayUp=form.AllowedToPlayUp[i].value
		}
		if (AllowedToPlayUp=="")
			msg = msg + warnInvalid("Please select Yes or No.\n",15)
	}
	if (form.programid.value == "7")
	{
		msg = msg + checkString(form.PrevExperience,"Please enter player experience level.",false,18)	
		jerseysize=form.JerseySize.options[form.JerseySize.selectedIndex].value
		if (jerseysize=="") 		
			msg = msg + warnInvalid("Please enter jersey size.\n",17)
	}

	if (form.programid.value == "8")
	{
			
		coach=form.CoachRequest.options[form.CoachRequest.selectedIndex].value
		if (coach=="") 		
			msg = msg + warnInvalid("Please select your coach.\n",17)
		msg = msg + checkString(form.TeamCode,"Please enter your team code.",false,18)
	}

	if (form.programid.value == "5")
	{
		msg = msg + checkString(form.USMemberID,"Please enter existing USLacrosse membership number. If you do not have a USLacrosse membership, enter 0.",false,14)
		msg = msg + checkString(form.InsCompany,"Please enter insurance company.",false,22)
		msg = msg + checkString(form.InsPolicy,"Please enter insurance policy number.",false,23)

		if (!form.USAagreement.checked)
		{
			msg=msg+ warnInvalid ("You must agree to the US Lacrosse Waiver and Code Of Conduct.\n",20)
		}
	}
	if (!form.agreement.checked)
	{
		msg=msg+ warnInvalid ("You must agree to the parental waiver/medical release.\n",12)
	}


	if (form.Donation.value != "") 
	{
		if (!isFloat(form.Donation.value))
		{
			msg = msg + warnInvalid("Invalid amount.\n",16)
		}
		else
		{	
			if (parseFloat(form.Donation.value)!=0)
			{
				if (parseFloat(form.Donation.value)<5)
					msg = msg + warnInvalid("We cannot accept less than $5 donations.\n",16)
			}
		}
	}
	else
	{
		form.Donation.value="0"
	}
	if (msg!="")
	{
		alert(msg)
		return false
	}
	else
 		return true	
}


function SetLevel(form, selectedlevel,cutoffdate)
{
	if ((form.programid.value!="1")&&(form.programid.value!="4")&&(form.programid.value!="9")&&(form.programid.value!="6"))
		return
	dd = document.PersonalInfo.DateOfBirthDay.options[document.PersonalInfo.DateOfBirthDay.selectedIndex].value
	mm = document.PersonalInfo.DateOfBirthMonth.options[document.PersonalInfo.DateOfBirthMonth.selectedIndex].value
	yy = document.PersonalInfo.DateOfBirthYear.options[document.PersonalInfo.DateOfBirthYear.selectedIndex].value
	if (!isDate(yy,mm,dd))
	{
		form.Level.disabled=true
		return
	}
	dd=parseInt(dd)
	mm=parseInt(mm)
	yy=parseInt(yy)

	days = new Date(cutoffdate);
	gdate = days.getDate();
	gmonth = days.getMonth();
	gyear = days.getYear();
	if (gyear<1900)
		gyear=gyear+1900
	age = gyear - yy;
	if((mm == (gmonth + 1)) && (dd <= parseInt(gdate))) 
	{
		age = age;
	}
	else 
	{
		if(mm <= (gmonth)) 
		{
			age = age;
		}
		else 
		{
			age = age - 1; 
		}
	}


		form.Level.disabled=false
		for (var i=0;i<form.Level.length;i++)
		{
			form.Level.options[i] = null
		}
		form.Level.length=0
		//form.Level.options[form.Level.length] = new Option('click to select', '');
	if (form.programid.value=="1")
	{


		if (age<=8)
		{
			form.Level.options[form.Level.length] = new Option('Ages 7-8', 'Ages 7-8')
			form.Level.options[form.Level.length] = new Option('Ages 9-10', 'Ages 9-10')
		}
		else if (age<=10)
		{
			form.Level.options[form.Level.length] = new Option('Ages 9-10', 'Ages 9-10')
			form.Level.options[form.Level.length] = new Option('Ages 11-12', 'Ages11-12')
		}
		else if (age<=12)
		{
			form.Level.options[form.Level.length] = new Option('Ages 11-12', 'Ages11-12')
			form.Level.options[form.Level.length] = new Option('Ages 13-14', 'Ages13-14')
		}
		else if (age<=14)
		{
			form.Level.options[form.Level.length] = new Option('Ages 13-14', 'Ages13-14')
			form.Level.options[form.Level.length] = new Option('Ages 15-16', 'Ages15-16')
		}
		else
		{
			form.Level.options[form.Level.length] = new Option('Ages 15-16', 'Ages15-16')
		}
		

	}

	if ((form.programid.value=="4")||(form.programid.value=="9"))
	{
		if (age<=8)
		{
			form.Level.options[form.Level.length] = new Option('8 and Under', '8 and Under')
			form.Level.options[form.Level.length] = new Option('10 and Under', '10 and Under')
		}
		else if (age<=10)
		{
			form.Level.options[form.Level.length] = new Option('10 and Under', '10 and Under')
			form.Level.options[form.Level.length] = new Option('12 and Under', '12 and Under')
		}
		else if (age<=12)
		{
			form.Level.options[form.Level.length] = new Option('12 and Under', '12 and Under')
			form.Level.options[form.Level.length] = new Option('14 and Under', '14 and Under')
		}
		else if (age<=14)
		{
			form.Level.options[form.Level.length] = new Option('14 and Under', '14 and Under')
			form.Level.options[form.Level.length] = new Option('16 and Under', '16 and Under')
		}
		else
		{
			form.Level.options[form.Level.length] = new Option('16 and Under', '16 and Under')
		}
	}
	if (form.programid.value=="6")
	{
		if (age<=6)
		{
			form.Level.options[form.Level.length] = new Option('Ages 6 A', 'Ages 6 A')
			form.Level.options[form.Level.length] = new Option('Ages 6 AA', 'Ages 6 AA')
			form.Level.options[form.Level.length] = new Option('Ages 7 A', 'Ages 7 A')
			form.Level.options[form.Level.length] = new Option('Ages 7 AA', 'Ages 7 AA')
		}
		else if (age==7)
		{
			form.Level.options[form.Level.length] = new Option('Ages 7 A', 'Ages 7 A')
			form.Level.options[form.Level.length] = new Option('Ages 7 AA', 'Ages 7 AA')
			form.Level.options[form.Level.length] = new Option('Ages 8 A', 'Ages 8 A')
			form.Level.options[form.Level.length] = new Option('Ages 8 AA', 'Ages 8 AA')
		}
		else if (age==8)
		{
			form.Level.options[form.Level.length] = new Option('Ages 8 A', 'Ages 8 A')
			form.Level.options[form.Level.length] = new Option('Ages 8 AA', 'Ages 8 AA')
			form.Level.options[form.Level.length] = new Option('Ages 9 A', 'Ages 9 A')
			form.Level.options[form.Level.length] = new Option('Ages 9 AA', 'Ages 9 AA')
		}
		else if (age==9)
		{
			form.Level.options[form.Level.length] = new Option('Ages 9 A', 'Ages 9 A')
			form.Level.options[form.Level.length] = new Option('Ages 9 AA', 'Ages 9 AA')
			form.Level.options[form.Level.length] = new Option('Ages 10 A', 'Ages10 A')
			form.Level.options[form.Level.length] = new Option('Ages 10 AA', 'Ages10 AA')
		}
		else if (age==10)
		{
			form.Level.options[form.Level.length] = new Option('Ages 10 A', 'Ages10 A')
			form.Level.options[form.Level.length] = new Option('Ages 10 AA', 'Ages10 AA')
			form.Level.options[form.Level.length] = new Option('Ages 11 A', 'Ages11 A')
			form.Level.options[form.Level.length] = new Option('Ages 11 AA', 'Ages11 AA')
		}
		else if (age==11)
		{
			form.Level.options[form.Level.length] = new Option('Ages 11 A', 'Ages11 A')
			form.Level.options[form.Level.length] = new Option('Ages 11 AA', 'Ages11 AA')
			form.Level.options[form.Level.length] = new Option('Ages 12 A', 'Ages12 A')
			form.Level.options[form.Level.length] = new Option('Ages 12 AA', 'Ages12 AA')
		}
		else if (age==12)
		{
			form.Level.options[form.Level.length] = new Option('Ages 12 A', 'Ages12 A')
			form.Level.options[form.Level.length] = new Option('Ages 12 AA', 'Ages12 AA')
			form.Level.options[form.Level.length] = new Option('Ages 13 A', 'Ages13 A')
			form.Level.options[form.Level.length] = new Option('Ages 13 AA', 'Ages13 AA')
		}
		else if (age==13)
		{
			form.Level.options[form.Level.length] = new Option('Ages 13 A', 'Ages13 A')
			form.Level.options[form.Level.length] = new Option('Ages 13 AA', 'Ages13 AA')
			form.Level.options[form.Level.length] = new Option('Ages 14 A', 'Ages14 A')
			form.Level.options[form.Level.length] = new Option('Ages 14 AA', 'Ages14 AA')
		}

		else
		{
			form.Level.options[form.Level.length] = new Option('Ages 14 A', 'Ages14 A')
			form.Level.options[form.Level.length] = new Option('Ages 14 AA', 'Ages14 AA')
		}
		

	}

	for (var i=0;i<form.Level.length;i++)
	{
		if (form.Level.options[i].value==selectedlevel)
			form.Level.options[i].selected=true
	}
}


function DoSubmitPaymentInfo()
{
	if (validatePaymentInfo(document.PersonalInfo))
	{
		document.PersonalInfo.action="transaction.asp"
		document.PersonalInfo.submit()		
	}	
}

function validatePaymentInfo(form)
{
	var msg = ""
	var i
	var cardtype=""
	for (i=0;i<document.images.length;i++)
	{
		if (document.images[i].name.substring(0,3)=="img")
			document.images[i].src='trans.gif'
	}
	
	for (i=0; i< form.CreditCardType.options.length; i++)
    	{
        if (form.CreditCardType.options[i].selected)
		{
			cardtype = form.CreditCardType.options[i].value
			break
		}         
    	}

	msg = msg + checkCreditCard(cardtype, form.CreditCardNumber,1)
	msg = msg + checkSecurityCode(form.SecurityCode,2)
	msg = msg + checkDate(form.ExpirationMonth,form.ExpirationYear,3)
	msg = msg + checkString(form.CardholderName,pNameOfCardholder,false,4)
	msg = msg + checkString(form.BillingAddr1,sUSAddress,false,5)
	msg = msg + checkString(form.BillingCity,sCity,false,6)
	msg = msg + checkStateCode(form.BillingState.options[form.BillingState.selectedIndex].value,"USA",7)
	msg = msg + checkZIPCode(form.BillingZIP,"USA",8)
	
	if (msg!="")
	{
		alert(msg)
		return false
	}
	else
 		return true
}

function PrinterFriendly(cn,st)
{
	w = window.open("printer.asp?id=" + cn +"&st=" + st ,"PrinterFriendly","left=100,top=120,height=370,width=600,fullscreen=0,toolbar=1,menubar=1,titlebar=1,resizable=1,scrollbars=1")
	w.focus()
}

function SecurityCode()
{
	w = window.open("../securitycode.htm" ,"SecurityCode","left=100,top=120,height=300,width=400,fullscreen=0,toolbar=0,menubar=0,titlebar=0,resizable=0,scrollbars=1")
	w.focus()
}
function UpdatePlayer(id)
{
      document.PersonalInfo.action = "enroll2.asp?playerid=" +id
      document.PersonalInfo.submit()                  
}

function SetSize()
{
	if (document.PersonalInfo.NeedUniform!=null)
	{
	NeedUniform=""
	for (i=0;i<=1;i++)
	{
		if (document.PersonalInfo.NeedUniform[i].checked)
			NeedUniform=document.PersonalInfo.NeedUniform[i].value
	}

	if (NeedUniform=="yes")
	{
		document.PersonalInfo.JerseySize.disabled=false
		document.PersonalInfo.PantsSize.disabled=false
	}
	else
	{
		document.PersonalInfo.JerseySize.disabled=true
		document.PersonalInfo.PantsSize.disabled=true
	}
	}
}

