function isRequired(element){
	return element.className.indexOf('required')!=-1 || element.className.indexOf('confirm')!=-1;
}

function isNotRequired(element){
	return element.className.indexOf('validate') != -1 && element.value.length > 0;
}

function typeElement(element){
	return element.className.split(" ");
}

function armarErrors(element, type){
	if (type == 'checkbox' || type == 'radio' || type == 'select'){
		error = 'Debe marcar el campo ' + element.parentNode.parentNode.childNodes[1].innerHTML.replace(/<[^>]*>/gi,'').replace(/[\n\s]/gi,' ') + '\n';
	}
	else{
		error =  'Debe completar el campo ' + element.parentNode.parentNode.childNodes[1].innerHTML.replace(/<[^>]*>/gi,'').replace(/[\n\s]/gi,' ') + '\n';
	}
	return error;
}

function setClassError(element){
	var elemS = getElement('tr_'+element.id);
	if (elemS.className.search("f_error") == -1){
		elemS.className += ' f_error';
	}
}

function setError(element, tipo){
	setClassError(element);
	return armarErrors(element, tipo);
}

function setNoError(element, tipo){
	setClassNoError(element);
}

function setClassNoError(element){
	elem = getElement('tr_'+element.id);
	elem.className = elem.className.replace(" f_error", "");
}

function showErrorMsg(flag, errors){
	if (!flag){
		alert(errors);
	}
}

function getValue(_elemento){
	var obj = getElement(_elemento);
	if(obj.tagName=='select'){
		var n = obj.selectedIndex;
		var val = obj[n].value;
		return val;
	}
	else{
		switch(obj.type){
			case 'checkbox':
				return obj.checked;
			break;
		default:
			return obj.value;
			break;
		}
	}
}

function setValue(_elemento, val){
	var obj = getElement(_elemento);
	if(obj.tagName=='select'){
		if(val!=''){
			for (var i = 0; i < obj.length; ++i){
				if (obj[i].value == val){
					obj.selectedIndex = i;
				}
			}
		}
	}
	else{
		switch(obj.type){
			case 'checkbox':
				if (val=='1'){
					obj.checked = true
				}
				else{
					obj.checked = false;
				}
			break;
			default:
				obj.value=val;
			break;
		}
	}
}

function submitForm(f){
	var formName = getElement(f);
	formName.submit();
}

function isEmail(str) {
	var at="@"
	var dot="."
	var lat=str.indexOf(at)
	var lstr=str.length
	var ldot=str.indexOf(dot)
	if (lstr > 0){
		if (str.indexOf(at)==-1){
			return false
		}

		if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
			return false
		}

		if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
			return false
		}

		if (str.indexOf(at,(lat+1))!=-1){
			return false
		}

		if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
			return false
		}

		if (str.indexOf(dot,(lat+2))==-1){
			return false
		}
	}
	else{
		return false;
	}

	if (str.indexOf(" ")!=-1){
		return false
	}
	return true
}

function IsNumeric(strString){
	var strValidChars = "0123456789.-";
	var strChar;
	var blnResult = true;

	if (strString.length == 0) return false;
	for (u = 0; u < strString.length && blnResult == true; u++){
		strChar = strString.charAt(u);
		if (strValidChars.indexOf(strChar) == -1){
			blnResult = false;
		}
	}
	return blnResult;
}

function isAlphanumeric(alphane){
	if (alphane.length == 0) return false;
	var numaric = alphane;
	var bool = true;
	for(var j=0; j<numaric.length; j++){
		var alphaa = numaric.charAt(j);
		var hh = alphaa.charCodeAt(0);
		if(!((hh > 47 && hh<59) || (hh > 64 && hh<91) || (hh > 96 && hh<123))){
			bool = bool && false;
		}
	}
	return bool;
}

function isNotEmpty(name){
	return name.length>0;
}

function validateCheckBox(name){
	return getValue(name);
}

