/*-----------------------------------------------------------------------------
 Convierte una cadena en formato n.nnn,nn a nnnn.nn
-----------------------------------------------------------------------------*/
String.prototype.numToUSA= function ()
{
    var re = /\./g;
    var re2 = /,/g;
    return this.replace(re, '').replace(re2, '.');
}


/*-----------------------------------------------------------------------------
 Convierte una cadena en formato n,nnn.nn a nnnn,nn
-----------------------------------------------------------------------------*/
String.prototype.numToESP= function ()
{
	var re1 = /,/g;
    var re2 = /\./g;    
    return this.replace(re1,'').replace(re2,',');
}

//-----------------------------------------------------------------------------
function esNumero(valor, decimal)
{
    var re;

    if (decimal > 0)  re = new RegExp ("^[+-]?\\d{1,}(\\.?\\d{3,3})*(,\\d{1,"+ decimal +"})?$");
    else re = new RegExp ("^[+-]?\\d{1,}(\\.?\\d{3,3})*$");

    return re.test(valor);
}

//-----------------------------------------------------------------------------
function vNumero(campo, desc, min, max, dec, requerido)
{
    var error = false;
    var msg = ""

	campo.value = campo.value.trim();
	
	if (campo.value == '') 
	{
	    if (requerido)
    	{
    		alert('El campo "'+ desc +'" no puede estar vacio.');
    		campo.focus();
    		return false;
    	}
    	else return true;
	}

    
    if (esNumero(campo.value, dec))
    {
        if (min==null && max==null) return true;
        if (min!=null)
        {
            if (campo.value.numToUSA()<min) error=true;
        }
        if (max!=null)
        {
            if (campo.value.numToUSA()>max) error=true;
        }
    }
    else error = true;

    if (error)
    {
        msg = 'El contenido del campo "'+ desc + '" no es un número válido.\n';
        if (min!=null & max !=null) msg += "Debe estar comprendido entre "+ min +" y "+ max +"\n";
        else if (min!=null) msg += "No puede ser inferior a "+ min +"\n";
        else if (max!=null) msg += "No puede ser mayor de "+  max +"\n";
        if (dec!=null && dec>0) msg+="No puede contener más de "+ dec +" decimales (use la coma como separador)\n";
        else msg += "No puede tener decimales\n";
        if (min > 999 || max>999)  msg += "Puede usar el punto como separador de miles"

        alert(msg);
        campo.focus();
        return false;
    }
    return true;
}

/*-----------------------------------------------------------------------------*/


function vCP(campo, dec, requerido)
{ 
	campo.value = campo.value.trim();
	if (campo.value == '') 
	{
	    if (requerido)
    	{
    		alert('El campo Código Postal no puede estar vacio.');
    		campo.focus();
    		return false;
    	}
    	else return true;
	}
	if (campo.value.length < 5)
	{
		alert('El contenido del campo Código Postal no es válido');
		return false;
	}
 	if (!esNumero(campo.value, dec))
 	{
 		alert('El contenido del campo Código Postal no es válido');
 		return false;
 	}
	return true;
}

/*-----------------------------------------------------------------------------
 Devuelve una cadena con un número en el formato nn.nnn,nn
 - num: numero o cadena con formato nn,nnn.nn (las comas son opcionales)
 - nDec: número de dígitos de la parte decimal
 - rellenaDec: opcional. (true|false) completa la parte derecha de los
	decimales hasta completar "nDec" dígitos. Por defecto es "false"
-----------------------------------------------------------------------------*/
function formateaNum(num, nDec, rellenaDec)
{
    var numero = ''+num;
    var re1 = new RegExp ('(\\d+)(\\.\\d*)?$', 'g');
    var re2 = new RegExp ('(\\d+)(\\d{3,3})$', 'g');
    var salida ="";

    if (numero.substr(0,1)=='.') numero = '0'+numero;

    indice = numero.search(re1);
    entero = RegExp.$1;
    decimal = RegExp.$2;

    indice = entero.search(re2)

    while (indice != -1)
    {
        salida = '.' + RegExp.$2 + salida;
        entero = RegExp.$1;
        indice = entero.search(re2);
    }
    salida = entero+salida;

    if ( nDec != null && ((decimal!='' && decimal!='.') || rellenaDec))
    {
    	if (rellenaDec) decimal += '000000000000';
        salida += ',' + decimal.substr(1, nDec);
    }

    if (parseFloat(numero) < 0) return '-'+salida;
    else return salida;
}

function vImporte(campo, desc, decimales, requerido)
{
   if ((!requerido) && campo.value.trim() == "") return true;

    var re;
    if (decimales > 0)
    	re = new RegExp("^((\\d{1,})(\\.?\\d{3,3})*(\\,\\d{0,"+ decimales +"})?)$");        
    else
    	re = new RegExp("^(([0-9]{1,})(\\.?[0-9]{3,3})*)$");        

    if (re.test(campo.value)) return true;
    else
    {
        if (decimales > 0 )
            alert("El contenido del campo '" + desc + "' no es válido. " +
                "Introduzca solo números, use la coma como separador de decimales. "+
                "No puede introducir mas de "+ decimales + " decimales. "+
                "Si desear puede usar puntos como separador de millares.");
        else
            alert("El contenido del campo '" + desc + "' no es válido. " +
                "Introduzca solo números. Si desear puede usar puntos como separador de millares.");
        campo.focus();
        return false;
    }

}

