function convertdate(s, from_mask, to_mask)
{
 var idate;
 var odate;
 var tmpstr;

    if ((s == null) || (s == "")) return s;
    idate = s;
    switch(from_mask)
    {
        case "DD-Mon-YYYY":
            if (idate.length == 10) idate = "0" + idate;
            tmpstr = convertmonth(idate.substr(3, 3)) + 1;
            if (tmpstr < 10) tmpstr = "0" + tmpstr;
            idate = idate.substr(7, 4) + tmpstr + idate.substr(0, 2);
            break;
        case "YYYYMMDD":
            break;
        default:
            break;
    }
    switch(to_mask)
    {
        case "DD-Mon-YYYY":
            odate = idate.substr(6, 2) + '-' + months.substr((parseInt(idate.substr(4, 2), 10) - 1) * 3, 3) + '-' + idate.substr(0, 4);
            break;
        case "YYYYMMDD":
            odate = idate;
            break;
        default:
            odate = idate.substr(6, 2) + '-' + months.substr((parseInt(idate.substr(4, 2), 10) - 1) * 3, 3) + '-' + idate.substr(0, 4);
            break;
    }
    return odate;
}

function convertmonth(s)
{
 var months = "JanFebMarAprMayJunJulAugSepOctNovDec";
 var month_number;

    if ((s == null) || (s == "")) return 0;
    var month_search = new RegExp(s);
    month_number = month_search.exec(months);
    return (month_number.index / 3);
}

function isblank(s)
{
    if ((s == null) || (s == "")) return true;
    for (var i = 0; i < s.length; i++)
    {
        var c = s.charAt(i);
        if ((c != ' ') && (c != '\u00a0') && (c != '\n') && (c != '\t')) return false;
    }
    return true;
}

function isalnum(s)
{
    if ((s == null) || (s == "")) return true;
    for (var i = 0; i < s.length; i++)
    {
        var c = s.charAt(i);
        if ((c != ' ') && (c != '\u00a0') && ((c < 'A') || (c > 'Z')) && ((c < 'a') || (c > 'z')) && ((c < '0') || (c > '9'))) return false;
    }
    return true;
}

function isalpha(s)
{
    if ((s == null) || (s == "")) return true;
    for (var i = 0; i < s.length; i++)
    {
        var c = s.charAt(i);
        if ((c != ' ') && (c != '\u00a0') && ((c < 'A') || (c > 'Z')) && ((c < 'a') || (c > 'z'))) return false;
    }
    return true;
}

function isfloat(s)
{
    if ((s == null) || (s == "")) return true;
    var anum = /(^-?|^\+?)((\d+$)|(\d+\.\d+$))/;
    return anum.test(s);
}

function isinteger(s)
{
    if ((s == null) || (s == "")) return true;
    var anum = /(^-?|^\+?)(\d+$)/;
    return anum.test(s);
}

function isnumeric(s)
{
    if ((s == null) || (s == "")) return true;
    var anum = /(^-?|^\+?)((\d+$)|(\d+\.\d+$))/;
    return anum.test(s);
}

function displayerrors(s)
{
    //
    //   Return now if no errors
    //
    if (!s) return true;
    //
    //   Otherwise display list of errors
    //
    s = "\nPlease correct the following error(s):\n" + s;
    alert(s);
    return false;
}

