﻿/*********************************************************
/* Eventos Añadidos en el documento */
if (window.addEventListener) {  window.addEventListener('onload', function(){ ProcessPage(); }, false); }   //FIREFOX
else    {   window.attachEvent("onload",function(){ ProcessPage(); });  }   //IE
/***********************************************************/

/*********************************************************
    -   Genera los contornos de los botones 
    -   Inserta la imagen derecha al body
    -   Renderiza la imagen de fondo del estilo actual
**********************************************************/
function ProcessPage()
{
   generateButton();
}

/*********************************************************
    -   genera un contenedor al boton e 
        inserta los lados de este
**********************************************************/
function generateButton()
{
     //--- enera los contornos de los botones 
    var inputs=document.getElementsByTagName('INPUT');
    for(var i=0;i < inputs.length;i++) 
    {
        if (inputs[i].type=="submit" || inputs[i].type=="button")
        { 
            var nombreClase     = inputs[i].className;
            var Table           = inputs[i].parentNode.appendChild(document.createElement("table"))
            Table.border        = "0"
            Table.cellPadding   = "0"

            
            var Tbody   =   Table.appendChild( document.createElement("tbody") )
            var tr      =   Tbody.appendChild( document.createElement("tr") )

            var tdleft  =   tr.appendChild( document.createElement("td") )
            tdleft.className= nombreClase + "-left"

            var tdcenter  =   tr.appendChild( document.createElement("td") )
            tdcenter.appendChild(inputs[i])
            tdcenter.style.width   = inputs[i].style.width

            var tdright  =   tr.appendChild( document.createElement("td") )
            tdright.className= nombreClase + "-right"
        }
    }
}
/*********************************************************
Retorna el objeto a traves del Id
    id: Nombre del control a buscar
**********************************************************/
function $(id)
{
    return document.getElementById(id);
}

/*********************************************************
Retorna el indice de fila de una grilla para un control 
    id: Id de objeto para sacar su Contenedor
**********************************************************/
function findRowIndex(id)
{
    try
    {
        return id.substring((id.indexOf("_ctl")+4),id.length).substring(0,(id.indexOf("_")-1))
    }
    catch(e)
    {
        return -1
    }
}

/*********************************************************
Retorna el nombre de la fila contenedora del control
    id: Id de objeto para sacar su Contenedor
**********************************************************/
function findRowContainer(id)
{
    try
    {
        return id.substring(    0,(id.indexOf("_ctl")+7)    )
    }
    catch(e)
    {
        return -1
    }
}

/*********************************************************
Retorna el nombre de la Grilla contenedora del control
    id: Id de objeto para sacar su Contenedor
**********************************************************/
function findContainer(id)
{
    try
    {
        return id.substring(    0,(id.indexOf("_ctl")+4)    )
    }
    catch(e)
    {
        return -1
    }
}

//-----------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------[    FUNCIONES PARA TRABAJAR CON NUMEROS
//-----------------------------------------------------------------------------------------------------------------------------------------
var separadorMiles = '.';
var separadorDecimales = ',';

/*********************************************************
Retorna un decimal  [12.000,45] = [12000.45]
    Num: String Numero a transfornar en decimal
**********************************************************/
function CDec(Num) 
{		
	var dec = Num
	while (dec.indexOf(separadorMiles) != -1) 
	{
		dec =dec.replace(separadorMiles,'');
	}

	while (dec.indexOf(separadorDecimales) != -1) 
	{
		dec = dec.replace(separadorDecimales,'.');
	}
	return Number(dec);
}

/*********************************************************
Retorna un formato Moneda  [12000.45] = [12.000,45]
    value: String Numero a transfornar en Moneda
**********************************************************/
function CMoney(value)
{
    var Num         =  CStr(value) //Convierto a String
    var Decimales   =   "";
    var Enteros     =   "";
    if (Num.indexOf(separadorMiles) > 0 )
    {
        Decimales   =   Num.substring(Num.indexOf(separadorMiles)+1,Num.length)
        Enteros     =   Num.substring(0,Num.indexOf(separadorMiles))
    }
    else
    {
        Enteros     =   Num;
    }
    Enteros =   invert(Enteros) //Invierto los numeros
    
    cont    =   0 ;
    Num     =   "" //Limpio 
    for (i = 0; i < Enteros.length; i++)    //Inserto los separador de miles
    {
        cont    +=  1
        Num     +=  Enteros.charAt(i)
        if (    (cont ==3))
        {
            cont    =   0;
            Num     +=  "."
        }
    }
    Enteros =   invert(Num); //Invierto el Numero.
    if (Enteros.indexOf(separadorMiles) == 0){ Enteros = Enteros.substring(1,Enteros.length) } //Quita el . al comienzo [bug]
    if (Decimales.length>0) //Si hay decimales??
    {
        return  Enteros + separadorDecimales + Decimales
    }
    else
    {
        return  Enteros
    }
}

