function SetDayPhone()
{
    document.frmRegister.sPhoneDay.value=document.frmRegister.sPhoneEvening.value;
}

function ParsePostalCode(f)
{
    var sPostalCode = f.value;
    var nLength = sPostalCode.length;
    var sReturnCode = sPostalCode;

    switch (nLength)
    {
        case 6:
            sReturnCode = sPostalCode.substring(0,3) + " " + sPostalCode.substring(3)
            break
        default:
            sReturnCode = sPostalCode
    }

    f.value = sReturnCode.toUpperCase();
}

function ParsePhoneNumber(f)
{
    var sPhoneNumber = f.value;
    var nLength = sPhoneNumber.length;
    var sReturnNumber = sPhoneNumber;

    switch (nLength)
    {
        case 7:
            sReturnNumber = "250-" + sPhoneNumber.substring(0,3) + "-" + sPhoneNumber.substring(3)
            break
        case 8:
            switch (sPhoneNumber.substring(0,1))
            {
                case "2":
                    sReturnNumber = "206-" + sPhoneNumber.substring(1,4) + "-" + sPhoneNumber.substring(4)
                    break
                case "4":
                    sReturnNumber = "403-" + sPhoneNumber.substring(1,4) + "-" + sPhoneNumber.substring(4)
                    break
                case "6":
                    sReturnNumber = "604-" + sPhoneNumber.substring(1,4) + "-" + sPhoneNumber.substring(4)
                    break
                case "7":
                    sReturnNumber = "780-" + sPhoneNumber.substring(1,4) + "-" + sPhoneNumber.substring(4)
                    break
                default:
                    sReturnNumber = sPhoneNumber
            }
            break
        default:
            sReturnNumber = sPhoneNumber
    }

    f.value = sReturnNumber;
}

function CalculateAge(f)
{
    var nRaceYear = 2004;
    var nRaceMonth = 10;
    var nRaceDay = 10;

    var nBirthYear = parseInt(f.nBirthYear.value);
    var nBirthMonth = parseInt(f.nBirthMonth.options[f.nBirthMonth.selectedIndex].value);
    var nBirthDay = (f.nBirthDay.value);

    var nAge = 0;

    if (!(isNaN(nBirthYear)) && !(isNaN(nBirthMonth)) && !(isNaN(nBirthDay)))
    {
        if (nBirthYear > 1900 && nBirthYear <= 2003 && nBirthDay > 0 && nBirthDay <= 31)
        {
            nAge = nRaceYear - nBirthYear;
            if (nBirthMonth > nRaceMonth || (nBirthMonth == nRaceMonth && nBirthDay > nRaceDay))
                nAge -= 1;
        }
    }

    if (nAge > 0)
    {
        f.nAgeOnRaceDay.value = nAge;

        if (nAge < 13)
            f.sAgeGroup.selectedIndex = 1;
        else if (nAge < 16)
            f.sAgeGroup.selectedIndex = 2;
        else if (nAge < 20)
            f.sAgeGroup.selectedIndex = 3;
        else
        {
            if (parseInt(nAge / 5) <= 14)
                f.sAgeGroup.selectedIndex = parseInt(nAge / 5);
            else
                f.sAgeGroup.selectedIndex = 14;
        }
    }
    else
    {
        f.sAgeGroup.selectedIndex = 0;
    }
}

