/*	 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 comprobar_IP(s) {
    var expresion = new RegExp('^(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])(\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])){3}$');
    return expresion.test(s);
}

function comprobar_porcentaje(s) {
    var	expresion = new RegExp('^([0-9]*)+(.[0-9])?([0-9])?$')
	return expresion.test(s);
}


function etiquetas_errores(codigo, etiqueta) {
    var errores = new Array();
    errores[0] = '   - El campo ' + etiqueta + ' es obligatorio.\n';
    errores[1] = '   - El campo ' + etiqueta + ' debe ser una dirección válida de e-mail.\n';
    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 mayor o igual a 0.\n';
    errores[7] = '   - Los campos ' + etiqueta + ' deben 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 + '  debe tener un formato de precio válido (Ej: 12345,20)\n';
    errores[10] = '   - El campo ' + etiqueta + '  debe ser una dirección IP válida\n';
    errores[11] = '   - El campo ' + etiqueta + '  debe ser una valor de porcentaje válido (Ej: 4.05)\n';
return errores[codigo];
}

/*
Validador genérico de formulario
*/

function validar(f) {
    errores = '';
    for (i = 1; i < arguments.length; i++) {

        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':
				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);
                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('.')).toLowerCase();
					if (extension!='.gif' && extension!='.jpg' && extension!='.jpeg' && extension!='.png') {
						errores += etiquetas_errores(8, 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);
				} 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);
				} else if (!comprobarMail(campo.value)) errores += etiquetas_errores(1, etiqueta);
				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 'dni':
                 if (trim(campo.value) == '') {
                     if (!vacio_permitido) errores += etiquetas_errores(0, etiqueta);
                 } else {
                     while(campo.value.length<10) {
                        campo.value='0'+campo.value;
                    }
                 }
                 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 '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 "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;
									   
	        case "precio_BD":
                 if (trim(campo.value) == '') {
                     if (!vacio_permitido) errores += etiquetas_errores(0, etiqueta);
                 } else if (!new RegExp('^[0-9]+(,[0-9]{1,2})?$').test(campo.value)) errores += etiquetas_errores(9, etiqueta);
                 break;
         
             case 'ip':
                 if (trim(campo.value) == '') {
                     if (!vacio_permitido) errores += etiquetas_errores(0, etiqueta);
                 } else if (!comprobar_IP(campo.value)) errores += etiquetas_errores(10, etiqueta);
                 break;

             case 'porcentaje':
                 if (trim(campo.value) == '') {
                     if (!vacio_permitido) errores += etiquetas_errores(0, etiqueta);
                 } else if (!comprobar_porcentaje(campo.value)) errores += etiquetas_errores(11, 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) {
    alert('Se han producido los siguientes errores:\n\n' + errores + '\n');
}

function comprobar_actividad_seleccionada(f) {
	var prefijo='actividad_'
	var inputs=f.getElementsByTagName('input');
    var checks = new Array();
	for (var i=0;i<inputs.length;i++) {
		if (inputs[i].type=="checkbox" && inputs[i].name.indexOf(prefijo)==0) {
			checks.push(inputs[i]);
		}
	}
	var selected=false;
	for (i=0;i<checks.length;i++) {
		if (checks[i].checked) return true;
	}	
	return false;
}