/*----------------------------------------------------------------------------------------------
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");
		
		error = cleanValidator.validate();
		if(error.length < 1) {
			return true;
		} else {
			cleanValidator.printError(error);
			return false;
		}
	},
	validate: function () {
		error = '';
		validationTypes = new Array("isRequired", "isEmail", "isNumeric","isUrl","isCheked","isEqual","isNif");
		validationTypesName = new Array("isRequiredName", "isEmailName", "isNumericName","isUrlName", "isChekedName","isEqualName","isNifName");
		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 campo '"+y[i]+"' no es valido.";
						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 "isCheked" :
						valid = isCheked(inputField);
						errorMsg = "-El campo '"+y[i]+"' debe ser seleccionado.";
						break;
						case "isNif" :
						valid = isNif(inputField.value);
						errorMsg = "-El campo '"+y[i]+"' no es valido.";
						break;
						case "isEqual" :
						if((i%2) == 0 && (i+1) < x.length)
						{
							inputField1 = document.getElementById(x[i+1]);
							valid = isEqual(inputField.value, inputField1.value);
							errorMsg = "-El campo '"+y[i]+"' debe ser igual en '"+y[i+1]+"' y ninguno debe estar vacio.";
						}
						else
							valid = true;
						break;
					}
					if(!valid) {
						error += 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 error;
	},
	printError: function (error) {
		confirm(error);
	}
};
/*----------------------------------------------------------------------------------------------
DESCRIPTION: returns true if the string is not empty.
------------------------------------------------------------------------------------------------*/
function isRequired(str){
	return (str == null) || (str.length == 0) || (str == -1);
}
/*----------------------------------------------------------------------------------------------
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 is Checked.
------------------------------------------------------------------------------------------------*/
function isCheked(box){
  if(box.checked == false) return false; 
  return true;
}

/*----------------------------------------------------------------------------------------------
DESCRIPTION: returns true if  str and str1 are equal .
------------------------------------------------------------------------------------------------*/
function isEqual(str, str1){
  if(str1 != str )
  	return false;
  if(isRequired(str1) || isRequired(str))
  	return false; 
  return true;
}
/*----------------------------------------------------------------------------------------------
DESCRIPTION: returns true if dni is valid .
------------------------------------------------------------------------------------------------*/
function isNif(dni) 
{
	if(!isRequired(dni)){
		numero = dni.substr(0,dni.length-1);
		let = dni.substr(dni.length-1,1);
		numero = numero % 23;
		letra='TRWAGMYFPDXBNJZSQVHLCKET';
		letra=letra.substring(numero,numero+1);
		if (letra!=let.toUpperCase()) 
			return false;
		else
			return true;
	}
	else
		return false;
}