// Funciones a ejecutar en el submit
var funciones_someter_form = new Array();
function someter_form(form, action) {
    var objForm = document.getElementById(form);
    var res = true;
    var len = funciones_someter_form.length;
    for (someter_form_i=0; someter_form_i<len; someter_form_i++) {
        eval("res = " + funciones_someter_form[someter_form_i] + "('" + form + "')");
        if (!res) {
            break;
        }
    }
    return res;
}

// Control de validacion de campos por JS
var obligatorios  = new Array();
var validaciones  = new Array();
var camposValidar = new Array();
var idForm        = null;

// Valida que los campos recibidos hayan sido rellenados
function validar_obligatorios(prefijo) {
    _prefijo = prefijo ? prefijo : 'campo';
    _prefijo = (_prefijo == 'null') ? '' : _prefijo;
    var i;
    var len = obligatorios.length;
    var res = true;
    var comprobar = false;      

    if (idForm != null){
    	var elementos = Array();
    	var f = document.getElementById(idForm);    	
    	for (i = 0; i < document.getElementById(idForm).elements.length; i++){
            elementos[i] = document.getElementById(idForm).elements[i].name;    		    		
        }
    }      

    for (i = 0; i < len; i++) {
        if(idForm != null && elementos != null){
            if (array_search(obligatorios[i], elementos) !== false) {
                comprobar = true;
            } else {
                comprobar = false;
            }
        } else {
            comprobar = true;
        }
    	if (comprobar) {
            objCampo = document.getElementById(_prefijo + obligatorios[i]);
            if (!objCampo.value) {
                focoAlertObligatorio(obligatorios[i], prefijo);
                res = false;
                break;
            }
        }
    }
    return res;
}

// Valida que los campos recibidos hayan sido rellenados con los datos correctos
function validar_campos() {
    var res = true;

    if (camposValidar && camposValidar.length) {
        for (i in camposValidar) {
            res = valida(camposValidar[i][0], camposValidar[i][1], camposValidar[i][2]);
            if (!res) {
                break;
            }
        }
    }

    if (res && validaciones && validaciones.length) {
        for (i in validaciones) {
            eval('res = ' + validaciones[i] + '()');
            if (!res) {
                break;
            }
        }
    }
    return res;
}

function focoAlert(id, prefijo) {
    _prefijo = prefijo ? prefijo : 'campo';
    _prefijo = (_prefijo == 'null') ? '' : _prefijo;
    objCampo = document.getElementById(_prefijo + id);
    objLabel = document.getElementById('label' + id);
    if (objLabel) {
        title = objLabel.title ? objLabel.title : objLabel.innerHTML;
    } else {
        title = id;
    }
    alert(CAMPO + '"' + title + '"'+ ERRONEO);
    objCampo.focus();
}

function focoAlertObligatorio(id, prefijo) {
    _prefijo = prefijo ? prefijo : 'campo';
    _prefijo = (_prefijo == 'null') ? '' : _prefijo;
    objCampo = document.getElementById(_prefijo + id);
    objLabel = document.getElementById('label' + id);
    var title = objLabel.title ? objLabel.title : objLabel.innerHTML;
    alert(CAMPO + '"' + title + '"'+ OBLIGATORIO);
    objCampo.focus();
}

function isEmpty(s) {
    return ((s == null) || (s.length == 0))
}

function isDigit (c) {
    return ((c >= "0") && (c <= "9"))
}

