/*	 VALIDADOR GENERICO DE FORMUALRIOS */

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 (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) {
    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 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';
return errores[codigo];
}



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':        campo = (arguments[i].split('|')[0]).split('~');
                                       break;
            case 'fecha_mayor':        campo = (arguments[i].split('|')[0]).split('~');
                                       break;

            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;


            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('.'));
										if (extension!='.gif' && extension!='.jpg' && extension!='.jpeg') {
											 errores += etiquetas_errores(8, etiqueta);
										}
									  }
									  
									  break;

            case 'fckeditor':        if (trim(campo) == '') 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 '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;
									   
									   

        } // 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');
}