function ValidateEntry(f)
{
    var sMsg = "";

    if (!(f.sRace[0].checked || f.sRace[1].checked || f.sRace[2].checked || f.sRace[3].checked))
    {
        sMsg += "\n- No race is selected";
    }

    if (f.sShirtSize.selectedIndex == 0)
    {
        sMsg += "\n- Shirt not selected";
    }
    else
    {
        if (!f.sRace[3].checked)
        {
            if (f.sShirtSize.options[f.sShirtSize.selectedIndex].value.indexOf("Y") != -1)
                sMsg += "\n- Youth shirts only available for Kids' 1K run";
        }
    }


    if (f.sEmailAddress.value != "-")
    {
        sMsg += Check(f.sEmailAddress,"blank","\n- Email Address is required");
        sMsg += Check(f.sEmailAddress,"email","\n- Email Address appears to be invalid");
    }

    if (f.sPassword.value != "" || f.sConfirmPassword.value != "")
    {
        if (f.sPassword.value != f.sConfirmPassword.value)
            sMsg += "\n- Passwords do not match";
    }

    sMsg += Check(f.sFirstName,"blank","\n- First Name is required");
    sMsg += Check(f.sLastName,"blank","\n- Last Name is required");

    //sMsg += Check(f.sBirthdate,"blank","\n- Birthdate is required");
    if (!isNaN(f.nBirthYear.value) || f.nBirthYear.value == "")
    {
        if (f.nBirthYear.value < 1900 || f.nBirthYear.value > 2003)
        {
            sMsg += "\n- Full 4-digit year of birth is required";
        }
    }
    if (f.nBirthMonth.selectedIndex == 0)
        sMsg += "\n- Month of birth is required";
    if (!isNaN(f.nBirthDay.value) || f.nBirthDay.value == "")
    {
        if (f.nBirthDay.value < 1 || f.nBirthDay.value > 31)
        {
            sMsg += "\n- Day of birth is required";
        }
    }

    sMsg += Check(f.nAgeOnRaceDay,"blank","\n- Raceday age is required");
    sMsg += Check(f.nAgeOnRaceDay,"number","\n- Raceday age must be a number");

    if (!isNaN(f.nAgeOnRaceDay.value))
    {
        if (f.nAgeOnRaceDay.value < 18)
        {
            sMsg += Check(f.sParentName,"blank","\n- Parent's name is required for runners under 18");
        }
    }

    if (f.sAgeGroup.selectedIndex == 0)
        sMsg += "\n- Age Group not selected";

    if (!(f.sGender[0].checked || f.sGender[1].checked))
        sMsg += "\n- Gender not selected";

    if (f.sArea[0].checked || f.sArea[1].checked)
    {
        if (f.sArea[0].checked)
        {
            sMsg += Check(f.sAddress,"blank","\n- Address is required");
            sMsg += Check(f.sCity,"blank","\n- City is required");

            if (f.sProvince.options[f.sProvince.selectedIndex].value=="")
            {
                sMsg += "\n- Province or State is required";
            }
            else if (f.sProvince.selectedIndex > 13)
            {
                sMsg += Check(f.sPostalCode,"blank","\n- Zip Code is required");
            }
            else
            {
                sMsg += Check(f.sPostalCode,"blank","\n- Postal/Zip Code is required");
            }
        }
        else
        {
            sMsg += Check(f.sInternationalAddress,"blank","\n- Address is required");
            sMsg += Check(f.sInternationalCountry.options[f.sInternationalCountry.selectedIndex],"blank","\n- Country is required");
        }
    }
    else
    {
        sMsg += "\n- Address is required";
    }

    //sMsg += Check(f.sPhoneEvening,"blank","\n- Phone Number is required");
    if (f.sPhoneEvening.value == "" && f.sPhoneDay.value == "")
        sMsg += "\n- At least one phone number is required";

    sMsg += Check(f.nCarbo,"number","\n- Number of carbo dinner tickets must be a number");
    sMsg += Check(f.nBreakfast,"number","\n- Number of breakfast tickets must be a number");
    //sMsg += Check(f.nPhoto,"number","\n- Number of portrait packages must be a number");

    sMsg += Check(f.nCourse,"number","\n- Number of course tour tickets must be a number");
    if (!isNaN(f.nCourse.value))
    {
        if (f.nCourse.value >= 1 && (!(f.sCourseTime[0].checked || f.sCourseTime[1].checked || f.sCourseTime[2].checked)))
        {
            sMsg += "\n- No course tour time is selected";
        }
    }

    sMsg += Check(f.nMassage,"number","\n- Number of massage tickets must be a number");

    sMsg += Check(f.nDonateGVHF,"number","\n- GVHF donation must be a number");
    sMsg += Check(f.nDonateKidSport,"number","\n- KidSport donation must be a number");
    sMsg += Check(f.nDonateRoC,"number","\n- Runners of Compassion donation must be a number");


    if (!f.bWaiverChecked.checked)
        sMsg += "\n- Waiver must be checked";

    if (sMsg == "")
    {
        return true;
    }
    else
    {
        sMsg = "Please correct the following before continuing:\n" + sMsg;
        alert(sMsg);
        return false;
    }
}