/*********************************************************
Limita la entrada de Enteros y Decimales en los txtMoney
    value            : String numero a Verificar
    CantidadEnteros  : Numero de Enteros Permitidos
    CantidadDecimales: Numero de Decimales Permitidos
**********************************************************/
function limitEntryes(value,CantidadEnteros,CantidadDecimales)
{
    var Decimales   =   "";
    var Enteros     =   "";
    var keyHit      =   event.keyCode
    if (value.indexOf(separadorDecimales) > 0 )
    {
        Decimales   =   value.substring(value.indexOf(separadorDecimales)+1,value.length)
        Enteros     =   value.substring(0,value.indexOf(separadorDecimales))
    }
    else
    {
        Enteros     = value
    }
    
    if (( Enteros.length > CantidadEnteros-1) &&  (keyHit != 44) || (value.indexOf(separadorDecimales) > 0)  && (Decimales.length > CantidadDecimales-1))
    {
        keyHit = 0; //Bloquea el numero
    }
   
    if ((value.indexOf(separadorDecimales) > 0)  && (Decimales.length < CantidadDecimales))
    {
        keyHit = event.keyCode;
    }
  
     window.event.keyCode   =   keyHit;
}

/*********************************************************
Retorna un boolean verificando si es numero o no
    value: String Numero a transfornar en Moneda
**********************************************************/
function isNumber(value)
{
    value = CDec(value) +"";        //Limpio los '.'
    value= value.replace(separadorMiles,"")    //Uno los decimales
    RegExp = /^[0-9]+$/;
    return RegExp.test(value);
}

/*********************************************************
Trunca los decimales de un numero
    value:              Numero a truncar
    numeroDecimales:    Nro. de decimales a dejar
**********************************************************/
function round(value,numeroDecimales)
{
    Cant =  Math.pow(10,numeroDecimales)
    return Math.round(value*Cant)/Cant  
}

//-----------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------[    FUNCIONES PARA TRABAJAR CON CADENAS
//-----------------------------------------------------------------------------------------------------------------------------------------
/*********************************************************
Retorna un String
    value: Dato a Castear
**********************************************************/
function CStr(value)
{
    return value + "";
}

/*********************************************************
Retorna un cadena invertida [Prueba] :  [abeurP]
    value: Cadena a Invertir
**********************************************************/
function invert(value)
{
    var ret  = "";
    for (i=value.length; i >= 0 ; i--) 
    {
        ret += value.charAt(i)
    }
    return ret;
}

/*********************************************************
Retorna un booleano verificando si la cadena es un Mail
    value: Cadena a Evaluar
**********************************************************/
function isMail(value)
{
    var RegExp=/^[A-Za-z][A-Za-z0-9_.]*@[A-Za-z0-9_]+\.[A-Za-z0-9_.]+[A-za-z]$/;
    return RegExp.test(value)
}

/*********************************************************
Retorna un booleano verificando si la cadena es un Mail
    value: Cadena a Evaluar
**********************************************************/
function isTelephone(value)
{
    var RegExp=/^(\d{2,3}(?:-)\d{6,9})$/;
    return RegExp.test(value)
}

//-----------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------[    UTILES [VARIOS]
//-----------------------------------------------------------------------------------------------------------------------------------------

/*********************************************************
Genera un Efecto Fade del objeto objetivo
    id:         Identificador del Objeto
    opacStart:  Nivel de opacidad inicial a partir
    opacEnd:    Nivel de opacidad final deseada
    millisec:   milisegundos entre frames
**********************************************************/
function fadeEffect(id, opacStart, opacEnd, millisec,evaluateFunction) 
{ 
    //speed for each frame 
    var speed = Math.round(millisec / 100); 
    var timer = 0; 

    //determine the direction for the blending, if start and end are the same nothing happens 
    if(opacStart > opacEnd) 
    { 
        for(i = opacStart; i >= opacEnd; i--) 
        { 
            setTimeout("changeOpac(" + i + "," + opacEnd + ",'" + id + "','" + evaluateFunction + "')",(timer * speed)); 
            timer++; 
		} 
    } 
    else if(opacStart < opacEnd) 
    { 
        for(i = opacStart; i <= opacEnd; i++) 
        { 
            setTimeout("changeOpac(" + i + "," + opacEnd + ",'" + id + "','" + evaluateFunction + "')",(timer * speed)); 
            timer++; 
        } 
    } 
} 

/*********************************************************
Cambia la opacidad de un objeto
    opacity:    Nivel de opacidad deseada
    id:         Identificador del Objeto
**********************************************************/
function changeOpac(opacity,opacEnd,id,evaluateFunction)
{
	if ($(id))
	{
		$(id).style.filter	=	"alpha(opacity="+ opacity +")"
		 if (opacity== opacEnd)
        {
            eval(evaluateFunction)
        }
	}
}

/*********************************************************
Elimina el foco en un objeto
    source:    Objeto al cual se desea inahbilitar el foco
**********************************************************/
function lostFocus(source)
{
	if (source)
	{
		source.blur()
	}
}

/*********************************************************
Verifica que el modelo a utilizar W3c sea compatible a IR
**********************************************************/
function isIE()
{
    if (navigator.userAgent.toLowerCase().indexOf("msie")>0)
    {
        return true;
    }
    else
    {
        return false;
    }
}