/*----------------------------------------------------------------------------------------------
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", "isDocument" ,"isImgTitulo","isMultiImg");
		validationTypesName = new Array("isRequiredName", "isEmailName", "isNumericName","isUrlName", "matchPasswName", "isDocumentName","isImgTituloName","isMultiImgName");
		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 "isDocument" :
						valid = isDocument(inputField.value);
						errorMsg = "-El campo '"+y[i]+"' no es v\u00E1lido.";
						break;
						case "isImgTitulo" :
						errorMsg	= "-El campo Titulo es obligatorio";
						valid = true;
						for(i=0;i<this.formInputs.length;i++)
		                {
			              if(this.formInputs[i].getAttribute("type") == "text")
						  {
				            inputField = this.formInputs[i];
							inputField.value
							if(inputField.value == '')
							{  
							  valid = false;
							  break;
							}
						  }
						}
					    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")
						  {
				             var inputField = this.formInputs[i];
							var valid = isImage(inputField.value);
							if(!valid)
							{  
							  break;
							}
						  }
						 
						} 
					    break;	
							
					}
					if(!valid) {
						errores += errorMsg+this.settings["newLine"];
						try{inputField.style.background = this.settings["errorColors"][0];}catch(e){}
						try{inputField.style.border = "1px solid "+this.settings["errorColors"][1];}catch(e){errores = 'Debe dar clic en a\u00F1adir un archivo'}
					} else {
						try{inputField.style.background = this.settings["inputColors"][0];}catch(e){}
						try{inputField.style.border = "1px solid "+this.settings["inputColors"][1];}catch(e){errores = 'Debe dar clic en a\u00F1adir un archivo'}
					}
				}
			}
		}
		return errores;
	},
	printError: function (error) {
		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;%\$#_]*)?$/ 
  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: 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: returns true if the archive is valid
------------------------------------------------------------------------------------------------*/
function isDocument(str)
{
  extension = (str.substring(str.lastIndexOf("."))).toLowerCase(); 	
  extensiones_permitidas = new Array(".pdf",".xls",".ppt",".rar",".zip",".doc"); 
  permitida = false; 
  
  for (var i = 0; i < extensiones_permitidas.length; i++)
  { 
    if(extensiones_permitidas[i] == extension)
	{ 
	  permitida = true; 
	  break; 
    } 
  } 
  
  return permitida;
}