function RaceChanged(f)
{
    var nRaceNumber = 0;

    for (var i=0;i<=3;i++)
    {
        if (f.sRace[i].checked)
            nRaceNumber = i;
    }

    var nMarathon = 0;
    var nHalf = 1;
    var n8K = 2;
    var n1K = 3;

/*
    if (nRaceNumber == nMarathon)
    {
        f.s8KShirtSize.selectedIndex = 0;
        f.sKidsShirtSize.selectedIndex = 0;
    }
    if (nRaceNumber == nHalf)
    {
        f.s8KShirtSize.selectedIndex = 0;
        f.sKidsShirtSize.selectedIndex = 0;
    }
    if (nRaceNumber == n8K)
    {
        f.sShirtSize.selectedIndex = 0;
        f.sKidsShirtSize.selectedIndex = 0;
    }
    if (nRaceNumber == n1K)
    {
        f.sShirtSize.selectedIndex = 0;
        f.s8KShirtSize.selectedIndex = 0;
    }
*/

}

function OpenWindowCentered(sURL,sWindowName,nWidth,nHeight)
{
    var nPosX = (screen.width - nWidth) / 2
    var nPosY = (screen.height - nHeight) / 2
    sWindowName = window.open(sURL,sWindowName,'menubar=no,status=yes,scrollbars=yes,width=' + nWidth + ',height=' + nHeight + ',top=' + nPosY + ',left=' + nPosX);
    sWindowName.focus();
}
function Check()
{
    //  Description: XXX fix this
    //  Parameters: There can be any number (n) of parameters.
    //              parm 1..n-2 - the form objects to be checked
    //              parm n-1 - the type of check to perform
    //              parm n - the message to display if the check fails

    //              Current check types:
    //              - blank
    //              - blankor
    //              - blankand
    //              - email
    //              - date
    //              - number

    //  Date        Description of change
    //  12/19/02    Sylvan - Created
    //  12/19/02    Sylvan - modified to use variable parameter list

    var bCheckedOK;
    var obFormObject;

    //  Get the list of supplied parameters - make sure there are at least 3
    var aArgumentList = Check.arguments;
    var nArguments = aArgumentList.length;
    var nLastArgumentIndex = nArguments - 3;

    if (nArguments < 3)
    {
        // - there must be at least 3 parameters.
        sMsg = "\nSupport: wrong number of required arguments to Check()"
        return sMsg;
    }
    else
    {
        obFormObject = aArgumentList[0];
    }

    var sMsg = aArgumentList[nArguments - 1];
    var sCheckType = aArgumentList[nArguments - 2];


    switch (sCheckType)
    {
        case "blank":
            //  Checks that a value is not blank
            bCheckedOK = (obFormObject.value != "");
            break;

        case "blankor":
            //  Checks that multiple values have at least one non-blank - uses logical OR
            //  intitialize bCheckedOK to false so logical AND will work - first non-blank value will switch it to true
            bCheckedOK = false;
            var i = 0
            while (bCheckedOK == false && i <= nLastArgumentIndex)
            {
                obFormObject = aArgumentList[i]
                bCheckedOK = (bCheckedOK || (obFormObject.value != ""));
                i++;
            }
            break;

        case "blankand":
            //  Checks that multiple values are ALL not blank - uses logical AND
            //  intitialize bCheckedOK to true so logical AND will work - first blank value will switch it to false
            bCheckedOK = true;
            var i = 0
            while (bCheckedOK == true && i <= nLastArgumentIndex)
            {
                obFormObject = aArgumentList[i]
                bCheckedOK = (bCheckedOK && (obFormObject.value != ""));
                i++;
            }
            break;

        case "email":
            //  Date        Description of change
            //  12/18/02    Sylvan - copied from http://www.xs4all.nl/~ppk/js/mailcheck.html
            //  12/18/02    Sylvan - disallowed numerics in top-level domain
            //  12/18/02    Sylvan - forced domains to begin with an alphanumeric

            //  Notes:
            //  regular expression checks:
            //      username: alphanumeric, hyphen, underscore or period followed by @
            //      domain: at least one alphanumeric, followed by alphanumerics or hyphens,
            //          followed by a period, followed by 2-4 alphabeticals

            //  Original reg exp:
            //  var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

            var sEmail = obFormObject.value;

            if (sEmail == "")
            {
                bCheckedOK = true;
            }
            else
            {
                var filter  = /^([a-zA-Z0-9_\.\-\&])+\@+(([a-zA-Z0-9\-])+\.)+([a-zA-Z]{2,4})+$/;
                bCheckedOK = filter.test(sEmail);
            }
            break;

        case "date":
            // Checks for the following valid date formats:
            // MM/DD/YYYY
            // Also separates date into month, day, and year variables

            var dDate = obFormObject.value;

            if (dDate == "")
            {
                bCheckedOK = true;
            }
            else
            {
                //  if the programmer supplied a message string, use it as a prefix
                //  for the messages generated by this function.
                //  useful for identifying the field with the error.
                var sDatePrefix = sMsg;
                if (sDatePrefix != "")
                {
                    sDatePrefix = " - " + sDatePrefix;
                }

                sMsg = "";
                var dateStr = obFormObject.value;
                var datePat = /^(\d{4})(\-)(\d{1,2})\2(\d{1,2})$/;
                var matchArray = dateStr.match(datePat); // is the format ok?

                if (matchArray == null)
                {
                    sMsg = "\n" + sDatePrefix + " - Make sure all dates are in the format: yyyy-mm-dd";
                }
                else
                {
                    month = matchArray[3]; // parse date into variables
                    day = matchArray[4];
                    year = matchArray[1];

                    if (month < 1 || month > 12)    // check month range
                    {
                        sMsg = "\n" + sDatePrefix + " - Month must be between 1 and 12.";
                    }

                    if (day < 1 || day > 31)
                    {
                        sMsg = "\n - " + sDatePrefix + " - Day must be between 1 and 31.";
                    }

                    if ((month==4 || month==6 || month==9 || month==11) && day==31)
                    {
                        sMsg = "\n - " + sDatePrefix + " - Month "+month+" doesn't have 31 days!";
                    }

                    if (month == 2) // check for february 29th
                    {
                        var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));

                        if (day>29 || (day==29 && !isleap))
                        {
                            sMsg = "\n - " + sDatePrefix + " - February " + year + " doesn't have " + day + " days!";
                        }
                    }
                }
                bCheckedOK = (sMsg == "");
            }
            break;

        case "number":
            //
            var sTestNumber = obFormObject.value;
            var sValidCharacters = "0123456789-.";
            var bNumeric = true;

            i = 0;
            while (bNumeric && i < sTestNumber.length)
            {
                sCharacter = sTestNumber.charAt(i);
                bNumeric = (bNumeric && (sValidCharacters.indexOf(sCharacter) != -1));
                i++
                if  (i == 1)
                {
                    sValidCharacters = "0123456789.,"
                }
            }
            bCheckedOK = bNumeric;
            break;

        default:
            bCheckedOK = false;
            sMsg = "\nSupport: invalid check type."
    }

    if (bCheckedOK)
    {
        return("");
    }
    else
    {
        return(sMsg);
    }
}

function CheckKey(sKeyCode,sValidChars)
{
    //onKeyPress="return CheckKey(event.keyCode,'1234567890-');"
    return true;

    var sKey = String.fromCharCode(sKeyCode);

    if (sKey == null || sKey == 0 || sKey == 8 || sKey == 9 || sKey == 13 || sKey == 27)
        return true;

    if (sValidChars.indexOf(sKey) != -1)
        return true;
    else
        return false;
}

