var DaysOfMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
var saveClicked = false;
var whitespace = " \t\n\r";

function setCheckNumber(form, elementstr) {

	var element = eval('document.all.'+ elementstr);

	if (element) {
		element.numericerrorblock = element.name + '_verifyNumber';
		element.numeric = true;
	}
}

function setCheckEmail(form, elementstr) {

	var element = eval('document.all.'+ elementstr);

	if (element) {
		element.emailerrorblock = element.name + '_verifyEmail';
		element.email = true;
	}
}


function setCheckDate(form, elementstr, requried, dateerrorblock, requirederrorblock) {

	var element = eval('document.all.'+ elementstr);

	if (element) {
		element.dateerrorblock = dateerrorblock ;
		if (requried) {
			element.requirederrorblock = requirederrorblock;
		}
	}

}

function setRequired(form, elementstr) {

	var element = eval('document.all.'+ elementstr);
	if (element) {
		element.requirederrorblock = element.name + '_required';
		element.required = true;
	}
}

function showerror(errorobj)
{
	display(errorobj, "");
	window.location.href = "#";

}

function display(textobj, display)
{

	var elemnt = eval('document.all.'+ textobj);

	if(elemnt) {

                elemnt.style.display = display;
	}
}

function clearError(f) {
    display("servererror", "none");

	for(var i = 0; i < f.length; i++) {

		var e = f.elements[i];
		display(e.requirederrorblock, "none");
		display(e.numericerrorblock, "none");
		display(e.dateerrorblock, "none");
		display(e.emailerrorblock, "none");

	}
}

function verifyDate(dayElement, monthElement, yearElement, errorblock, required, requirederrorblock)
{

	if (!dayElement || !monthElement || !yearElement) {
		return true;
	}

	var day =  dayElement.value;
	var month =  monthElement.value;
	var year = yearElement.value;
	var lastDayofMonth = DaysOfMonth[month];


	if (day != "" && (month == "" || year == "")) {
		showerror(errorblock);
		return false;
	} else if (month != "" && (day == "" || year == "")) {
		showerror(errorblock);
		return false;
	} else if (year != "" && (month == "" || day == "")) {
		showerror(errorblock);
		return false;
	} else if (!required && day == "" && month == "" && year == "") {
		return true;
	} else if (required && day == "" && month == "" && year == "") {
		showerror(requirederrorblock);
		return false;
	}

        if(month == 1) {
             if (isLeapYear(year)) {
		if (day < 1 || day > 29) {
			showerror(errorblock);
			return false;
		}
             } else {
		if (day < 1 || day > 28) {
			showerror(errorblock);
			return false;
		}
             }
         } else {
		if ((day < 1) || (day > lastDayofMonth)) {
			showerror(errorblock);
			return false;
		}
         }

        return true;

}

function verifyGeneral(f) {
	//go thru it four times because we want the error to show in order
	if (verifyRequired(f) && verifyNumber(f) && verifyEmail(f)) {
		return true;
	} else {
		return false;
	}
}

function verifyRequired(f)
{
	var valid = true;
	for(var i = 0; i < f.length; i++) {
		var e = f.elements[i];
		if (valid && e.required && isblank(e) &&
			(e.type == "hidden" || e.type == "text" || e.type == "textarea" || e.type == "select-one" || e.type == "checkbox" || e.type == "password")) {
			showerror(e.requirederrorblock);
			valid = false;
		}

	}
	return valid;
}

function verifyNumber(f)
{
	var valid = true;
	for(var i = 0; i < f.length; i++) {
		var e = f.elements[i];
		if (valid && e.numeric && !isblank(e)) {
			if (isNaN(e.value)) {
				showerror(e.numericerrorblock);
				valid = false;
			}
		}

	}
	return valid;
}

function verifyEmail(f)
{
	var valid = true;
	for(var i = 0; i < f.length; i++) {
		var e = f.elements[i];
		if (valid && e.email && !isblank(e)) {
			if (!isEmail (e.value)) {
				showerror(e.emailerrorblock);
				valid = false;
			}

		}

	}
	return valid;
}

function isLeapYear(year)
{
        if ( year % 4 == 0 ) {
            if ( year % 100 == 0 ) {
                if ( year % 400 == 0 ) {
                    return true;
                } else {
                    return false;
                }
            } else {
                return true;
            }
        } else {
            return false;
        }
}

//check if the input value is not blank
function isblank(element)
{

	if (element.type == "checkbox") {
		if (!element.checked) {
			return true;
		} else {
			return false;
		}
	}

	if (element.value == null) {
		return true;
	} else if (element.value == "") {
		return true;
	} else {
		var s = element.value;

		for (var i = 0; i< s.length; i++) {
			var c = s.charAt(i);
			if (( c != ' ') && (c != '\n') && (c != '\t')) return false;
		}
		return true;
	}
}

/***************************************************/
/*  The following section checks the string values */
/***************************************************/


function isLetter (c)
{
	//don't allow blanks as well as letters
	return ( ((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")) )
}

function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}

function isLetterOrDigit (c)
{   return (isLetter(c) || isDigit(c))
}

function isInteger (s)
{
    var i;
    if (isEmpty(s))
       if (isInteger.arguments.length == 1) return false;
       else return (isInteger.arguments[1] == true);

    for (i = 0; i < s.length; i++)
    {
        var c = s.charAt(i);
        if (!isDigit(c)) return false;
    }

    return true;
}


function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}

function isWhitespace (s)

{   var i;

    if (isEmpty(s)) return true;

    for (i = 0; i < s.length; i++)
    {
        var c = s.charAt(i);

        if (whitespace.indexOf(c) == -1) return false;
    }

    return true;
}

function isvalidEmailChar (s)
{   var i;

    for (i = 0; i < s.length; i++)
    {
        var c = s.charAt(i);

        if (! (isLetter(c) || isDigit(c) || (c=='@') || (c=='.') || (c=='_') || (c=='-') || (c=='+')) ) {
	       	return false;
	}
    }

    return true;
}

function isEmail (s)
{

	if (isEmpty(s))
       		if (isEmail.arguments.length == 1)
			return false;
       		else
			return (isEmail.arguments[1] == true);


    	if (isWhitespace(s))
		return false;

	if (!isvalidEmailChar(s))
		return false;

    	var atOffset = s.lastIndexOf('@');


    	if (atOffset < 1 ) {
        	return false;
    	} else {
 		var dotOffset = s.indexOf('.', atOffset);

      		if ( dotOffset < atOffset + 2 || dotOffset > s.length - 2 ) {
         		return false;
      		}
   	}


   	return true;
}

function checkPassword(s) {
    //a valid password is between 4 to 32 letters with no spalce double quote

	if(s.length < 4 || s.length > 32 ) {
        return "wrongnumchar";
    }

    for (i = 0; i < s.length; i++)
    {
        var c = s.charAt(i);
        if (! (isLetter(c) || isDigit(c) )) {
	       	return "wrongchar";
	    }
    }

    return "";
}

function checkLogin(s) {
    //a valid password is between 4 to 32 letters with no spalce double quote

	if(s.length < 4 || s.length > 32 ) {
        return "wrongnumchar";
    }

    for (i = 0; i < s.length; i++)
    {
        var c = s.charAt(i);
        if (! (isLetter(c) || isDigit(c) )) {
	       	return "wrongchar";
	    }
    }

    return "";
}