//----------------------------------------------------------
//	Project Validation Routines
//----------------------------------------------------------

function isSpace(ch) 
{
	// This function examines a character if it is a blank space.
	if ((ch == " ") || (ch == "\n") || (ch == "\t") || (ch == "\r")) {
		return true;
	}
	else {
		return false;
	}
}

function isWhiteSpace(s)
{
	var white_space = "\n\t\r ";
		
	for (var i = 0; i < s.length; i++)
	{
		var c = s.charAt(i);
			
		if (white_space.indexOf(c) == -1)
			return false;
	}
	return true;
}
	
function isEmpty(s)
{
	return s == null || s.length == 0 || s.value == 0 || isWhiteSpace(s);
}
	
function trimAll(str)
{
	// This function trims all blank space at start
	// and at the end of the specified string.
	var i = 0;
	var j = 0;
		
	if ((str == "") || ((str.length == 1) && (! isSpace(str.charAt(0))))) {
		return str;
	}
	for (i = 0; i < str.length; i++) {
		if (! isSpace(str.charAt(i))) {
			break;
		}
	}
	if (i >= str.length) {						// Empty string
		return "";
	}
	for (j = str.length  - 1; j > 0; j--) {		// Not empty string. We will trim it.
		if (! isSpace(str.charAt(j))) {
			break;
		}
	}
	return str.substring(i, j + 1);
}

function isFieldEmpty(inp, msg)
{
	// This function performs test on input value and returns false if it is empty.
	inp.value = trimAll(inp.value);

	if (inp.value == "") {
		if (msg == "") {
			msg = "Required field is not completed.\nPlease correct this before continuing.";
		}
		alert(msg);
		inp.focus();
		return true;
	} 
	return false;
}

function validateDate(inp, field_name, required)
{
	inp.value = trimAll(inp.value);
	
	if (field_name.length == 0 || field_name.length == null) {
		field_name = "this"
	}
	else {
		field_name = "the " + field_name
	}
	if (inp.value == "") {
		if (required) {
			alert("Please complete " + field_name + " field before continuing.");
			inp.focus();
			return false;
		}
		else {
			return true;
		}
	}
	if (isNaN(Date.parse(inp.value))) {
		alert("Please enter a valid date in " + field_name + " field.");
		inp.focus();
		inp.select();
		return false;
	}
	return true;
}

function validateFileName(inp, field_name, required)
{
	inp.value = trimAll(inp.value);
	
	if (field_name.length == 0 || field_name.length == null) {
		field_name = "this"
	}
	else {
		field_name = "the " + field_name
	}
	if (inp.value == "") {
		if (required) {
			alert("Please complete " + field_name + " field before continuing.");
			inp.focus();
			return false;
		}
		else {
			return true;
		}
	}
	var notValid = false;
	var invalidChars = '?*<>:/\\"|';
	
	for (var i = 0; i < inp.value.length; i++) {
		if (invalidChars.indexOf(inp.value.charAt(i)) != -1 || inp.value.charCodeAt(i) < 32) {
			notValid = true;
			break;
		}
	}
	if (notValid) {
		alert("Please enter a valid file name in " + field_name + " field.");
		inp.focus();
		inp.select();
		return false;
	}
	return true;
}

function validateNumber(inp, field_name, term, required)
{
	inp.value = trimAll(inp.value);
	
	if (field_name.length == 0 || field_name.length == null) {
		field_name = "this"
	}
	else {
		field_name = "the " + field_name
	}
	if (term.length == 0 || term.length == null) {
		term = "number"
	}
	if (inp.value == "") {
		if (required) {
			alert("Please complete " + field_name + " field before continuing.");
			inp.focus();
			return false;
		}
		else {
			return true;
		}
	}
	if (isNaN(inp.value)) {
		alert("Please enter a valid " + term + " in " + field_name + " field.");
		inp.focus();
		inp.select();
		return false;
	}
	return true;
}

function validateURL(inp, field_name, required)
{
	inp.value = trimAll(inp.value);
	
	if (field_name.length == 0 || field_name.length == null) {
		field_name = "URL"
	}
	if (inp.value == "") {
		if (required) {
			alert("Please complete the " + field_name + " field before continuing.");
			inp.focus();
			return false;
		}
		else {
			return true;
		}
	}
	if (inp.value.substring(0, 7) != "http://") {
		alertInvaludURL();
		inp.focus();
		return false;
	}
	if (inp.value.length == 7) {
		alertInvaludURL();
		inp.focus();
		return false;
	}
	return true;
}

function alertInvaludURL()
{
	alert("Please enter a valid URL. For example:\n\n" + 
		  "http://www.yourdomain.com\n\n-or-\n\n" +
		  "http://www.yourdomain.com/yourdirectory/yourpage.htm");
}

var defaultEmptyOK = false;