function validateText(name){
	// DRN - Aqui se hace la comprobación de los campos para el registro
	if(name=='e_name'){
		texto = getValue('e_name');
		if (texto == '') {
			texto = getValue('e_company_name');
		}
	}
	else if(name=='e_company_name'){
		texto = getValue(name);
		//if (texto == '') {
		//	texto = getValue('e_name');
		//}
	}
	else if(name=='e_lastname'){
		texto = getValue('e_lastname');
		if (texto == '') {
			texto = getValue('e_company_name');
		}
		else {
			texto = getValue(name);
		}
	}
	else {
		if (name=='e_username') { 
			texto= ' ';
		} else {
			texto = getValue(name);
		}
	}
	return isNotEmpty(texto);
}

function CompruebaDatos(elCIF){
  var resul = false;
  var temp = elCIF.toUpperCase(); // pasar a mayúsculas

  temp=temp.replace(/[ ,.-]/g,'');	//Eliminar caracteres inutiles
  elCIF=temp;

  if (!/^[A-Za-z0-9]{8,9}$/.test(temp))  // Son 9 dígitos?
     return false;
  else if (!/^[ABCDEFGHKLMNPQS]/.test(temp))
  	return false;
  else
     return true;
}

function ValidaCIF(obj){
var v1 = new Array(0,2,4,6,8,1,3,5,7,9);
var letras =new Array('J','A','B','C','D','E','F','G','H','I','J');
var temp = 0;
var valor=obj.toUpperCase();
if (CompruebaDatos(obj)){
for( i = 2; i <= 6; i += 2 )
    {
    temp = temp + v1[ parseInt(valor.substr(i-1,1)) ];
    temp = temp + parseInt(valor.substr(i,1));
    };

temp = temp + v1[ parseInt(valor.substr(7,1)) ];
temp = (10 - ( temp % 10));
flag1=false;
switch (valor.substr(0,1))
	{
 	case 'A':
	case 'B':
	case 'C':
	case 'D':
 	case 'E':
	case 'F':
	case 'G':
	case 'H':
	case 'K':
	case 'L':
	case 'M':
	case 'N':
	case 'P':
	case 'Q':
	case 'S':
		flag1 = true;
	break ;
	}

flag=false;
switch (valor.substr(1,2))
	{
	case '01': flag=true;
		break;
	case '02': flag=true;
		break;
	case '03':
	case '53':
	case '54': flag=true;
		break;
	case '04': flag=true;
		break;
	case '05': flag=true;
		break;
	case '06': flag=true;
		break;
	case '07':
	case '57': flag=true;
		break;
	case '08':
	case '58':
	case '59':
	case '60':
	case '61':
	case '62':
	case '63':
	case '64': flag=true;
		break;
	case '09': flag=true;
		break;
	case '10': flag=true;
		break;
	case '11':
	case '72': flag=true;
		break;
	case '12': flag=true;
		break;
	case '13': flag=true;
		break;
	case '14':
	case '56': flag=true;
		break;
	case '15':
	case '70': flag=true;
		break;
	case '16': flag=true;
		break;
	case '17':
	case '55': flag=true;
		break;
	case '18': flag=true;
		break;
	case '19': flag=true;
		break;
	case '20':
	case '71': flag=true;
		break;
	case '21': flag=true;
		break;
	case '22': flag=true;
		break;
	case '23': flag=true;
		break;
	case '24': flag=true;
		break;
	case '25': flag=true;
		break;
	case '26': flag=true;
		break;
	case '27': flag=true;
		break;
	case '28':
	case '78':
	case '79':
	case '80':
	case '81':
	case '82':
	case '83':
	case '84': flag=true;
		break;
	case '29':
	case '92':
	case '93': flag=true;
		break;
	case '30':
	case '73': flag=true;
		break;
	case '31': flag=true;
		break;
	case '32': flag=true;
		break;
	case '33':
	case '74': flag=true;
		break;
	case '34': flag=true;
		break;
	case '35':
	case '76': flag=true;
		break;
	case '36':
	case '94': flag=true;
		break;
	case '37': flag=true;
		break;
	case '38':
	case '75': flag=true;
		break;
	case '39': flag=true;
		break;
	case '40': flag=true;
		break;
	case '41':
	case '91': flag=true;
		break;
	case '42': flag=true;
		break;
	case '43':
	case '77': flag=true;
		break;
	case '44': flag=true;
		break;
	case '45': flag=true;
		break;
	case '46':
	case '96':
	case '97':
	case '98': flag=true;
		break;
	case '47': flag=true;
		break;
	case '48':
	case '95': flag=true;
		break;
	case '49': flag=true;
		break;
	case '50':
	case '99': flag=true;
		break;
	case '51': flag=true;
		break;
	case '52': flag=true;
		break;

	}

switch (valor.substr(0,1))
	{
	case 'K':
	case 'P':
	case 'Q':
	case 'S': Digito=letras[temp];
		break;
	case 'A':
	case 'B':
	case 'E':
	case 'H': Digito=temp;
		break;
	}
	return flag && flag1;	 //&& (Digito == valor.substr(8,9));
   }
	else{
		return false;
	}
}

