var validator_form = 
{
	init: function (settings) 
	{
		this.settings = settings;
		this.form = document.getElementById(this.settings["formId"]);
		formInputs = this.form.getElementsByTagName("input");
		
		this.form.onsubmit = function () 
		{
			error = validator_form.validate();
			if(error.length < 1)
			{	
				return true;
			}
			else 
			{
				validator_form.printError(error);
				return false;
			}
		};
	},
	
	validate: function () 
	{
		error = '';
		validationTypes = new Array("isRequired", "isEmail", "isNumeric", "isSelectRequire", "passwdCompare");
		
		for(n=0; n<validationTypes.length; n++) 
		{
			var x = this.settings[validationTypes[n]];
			if(x != null) 
			{
				for(i=0; i<x.length; i++) 
				{
					inputField = document.getElementById(x[i]);
					switch (validationTypes[n]) 
					{
						case "isRequired" :
							valid = !isRequired(inputField.value);
							errorMsg = "bad";
							break;
							
						case "isEmail" :
							valid = isEmail(inputField.value);
							errorMsg = "bad";
							break;
							
						case "isNumeric" :
							valid = isNumeric(inputField.value);
							errorMsg = "bad";
							break;
							
						case "isSelectRequire":
							var int = inputField.options[inputField.selectedIndex].value;
							valid = !isSelectRequire(int);
							errorMsg = "bad";
							break;
					}
					
					if(!valid) 
					{
						error += x[i]+" "+errorMsg+"\n";
						inputField.style.background = this.settings["errorColors"][0];
						inputField.style.border = "1px solid "+this.settings["errorColors"][1];
					} 
					else 
					{
						inputField.style.background = this.settings["inputColors"][0];
						inputField.style.border = '1px solid'+this.settings["inputColors"][1];
					}
				}
			}
		}
		return error;
	},
	
	printError: function (error) 
	{
		//alert(error);
	}
};

function in_array(needle, haystack, strict) 
{
    if (strict) 
	 	function equals(a,b) { return a === b }
    else 
	 	function equals(a,b) { return a == b }

    for (var i in haystack) 
	 {
        if (equals(haystack[i], needle)) 
		  		return true;
    }
    return false;
}

// returns true if the string is not empty
function isRequired(str)
{
	return (str == null) || (str.length == 0);
}

function isSelectRequire(int)
{
	return (int == "") || (int == 0);
}

// returns true if the string is a valid email
function isEmail(str)
{
	if(isRequired(str)) return false;
	var re = /^[^\s()<>@,;:\/]+@\w[\w\.-]+\.[a-z]{2,}$/i
	return re.test(str);
}

// returns true if the string only contains characters 0-9 and is not null
function isNumeric(str)
{
	if(isRequired(str)) return false;
	var re = /[\D]/g
	if (re.test(str)) return false;
	return true;
}