// 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 + '0000';
    return intPart + '.' + decPart.substring(0,4);
}

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);

}
