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;
    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 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)
	//if (!isEmpty(form.AltEmail.value))
	//{
	//	if (!isEmail(form.AltEmail.value, false))
      // 		msg=msg+ warnInvalid ("Invalid alternate email.\n",18);
	//}

	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)
	if (!isEmpty(form.EmailContact1.value))
		msg = msg + checkEmail(form.EmailContact1,false,18)

	if ((form.CoachContact1.checked)||(form.AsstCoachContact1.checked))
	{
		CertifiedContact1=""
		for (i=0;i<=1;i++)
		{
			if (form.CertifiedContact1[i].checked)
				CertifiedContact1=form.CertifiedContact1[i].value
		}
		if (CertifiedContact1=="")
			msg = msg + warnInvalid("Please select Yes or No.\n",20)
	}

	if ((form.CoachContact2!=null)&& (form.AsstCoachContact2!=null)&&(form.TeamParentContact2!=null)&&(form.LeagueDirectorContact2!=null))
	{
	if ((form.CoachContact2.checked)||(form.AsstCoachContact2.checked)||(form.TeamParentContact2.checked)||(form.LeagueDirectorContact2.checked))
	{
		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)
	if (!isEmpty(form.EmailContact2.value))
		msg = msg + checkEmail(form.EmailContact2,false,19)
	if ((form.CoachContact2.checked)||(form.AsstCoachContact2.checked))
	{
		CertifiedContact2=""
		for (i=0;i<=1;i++)
		{
			if (form.CertifiedContact2[i].checked)
				CertifiedContact2=form.CertifiedContact2[i].value
		}
		if (CertifiedContact2=="")
			msg = msg + warnInvalid("Please select Yes or No.\n",21)
	}

	heardfrom = form.HeardFrom.options[form.HeardFrom.selectedIndex].value
	if (heardfrom =="")
	{
		msg = msg + warnInvalid ("How did you hear about us?\n",22)
	}
	else
	{
		if (heardfrom =="Other")
			msg = msg + checkString(form.HeardFromOther,"Please explain.",false,23)
	}
	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 name." ,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.HeightFt!=null)
		msg = msg + checkHeight(form.HeightFt,10)
	if (form.Weight!=null)
		msg = msg + checkString(form.Weight,"Please enter player's weight.",false,11)	
	level = form.Level.options[form.Level.selectedIndex].value
	if (level=="")
		msg = msg + warnInvalid ("Please select program.\n",8)

		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",7)	

	if (!form.agreement.checked)
	{
		msg=msg+ warnInvalid ("You must agree to the unconditional release of liability.\n",12)
	}
	if (msg!="")
	{
		alert(msg)
		return false
	}
	else
 		return true	
}


function DoSubmitCoachInfo()
{
	if (validateCoachInfo(document.PersonalInfo))
	{
		document.PersonalInfo.submit()		
	}	
}

function validateCoachInfo(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 your last name." ,false,1)
	msg = msg + checkString(form.FirstName,"Please enter your first name.",false,2)	
	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.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 + checkUSPhone(form.CellPhone,false,9)
	msg = msg + checkEmail(form.Email,false,10)
	if ((!form.HeadCoach.checked) && ((!form.AssistantCoach.checked)))
		msg = msg + warnInvalid ("Please select Coaching and/or Assistant Coaching.\n",26)
	CoachedBefore=""
	for (i=0;i<=1;i++)
	{
		if (form.CoachedBefore[i].checked)
			CoachedBefore=form.CoachedBefore[i].value
	}
	if (CoachedBefore=="")
		msg = msg + warnInvalid("Please select Yes or No.\n",11)
	if (CoachedBefore=="yes")
	{
		msg = msg + checkString(form.SportCoached,"Please enter sports.",false,12)	
		msg = msg + checkString(form.AgeGroupsCoached,"Please enter age groups.",false,13)
		msg = msg + checkString(form.YrsExperience,"Please enter year of experience.",false,14)
		msg = msg + checkString(form.LocationCoached,"Please enter where you coached.",false,15)
	}	

	NYSCACertified =""
	for (i=0;i<=1;i++)
	{
		if (form.NYSCACertified[i].checked)
			NYSCACertified=form.NYSCACertified[i].value
	}
	if (NYSCACertified=="")
		msg = msg + warnInvalid("Please select Yes or No.\n",16)
	if (NYSCACertified=="yes")
	{
		msg = msg + checkString(form.NYSCASports,"Please enter sports.",false,17)
		msg = msg + checkString(form.NYSCANumber,"Please enter NYSCA number.",false,18)
		msg = msg + checkString(form.NYSCAExpDate,"Please enter NYSCA expiration date.",false,18)
	}
	msg = msg + checkString(form.DLN,"Please your drivers license number.",false,19)
	DLstate = form.DLState.options[form.DLState.selectedIndex].value
	if (DLstate =="")
		msg = msg + warnInvalid ("Please select a state.\n",20)

	msg = msg + checkDOB(form.DateOfBirthMonth.options[form.DateOfBirthMonth.selectedIndex].value,form.DateOfBirthDay.options[form.DateOfBirthDay.selectedIndex].value,form.DateOfBirthYear.options[form.DateOfBirthYear.selectedIndex].value,21, "Please enter date of birth.\n")
			
	msg = msg + checkSSN(form.SSN,22)
	ConvictedOfCrime =""
	for (i=0;i<=1;i++)
	{
		if (form.ConvictedOfCrime[i].checked)
			ConvictedOfCrime=form.ConvictedOfCrime[i].value
	}
	if (ConvictedOfCrime=="")
		msg = msg + warnInvalid("Please select Yes or No.\n",23)
	if (ConvictedOfCrime=="yes")
	{
		msg = msg + checkString(form.CrimeExplanation,"Please explain.",false,24)
	}
	if (!form.agreement.checked)
	{
		msg=msg+ warnInvalid ("You must agree to submit this application.\n",25)
	}
	if (msg!="")
	{
		alert(msg)
		return false
	}
	else
 		return 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()                  
}

