// Validacion
// Arreglos para guardar los campos a validar
var camposObligatorios = new Array();
var camposObligatoriosDesc = new Array();

var camposInteger = new Array();
var camposIntegerDesc = new Array();

var camposFloat = new Array();
var camposFloatDesc = new Array();

var camposDate = new Array();
var camposDateDesc = new Array();

// Funciones llamadas por campos del framework
function addToCamposObligatorios(v) {
    addToCamposObligatoriosDesc(v, v);
}

function addToCamposObligatoriosDesc(v, d) {
    l = camposObligatorios.length;
    camposObligatorios[l] = v;
    camposObligatoriosDesc[l] = d;
}

function addToCamposIntegerDesc(v, d) {
    l = camposInteger.length;
    camposInteger[l] = v;
    camposIntegerDesc[l] = d;
}

function addToCamposFloatDesc(v, d) {
    l = camposFloat.length;
    camposFloat[l] = v;
    camposFloatDesc[l] = d;
}

function addToCamposDateDesc(v, d) {
    l = camposDate.length;
    camposDate[l] = v;
    camposDateDesc[l] = d;
}

// Funcion que hay que llamar para que se ejecute la validacion por defecto
function validar() {
    return (validarObligatorios() && validarInteger() && validarFloat());
}


// Funciones de validacion
function validarRequired(fname, text, index) {
    if (index == null) index = 0;
    var f1 = document.getElementsByName(fname)[index];
    if (f1.value == null || f1.value == '') {
        alert(text);
        f1.focus();
        return false;
    }
    return true;
}

function validarObligatorios() {
    for (i = 0; i < camposObligatorios.length; i++) {
        campos = document.getElementsByName(camposObligatorios[i]);
        desc = camposObligatoriosDesc[i];
        for (j = 0; j < campos.length; j++) {
            if (campos[j].value == '') {
                alert('Required field: ' + desc);
                campos[j].focus();
                return false;
            }
        }
    }
    return true;
}

function validarInteger() {
    for (i = 0; i < camposInteger.length; i++) {
        campos = document.getElementsByName(camposInteger[i]);
        desc = camposIntegerDesc[i];
        for (j = 0; j < campos.length; j++) {
            if (campos[j].value != '') {
                if (isNaN(parseInt(campos[j].value))) {
                    alert(desc + ' must be integer.');
                    campos[j].focus();
                    return false;
                } else campos[j].value = parseInt(campos[j].value);
            }
        }
    }
    return true;
}

function validarFloat() {
    for (i = 0; i < camposFloat.length; i++) {
        campos = document.getElementsByName(camposFloat[i]);
        desc = camposFloatDesc[i];
        for (j = 0; j < campos.length; j++) {
            if (campos[j].value != '') {
                if (!validateFloatValue(campos[j].value)) {
                    alert(desc + ' must be decimal.');
                    campos[j].focus();
                    return false;
                } else campos[j].value = reformatFloat(campos[j].value);
            }
        }
    }
    return true;
}

// Funciones auxiliares para la validacion del tipo float.
function deleteAllSpaces(cad) {
    result = "";
    for (iiii = 0; iiii < cad.length; iiii++) {
        c = cad.charAt(iiii);
        if (c != " ") result = result + c;
    }
    return result;
}

function deleteRightZeros(cad) {
    punto = cad.indexOf(".");
    if (punto < 0) return cad;
    pos = cad.length - 1;
    while (((cad.charAt(pos) == "0") || (cad.charAt(pos) == ".")) && (pos >= punto)) {
        pos--;
    }
    return cad.substring(0, pos + 1);
}

function reformatFloat(cad) {
    temp = deleteAllSpaces(cad);
    return deleteRightZeros(temp);
}

function formatCurrency(cad) {
    cadStr = cad + '';
    arrTemp = cadStr.split(".");
    intPart = (arrTemp.length > 0) ? arrTemp[0] : cadStr;
    decPart = (arrTemp.length > 1) ? arrTemp[1] : '';
    decPart = decPart + '00';
    return intPart + '.' + decPart.substring(0, 2);
}

function validateFloatValue(cad) {
    var temp = reformatFloat(cad);
    var parsed = parseFloat(temp);
    if (isNaN(parsed)) return false; else if ((parsed + "").length != temp.length) return false; else return true;
}

function validateIntValue(cad) {
    if (cad == '') return false;
    var parsed = parseInt(cad);
    return !isNaN(parsed);
}

function validateTextAreaInLine(obj, maxlength) {
    if (obj.value.length > maxlength) {
        obj.value = obj.value.substring(0, maxlength);
    }
}

// Aqui se acaban las funciones de validacion

// Esta funcion busca si existe el campo en el formulario. Si no existe lo crea y le asigna el valor.
function setFieldValue(form, field_name, field_value) {
    lista = document.getElementsByName(field_name);
    if (lista.length < 1) {
        inp = document.createElement("INPUT");
        inp.setAttribute('type', 'hidden');
        inp.name = field_name;
        inp.setAttribute('value', field_value);
        form.appendChild(inp);
    } else {
        form.elements[field_name].value = field_value;
    }
}

function formatHora(cad) {
    var arr = cad.split(':');
    hh = (arr.length > 0) ? arr[0] : "";
    mm = (arr.length > 1) ? arr[1] : "";
    if (hh == '') return "";
    if (isNaN(parseInt(hh))) return "";
    if (parseInt(hh) > 24) return ""

    if (mm != '') {
        if (isNaN(parseInt(mm))) return "";
        if (parseInt(mm) > 59) return ""
    } else mm = '00';

    hh = (hh.length == 1) ? "0" + hh : hh;
    mm = (mm.length == 1) ? "0" + mm : mm;
    return hh.substring(0, 2) + ':' + mm.substring(0, 2);

}