/*----------------------------------------------------------------------------------------------
DESCRIPTION: Permite validar los formularios.
------------------------------------------------------------------------------------------------*/
var cleanValidator = {
	init: function (settings) {
		this.settings = settings;
		this.form = document.getElementById(this.settings["formId"]);
		this.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","isMultiImg","isVideo","isDNI","isNotReqUrl","isEstrella");
		validationTypesName = new Array("isRequiredName","isEmailName","isNumericName","isUrlName","matchPasswName","isMultiImgName","isVideoName","isDNIName","isNotReqUrlName","isEstrellaName");
		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 insertado 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 "isMultiImg" :
						errorMsg	= "S\u00F3lo se permite archivos de los siguientes tipos: jpg, png, jpeg, gif";
						for(i=0;i<this.formInputs.length;i++)
		                {
			              if(this.formInputs[i].getAttribute("type") == "file")
						  {
				            inputField = this.formInputs[i];
							valid = isImage(inputField.value);
							if(!valid)
							{  
							  break;
							}
						  }
						}
					    break;	
						case "isVideo" :
						valid = isVideo(inputField.value);
						errorMsg	= "-El Archivo '"+y[i]+"' no es un tipo de archivo v\u00E1lido";
						break;
						case "isDNI" :
						valid = isNif(inputField.value);
						errorMsg	= "-El '"+y[i]+"' no es v\u00E1lido.";
						break;
						case "isNotReqUrl" :
						valid = isNotReqUrl(inputField.value);
						errorMsg = "-La URL es Incorrecta.";
						break;
						case "isEstrella" :
						if(inputField.value > -1)
						  valid = true;
						else
						  valid = false;
						errorMsg= "-El campo '"+y[i]+"' es obligatorio.";
						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) {
		window.top.coolMessage('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;%\$#_]*)?$/
  //var re = /^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)( [a-zA-Z0-9\-\.\?\,\\/\\\+&%\$#_]*)?$/

  return re.test(str);
}

function isNotReqUrl(str){
  if(isRequired(str)) return true;
  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 image is valid
------------------------------------------------------------------------------------------------*/
function isImage(str)
{
  extension = (str.substring(str.lastIndexOf("."))).toLowerCase(); 	
  extensiones_permitidas = new Array(".jpg",".JPG",".png",".PNG",".jpeg",".JPEG",".gif",".GIF"); 
  permitida = false; 
  
  for (var i = 0; i < extensiones_permitidas.length; i++)
  { 
    if(extensiones_permitidas[i] == extension)
	{ 
	  permitida = true; 
	  break; 
    } 
  } 
  
  return permitida;
}
/*----------------------------------------------------------------------------------------------
DESCRIPTION: Validación realizada para un campo video.
------------------------------------------------------------------------------------------------*/


function isVideo(campo){
   nom = campo.toLowerCase();
   if(nom!='')
   {
	 if((nom.indexOf(".avi") == -1))	
	 {	 
		 if((nom.indexOf(".avi") == -1))	
		 {
			if((nom.indexOf(".mpg") == -1))	
				return false;
			else
				return true;
		 }
		 else
			  return true;
	 }
	 else
		return true;
   }
   else return 'empty';
}

/*----------------------------------------------------------------------------------------------
DESCRIPTION: returns true if the string is a valid DNI.
------------------------------------------------------------------------------------------------*/
function isNif(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);
}