function validatesimple(f)
{
 var msg = "";
 var i = 0;
 var day_part;
 var month_part;
 var year_part;
 var day_value;
 var month_value;
 var year_value;
 var display_name;
//
//   Loop through form elements, performing standard validation
//
while (i < f.length)
{
    var e = f.elements[i];
    display_name = !isblank(e.displayname) ? e.displayname : e.name;
    //
    //   Branch according to field type
    //
    switch(e.type)
    {
        //
        //   Validate text field
        //
        case "text":
        case "textarea":
            //
            //   Check mandatory
            //
            if (e.mandatory)
            {
                if (isblank(e.value))
                    msg += "\n" + display_name + " must be entered";
                else
                {
                    if (!isblank(e.hint))
                    {
                        if (e.value == e.hint)
                            msg += "\n" + display_name + " must be entered";
                    }
                }
            }
            //
            //   Check datatype
            //
            switch (e.datatype)
            {
                case "alnum":
                    if (!isalnum(e.value))
                        msg += "\n" + display_name + " must be alphanumeric";
                    else
                    {
                        if (!isblank(e.value))
                        {
                            if (!isblank(e.min))
                            {
                                if (e.value < e.min)
                                    msg += "\n" + display_name + " must not be less than " + e.min;
                            }
                            if (!isblank(e.max))
                            {
                                if (e.value > e.max)
                                    msg += "\n" + display_name + " must not be greater than " + e.max;
                            }
                        }
                    }
                    break;
                case "alpha":
                    if (!isalpha(e.value))
                        msg += "\n" + display_name + " must be alphabetic";
                    else
                    {
                        if (!isblank(e.value))
                        {
                            if (!isblank(e.min))
                            {
                                if (e.value < e.min)
                                    msg += "\n" + display_name + " must not be less than " + e.min;
                            }
                            if (!isblank(e.max))
                            {
                                if (e.value > e.max)
                                    msg += "\n" + display_name + " must not be greater than " + e.max;
                            }
                        }
                    }
                    break;
                case "float":
                    if (!isfloat(e.value))
                        msg += "\n" + display_name + " must be numeric";
                    else
                    {
                        if (!isblank(e.value))
                        {
                            if (!isblank(e.min))
                            {
                                if (parseFloat(e.value) < parseFloat(e.min))
                                    msg += "\n" + display_name + " must not be less than " + e.min;
                            }
                            if (!isblank(e.max))
                            {
                                if (parseFloat(e.value) > parseFloat(e.max))
                                    msg += "\n" + display_name + " must not be greater than " + e.max;
                            }
                        }
                    }
                    break;
                case "integer":
                    if (!isinteger(e.value))
                        msg += "\n" + display_name + " must be an integer";
                    else
                    {
                        if (!isblank(e.value))
                        {
                            if (!isblank(e.min))
                            {
                                if (parseInt(e.value, 10) < parseInt(e.min, 10))
                                    msg += "\n" + display_name + " must not be less than " + e.min;
                            }
                            if (!isblank(e.max))
                            {
                                if (parseInt(e.value, 10) > parseInt(e.max, 10))
                                    msg += "\n" + display_name + " must not be greater than " + e.max;
                            }
                        }
                    }
                    break;
                default:
                    break;
            }
            break;
        //
        //   Validate checkbox field
        //
        case "checkbox":
            //
            //   Check mandatory
            //
            if (e.mandatory)
            {
                if (!e.checked)
                    msg += "\n" + display_name + " must be ticked";
            }
            break;
        //
        //   Validate select-one field
        //
        case "select-one":
            //
            //   Special processing
            //
            switch (e.datatype)
            {
                case "date":
                    day_part = e;
                    month_part = f.elements[++i];
                    year_part = f.elements[++i];
                    full_part = f.elements[++i];
                    full_part.value = '';
                    day_value = trim(e.options[e.selectedIndex].value);
                    month_value = trim(month_part.options[month_part.selectedIndex].value);
                    year_value = year_part.value;
                    break;
                default:
                    break;
            }
            //
            //   Check mandatory
            //
            if (e.mandatory)
            {
                switch (e.datatype)
                {
                    case "date":
                        if (e.partial && isblank(year_value))
                            msg += "\n" + display_name + " must be entered";
                        else if (isblank(year_value) || isblank(month_value) || isblank(day_value))
                            msg += "\n" + display_name + " must be entered in full";
                        break;
                    default:
                        if (isblank(e.value))
                            msg += "\n" + display_name + " must be selected";
                        break;
                }
            }
            //
            //   Check datatype
            //
            switch (e.datatype)
            {
                case "date":
                    var dateok = false;
                    if (e.partial)
                    {
                        if (isblank(year_value) && !isblank(month_value))
                            msg += "\n" + display_name + " year must be entered if " + display_name + " month is entered";
                        else if (isblank(month_value) && !isblank(day_value))
                            msg += "\n" + display_name + " month must be entered if " + display_name + " day is entered";
                        else if (!isblank(year_value))
                            dateok = true;
                    }
                    else
                    {
                        if (!isblank(day_value + month_value + year_value) &&
                            (isblank(day_value) || isblank(month_value) || isblank(year_value)))
                            msg += "\n" + display_name + " must be entered in full if any part is entered";
                        else if (!isblank(year_value))
                            dateok = true;
                    }
                    if (dateok)
                    {
                        var d = new Date(Date.UTC(parseInt(year_value, 10),
                                convertmonth(month_value),
                                !isblank(day_value) ? parseInt(day_value, 10) : 1));
                        if ((d.getUTCFullYear() != parseInt(year_value, 10)) ||
                            (d.getUTCMonth() != convertmonth(month_value)) ||
                            (d.getUTCDate() != (!isblank(day_value) ? parseInt(day_value, 10) : 1)))
                            msg += "\n" + display_name + " is not a valid date";
                        else
                        {
                            if (!isblank(day_value) && !isblank(month_value))
                            {
                                var entered_date = convertdate(day_value + '-' + month_value + '-' + year_value, "DD-Mon-YYYY", "YYYYMMDD");
                                if (!isblank(e.min))
                                {
                                    var mindate = new Date();
                                    switch(e.min)
                                    {
                                        case "today":
                                            if (entered_date < mindate.getUTCFullYear() + (mindate.getUTCMonth() < 9 ? "0" : "") + (mindate.getUTCMonth() + 1) + (mindate.getUTCDate() < 10 ? "0" : "") + mindate.getUTCDate())
                                                msg += "\n" + display_name + " must not be in the past";
                                            break;
                                        case "tomorrow":
                                            mindate.setTime(mindate.getTime() + (24*60*60*1000));
                                            if (entered_date < mindate.getUTCFullYear() + (mindate.getUTCMonth() < 9 ? "0" : "") + (mindate.getUTCMonth() + 1) + (mindate.getUTCDate() < 10 ? "0" : "") + mindate.getUTCDate())
                                                msg += "\n" + display_name + " must be in the future";
                                            break;
                                        default:
                                            if (entered_date < convertdate(e.min, "DD-Mon-YYYY", "YYYYMMDD"))
                                                msg += "\n" + display_name + " must not be before " + e.min;
                                            break;
                                    }
                                }
                                if (!isblank(e.max))
                                {
                                    var maxdate = new Date();
                                    switch(e.max)
                                    {
                                        case "yesterday":
                                            maxdate.setTime(maxdate.getTime() - (24*60*60*1000));
                                            if (entered_date < maxdate.getUTCFullYear() + (maxdate.getUTCMonth() < 9 ? "0" : "") + (maxdate.getUTCMonth() + 1) + (maxdate.getUTCDate() < 10 ? "0" : "") + maxdate.getUTCDate())
                                                msg += "\n" + display_name + " must be in the past";
                                        case "today":
                                            if (entered_date > maxdate.getUTCFullYear() + (maxdate.getUTCMonth() < 9 ? "0" : "") + (maxdate.getUTCMonth() + 1) + (maxdate.getUTCDate() < 10 ? "0" : "") + maxdate.getUTCDate())
                                                msg += "\n" + display_name + " must not be in the future";
                                            break;
                                        default:
                                            if (entered_date > convertdate(e.max, "DD-Mon-YYYY", "YYYYMMDD"))
                                                msg += "\n" + display_name + " must not be after " + e.max;
                                            break;
                                    }
                                }
                            }
                            full_part.value = year_value;
                            if (!isblank(month_value))
                            {
                                full_part.value = month_value + "-" + full_part.value;
                                if (!isblank(day_value))
                                {
                                    full_part.value = day_value + "-" + full_part.value;
                                }
                            }
                        }
                    }
                    break;
                default:
                    break;
            }
            break;
        //
        //   Validate other field type
        //
        default:
            break;
    }
    i++;
}
return displayerrors(msg);
}