function validateEmailAddress(addr)
{
	var valid = true;
	var l_angle = 0;
	var r_angle = 0;
	var l_paren = 0;
	var r_paren = 0;
	var temp;
	
	addr = trimAll(addr);
	
	l_angle = addr.indexOf("<");
	r_angle = addr.indexOf(">");

	if (l_angle == -1 && r_angle == -1)	{
		temp = addr;
	}
	else {
		if ((l_angle + 1) < r_angle) {
			temp = addr.substring(l_angle + 1, r_angle - 1);
		}
		else {
			return false;
		}
	}
	l_paren = addr.indexOf("(");
	r_paren = addr.indexOf(")");

	if (l_paren == -1 && r_paren == -1)	{
		temp = temp;
	}
	else if ((l_paren + 1) < r_paren) {
		temp = temp.substring(0, l_paren - 1)
	}
	valid = isSimpleAddress(temp);
	
	if (valid) {
		valid = isEmailChars(temp);
	}
	return valid;
}

function isSimpleAddress(addr)
{
	var good_address = true;
	var at_sign = 0;
	var space = 0;
		
	space = addr.indexOf(" ");
	at_sign = addr.indexOf("@");

	if (space >= 0 || at_sign <= 0 || at_sign == (addr.length - 1) || !isEmail(addr)) {
		good_address = false;
	}
	return good_address;
}

function isEmailChars(s)
{
	var i;
	var usrName, domainName;  //break the email address into two parts for testing

	var ErrorAddrChars = "";
	var invalidAddrChars = "\\\/\"<>(),;:$&!\`\'^*|[]{}";
	var invalidDomainChars = "\\\/\"<>(),;:$&!\`\'^*@|{}";

	if (isEmpty(s)) {
		return (isEmailChars.arguments.length == 1) ? 
			defaultEmptyOK : (isEmailChars.arguments[1] == true);
	}
    // Search through string's characters one by one until we find an invalid character.
    // When we do, return false; if we don't, return true.
    
	// breaking the email address into two substrings for char testing
	i = s.indexOf('@');
	usrName = s.substring(0, i);
	domainName = s.substring(i, s.length);

    // Check that current character before @ is valid
    for (i = 0; i < usrName.length; i++) {
		if (invalidAddrChars.indexOf(usrName.charAt(i)) != -1) {
			ErrorAddrChars += usrName;
			emptyAddr = false;   
		}
		if (ErrorAddrChars.length > 0) return false;
	} 
    // Check that current character after @ is valid
    for (i = 1; i < domainName.length; i++) {
		if (invalidDomainChars.indexOf(domainName.charAt(i)) != -1 ) {
			ErrorAddrChars += domainName;
			emptyAddr = false;   
		}
		if (ErrorAddrChars.length > 0) return false;
	}
	return true;
}

function isEmail(s)
{
    if (isEmpty(s)) {
		return (isEmailChars.arguments.length == 1) ? 
			defaultEmptyOK : (isEmailChars.arguments[1] == true);
	}
    // there must be >= 1 character before @, so we start looking at character position 1
    // (i.e. second character)
    var i = 1;
    var sLength = s.length;
 
    // look for @
    while ((i < sLength) && (s.charAt(i) != "@")) {
		i++
    }
    if ((i >= sLength) || (s.charAt(i) != "@")) {
		return false;
	}
    else {
		i += 2;
	}
    // look for .
	while ((i < sLength) && (s.charAt(i) != ".")) {
		i++
	}
	// there must be at least one character after the .
    return ! ((i >= sLength - 1) || (s.charAt(i) != "."));
	}
	
	
	function ValidateCheckBoxes2(inp) {
	var selected = false;
			
		if (inp.length != null) {
			if (inp.length != 1) {
				for (i = 0; i < inp.length; i++) {
					if(inp[i].checked) {
						selected = true;
						break;
					}	
				}
			}
			else {
				selected = inp.checked;
			}
		}
		
		if (! selected) {
			return false;
		}
	return true;
	}
	
	function validateFilePath(inp, field_name, required)
	{
		inp.value = trimAll(inp.value);
		
		if (field_name.length == 0 || field_name.length == null) {
			field_name = "this"
		}
		else {
			field_name = "the " + field_name
		}
		if (inp.value == "") {
			if (required) {
				alert("Please complete " + field_name + " field before continuing.");
				inp.focus();
				return false;
			}
			else {
				return true;
			}
		}
		var notValid = false;
		var invalidChars = '?*<>#"|';
		
		for (var i = 0; i < inp.value.length; i++) {
			if (invalidChars.indexOf(inp.value.charAt(i)) != -1 || inp.value.charCodeAt(i) < 32) {
				notValid = true;
				break;
			}
		}
		if (notValid) {
			alert("Please enter a valid file name in " + field_name + " field.\n" + 
			  'Please do not use the symbols ?*<>#"|');
			inp.focus();
			inp.select();
			return false;
		}
		return true;
	}
	
	function validateDate2(strDate)
	{
		var parsedDate = strDate.split ("/");
		var day, month, year;

		if (parsedDate.length != 3) return false;

		month = parsedDate[0]-1;
		day = parsedDate[1];
		year = parsedDate[2];

		if (year.length != 4) return false;

		var objDate = new Date (strDate);

		if (objDate.getFullYear() < 1900) return false;
		if (objDate.getFullYear() > 9999) return false;

		if (month != objDate.getMonth()) return false;
		if (day != objDate.getDate()) return false;
		if (year != objDate.getFullYear()) return false;

		return true;
	}