﻿//Función que fija el número de decimales que hay en un número.
Number.prototype.DarFormato = function(Decimales)
{
    //Obtengo el número completo en una variable.
    var NumeroCompleto = this;

    //Obtengo la posición del separador decimal en el string.
    var PosicionDecimal = NumeroCompleto.toString().indexOf(".");

    //Si no tiene separador decimal, agrego la cantidad de decimales.
    if (PosicionDecimal == -1)
    {
        NumeroCompleto += ".";
    }
    else
    {
        //Si tiene separador decimal, fijo la cantidad de caracteres del numero completo, 
        //en la posición decimal + 1 (porque arranca en 0) más la cantidad de decimales que se desean.
        NumeroCompleto = NumeroCompleto.toString().substr(0, PosicionDecimal + Decimales + 1);
    }
    
    //Mientras el número tenga menos decimales, agrego ceros
    while (NumeroCompleto.length < PosicionDecimal + 1 + Decimales)
    {
        NumeroCompleto += "0";
    }
    
    return NumeroCompleto;
}

//Función que convierte los saltos de línea no visibles por el explorador (NL) en visibles (BR).
String.prototype.ToBR = function()
{
    //Obtengo una regex que reemplaza todos los new lines.
    var RegexNL = new RegExp(String.fromCharCode(13), "g");
    
    //Obtengo una regex que reemplaza todos los tabs.
    var RegexTAB = new RegExp(String.fromCharCode(10), "g");
    
    //Reemplazo los new lines y tabs por BR.
    var Resultado = this.replace(RegexNL, "").replace(RegexTAB, "<br />");
    
    return Resultado;
}

//Función que convierte los saltos de línea BR en NL.
String.prototype.ToNL = function()
{
    //Reemplazo todas las opciones de BR existentes por new lines.
    var Resultado = this.replace(/<br \/>/g, String.fromCharCode(13));
    Resultado = Resultado.replace(/< br>/g, String.fromCharCode(13));
    Resultado = Resultado.replace(/<br >/g, String.fromCharCode(13));
    Resultado = Resultado.replace(/<br \/>/g, String.fromCharCode(13));
    Resultado = Resultado.replace(/<br \/>/g, String.fromCharCode(13));
    Resultado = Resultado.replace(/<br >/g, String.fromCharCode(13));
    Resultado = Resultado.replace(/< br>/g, String.fromCharCode(13));
    
    return Resultado;
}


//Función que convierte un string en un objeto JSON.
String.prototype.ToJSON = function()
{
    //Si se puede convertir devuelve el objeto JSON, si no, hace un alert del string
    try
    {
        return eval("(" + this + ")");
    }
    catch (e)
    {
        alert(this);
    }
}

//Función que saca los espacios de los costados del string.
String.prototype.Trim = function()
{
    return (this.replace(/^[\s\xA0]+/, "").replace(/[\s\xA0]+$/, ""));
}

//Función que determina si el string empieza con el string dado por parametro.
String.prototype.Contains = function(Valor)
{
    return (this.match(Valor) == Valor);
}

//Función que determina si el string empieza con el string dado por parametro.
String.prototype.StartsWith = function(Valor)
{
    return (this.match("^" + Valor) == Valor);
}

//Función que determina si el string termina con el string dado por parametro.
String.prototype.EndsWith = function(Valor)
{
    return (this.match(Valor + "$") == Valor);
}

//Función que resalta en HTML el string en las partes que se encuentra el criterio.
String.prototype.Highlight = function(Criterio)
{
    //Creo la variable que va a tener el string resaltado
    var StringResaltado = "";

    //Si hay un criterio.
    if (Criterio != undefined && Criterio != "")
    {
        //Saco lo resaltado que haya anteriormente.
        Criterio = Criterio.replace(/<span style="background-color:#ddd;">/g, "").replace(/<\/span>/g, "");

        //Guardo en una variable la cantidad de caracteres que tiene el string.
        var Longitud = this.length;
        
        //Mientras no se llegue al final del string.
        for (var i = 0; i < Longitud; i++)
        {
            //Si en la posición que se está, el string de igual tamaño que el criterio, coincide.
            if (this.substr(i, Criterio.length).toLowerCase() == Criterio.toLowerCase())
            {
                //Resalto el string que coincide y lo agrego al resultado.
                StringResaltado += '<span style="background-color:#ddd;">' + this.substr(i, Criterio.length) + '</span>';
                
                //Agrego al índice la cantidad de letras del criterio menos uno
                //que ya lo agrega en la iteración para que no vuelva a mirar sobre lo resaltado.
                i += Criterio.length - 1;
            }
            else
            {
                //Si no coincide agrego el caracter.
                StringResaltado += this.substr(i, 1);
            }
        }
    }
    return StringResaltado;
}
