/*----------------------------------------------------------------------------------------------
DESCRIPTION: Permite validar los formularios.
------------------------------------------------------------------------------------------------*/
var cleanValidator = {
	init: function (settings) {
		this.settings = settings;
		this.form = document.getElementById(this.settings["formId"]);
		formInputs = this.form.getElementsByTagName("input");
		
		errorValidate = cleanValidator.validate();
		if(errorValidate.length < 1) {
			return true;
		} else {
			cleanValidator.printError(errorValidate);
			return false;
		}
	},
	validate: function () {
		errores = "";
		validationTypes = new Array("isRequired", "isEmail", "isNumeric","isUrl", "matchPassw","isPrice");
		validationTypesName = new Array("isRequiredName", "isEmailName", "isNumericName","isUrlName", "matchPasswName","isPriceName");
		for(n=0; n<validationTypes.length; n++) {
			var x = this.settings[validationTypes[n]];
			var y = this.settings[validationTypesName[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= "-El campo '"+y[i]+"' es obligatorio.";
						break;
						case "isEmail" :
						valid = isEmail(inputField.value);
						errorMsg = "-El e-mail ingresado en el campo '"+y[i]+"' no es v\u00E1lido.";
						break;
						case "isNumeric" :
						valid = isNumeric(inputField.value);
						errorMsg = "-El campo '"+y[i]+"' debe ser numerico.";
						break;
						case "isUrl" :
						valid = isUrl(inputField.value);
						errorMsg = "-La URL es Incorrecta.";
						break;
						case "matchPassw" :
						valid = isMatchPassw(inputField.value, document.getElementById(x[i]+"Rep").value);
						errorMsg = "-Contrase\u00F1a nueva y Repetir contrase\u00F1a deben ser iguales.";
						break;
						case "isPrice" :
						valid = isPrice(inputField.value);
						errorMsg = "-El campo '"+y[i]+"' debe ser numerico.";
						break;
					}
					if(!valid) {
						errores += errorMsg+this.settings["newLine"];
						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 errores;
	},
	printError: function (error) {
		emergente('error',error);
	}
};
/*----------------------------------------------------------------------------------------------
DESCRIPTION: returns true if the string is not empty.
------------------------------------------------------------------------------------------------*/
function isRequired(str){
	return (str == null) || (str.length == 0);
}
/*----------------------------------------------------------------------------------------------
DESCRIPTION: 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);
}
/*----------------------------------------------------------------------------------------------
DESCRIPTION: 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;
}
/*----------------------------------------------------------------------------------------------
DESCRIPTION: returns true if the string is a valid url.
------------------------------------------------------------------------------------------------*/
function isUrl(str){
  if(isRequired(str)) return false;
  var re = /^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)( [a-zA-Z0-9\-\.\?\,\\/\\\+&amp;%\$#_]*)?$/ 
  return re.test(str);
}
/*----------------------------------------------------------------------------------------------
DESCRIPTION: returns true if the new password and repeat password are equal
------------------------------------------------------------------------------------------------*/
function isMatchPassw(passwordNew, passwordRep)
{
  if(isRequired(passwordNew)) return false;
  if(isRequired(passwordRep)) return false;
  if(passwordNew == passwordRep)
    return true;
  else
    return false;
}
/*----------------------------------------------------------------------------------------------
DESCRIPTION: returns true if the string only contains characters 0-9 and is not null.
------------------------------------------------------------------------------------------------*/
function isPrice(str){
	if(isRequired(str)) return false;
	var re = /^[0-9\.\,]/
	if (!re.test(str)) return false;
	return true;
}
