function rightTrim(sString) 
{
    while (sString.substring(sString.length-1, sString.length) == ' ')
    {
        sString = sString.substring(0,sString.length-1);
    }
    return sString;
}

function DaysInMonth(DIMMonth, DIMYear)
{
    DIMMonth = DIMMonth.toString();

    var FebDays;
    if (DIMYear % 400 == 0)
        FebDays = 29;
    else if (DIMYear % 100 == 0)
        FebDays = 28;
    else if (DIMYear % 4 == 0)
        FebDays = 29;
    else
        FebDays = 28;

    if (DIMMonth == 1 || 
        DIMMonth.toUpperCase().substr(0, 3) == "JAN")
        return 31;
    if (DIMMonth == 2 || 
             DIMMonth.toUpperCase().substr(0, 3) == "FEB")
        return FebDays;
    else if (DIMMonth == 3 || 
             DIMMonth.toUpperCase().substr(0, 3) == "MAR")
        return 31;
    else if (DIMMonth == 4 || 
             DIMMonth.toUpperCase().substr(0, 3) == "APR")
        return 30;
    else if (DIMMonth == 5 || 
             DIMMonth.toUpperCase().substr(0, 3) == "MAY")
        return 31;
    else if (DIMMonth == 6 || 
             DIMMonth.toUpperCase().substr(0, 3) == "JUN")
        return 30;
    else if (DIMMonth == 7 || 
             DIMMonth.toUpperCase().substr(0, 3) == "JUL")
        return 31;
    else if (DIMMonth == 8 || 
             DIMMonth.toUpperCase().substr(0, 3) == "AUG")
        return 31;
    else if (DIMMonth == 9 || 
             DIMMonth.toUpperCase().substr(0, 3) == "SEP")
        return 30;
    else if (DIMMonth == 10 || 
             DIMMonth.toUpperCase().substr(0, 3) == "OCT")
        return 31;
    else if (DIMMonth == 11 || 
             DIMMonth.toUpperCase().substr(0, 3) == "NOV")
        return 30;
    else if (DIMMonth == 12 || 
             DIMMonth.toUpperCase().substr(0, 3) == "DEC")
        return 31;
    else
        return "Invalid month (" + DIMMonth.toUpperCase().substr(0, 3) + ") passed to 'DaysInMonth' javascript function.";        
}

function ConvertMonthFormat (InputMonth, OutputType)
{
    // Output Types - 0=Number, 1=ShortMonth, 2=LongMonth
    var MonthNumber;
    var MonthName;

    var MonthInputString = new String(InputMonth);
    MonthInputString = MonthInputString.toUpperCase().substring(0, 3);

    if (MonthInputString == "1" ||
        MonthInputString == "JAN")
    {
        MonthNumber = 1
        MonthName = "January"
    }
    else if (MonthInputString == "2" ||
             MonthInputString == "FEB")
    {
        MonthNumber = 2
        MonthName = "February"
    }
    else if (MonthInputString == "3" ||
             MonthInputString == "MAR")
    {
        MonthNumber = 3
        MonthName = "March"
    }
    else if (MonthInputString == "4" ||
             MonthInputString == "APR")
    {
        MonthNumber = 4
        MonthName = "April"
    }
    else if (MonthInputString == "5" ||
             MonthInputString == "MAY")
    {
        MonthNumber = 5
        MonthName = "May"
    }
    else if (MonthInputString == "6" ||
             MonthInputString == "JUN")
    {
        MonthNumber = 6
        MonthName = "June"
    }
    else if (MonthInputString == "7" ||
             MonthInputString == "JUL")
    {
        MonthNumber = 7
        MonthName = "July"
    }
    else if (MonthInputString == "8" ||
             MonthInputString == "AUG")
    {
        MonthNumber = 8
        MonthName = "August"
    }
    else if (MonthInputString == "9" ||
             MonthInputString == "SEP")
    {
        MonthNumber = 9
        MonthName = "September"
    }
    else if (MonthInputString == "10" ||
             MonthInputString == "OCT")
    {
        MonthNumber = 10
        MonthName = "October"
    }
    else if (MonthInputString == "11" ||
             MonthInputString == "NOV")
    {
        MonthNumber = 11
        MonthName = "November"
    }
    else if (MonthInputString == "12" ||
             MonthInputString == "DEC")
    {
        MonthNumber = 12
        MonthName = "December"
    }
    else
    {
        MonthNumber = -1
        MonthName = "?"
    }

    if (OutputType == 0)
        return MonthNumber
    else if (OutputType == 1)
        return MonthName.substring(0, 3);
    else if (OutputType == 2)
        return MonthName
    else
        return "Invalid Output Type passed to ConvertMonthFormat function"
}