function valida(id, checkOption, prefijo) {
    var myRe;
    var myArray = new Array();
    var security = true;
    _prefijo = prefijo ? prefijo : 'campo';
    _prefijo = (_prefijo == 'null') ? '' : _prefijo;
    var objCampo = document.getElementById(_prefijo + id);
    if (objCampo) {
        var value = objCampo.value;
        if (value != "") {
            switch(checkOption) {
                case 'INTEGER':
                    myRe = /^\-?[0-9]+$/g;
                    myArray = value.match(myRe);
                    if (myArray == null) {
                        security = false;
                    }
                break;
                case 'NUMERIC':
                    myRe = /^\-?[0-9]+[\.,]{0,1}[0-9]+$/g;
                    myArray = value.match(myRe);
                    if (myArray == null) {
                        security = false;
                    }
                break;
                case 'PRIMARYKEY':
                    myRe = /^\-?[0-9]+$/g;
                    myArray = value.match(myRe);
                    if (myArray == null || (value.length > 11) || (value.length <= 0)) {
                        security = false;
                    }
                break;
                case 'KEYWORD':
                    myRe = /^[_0-9a-zA-Z-]{2,}$/g;
                    myArray = value.match(myRe);
                    if (myArray == null) {
                        security = false;
                    }
                break;
                case 'TELEFONO':
                    myRe = /^[\+]?[0-9 \.\-]{9,}$/g;
                    if (value.match(myRe) == null) {
                        security = false;
                    }
                break;
                case 'CP':
                    myRe = /^[0-9]{2}[ \t\.\-]?[0-9]{3}$/g;
                    if (value.match(myRe) == null) {
                        security = false;
                    }
                break;
                case 'FECHA':
                    myRe = /^[0-9]{2,4}[/-][0-9]{2,4}[/-][0-9]{2,4}$/g;
                    if (value.match(myRe) == null) {
                        security = false;
                    }
                    if (!isFechaValida(value))  {
                        security = false;
                    }
                break;
                case 'EMAIL':
                    if (value.length > 255) {
                        security = false;
                    } else {
                        myRe = /^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/g;
                        if (value.match(myRe) == null) {
                            security = false;
                        }
                    }
                break;
                case 'CIF':
                    var v1 = Array(0, 2, 4, 6, 8, 1, 3, 5, 7, 9);
                    var temp = 0;
                    var i;
                    var control;
                    for (i = 2; i <= 6; i = i + 2) {
                        temp = temp + parseInt(v1[value.substr(i-1, 1)]);
                        temp = temp + parseInt(value.substr(i, 1));
                    }
                    temp    = temp + v1[value.substr(7, 1)];
                    temp    = (10 - (temp % 10));
                    temp    = String(temp);
                    temp    = temp.substr(temp.length - 1);
                    control = value.substr(value.length - 1);
                    control = control.toLowerCase();
                    control = (control == 'j') ? 0 : control;
                    if ((control != temp) || (value.length < 9)) {
                        security = false;
                    }
                break;
                case 'NIF':
                    if (value.length >= 8) {
                        var letras = new Array('T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X', 'B', 'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E', 'T');
                        var dni = value.substr(0, value.length - 1);
                        //Protegemos para NIEs
                        dni = dni.replace(/X/g, "0");
                        dni = dni.replace(/Y/g, "1");

                        dni = parseInt(dni);
                        var tmp = parseInt(dni) - parseInt(dni/23) * 23;
                        var res = letras[tmp];
                        if (res != value.substr(value.length - 1)) {
                            security = false;
                        }
                    } else {
                        security = false;
                    }
                    // NIFs no legales
                    myRe = /^((00000001R)|(11111111H)|(22222222J)|(33333333P)|(44444444A)|(55555555K)|(66666666Q)|(77777777B)|(88888888Y)|(99999999R)|(01234567L)|(98765432M)|(12345678Z))$/g;
                    myArray = value.match(myRe);
                    if (myArray != null) {
                        security = false;
                    }
                break;
                case 'URL':
                    value = value.toLowerCase();
                    myRe = /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$/g;
                    if (value.match(myRe) == null) {
                        security = false;
                    }
                break;
                case 'TEXTAREA':
                case 'STRING':
                    if (typeof(value) != 'string') {
                        security = false;
                    }
                break;
                case 'HTML':
                break;
                default:
                    security = false;
                break;
            }

            if (!security) {
                focoAlert(id, prefijo);
            }
        }
    }
    return security;
}

function validaTfno(tfno) {
    var n
    var total = 0
    var ini = 0
    var min = 9

    if (tfno.charAt(0) == '+') {
        ini = 1
    }

    for (n = ini; n < tfno.length; n++) {
        car = tfno.charAt(n)
        if (es_digito(car)) {
            total++
        } else if ((car != ' ') && (car != '-')) {
            return false
        }
    }
    return (total >= min)
}

//Devuelve TRUE si el caracter es un digito
function es_digito(c) {
    if ((c.charCodeAt(0) >= "0".charCodeAt(0)) &&
        (c.charCodeAt(0) <= "9".charCodeAt(0))) {
        return true;
    } else {
        return false;
    }
}

function isFechaValida(value) {
    var ndia  = parseInt(value.substr(0,2), 10);
    var nmes  = parseInt(value.substr(3,2), 10);
    var nanyo = parseInt(value.substr(6,4), 10);
    var dias  = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    if (nanyo % 4 == 0 && nanyo % 400 != 0) {
        dias[1] = 29;
    }
    if (nmes >= 1 && nmes <= 12 && ndia >= 1 && ndia <= dias[nmes-1] ) {
        return true;
    }
    return false;
}
