/*
///////////////////////////////////////////////////////////////
validate.js

Author: Chen Lee Peng
Create: 19 Aug 2004
Modify: 19 Aug 2004

Description:
This file contains common functions for input field validation


Change Log:

///////////////////////////////////////////////////////////////
*/

var TEXT = 1;
var NUMBER = 2;
var EMAIL = 3;
var DATE = 4;
var DATETIME = 5;
var TIME = 6;


function validate_field(field_obj, field_name, field_type)  {
	//field_obj must be a valid form field
    if (field_obj.value.search(/\S/)==-1)   {
        alert("Please fill in " + field_name);
        field_obj.focus();
        return 0;
    }
    else    {
        //checking for email if needed
        if (field_type == EMAIL)    {
            if (field_obj.value.search(/^[^@ ]+@[^@ ]+\.[^@ \.]+$/) == -1)   {
                alert("Please fill in valid " + field_name);
                field_obj.focus();
                return 0;
            }
                return 1;
        }
        else if (field_type == NUMBER)  {
            if (isNaN(field_obj.value)) {
                alert("Please fill in valid " + field_name);
                field_obj.focus();
                return 0;
            }
            else
                return 1;
        }

		else if (field_type == DATE)    {
			if (field_obj.value.length == 10 &&
				field_obj.value.search(/(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[012])-(19|20)\d\d/) >= 0)    {
				parts = field_obj.value.split("-");
                d = parseInt(parts[0]);
                m = parseInt(parts[1]);
                y = parseInt(parts[2]);

                //get the wrong dates
                if ((d>=30 && m==2) ||
                    (d==31 && (m==2 || m==4 || m==6 || m==9 || m==11)) ||
                    (d==29 && m==2 && !(((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))))   {
					alert("Please fill in valid " + field_name + "(dd-mm-yyyy)");
            		field_obj.focus();
					return 0;
                }
                else
                    return 1;
			}
			else    {
			    alert("Please fill in valid " + field_name + "(dd-mm-yyyy)");
                field_obj.focus();
				return 0;
			}
		}
		
		
		else if (field_type == TIME)    {
		    if (field_obj.value.length == 5)    {
		        parts = field_obj.value.split(":");
		        if (parts.length == 2)  {
		            h = parts[0];
		            m = parts[1];
		            if (h>=0 && h<=23 && m>=0 && m<=59)
						return 1;
					else    {
					    alert("Please fill in valid " + field_name + "(hh:mm)");
        				field_obj.focus();
						return 0;
					}
		        }
		        else    {
		            alert("Please fill in valid " + field_name + "(hh:mm)");
					field_obj.focus();
					return 0;
		        }
		    }
		    else    {
		        alert("Please fill in valid " + field_name + "(hh:mm)");
				field_obj.focus();
				return 0;
		    }
		}


		else if (field_type == DATETIME)    {
			parts = field_obj.value.split(" ");
			if (parts.length == 2)  {
			    dates = parts[0];
			    times = parts[1];
				
				if (dates.length == 10 &&
					dates.search(/(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[012])-(19|20)\d\d/) >= 0)  {
	                dateparts = dates.split("-");
	                d = parseInt(dateparts[0]);
	                m = parseInt(dateparts[1]);
	                y = parseInt(dateparts[2]);

	                //get the wrong dates
	                if ((d>=30 && m==2) ||
	                    (d==31 && (m==2 || m==4 || m==6 || m==9 || m==11)) ||
	                    (d==29 && m==2 && !(((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))))   {
						alert("Please fill in valid " + field_name + "(dd-mm-yyyy hh:mm)");
                		field_obj.focus();
						return 0;
	                }
	                else    {
	                    //check time
						timeparts = times.split(":");
						if (timeparts.length == 2)  {
						    h = parseInt(timeparts[0]);
							m = parseInt(timeparts[1]);
							if (h>=0 && h<=23 && m>=0 && m<=59)
								return 1;
							else    {
							    alert("Please fill in valid " + field_name + "(dd-mm-yyyy hh:mm)");
                				field_obj.focus();
								return 0;
							}
						}
						else    {
                            alert("Please fill in valid " + field_name + "(dd-mm-yyyy hh:mm)");
                			field_obj.focus();
							return 0;
						}
					}
                }
                else    {
                    alert("Please fill in valid " + field_name + "(dd-mm-yyyy hh:mm)");
        			field_obj.focus();
					return 0;
                }
			}
			else    {
			    alert("Please fill in valid " + field_name + "(dd-mm-yyyy hh:mm)");
                field_obj.focus();
				return 0;
			}
		}

		else
		    return 1;
	}
}


function checkValidDate(d, m, y, field_name)    {
	if ((d>=30 && m==2) ||
	    (d==31 && (m==2 || m==4 || m==6 || m==9 || m==11)) ||
	    (d==29 && m==2 && !(((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))))   {
		alert("Please fill in valid Date for " + field_name);
		return 0;
    }
    else
        return 1;
}


function compareTimeString(time1, time2)    {
//return 0 if time1 == time2
//return 1 if time1 > time2
//return -1 if time1 < time2
	if (time1 == time2)
	    return 0;

	//split the time first
	time1part = time1.split(":");
	time2part = time2.split(":");

	time1_h = time1part[0];
	time1_m = time1part[1];
	time2_h = time2part[0];
	time2_m = time2part[1];

	//compare
	if (time1_h > time2_h ||
		(time1_h == time2_h && time1_m > time2_m))
	    return 1;
	else
	    return -1;
}