function validateCIF(name){
	var cif = getValue(name);
	//return ValidaCIF(cif);
	return verificacif(cif);
}
function validateNIF(name){
	var nif = getValue(name);
	//var cif = ValidaCIF(nif);
	var cif = verificacif(nif);
	if(cif==false) {
		var lockup = 'TRWAGMYFPDXBNJZSQVHLCKE';
			if (nif.length == 9){
				dni = nif.substr(0, 8);
				letra = nif.substr(8, 9);
				letra = letra.toUpperCase();
	    		l = lockup.charAt(dni % 23);
				return l == letra;
			}
			else{
				return false;
			}
	}
	else{
		return cif;
	}
}

function validateUsuario(name){
	var user = getValue(name);
	var tomatch = /(^[a-z0-9]{1,1})+([a-z0-9]{5,11})*$/
	if (tomatch.test(user)){
		return true;
	}
	else{
		return false;
	}
}

function validatePassword(name){
	var user = getValue(name);
	var tomatch = /(^[a-z0-9]{1,1})+([a-z0-9]{5,30})*$/
	if (tomatch.test(user)){
		return true;
	}
	else{
		return false;
	}
}

function validatePasswordConfirm(name){
	pass = getValue(name);
	aux = validatePassowrd(name) && pass == getValue('e_passwordConfirm');
	return aux;
}

function validateEmail(name){
	email = getValue(name);
	aux = isEmail(email);
	return aux;
}

function validateEmailConfirm(name){
	email = getValue(name);
	aux = isEmail(email) && getValue('e_email') == email;
	return aux;
}

function validateUrl(name){
	var theUrl = getValue(name);
	var tomatch= /http:\/\/[A-Za-z0-9\.-]{3,}\.[A-Za-z]{3}/
	if (tomatch.test(theUrl)){
		return true;
	}
	else{
		return false;
	}
}


function validateImagen(name){
	var file = getElement(name);
	valor = file.value.toLowerCase();
	var bool1 = valor.search(".jpeg") != -1;
	var bool2 = valor.search(".jpg") != -1;
	var bool3 = valor.search(".gif") != -1
	return bool1 || bool2 || bool3;
}

function validateCpSpain(id){
	valor = getValue(id);
	var tomatch= /^([1-9]{2}|[0-9][1-9]|[1-9][0-9]|(AD)|(ad))[0-9]{3}$/
	if (tomatch.test(valor)){
		return true;
	}
	else{
		return false;
	}
}

function validateFileDoc(name){
	var file = getElement(name);
	valor = file.value.toLowerCase();
	var bool1 = valor.search(".doc") != -1;
	var bool2 = valor.search(".pdf") != -1;
	return bool1 || bool2;
}
function validateCampos(element,arrClass){
	var bool = true;
	id = element.id;
		switch(arrClass[1]){
			case "text":
				bool = validateText(id);
			break;
			case "select":
				valor = getValue(id);
				bool = valor != '#' && valor != '';
			break;
			case "checkbox":
				bool = validateCheckBox(id);
			break;
			case "email":
				bool = validateEmail(id);
			break;
			case "url":
				bool = validateUrl(id);
			break;
			case "password":
				bool = validatePassword(id);
			break;
			case "username":
				bool = validateUsuario(id);
			break;
			case "imagen":
				bool = validateImagen(id);
			break;
			case "fileDoc":
				bool = validateFileDoc(id);
			break;
			case "zip_spain":
				bool = validateCpSpain(id);
			break;
			case "cif":
				//bool = validateCIF(id);
				//bool = verificacif(getValue(id));
				if(!verificacif(getValue(id)) && !validate(NIF)) {
					bool = false;
				} else {
					bool = true;
				}
			break;
			case "nif":
				bool = validateNIF(id);
			break;
			case "textArea":
				bool = validateText(id) && getValue(id).length >= 100;
			break;
	}
	if (arrClass[0] == 'confirm'){
			bool = bool && getValue(id) == getValue(arrClass[2]);
	}
	return bool;
}

