/*----------------------------------------------------------------------------------------------
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("isNumericPhone","isRequired", "isEmail", "isPostit", "isTown", "isAddress", "isNumeric","isSurname","isNumericPostCode","isUrl", "matchPassw", "isDocument", "isForename","isImgTitulo","isMultiImg");
		validationTypesName = new Array("isNumericPhoneName","isRequiredName", "isEmailName", "isPostitName", "isTownName", "isAddressName", "isNumericName","isSurnameName","isNumericPostCodeName","isUrlName", "matchPasswName", "isDocumentName", "isForenameName","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= ""+y[i]+"";
						break;
						case "isForename" :
						valid 	= !isRequired(inputField.value);
						errorMsg= ""+y[i]+"";
						break;
						case "isSurname" :
						valid 	= !isRequired(inputField.value);
						errorMsg= ""+y[i]+"";
						break;
						case "isAddress" :
						valid 	= isAddress(inputField.value);
						errorMsg= ""+y[i]+"";
						break;
						case "isTown" :
						valid 	= !isRequiredTown(inputField.value);
						errorMsg= ""+y[i]+"";
						break;
						case "isEmail" :
						valid = isEmail(inputField.value);
						errorMsg = ""+y[i]+"";
						break;
						case "isNumeric" :
						valid = isNumeric(inputField.value);
						errorMsg = ""+y[i]+"";
						break;
						case "isNumericPostCode" :
						valid = isNumericPostCode(inputField.value);
						errorMsg = ""+y[i]+"";
						break;
						case "isUrl" :
						valid = isUrl(inputField.value);
						errorMsg = "";
						break;
						case "matchPassw" :
						valid = isMatchPassw(inputField.value, document.getElementById(x[i]+"Rep").value);
						errorMsg = "";
						break;
						case "isDocument" :
						valid = isDocument(inputField.value);
						errorMsg = ""+y[i]+"";
						break;
						case "isPostit" :
						valid = postit(inputField.value);
						errorMsg = ""+y[i]+"";
						break;	
						case "isNumericPhone" :
						valid = isNumericPhone(inputField.value);
						errorMsg = ""+y[i]+"";
						break;
						case "isImgTitulo" :
						errorMsg	= "";
						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	= "";
						
							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;
/*						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) {
		alert(errores);
	}
};
/*----------------------------------------------------------------------------------------------
DESCRIPTION: returns true if the string is a valid email.
------------------------------------------------------------------------------------------------*/
function isEmail(str){
	if(str == null || str.length == 0) return false;
	var re = /^[^\s()<>@,;:\/]+@\w[\w\.-]+\.[a-z]{2,}$/i
	return re.test(str);
}
/*----------------------------------------------------------------------------------------------
DESCRIPTION: returns true if the string is not empty.
------------------------------------------------------------------------------------------------*/
function isRequired(str){
	var filter =/^[\a-zA-Z\s\-]*$/;
	return (str == null) || (str.length == 0 || filter.test(str)==false);
}
/*----------------------------------------------------------------------------------------------
DESCRIPTION: returns true if the string is not empty.
------------------------------------------------------------------------------------------------*/
function isRequiredTown(str){
	var filter =/^[\w\'\s]*$/;
	return (str == null) || (str.length == 0 || filter.test(str)==false);
}
/*----------------------------------------------------------------------------------------------
DESCRIPTION: returns true if the string only contains characters 0-9 and is not null.
------------------------------------------------------------------------------------------------*/
function isNumeric(str){
	if(str == null || str.length == 0) return false;
	var re = /[\D]/g
	if (re.test(str)) return false;
	return true;
}
/*----------------------------------------------------------------------------------------------
DESCRIPTION: returns true if the string only contains characters 0-9 and is not null.
------------------------------------------------------------------------------------------------*/
function isNumericPhone(str){
	if(str.length <10){alert('Oops!  Please enter your full phone number (including area code) without spaces.');return false;}
	if(str.length >11){alert('Oops!  Your phone number is too long, please enter without any spaces.');return false;}
	 for ( i = 0; i < str.length; i++ ) {  
					 if ( str.charAt(i) == " " ) {  
									 alert('please enter Your phone number without any spaces.');
									 return false;
					 }  
	 }  
  var re = /[\D]/g
	if (re.test(str)){alert('Oops!  Please enter your full phone number (including area code) without spaces.');return false;}
	return true;
}

function isAddress(str){
	if(str.length <3) return false;
	if(str == null || str.length == 0) return false;
	return true;
}
/*----------------------------------------------------------------------------------------------
DESCRIPTION: returns true if the string only contains characters 0-9 and is not null.
------------------------------------------------------------------------------------------------*/
function isNumericPostCode(str){
	if(str.length <5 || str.length>8) return false;
	return true;
}

/*----------------------------------------------------------------------------------------------
DESCRIPTION: returns true if the string is a valid url.
------------------------------------------------------------------------------------------------*/
function isUrl(str){
  if(str == null || str.length == 0) 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;
}

/*----------------------------------------------------------------------------------------------
DESCRIPTION: returns true if the postcode is valid
Checks that postcodes are in correct format. Is written for UK format, but is easily adapted for other countries.
------------------------------------------------------------------------------------------------*/
function postit(str){ //check postcode format is valid
 
 test = str; 
 size = test.length;
 test = test.toUpperCase(); //Change to uppercase
 
/* while (test.slice(0,1) == " ") //Strip leading spaces
  {
		test = test.substr(1,size-1);
		size = test.length;
  }
 while(test.slice(size-1,size)== " ") //Strip trailing spaces
  {
		test = test.substr(0,size-1);
		size = test.length;
  }*/
 str = test; //write back to form field
 if (size < 5 || size > 8){ //Code length rule
	return false;
  }
 
 if (!(isNaN(test.charAt(0)))){ //leftmost character must be alpha character rule
	 return false;
  }
 
 if (isNaN(test.charAt(size-3))){ //first character of inward code must be numeric rule
	 return false;
  }
 
 if (!(isNaN(test.charAt(size-2)))){ //second character of inward code must be alpha rule
	 return false;
  }
 
 if (!(isNaN(test.charAt(size-1)))){ //third character of inward code must be alpha rule
	 return false;
  }

 count1 = test.indexOf(" ");
 count2 = test.lastIndexOf(" ");
 if (count1 != count2){//only one space rule
	 return false;
  }
 return true;	
}
//  End -->