/*	 VALIDADOR GENERICO DE FORMUALRIOS */

function trim(cadena) {
    while (cadena.charAt(0) == ' ' && cadena != '') cadena = cadena.substr(1);
    while (cadena.charAt(cadena.length - 1) == ' ' && cadena != '') cadena = cadena.substr(0, cadena.length - 1);
    return cadena;
}

function comprobarMail(s) {
    var expresion = new RegExp('^[0-9a-zA-Z_]+(([\\.-]?[0-9a-zA-Z_]+)+)?@[0-9a-zA-Z_-]+(\\.([0-9a-zA-Z_-])+)+$');
    if (expresion.test(s)) return true;
    else return false;
}

function validar_numero_entero_positivo(s) {
    var expresion = new RegExp('^[0-9]+$');
    if (expresion.test(s)) return true;
    else return false;
}

function format_to_array(obj) {
    array = new Array();
    if (obj.length) for (var z = 0; z < obj.length; z++) array[z] = obj[z];
    else array[0] = obj;
    return array;
}

function validarFecha(strFecha) {
  // formato dd/mm/aaaa
    if (strFecha.length != 10) return false;
    arr = strFecha.split("/");
    str2 = arr[1] + "/" + arr[0] + "/" + arr[2];
    fecha = new Date(str2);
    if ((fecha.getDate() == arr[0]) && ((fecha.getMonth() + 1) == arr[1]) && (fecha.getFullYear() == arr[2])) {
        return true;
    }
    else {
        return false;
    }
}

function es_fecha_mayor(fecha_mayor, fecha_referencia) {
    fecha_mayor = parseInt('' + fecha_mayor.split('/')[2] + '' + fecha_mayor.split('/')[1] + '' + fecha_mayor.split('/')[0]);
    fecha_referencia = parseInt('' + fecha_referencia.split('/')[2] + '' + fecha_referencia.split('/')[1] + '' + fecha_referencia.split('/')[0]);
    if (fecha_mayor > fecha_referencia) return true;
    return false;
}


function etiquetas_errores(codigo, etiqueta, campo) {
    var errores = new Array();
	if (typeof(LANGUAGE)=='undefined') LANGUAGE='';
	
	switch (LANGUAGE) {
		case "en":
				errores[0] = '   - Field ' + etiqueta + ' is required.\n';
                errores[12] ='   - ' + etiqueta + '\n';
                errores[1] = '   - Field ' + etiqueta + ' must be a valid e-mail address.\n';
                errores[11] ='   - One Field ' + etiqueta + ' is required.\n';
                break;
		
		default:
				errores[0] = '   - El campo ' + etiqueta + ' es obligatorio.\n';
				errores[1] = '   - El campo ' + etiqueta + ' debe ser una dirección válida de e-mail.\n';
				break;
	}
	errores[2] = '   - El campo ' + etiqueta + ' debe contener sólo números.\n';
	errores[3] = '   - El campo ' + etiqueta + ' debe ser una fecha válida en formato dd/mm/aaaa.\n';
	errores[4] = '   - El campo ' + etiqueta + ' no contiene elementos.\n';
	errores[5] = '   - El campo ' + etiqueta.split('~')[1] + ' debe ser mayor que el campo ' + etiqueta.split('~')[0] + '.\n';
	errores[6] = '   - El campo ' + etiqueta + ' debe ser un número entero positivo.\n';
	errores[7] = '   - Los campos ' + etiqueta + ' debe ser iguales.\n';
	errores[8] = '   - El campo ' + etiqueta + '  sólo puede ser de extensión \'.gif\', \'jpg\' o \'jpeg\'.\n';
	errores[9] = '   - El campo ' + etiqueta + '  sólo puede ser de extensión \'.wmv\'.\n';
	errores[10] ='   - El campo ' + etiqueta + '  sólo puede ser de extensión \'.wmv\' o  \'.flv\'.\n';
    errores[11] ='   - Unos de los campos ' + etiqueta + 'debe ser selecionado.\n';

    
//    if (campo !=''){
//        document.getElementById(campo).style.borderColor='#900';
//        document.getElementById(campo).style.borderStyle='Solid';
//    }

    return errores[codigo];
}