function validateForm( f ) {
	var errors = '';
	var i;
	if ( !f ) return false;
	flag = true;
	for( i=0 ; i<f.length ; i++ ){
		if (isRequired(f.elements[i])){
			element = f.elements[i];
			arrClass = typeElement(f.elements[i]);
			//Verificacion nombre empresa
			//if(!isNotEmpty(getValue('e_company_name')) && validateCIF('e_nif')) {
					
			//	if(f.elements['h_e_state'].value=='53' && f.elements[i].name=='e_nif') {
			//		setNoError(element, arrClass[1]);
			//	} else {
			//		errors += setError(f.elements['e_company_name'], arrClass[1]);
			//		flag = false;
			//	}
			//} else {
			//	if(( !isNotEmpty(getValue('e_name')) || !isNotEmpty(getValue('e_lastname')) ) && !validateCIF('e_nif') ) {
			//		errors += setError(f.elements['e_name'], arrClass[1]);
			//		errors += setError(f.elements['e_lastname'], arrClass[1]);
			//		flag = false;
			//	}
			//}
			//Fin verificacion nombre empresa
			if (!validateCampos(element, arrClass)){
				//Excepción NIF Andorra (no se valida el dni andorrano).
				if(f.elements['h_e_state'].value=='53' && f.elements[i].name=='e_nif') {
					setNoError(element, arrClass[1]);
				} else {
					errors += setError(element, arrClass[1]);
					flag = false;
				}
				//Fin excepción de andorra
			}
			else{
				setNoError(element, arrClass[1]);
			}
		}
		else{
			if (isNotRequired(f.elements[i])){
				element = f.elements[i];
				arrClass = typeElement(f.elements[i]);
				if (!validateCampos(element, arrClass)){
					errors += setError(element, arrClass[1]);
					flag = false;
				}
				else{
					setNoError(element, arrClass[1]);
				}
			}
		}
	}
	if (!flag){
		window.scroll(0,0);
		setDisplay("error_msg", "");
	}
	return flag;
}

function verificacif(texto){
        //Funcion ok, para verificar que un CIF es correcto o no
        var pares = 0;
        var impares = 0;
        var suma;
        var ultima;
        var unumero;
        var uletra = new Array("J", "A", "B", "C", "D", "E", "F", "G", "H", "I");
        var xxx;
        
        texto = texto.toUpperCase();
        
        var regular = new RegExp(/^[ABCDEFGHKLMNPQS]\d\d\d\d\d\d\d[0-9,A-J]$/g);
         if (!regular.exec(texto)) return false;
             
         ultima = texto.substr(8,1);

         for (var cont = 1 ; cont < 7 ; cont ++){
             xxx = (2 * parseInt(texto.substr(cont++,1))).toString() + "0";
             impares += parseInt(xxx.substr(0,1)) + parseInt(xxx.substr(1,1));
             pares += parseInt(texto.substr(cont,1));
         }
         xxx = (2 * parseInt(texto.substr(cont,1))).toString() + "0";
         impares += parseInt(xxx.substr(0,1)) + parseInt(xxx.substr(1,1));
         
         suma = (pares + impares).toString();
         unumero = parseInt(suma.substr(suma.length - 1, 1));
         unumero = (10 - unumero).toString();
         if(unumero == 10) unumero = 0;
         
         if ((ultima == unumero) || (ultima == uletra[unumero])) {
             return true;
         } else {
             return false;
		 }
}
