var date_err ;

function isblank(s)
{
    for (var i=0;i<s.length;i++)
    {
        var c = s.charAt(i);
        if ((c != ' ') && (c != '\n') && (c != '\t')) return false;
    }
    return true;
}

function isValidDate(dateStr) 
{
    date_err = " " ;
    // Checks for the following valid date formats:
    // MM/DD/YY   MM/DD/YYYY   MM-DD-YY   MM-DD-YYYY

    var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/; // requires 4 digit year

    var matchArray = dateStr.match(datePat); // is the format ok?
    if (matchArray == null) 
    {
	date_err = "'" + dateStr + "' is not in a valid format."
	return false;
    }
    month = matchArray[1]; // parse date into variables
    day = matchArray[3];
    year = matchArray[4];
    if (month < 1 || month > 12) { // check month range
	date_err = "Month must be between 1 and 12.";
	return false;
    }
    if (day < 1 || day > 31) 
    {
	date_err = "Day must be alteast between 1 and 31.";
	return false;
    }
    if ((month==4 || month==6 || month==9 || month==11) && day==31) {
	date_err = "Month "+month+" doesn't have 31 days.";
	return false;
    }
    if (month == 2) { // check for february 29th
	var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
	if (day>29 || (day==29 && !isleap)) {
	    date_err = "February " + year + " doesn't have " + day + " days.";
	    return false;
        }
    }
    return true;
}

function isValidTime(timeStr) 
{
    time_err = " " ;
    // Checks for the following valid time formats:
    // hh:mm:ss [[pP][mM]/[aA][mM]]

    var timePat = /^(\d{1,2}):(\d{1,2}):(\d{1,2})\s*([pPaA][mM])*$/; 

    var matchArray = timeStr.match(timePat); // is the format ok?
    if (matchArray == null) 
    {
	time_err = "'" + timeStr + "' is not in a valid format."
	return false;
    }
    var hh = matchArray[1]; // parse time into variables
    var mm = matchArray[2];
    var ss = matchArray[3];
    var am_pm = matchArray[4];

    var max_hh = 23 ;
    if (am_pm) 
    {
        max_hh = 12 ;
    }

    if (hh < 1 || hh > max_hh) { 
	time_err = "Hour must be between 1 and " + max_hh + " ." ;
	return false;
    }
    if (mm < 1 || mm > 59) 
    {
	time_err = "Minute must be alteast between 1 and 59.";
	return false;
    }
    if (ss < 1 || ss > 59) 
    {
	time_err = "Second must be alteast between 1 and 59.";
	return false;
    }

    return true;
}

// only checks for mandatory fields
function simpleVerify(f)
{
    var msg = "";
    var empty_fields = "";
    var valuetype_err = "";

    for (var i=0;i<f.length;i++)
    {
        var e = f.elements[i];

        if (((e.type == "text") || (e.type == "textarea")) && e.mandatory)
        {
            if ((e.value == null) || (e.value == "") || isblank(e.value))
            {
                empty_fields += "\n       " + e.prompt;
                continue;
            }
        }
    }
    
    if (empty_fields)
    {
        msg = "-----------------------------------------------------------------\n\n";
        msg += "The form was not submitted because of the following errors(s).\n";
        msg += "Please correct these error(s) and re-submit.\n";                
        msg += "-----------------------------------------------------------------\n\n";   
        msg += "- The following required fields(s) (marked in red) are empty:" 
                      + empty_fields + "\n";
    }
  
    if(msg)
    {
        alert(msg);
        return false;
    }
    return true;
}


function verify(f)
{
    var msg = "";
    var empty_fields = "";
    var valuetype_err = "";

    for (var i=0;i<f.length;i++)
    {
        var e = f.elements[i];

        if (e.type == "text" && e.value != null && e.date_type && 
	         e.value != "" && (isValidDate(e.value)==false))
	{
	    // check for non mandatory dates
            valuetype_err += "\n    Invalid Input:  " + e.name;
            valuetype_err += " ( ";
            valuetype_err += date_err;
            valuetype_err += " ) ";
            continue;
        }
        if (((e.type == "text") || (e.type == "textarea")) && e.mandatory)
        {
            if ((e.value == null) || (e.value == "") || isblank(e.value))
            {
                empty_fields += "\n       " + e.name;
                continue;
            }
            else if(e.value.match(e.valuetype) == null)
            {
                valuetype_err += "\n    format of " + e.prompt;
                valuetype_err += " should be " + e.valuetype_desc;
                continue;
            }
        }
    }
    
    if (empty_fields)
    {
        msg = "-----------------------------------------------------------------\n\n";
        msg += "The form was not submitted because of the following errors(s).\n";
        msg += "Please correct these error(s) and re-submit.\n";                
        msg += "-----------------------------------------------------------------\n\n";   
        msg += "- The following required fields(s) (marked in red) are empty:" 
                      + empty_fields + "\n";
    }
  
    if (valuetype_err)
    {
        if(!msg)
        {
            msg = "-----------------------------------------------------------------\n\n";
            msg += "The form was not submitted because of the following errors(s).\n";
            msg += "Please correct these error(s) and re-submit.\n";                
        }
        msg += "-----------------------------------------------------------------\n\n";   
        msg += "- The following fields(s) should be in proper format." 
                      + valuetype_err + "\n";
    }
    if(msg)
    {
        alert(msg);
        return false;
    }
    return true;
}