//Gestion campi chek como ratio
function chekselect(id,numck){
    var ckt = id.charAt(id.length-1);
    
    for (j = 1; j <= numck; j++) {

        var idj = 'chk' + j + ckt;

        if (idj != id) {
            document.getElementById(idj).value=false;
            document.getElementById(idj).checked = false;
        }
    }
    document.getElementById(id).value=true;
}
/*
Validador genérico de formulario.
*/
function validar(f) {
    errores = '';
    for (i = 1; i < arguments.length; i++) {

        nombre = arguments[i].split('|')[0];
        tipo = arguments[i].split('|')[1];
        etiqueta = arguments[i].split('|')[2];
        vacio_permitido = arguments[i].split('|')[3] == 'vacio_permitido'?true:false;

        switch (tipo) {                // primer switch para definir la variable 'campo'
            case 'grupochecks':
            case 'fecha_mayor':
            case 'campos_iguales':
            case 'multicheckscontrol':
            case 'radiochekval':
            case 'multiradio':
                campo = (arguments[i].split('|')[0]).split('~');
                break;
									   
            case 'custom_grupochecks':
				campo = eval(arguments[i].split('|')[0]);
                break;

            case 'fckeditor':
				var field=arguments[i].split('|')[0];
				campo=FCKeditorAPI.GetInstance(field).GetXHTML(true);
				break;

            case 'editor':
				var field=arguments[i].split('|')[0];
				campo=tinyMCE.getInstanceById(field).getBody().innerHTML;
				break;


            default:
				campo = eval('f.' + arguments[i].split('|')[0]);
        }
		

		 switch (tipo) {
            case 'texto':
				if (trim(campo.value) == '') errores += etiquetas_errores(0, etiqueta, nombre);
                break;

            case 'imagen':
				if (trim(campo.value) == '') errores += etiquetas_errores(0, etiqueta, '');
                else {
					var solo_archivo=campo.value;
					solo_archivo=solo_archivo.substr(solo_archivo.lastIndexOf('\\')+1);
					solo_archivo=solo_archivo.substr(solo_archivo.lastIndexOf('/')+1);
					var extension=solo_archivo.substr(solo_archivo.lastIndexOf('.'));
					if (extension!='.gif' && extension!='.jpg' && extension!='.jpeg') {
						errores += etiquetas_errores(8, etiqueta, '');
					}
				}
				  break;

            case 'video_wmv':
				if (trim(campo.value) == '') errores += etiquetas_errores(0, etiqueta, '');
                else {
					var solo_archivo=campo.value;
					solo_archivo=solo_archivo.substr(solo_archivo.lastIndexOf('\\')+1);
					solo_archivo=solo_archivo.substr(solo_archivo.lastIndexOf('/')+1);
					var extension=solo_archivo.substr(solo_archivo.lastIndexOf('.'));
					if (extension!='.wmv') {
						errores += etiquetas_errores(9, etiqueta, '');
					}
				}
				  break;

            case 'wmv_flv':
				if (trim(campo.value) == '') errores += etiquetas_errores(0, etiqueta, '');
                else {
					var solo_archivo=campo.value;
					solo_archivo=solo_archivo.substr(solo_archivo.lastIndexOf('\\')+1);
					solo_archivo=solo_archivo.substr(solo_archivo.lastIndexOf('/')+1);
					var extension=solo_archivo.substr(solo_archivo.lastIndexOf('.'));
					if (extension!='.wmv' && extension!='.flv') {
						errores += etiquetas_errores(10, etiqueta, '');
					}
				}
				  break;

             case 'fckeditor':
                 if (trim(campo) == '') errores += etiquetas_errores(0, etiqueta, '');
             break;

             case 'editor':
                 if (trim(campo) == '' ||  trim(campo) == '<br>' || trim(campo).toLowerCase()=='<p>&nbsp;</p>') errores += etiquetas_errores(0, etiqueta, '');
             break;


            case 'numero_entero_positivo':
				if (trim(campo.value) == '') {				
					if (!vacio_permitido) errores += etiquetas_errores(0, etiqueta, nombre);
				} else if (!validar_numero_entero_positivo(campo.value)) errores += etiquetas_errores(6, etiqueta, '');
			break;

            case 'mail':
				if (trim(campo.value) == '') {
					if (!vacio_permitido) errores += etiquetas_errores(0, etiqueta, nombre);
				} else if (!comprobarMail(campo.value)) errores += etiquetas_errores(1, etiqueta, nombre);
			break;

            case 'telefono':
				if (trim(campo.value) == '') {
					if (!vacio_permitido) errores += etiquetas_errores(0, etiqueta, '');
				} else if (isNaN(campo.value)) errores += etiquetas_errores(2, etiqueta, '');
			break;

            case 'fecha':
				if (trim(campo.value) == '') {
					if (!vacio_permitido) errores += etiquetas_errores(0, etiqueta);
				} else if (!validarFecha(campo.value)) errores += etiquetas_errores(3, etiqueta, '');
			break;

            case 'fecha_mayor':
				if (campo.length != 2) {
					break;
				}
				fecha_1 = eval('f.' + campo[0] + '.value');
				fecha_2 = eval('f.' + campo[1] + '.value');
				if (!validarFecha(fecha_1) || !validarFecha(fecha_2)) {
					break;
				}
				if (!es_fecha_mayor(fecha_2, fecha_1)) {
					errores += etiquetas_errores(5, etiqueta, '');
				}
			break;

			case 'radio':
				campo = format_to_array(campo);
				seleccionado = false;
				for (j = 0; j < campo.length && !seleccionado; j++) {
					if (campo[j].checked) seleccionado = true;
				}
				if (!seleccionado) errores += etiquetas_errores(0, etiqueta, '');
			break;

			case 'radiochekval':
                seleccionados = false;
                rt = campo[0].split(',');


              for (j = 0; j < rt.length; j++) {
				   elemento1 = eval('f.' + rt[j].substring (0,5)+'_si');
                   elemento2 = eval('f.' + rt[j].substring (0,5)+'_no');

                   if (elemento1.checked || elemento2.checked) seleccionados = true;
				}
  
                for (j = 0; j < rt.length; j++) {

                    var rispcorrect =  rt[j].slice(6);

                    //alert(rispcorrect);

                    if (rispcorrect=="true"){
                        var rispassign =  eval('f.' + rt[j].substring (0,5) +'_si');
                        if (rispassign.checked){
                            document.getElementById(rt[j].substring (0,5) +'_si').style.border='none';
                            document.getElementById(rt[j].substring (0,5) +'_no').style.border='none';
                        }else{
                            document.getElementById(rt[j].substring (0,5) +'_si').style.border='3px solid #900'; 
                            document.getElementById(rt[j].substring (0,5) +'_no').style.border='3px solid #900';
                            seleccionados = false;}

                    }
                    if(rispcorrect=="false"){
                         var rispassign =  eval('f.' + rt[j].substring (0,5) +'_no');
                         if (rispassign.checked){
                            document.getElementById(rt[j].substring (0,5) +'_si').style.border='none';
                            document.getElementById(rt[j].substring (0,5) +'_no').style.border='none';
                        }else{
                            document.getElementById(rt[j].substring (0,5) +'_si').style.border='3px solid #900'; 
                            document.getElementById(rt[j].substring (0,5) +'_no').style.border='3px solid #900';
                            seleccionados = false;}
                    }
                 }

             if (!seleccionados) errores += etiquetas_errores(12, etiqueta, '');
                    
            break;

         
            case 'multiradio':
                seleccionado = false;
                rt = campo[0].split(',');

                for (j = 0; j < rt.length; j++) {
					elemento1 = eval('f.' + rt[j]+'_si');
                    elemento2 = eval('f.' + rt[j]+'_no');
                    if (elemento1.checked || elemento2.checked) seleccionado = true;
				}
				if (!seleccionado) errores += etiquetas_errores(0, etiqueta, '');
			break;


            case 'select':
				if (campo.options.length > 1 && campo.options[campo.selectedIndex].value == '') errores += etiquetas_errores(0, etiqueta, '');
			break;

            case 'lista_vacia':
				if (campo.length <= 0) errores += etiquetas_errores(4, etiqueta, '');
			break;

            case "grupochecks":
				seleccionado = false;
                
                for (j = 0; j < campo.length && !seleccionado; j++) {
					elemento = eval('f.' + campo[j]);
                    if (elemento.checked) seleccionado = true;
				}
				if (!seleccionado) errores += etiquetas_errores(0, etiqueta, '');
		   break;

           case "multicheckscontrol":
			   seleccionado = false;
               s = campo[0].split(',');

                for (j = 0; j < s.length; j++) {
					elemento = eval('f.' + s[j]);
                    if (elemento.checked) seleccionado = true;
				}
				if (!seleccionado) errores += etiquetas_errores(0, etiqueta, '');

           break;


            case "custom_grupochecks":
				seleccionado = false;
				for (j = 0; j < campo.length && !seleccionado; j++) {
					elemento = campo[j];
					if (elemento.type=="checkbox") {
						if (elemento.checked) seleccionado = true;
					}
				}
				if (!seleccionado) errores += etiquetas_errores(0, etiqueta, '');
			break;
									   
            case "campos_iguales":
				patron=eval('f.' + campo[0]+'.value');
				ok = true;
				for (j = 0; j < campo.length && ok; j++) {
					elemento = eval('f.' + campo[j]);
					if (elemento.value!=patron) ok = false;
				}
				if (!ok) errores += etiquetas_errores(7, etiqueta, '');
			break;
									   
									   

        } // fin de switch
    } // fin de for de argumentos


    return errores;
    /*
	if (errores!='') {
		alert('Se han producido los siguientes errores:\n\n' + errores + '\n');
		return false;
	}
	else {
		return true;
	}*/
}


function mostrar_errores(errores) {
	switch (LANGUAGE) {
		case "en":
				alert('The following errors occurred:\n\n' + errores + '\n');
				break;
		
		default:
				alert('Se han producido los siguientes errores:\n\n' + errores + '\n');
				break;
	}
}