function ValidateDate(poselDay, poselMonth, poselYear, pbRequired, psDescription)
{
    if (pbRequired)
    {
        if (rightTrim(poselDay.value) == "")
            return ValidationError(poselDay, "Please enter the " + psDescription + " day.");

        if (rightTrim(poselMonth.value) == "")
            return ValidationError(poselMonth, "Please enter the " + psDescription + " month.");

        if (rightTrim(poselYear.value) == "")
            return ValidationError(poselYear, "Please enter the " + psDescription + " year.");
    }

    if (rightTrim(poselDay.value) == "" &&
        (rightTrim(poselMonth.value) != "" || rightTrim(poselYear.value) != ""))
        return ValidationError(poselDay, "You have a partially completed " + psDescription + " date.  Please " +
                                         (!pbRequired?"either blank out all parts of the date, or ":"") +
                                         "fill out all parts of the date to form a valid date.");

    if (rightTrim(poselMonth.value) == "" &&
        (rightTrim(poselDay.value) != "" || rightTrim(poselYear.value) != ""))
        return ValidationError(poselMonth, "You have a partially completed " + psDescription + " date.  Please " +
                                         (!pbRequired?"either blank out all parts of the date, or ":"") +
                                         "fill out all parts of the date to form a valid date.");

    if (rightTrim(poselYear.value) == "" &&
        (rightTrim(poselMonth.value) != "" || rightTrim(poselDay.value) != ""))
        return ValidationError(poselYear, "You have a partially completed " + psDescription + " date.  Please " +
                                         (!pbRequired?"either blank out all parts of the date, or ":"") +
                                         "fill out all parts of the date to form a valid date.");

    if (rightTrim(poselDay.value) != "")
    // We've got here, must be testing for a valid date if any part of the date exists
    {
        if (DaysInMonth(poselMonth.value, poselYear.value) < poselDay.value)
            return ValidationError(poselDay, "There are only " + DaysInMonth(poselMonth.value, poselYear.value) + 
                                             " days in " + ConvertMonthFormat (poselMonth.value, 2) + " " + poselYear.value +
                                             ". The date you have specified is an invalid date.");
    }
    return true;
}

function ValidationError(poFocusObject, psErrorMessage)
{
    alert(psErrorMessage);
    poFocusObject.focus();
    return false;
}

function ValidateEmail(psEmail)
{
    var bOK  = true
    var iAtSym    = psEmail.indexOf('@')
    var iPeriod   = psEmail.lastIndexOf('.')
    var iSpace    = psEmail.indexOf(' ')
    var iLength   = psEmail.length - 1

    if ((iAtSym < 1) ||
        (iPeriod <= iAtSym+1) ||
        (iPeriod == iLength ) ||
        (iSpace  != -1))
      bOK = false

    return bOK
}

function TextAreaLengthCheck(poTextAreaObject, piLengthCheckMaxLength)
{
    if (poTextAreaObject.value.length > piLengthCheckMaxLength)
        poTextAreaObject.value = poTextAreaObject.value.substring(0, piLengthCheckMaxLength);
}

