//Autor: Carlos Alberto Montoya Velasquez
//       MVM y Pragma

//Ajax - funciones utilizadas en la implementacion de autollenado de caracteristicas
var xmlHttp; //Respuesta

// Arreglo que me almacena todas las ventanas abiertas
var colVentanas = new Array();
// Contador que almacena el número de las ventanas abiertas.
var cont = 0;
// Nombre de la celda donde se reemplaza el HTML de la tabla.
var idCelda;
var bandera;

/********************************************************************
 * NOMBRE		:newDate
 * DESCRIPCIÓN	:Retorna una nueva fecha con los argumentos
 * PARAMETROS	:pvstrFecha			Parte fecha
 *				 pvintHora			Parte hora de la fecha
 *				 pvintMinuto		Parte minutos de la fecha
 *				 pvintSegundo		Parte segundos de la fecha
 * RETORNO		:NaN				Si los argumentos no forman una fecha
 *				 Fecha				Nueva fecha según los argumentos
 ********************************************************************/ 
function newDate(pvstrFecha, pvintHora, pvintMinuto, pvintSegundo){
	var lintMilisegundos = Date.parse(pvstrFecha + " " + pvintHora + ":" + 
									  pvintMinuto + ":" + pvintSegundo);
	var arrDate = "";
	
	if (isNaN(lintMilisegundos))
		return lintMilisegundos;	
	
	arrDate = pvstrFecha.split("/");
	
	if(arrDate.length != 3)
		return false;
	
	// Creación de la fecha
	switch (gstrFormatoFecha){
		case "dd/mm/aaaa":
			var lobjFecha = new Date(parseInt(arrDate[2],10),
									 parseInt(arrDate[1],10)-1, parseInt(arrDate[0],10), 
									 parseInt(pvintHora,10), parseInt(pvintMinuto,10), 
									 parseInt(pvintSegundo,10));
			break;
		case "aaaa/dd/mm":
			var lobjFecha = new Date(parseInt(arrDate[0],10),
									 parseInt(arrDate[1],10)-1, parseInt(arrDate[2],10), 
									 parseInt(pvintHora,10), parseInt(pvintMinuto,10), 
									 parseInt(pvintSegundo,10));
			break;
		default:
			alert("Formato de fecha "+gstrFormatoFecha+" no reconocido!");
			return false;
	}
		
	return lobjFecha;
}

/********************************************************************
 * NOMBRE		:fValidarRangoFechas
 * DESCRIPCIÓN	:Valida si la fecha inicial es menor o igual que la final
 * PARAMETROS	:ldtmInicial		Fecha inicial de comparación
 *				 ldtmFinal			Fecha final de comparación
 * RETORNO		:true				La fecha inicial es menor o igual que la final
 *				 false				La fecha inicial es mayor que la final
 ********************************************************************/ 
function fValidarRangoFechas(pldtmInicial, pldtmFinal){
	arrdtmInicial = pldtmInicial.split("/");
	arrdtmFinal = pldtmFinal.split("/");
	
	var lobjFechaInicial = new Date(parseInt(arrdtmInicial[0],10),
									 parseInt(arrdtmInicial[1],10)-1, parseInt(arrdtmInicial[2],10), 0,0,0);
	
	var lobjFechaFinal = new Date(parseInt(arrdtmFinal[0],10), parseInt(arrdtmFinal[1],10)-1, parseInt(arrdtmFinal[2],10),0,0,0);

	if(lobjFechaInicial >= lobjFechaFinal){
    	return false;
    }
	return true;
}


/**************************************************************************
 * NOMBRE		:cerrarHijas
 * DESCRIPCI?N	:Recorre el arreglo colVentanas y las cierra todas
 * PARAMETROS	:Ninguno
 * RETORNO		:Ninguno
 * FECHA		:2006/10/18
 *************************************************************************/
function cerrarHijas()
{
    for(m=0;m<=cont;m++)
	{
		try
		{
   			colVentanas[m].close();
		}		
	    catch(e)
		{
		    
		}
	}
}



/********************************************************************
 * NOMBRE		:setFocus
 * DESCRIPCIÓN	:Asignar el foco al objeto si este no esta protegido
 * PARAMETROS	:pvobjCampo	-Objeto a asignar el foco
 * RETORNO		:ninguno
 * AUTOR		:Edwin Alberto Díaz Echeverri
 * FECHA		:2001/09/08
 ********************************************************************/ 
function setFocus(pvobjCampo){	
	if( !pvobjCampo.disabled ) {
	    try
	    {		
		    setFocusControlFechaTelerik(pvobjCampo);
		    pvobjCampo.focus();
		    if(pvobjCampo.type=="text" || pvobjCampo.type=="password" || pvobjCampo.type=="textarea")
			    pvobjCampo.select();
		    
		}
		catch(e)
		{
		}
	}
}

/********************************************************************
 * NOMBRE		:setFocusControlFechaTelerik
 * DESCRIPCIÓN	:Coloca el foco en un control calendario Telerik
 * PARAMETROS	:pvobjCampo	-Objeto al que se asignará el foco
 * RETORNO		:ninguno
 * AUTOR		:César Augusto Avendaño Múnera
 * FECHA		:2009/03/12
 ********************************************************************/ 
function setFocusControlFechaTelerik(pvobjCampo){
    var controlFechaTelerik;
    if(pvobjCampo != null){
        controlFechaTelerik=$find(pvobjCampo.id);
        if(controlFechaTelerik != null){
           if(controlFechaTelerik._dateInput != null){
                if(!controlFechaTelerik._dateInput._textBoxElement.isDisabled){
                    controlFechaTelerik._dateInput._textBoxElement.focus();
                }
            }
        }
    }
}

/********************************************************************
 * NOMBRE		:EsControlValidoParaObtenerFoco
 * DESCRIPCIÓN	:Permite descartar controles como no validos para obtener el foco
 * PARAMETROS	:pvobjCampo	-Objeto candidato a obtener el foco
 * RETORNO		:ninguno
 * AUTOR		:César Augusto Avendaño Múnera
 * FECHA		:2009/03/12
 ********************************************************************/ 
function EsControlValidoParaObtenerFoco(pvobjCampo){
    if( pvobjCampo.className != "dialoginput" && 
        pvobjCampo.className != "rdfd_"){
        if(EsControlFechaTelerik(pvobjCampo)){
           if(!EstaControlFechaTelerikDeshabilitado(pvobjCampo)){
                return true;
           } else{
                return false;
           }
        } else{
            return true;
        }
    }else{
        return false;
    }
}

/********************************************************************
 * NOMBRE		:EsControlFechaTelerik
 * DESCRIPCIÓN	:Determina si el control corresponde a una fecha telerik o no
 * PARAMETROS	:pvobjCampo	-Objeto para el que se quiere conocer si es fecha telerik
 * RETORNO		:ninguno
 * AUTOR		:César Augusto Avendaño Múnera
 * FECHA		:2009/03/12
 ********************************************************************/ 
function EsControlFechaTelerik(pvobjCampo){
    var controlFechaTelerik;
    controlFechaTelerik=$find(pvobjCampo.id);
    if(controlFechaTelerik != null){
       if(controlFechaTelerik._dateInput != null){
         return true;
       } else{
         return false;
       }
    }else{
        return false;
    }
}

/********************************************************************
 * NOMBRE		:EstaControlFechaTelerikDeshabilitado
 * DESCRIPCIÓN	:Determina si el control de fecha telerik se encuentra deshabilitado o no
 * PARAMETROS	:pvobjCampo	- Corresponde al control de fecha telerik del que se quiere saber si está deshabilitado o no
 * RETORNO		:ninguno
 * AUTOR		:César Augusto Avendaño Múnera
 * FECHA		:2009/03/12
 ********************************************************************/ 
function EstaControlFechaTelerikDeshabilitado(pvobjCampo){
    var controlFechaTelerik;
    controlFechaTelerik=$find(pvobjCampo.id);
    if(controlFechaTelerik != null){
       if(controlFechaTelerik._dateInput != null){
            return controlFechaTelerik._dateInput._textBoxElement.isDisabled;
        }
    }
}

function setFocusForm(probjFrm) {
	if (document.images) {
		for (i=0;i<probjFrm.length;i++) {
			var lobjCampo=probjFrm.elements[i];
			if ((lobjCampo.type=="text" || lobjCampo.type=="password" || lobjCampo.type=="textarea" || lobjCampo.type=="select-one") && ( (!lobjCampo.disabled) && (!lobjCampo.visible) )  && EsControlValidoParaObtenerFoco(lobjCampo)) {
				setFocus(lobjCampo);
				return;
         	}
      	}
   	}
}

function setFocusForm2(probjFrm, probjSpam) {
	if (document.images) {
        var ObjSpan = document.getElementById("PanelGrupo"+probjSpam);	
		for (i=0;i<ObjSpan.all.length;i++) {
			var lobjCampo=ObjSpan.all[i];
			if ((lobjCampo.type=="text" || lobjCampo.type=="password" || lobjCampo.type=="textarea")|| (lobjCampo.type=="" )&& ((!lobjCampo.disabled) && (!lobjCampo.visible))) {
				setFocus(lobjCampo);
				return;
         	}
      	}
   	}
}

/**************************************************************************
 * NOMBRE		:fInicio
 * DESCRIPCI?N	:Realiza el posicionamiento en la página según las anclas pasada como parámetro.
 * PARAMETROS	:Ancla, nombre del ancla HTML
 * RETORNO		:Ninguno
 * FECHA		:2006/10/18
 *************************************************************************/
function fInicio(ancla)
{
     document.location.href="#"+ancla;
}


/**************************************************************************
 * NOMBRE		:trim
 * DESCRIPCI?N	:Hace Trim de a una cadena
 * PARAMETROS	:pvstrTexto    la cadena de caracteres
 * RETORNO		:Ninguno
 * FECHA		:
 *************************************************************************/
function trim(pvstrTexto)
{
	lintPos1 = 0;
	lintPos2 = pvstrTexto.length-1;
	for (lintI=0; lintI<pvstrTexto.length; lintI++){
		if (pvstrTexto.charAt(lintI) == ' ') lintPos1 = lintPos1 + 1;
		else break;
	}
	if (lintPos1 != (lintPos2+1))
		for (lintI=pvstrTexto.length-1; lintI>0; lintI--)	{
			if (pvstrTexto.charAt(lintI) == ' ') lintPos2 = lintPos2 - 1
			else break;
		}
	return pvstrTexto.substring(lintPos1,lintPos2+1);
}

function fNoEscribir(objeto,mensaje) {  
    objeto.value= objeto.value;  
	alert(mensaje);
}

/**
 * Retorna la lista de todos los parametros que se
 * se enviaran a la solicitud ajax como xml
 * <CAMPOS><CAMPO id="Campo_1_1_1">valor del campo</CAMPO>...</CAMPOS>
 * 
 **/
function construirParametros(prefijoCampos){
    var objfrm = document.forms[0];
    var params = "<?xml version='1.0' encoding='ISO-8859-1'?><CAMPOS>";
    
    if (objfrm != null)
     { 
		for (var i=0;i<objfrm.elements.length;i++){
			var e = objfrm.elements[i].id;
			if( e.indexOf(prefijoCampos) == 0 ){
			  params = params+"<CAMPO id='"+e+"'>"+escape(objfrm.elements[i].value)+"</CAMPO>";
			} 						
		}
	 }		 
	 
	 params = params + "</CAMPOS>";
	 
	 return params;
}

/**********************************************************************************
* NOMBRE		:fInactivarElementosTipoBoton
* DESCRIPCION	:Inactiva todos los elementos de tipo submit dentro de una pagina
* PARAMETROS	:Ninguno
* AUTOR			:Ariel Mauricio Bernal
* FECHA			:Junio 9 de 2006
/*********************************************************************************/	
function fInactivarElementosTipoBoton(){

    for (var j=0;j<document.forms.length;j++)
	{
	    for (var i=0;i<document.forms[j].elements.length;i++)
    	{
			if(document.forms[j].elements[i].type=="submit" || document.forms[j].elements[i].type=="button")
			{
	    		document.forms[j].elements[i].disabled=true;
		
			}    
    	}
    } 	
} 
 
 /**********************************************************************************
* NOMBRE		:fActivaElementosTipoBoton
* DESCRIPCION	:Activar todos los elementos de tipo submit dentro de una pagina
* PARAMETROS	:Ninguno
* AUTOR			:Ariel Mauricio Bernal
* FECHA			:Junio 9 de 2006
/*********************************************************************************/	
function fActivaElementosTipoBoton(){

    for (var j=0;j<document.forms.length;j++)
	{
	    for (var i=0;i<document.forms[j].elements.length;i++)
    	{
			if(document.forms[j].elements[i].type=="submit" || document.forms[j].elements[i].type=="button")
			{
	    		document.forms[j].elements[i].disabled=false;
		
			}    
     	}
     }
}

function fValidarLongitud(prObj, longitud){
	if(prObj.value.length >= longitud-1 ){
		prObj.value = prObj.value.substring(0,longitud-1);
	}
}

/**************************************************************************
 * NOMBRE		:isUrl
 * DESCRIPCION	:Valida que el valor sea una url           
 * PARAMETROS	:hiddenId
 * RETORNO		:Ninguno
 * FECHA		:
 *************************************************************************/
function isUrl(s) {
	var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
	return regexp.test(s);
}

/**
  * @author Carlos Montoya: carlos.montoya@mvm.com.co
  * @version 1.0
  * @see 
  * #########################################################
 **/	
function openNewWindow(pageURL, width , height)
 {
        var newWindow = "newWindow"+(new Date).getTime();
        createHelpWindow(pageURL, newWindow, 'no', 'no', 'yes', 'yes', width, height, 'center', 'middle', 'yes');	    
 }

/**
  * @author Carlos Montoya: carlos.montoya@mvm.com.co
  * @version 1.0
  * @see 
  * #########################################################
   **/	
function openNewWindowByName(name, pageURL, width , height, pantallaModal)
 {     
           createHelpWindow(pageURL, name, 'no', 'no', 'yes', 'yes', width, height, 'center', 'middle', 'yes', pantallaModal);
 } 

/**
  * @author Carlos Montoya: carlos.montoya@mvm.com.co
  * @version 1.0
  * @see 
  * #########################################################
  */
function openNewWindowByNameRegExp(name, pageURL, width , height,regExp)
 {     
        if (validarRegExp(regExp, pageURL)==true)
        {
            createHelpWindow(pageURL, name, 'no', 'no', 'yes', 'yes', width, height, 'center', 'middle', 'yes');	    
        }
        else
        {
            return false;
        }
 } 

// Function:
//    createHelpWindow
//
// Description:
//    Function for creating a popup window for on-line help.
//
// Parameters:
//    pageURL    - the URL to open
//    title      - the unique page window name
//    toolbar    - yes/no whether or not to show the toolbar
//    addressbar - yes/no whether or not to show the URL address bar
//    resizable  - yes/no whether or not to make the window resizable
//    scrolls
//    width      - window width
//    height     - window height
//    align      - left/center/right, default is center
//    valign     - top/middle/bottom, default is middle
//    focus      - yes/no whether or not to attempt to pop the window on top
//    pantallaModal - Indica si la pantalla se debe presentar modal o no
function createHelpWindow(pageURL, title, toolbar, addressbar, resizable, scrollbars, width, height, align, valign, focus, pantallaModal)
{
    var decoration = 30;
    var x = (screen.width - width) / 2;
    var y = (screen.height - decoration - height) / 2;

    var hacerPantallaModal;
	if (pantallaModal == undefined){
        hacerPantallaModal = true;
    } else{
    	hacerPantallaModal = pantallaModal;
    }
        
    if ( align == 'left' )
        x = 0
    else if ( align == 'right' )
        x = screen.width - (decoration/2) - width;

    if ( valign == 'top' )
        y = 0
    else if ( valign == 'bottom' )
        y = screen.height - decoration - height;

    var popupFeatures = "dependent=no,toolbar=" + toolbar + ",directories=no,location=" + addressbar + ",menubar=no,resizable=" + resizable + ",scrollbars=" + scrollbars + ",status=no,width=" + width + ",height=" + height + ",top=" + y + ",left=" + x;
   
    if(hacerPantallaModal){
        popupFeatures=popupFeatures +  ",modal,resizable=no";
    }
      
    try
    {        
        var w = window.open(pageURL, title, popupFeatures);
        
        colVentanas[cont] = w;    
        cont++;
        
        if ( focus == 'yes' ){ 
            w.focus();
        }
        
        return(w);
    }
    catch(e)
    {
    }
} 

// Función:
//      CerrarVentana
// Descripción:
//      Gestiona el cerrado de una ventana Popup, de forma simple, haciendo
//      una confirmación previa    
function CerrarVentana(){
    if(confirm('Esta seguro de cerrar esta ventana?')){
        window.close();
    }
}

// Función:
//      CerrarVentanaPopupMensajeConfirmacion
// Descripción:
//      Gestiona el cerrado de una ventana Popup, de forma simple, haciendo
//      una confirmación previa. En este caso, el mensaje de confirmación es 
//      el recibido como parámetro    
function CerrarVentanaPopupMensajeConfirmacion(mensaje){
    if(confirm(mensaje)){
        window.close();
        return true;
    }else{
        return false;
    }
}



// Función:
//      CerrarVentanaPopup
// Descripción:
//      Gestiona el cerrado de una página Popup, para colocar un valor o dato, en un
//      control específico, de la página llamadora o padre
// Parámetros:
//      identificadorControl - Identificador del control donde se colocará el dato
//                             de la Popup
//      dato                 - dato o valor de la Popup que se colocará en el campo
//                             de la página llamadora
function CerrarVentanaPopup(identificadorControl, dato){
    var element;
    var idElemento;
    window.onerror=MostrarErrorPopup;
    element = window.opener.document.getElementById(identificadorControl); 
    if(element==null){
        idElemento = BuscarId(identificadorControl,true);
        element = window.opener.document.getElementById(idElemento);
    } 
    element.value =unescape(dato); 
    window.close();
}

// Función:
//      CerrarVentanaPopupExtendida
// Descripción:
//      Gestiona el cerrado de una página Popup, para colocar el código y la descripción
//      , recibidos como parámetros, en un par de controles específicos, de la 
//      página llamadora o padre
// Parámetros:
//      identificadorControlCodigo - Identificador del control donde se colocará el código
//      codigo                     - Código que se colocará en el campo apropiado de la página 
//                                   llamadora
//      identificadorControlDescripcion - Identificador del control donde se colocará la descripción
//      descripcion                     - Descripción que se colocará en el campo apropiado de la página 
//                                   llamadora
function CerrarVentanaPopupExtendida(identificadorControlCodigo, codigo, identificadorControlDescripcion, descripcion){
    var element;
    var idElemento;
    window.onerror=MostrarErrorPopup;
    element = window.opener.document.getElementById(identificadorControlCodigo); 
    if(element==null){
        idElemento = BuscarId(identificadorControlCodigo,true);
        element = window.opener.document.getElementById(idElemento);
    } 
    element.value =unescape(codigo); 
    
    element = window.opener.document.getElementById(identificadorControlDescripcion); 
    if(element==null){
        idElemento = BuscarId(identificadorControlDescripcion,true);
        element = window.opener.document.getElementById(idElemento);
    } 
    element.value =unescape(descripcion); 
        
    window.close();
}



// Función:
//      MostrarErrorPopup
// Descripción:
//      Muestra el mensaje que produce el Browser, cuando se presenta un error
//      al cerrar una ventana popup. 
// Parámetros:
//      mensaje - Es el mensaje de error a ser mostrado
function MostrarErrorPopup(mensaje){    
    window.close();
    return true; 
}

// Función:
//      CerrarVentanaPopup
// Descripción:
//      Gestiona el cerrado de una página Popup, para colocar un valor o dato, en un
//      control específico, de la página llamadora o padre
// Parámetros:
//      identificadorControl - Identificador del control donde se colocará el dato
//                             de la Popup
//      dato                 - dato o valor de la Popup que se colocará en el campo
//                             de la página llamadora
function CerrarVentanaGrid(identificadorControl){
    window.onerror=MostrarErrorPopup;
    var element = window.opener.document.getElementById(identificadorControl);    
    Click(element);    
    window.close();
}

//Funcion para hacer clic sobre un enlace.
function Click(element){
    if (navigator.userAgent.indexOf("Firefox") != -1) {
        element.onclick();
    } else {
        element.click();
    }
}

// Función:
//      Left
// Descripción:
//	Obtiene los primeros n caracteres de un string dado
// Parámetros:
//      cadenaCaracteres - Es la cadena de caracteres de la que se quieren obtener los 
//                         primeros n caracteres.
//      numeroCaracteres - Es el número de caracteres que se quieren obtener de una 
//                         cadena de carcateres dada.
function Left(cadenaCaracteres, numeroCaracteres){
	if (numeroCaracteres <= 0)
	    return "";
	else if (numeroCaracteres > String(cadenaCaracteres).length)
	    return cadenaCaracteres;
	else
	    return String(cadenaCaracteres).substring(0,numeroCaracteres);
}
// Función:
//      Right
// Descripción:
//	Obtiene los últimos n caracteres de un string dado
// Parámetros:
//      cadenaCaracteres - Es la cadena de caracteres de la que se quieren obtener los 
//                         últimos n caracteres.
//      numeroCaracteres - Es el número de caracteres que se quieren obtener de una 
//                         cadena de carcateres dada.
function Right(cadenaCaracteres, numeroCaracteres){
    if (numeroCaracteres <= 0)
       return "";
    else if (numeroCaracteres > String(cadenaCaracteres).length)
       return cadenaCaracteres;
    else {
       var iLen = String(cadenaCaracteres).length;
       return String(cadenaCaracteres).substring(iLen, iLen - numeroCaracteres);
    }
}
// Función:
//      MostrarToolTip
// Descripción:
//	Gestiona el mostrado de una página en una Popup, con la ayuda o descripción 
//  del campo
// Parámetros:
//      pIdCampo - Es el identificador del campo, del cual se desea ver su ayuda
//function MostrarToolTip(pIdCampo){
//    window.open('../PaginaToolTip.aspx?ID='+ pIdCampo,'mywindow','width=400,height=200');
//}
// Función:
//      setCur
// Descripción:
//	Gestiona el cambio del cursor cuando el usuario coloca el mouse sobre el nombre 
//  de un campo
// Parámetros:
//      pIdIco - Es el cursor que se desea asignar cuando el usuario coloca
//  

//             el cursor sobre el nombre de un campo
function setCur(pIdIco){
    document.body.style.cursor = pIdIco;
}

// Función:
//      MostrarMensaje
// Descripción:
//	Muestra el mensaje recibido como parámetro, en el cliente
// Parámetros:
//      mensaje - Es el mensaje a ser mostrado al cliente
function MostrarMensaje(mensaje){
    alert(mensaje);
}

//Esta funcion permite abrir la url dado en win en un
//popup de pantalla completa
function popupWindow(win){
	
	var winWidth = 400; 
    var winheight = 400; 

	if (screen){ 
       winWidth = screen.width;
       winHeight = screen.height;
    }
    
    var newWindow = openNewWindowByName("Principal", win, winWidth , winHeight)  
}


function Cover(bottom, top, ignoreSize) {    
    var location = Sys.UI.DomElement.getLocation(bottom);
    top.style.position = 'absolute';
    top.style.top = location.y + 'px';
    top.style.left = location.x + 'px';
    if (!ignoreSize) {
        top.style.height = bottom.offsetHeight + 'px';
        top.style.width = bottom.offsetWidth + 'px';
    }
}

function CoverLink(top, idCampoToolTip) {            
    var hiddenLabelCampo = $get( BuscarId(idCampoToolTip) );    
    var labelCampo = $get( BuscarId(hiddenLabelCampo.value) );   
    var location = Sys.UI.DomElement.getLocation(labelCampo);
    top.style.position = 'absolute';
    top.style.top = location.y + 'px';
    top.style.left = location.x + 'px';               
    top.style.height = labelCampo.offsetHeight + 'px';
    top.style.width = labelCampo.offsetWidth + 'px';             
}


function fOnload(restaAlto, restaAncho){
	try{
		document.getElementById("divCont").style.height = this.screen.height - 360;
		document.getElementById("divCont").style.width = this.screen.width - 15;
	}
	catch(e){};
}

function CustomValidationSummaryOnSubmit(idSummary) {
        
        var summary, sums = 0, s;
        summary = document.getElementById(idSummary);
        summary.style.display = "none";
         
        if (!Page_IsValid) {
        alert("Entra");
                s = "";

                if (typeof(summary.headertext) == "string") {
                    s += summary.headertext + "<BR>";
                }
                
                span = document.createElement("SPAN");
                span.innerHTML = s;
                s = span.innerText;
                alert(s);            
        }
    }

// Función:
//      ColocarTextoEnTagHTML
// Descripción:
//	Coloca el texto recibido como parámetro, en un tag HTML, cuyo nombre es recibido como
//  parámetro. El tag debe aceptar la propiedad innerHTML
// Parámetros:
//      nombreTag - Es el nombre del Tag
//      texto   - Es el texto a colocar en el Tag
function ColocarTextoEnTagHTML(nombreTag,texto){
    document.getElementById(nombreTag).innerHTML = texto;
}

function tigra_tables (
		str_tableid, // table id (req.)
		num_header_offset, // how many rows to skip before applying effects at the begining (opt.)
		num_footer_offset, // how many rows to skip at the bottom of the table (opt.)
		str_odd_color, // background color for odd rows (opt.)
		str_even_color, // background color for even rows (opt.)
		str_mover_color, // background color for rows with mouse over (opt.)
		str_onclick_color // background color for marked rows (opt.)
	) {

	 // skip non DOM browsers
	if (typeof(document.all) != 'object') return;

	// validate required parameters
	if (!str_tableid) return alert ("No table(s) ID specified in parameters");
	var obj_tables = (document.all ? document.all[str_tableid] : document.getElementById(str_tableid));
	if (!obj_tables) return alert ("Can't find table(s) with specified ID (" + str_tableid + ")");

	// set defaults for optional parameters
	var col_config = [];
	col_config.header_offset = (num_header_offset ? num_header_offset : 0);
	col_config.footer_offset = (num_footer_offset ? num_footer_offset : 0);
	col_config.odd_color = (str_odd_color ? str_odd_color : '#ffffff');
	col_config.even_color = (str_even_color ? str_even_color : '#dbeaf5');
	col_config.mover_color = (str_mover_color ? str_mover_color : '#6699cc');
	col_config.onclick_color = (str_onclick_color ? str_onclick_color : '#4C7DAB');
	
	// init multiple tables with same ID
	if (obj_tables.length)
		for (var i = 0; i < obj_tables.length; i++)
			tt_init_table(obj_tables[i], col_config);
	// init single table
	else
		tt_init_table(obj_tables, col_config);
}

function tt_init_table (obj_table, col_config) {
	var col_lconfig = [],
		col_trs = obj_table.rows;
	for (var i = col_config.header_offset; i < col_trs.length - col_config.footer_offset; i++) {
		col_trs[i].config = col_config;
		col_trs[i].lconfig = col_lconfig;
		col_trs[i].set_color = tt_set_color;
		col_trs[i].onmouseover = tt_mover; 
		col_trs[i].onmouseout = tt_mout;
		col_trs[i].onmousedown = tt_onclick;
		col_trs[i].order = (i - col_config.header_offset) % 2;
		col_trs[i].onmouseout();
	}
}
function tt_set_color(str_color) {
	this.style.backgroundColor = str_color;
}

// event handlers
function tt_mover () {
	if (this.lconfig.clicked != this)
		this.set_color(this.config.mover_color);
}
function tt_mout () {
	if (this.lconfig.clicked != this)
		this.set_color(this.order ? this.config.odd_color : this.config.even_color);
}
function tt_onclick () {
	if (this.lconfig.clicked == this) {
		this.lconfig.clicked = null;
		this.onmouseover();
	}
	else {
		var last_clicked = this.lconfig.clicked;
		this.lconfig.clicked = this;
		if (last_clicked) last_clicked.onmouseout();
		this.set_color(this.config.onclick_color);
	}
}  

// Función:
//      BuscarId
// Descripción:
//      Busca la referencia de un objeto que tenga como parte de su ID, el
//      identificador recibido como parámetro. Esto porque cuando un objeto
//      está en un contenedor (placeholder) de .Net se renderiza con otro ID
// Parámetros:
//      idObjeto - Identificador del objeto
//      popup     - Indicador de si la búsqueda se hará sobre el opener de una Popup o no
function BuscarId(idObjeto, openerPopup){
   
    var forma;
    var contador;
    var elemento;
    var idElemento;

    if(!openerPopup){
        forma = document.forms[0];
    } else {
        forma = window.opener.document.forms[0];
    }

    return BuscarIdObjeto(forma, idObjeto, openerPopup)
}

// Función:
//      BuscarIdObjeto
// Descripción:
//      Busca la referencia de un objeto que tenga como parte de su ID, el
//      identificador recibido como parámetro. Esto porque cuando un objeto
//      está en un contenedor (placeholder) de .Net se renderiza con otro ID
// Parámetros:
//      parent - Objeto padre donde se buscara 
//      idObjeto - Identificador del objeto
//      popup     - Indicador de si la búsqueda se hará sobre el opener de una Popup o no
function BuscarIdObjeto(parent, idObjeto, openerPopup){   
    var contador;
    var elemento;
    var idElemento;
    var idResultado;


    if (parent != null)
     {  
       
        if(parent.id != null && parent.id != ''){            
            idElemento = Right(parent.id, idObjeto.length);		        
        }	    
	    if(idElemento == idObjeto){	        
			 return parent.id;
	    }				 
	    else{		    
		    for (contador=0;contador<parent.childNodes.length;contador++){
			    elemento = parent.childNodes[contador];	
			    idResultado = BuscarIdObjeto(elemento,idObjeto, openerPopup)					
			    if(idResultado != null){			        
			        return idResultado;
			    }			    
		    }
		}
	 }	
	 
	 return null;
	
}

 // Función:
    //      BuscarIds
    // Descripción:
    //      Busca la referencia de todos los objetos que tengan como parte de su ID, el
    //      identificador recibido como parámetro. Esto porque cuando un objeto
    //      está en un contenedor (placeholder) de .Net se renderiza con otro ID
    // Parámetros:
    //      idObjeto - Identificador del objeto
    //      popup    - Indicador de si la búsqueda se hará sobre el opener de una Popup o no
    //      numObjetos  - Número de objetos que tienen como parte de su nombre, el identificador
    //                    asociado al primer parámetro
    function BuscarIds(idObjeto, openerPopup, numObjetos) {

        var forma;
        var contador;
        var elemento;
        var idElemento;

        if (!openerPopup) {
            forma = document.forms[0];
        } else {
            forma = window.opener.document.forms[0];
        }

        return BuscarIdsObjetos(forma, idObjeto, openerPopup, numObjetos)
    }

    //contiene la lista concatenada de objetos que tienen como parte de su nombre, un
    //texto determinado
    var idsObjetos;
    // Función:
    //      BuscarIdsObjetos
    // Descripción:
    //      Busca la referencia de todos los objetos que tengan como parte de su ID, el
    //      identificador recibido como parámetro. Esto porque cuando un objeto
    //      está en un contenedor (placeholder) de .Net se renderiza con otro ID
    // Parámetros:
    //      parent - Objeto padre donde se buscara 
    //      idObjeto - Identificador del objeto
    //      popup     - Indicador de si la búsqueda se hará sobre el opener de una Popup o no
    //      numObjetos  - Número de objetos que tienen como parte de su nombre, el identificador
    //                    asociado al segundo parámetro    
    function BuscarIdsObjetos(parent, idObjeto, openerPopup, numObjetos) {
        var contador;
        var elemento;
        var idElemento;
        var idResultado;


        if (parent != null) {

            if (parent.id != null && parent.id != '') {
                idElemento = Right(parent.id, idObjeto.length);
            }
            if (idElemento == idObjeto) {
                return parent.id;
            }
            else {
                for (contador = 0; contador < parent.childNodes.length; contador++) {
                    elemento = parent.childNodes[contador];
                    idResultado = BuscarIdsObjetos(elemento, idObjeto, openerPopup, numObjetos)
                    if (idResultado != null) {
                        if (idsObjetos == null) {
                            idsObjetos = "";
                        } 
                        if (idsObjetos.split(";").length >= numObjetos + 1) {
                            return idsObjetos;
                        } else {
                            idsObjetos = idsObjetos + idResultado + ";";
                        }
                    }
                }
                if (idsObjetos != null) {
                    if (idsObjetos.split(";").length >= numObjetos + 1) {
                        return idsObjetos;
                    }
                }
            }
        }

        return null;

    }
/*
 Función:
      AnalizarTextoConPatron
 Descripción:
      Función que valida que un texto dado cumple con un patrón definido
 Parámetros:
      texto - Texto que se va a validar
      patron - Patrón que se debe cumplir     
*/
function AnalizarTextoConPatron(texto, patron){
    var filtro  = new RegExp(patron);
    if (filtro.test(texto)) return true;
    else return false;
}

/* 
 Función:
      ValidarInyeccionCodigo
 Descripción:
     Función usada por un CustoValidator asociado a los AFichasControl que contienen
     TextBox, para validar que no se ingresen Tags, como información
 Parámetros:
      sender - Es el objeto donde se genera el evento, en este caso el CustomValidator
      args - Son los argumentos de llamado a la función
*/      
function ValidarInyeccionCodigo(sender, args){
    if(AnalizarTextoConPatron(args.Value,'<(.|\n)+?>')){
	    args.IsValid = false;
    }
    else {
	    args.IsValid = true;
    }
}

/*
 Función:
      ResaltarSeleccionGridViewListado
 Descripción:
      Para las GridView que muestran un listado de información, asociado a datos
      maestros,hace un efecto de indicación de la fila seleccionada, sobre la GridView
 Parámetros:
      gridView - Es la GridView a la cual se quiere asociar el efecto de selección
*/
function ResaltarSeleccionGridViewListado(gridView){
   var idGrid = BuscarId(gridView,false);           
   if(idGrid != null && document.getElementById( idGrid ) != null ) {
        tigra_tables(idGrid,1,0,'#ECECEC','#ffffff','#ffcc66','#DBEAF5');
   }
}

/*
 Función:
      SubrayarCampo
 Descripción:
     En las formas de la aplicación, gestiona el subrayado de un campo, para indicar al
     usuario que hay ayuda y este la pueda leer
 Parámetros:
      nombreCampo - Nombre del campo que se va a subrayar
*/
function SubrayarCampo(nombreCampo){
    var idElemento;
    idElemento = BuscarId(nombreCampo,false);
    element = document.getElementById(idElemento);
    element.style.textDecoration = 'underline';
    element.style.cursor='hand';
}

/*
 Función:
      DessubrayarCampo
 Descripción:
     En las formas de la aplicación, gestiona el dessubrayado de un campo, una vez el
     usuario deja estar sobre él
 Parámetros:
      nombreCampo - Nombre del campo que se va a dessubrayar
*/
function DessubrayarCampo(nombreCampo){
    var idElemento;
    idElemento = BuscarId(nombreCampo,false);
    element = document.getElementById(idElemento);
    element.style.textDecoration = 'none';
}


/********************************************************************
 * NOMBRE		:newDate
 * DESCRIPCIÓN	:Retorna una nueva fecha con los argumentos
 * PARAMETROS	:pvstrFecha			Parte fecha
 *				 pvintHora			Parte hora de la fecha
 *				 pvintMinuto		Parte minutos de la fecha
 *				 pvintSegundo		Parte segundos de la fecha
 * RETORNO		:NaN				Si los argumentos no forman una fecha
 *				 Fecha				Nueva fecha según los argumentos
 ********************************************************************/ 
function fValidarFecha(source, pvstrFecha){
	arrDate = pvstrFecha.Value.split("/");
	if (validateDate(pvstrFecha))
	{
	if(arrDate.length != 3)
	{
	    pvstrFecha.IsValid = false;
	}
	else
	{
	    try
	    {
                var thisDate = new Date();
                thisDate.setYear(parseInt(arrDate[0],10));
                thisDate.setMonth(parseInt(arrDate[1],10)-1);
                thisDate.setDate(parseInt(arrDate[2],10));
                
                if ( thisDate.getMonth() != parseInt(arrDate[1],10)-1 ) {
                    pvstrFecha.IsValid = false;
                }
                 else {
                    pvstrFecha.IsValid = true;
                 }          
	    }
	    catch(e)
	    {
	   	     pvstrFecha.IsValid = false;
	    }
	}
	
	}
	else
	{
	pvstrFecha.IsValid = false;
	}
}
function validateDate(fld) {
    var RegExPattern = /^(19|20)?(\d{2})\/(0?[1-9]|1[0-2])\/(0?[1-9]|[12]\d|3[01])$/;
    if ((fld.Value.match(RegExPattern)) && (fld.Value!='')) {
        return true; 
    } else {
        return false;
    } 
}
function fPrueba()
{
    alert (document.getElementById(BuscarId("ctl00_ContentPlaceHolder2_PopapParComercial_bPopup", false)));
    document.getElementById(BuscarId("ctl00_ContentPlaceHolder2_PopapParComercial_bPopup", false)).click();
}


/********************************************************************
 * NOMBRE		:fAbrirVentanaPopup
 * DESCRIPCIÓN	:Abre una ventana en modo modal
 * PARAMETROS	:urlformulario  Página a abrir
 * Ej: btnTiempos.OnClientClick = "fAbrirVentanaPopup('RegistrarTiempoAnalista.aspx', 'width=650,height=650'); return false; ";

 *
 * Desarrollado Por	    : Diego Alvarez Zuluaga
 * Fecha de Creación	: 2007-05-25
 ********************************************************************/ 
function fAbrirVentanaPopup(urlformulario, sizeParam, maximizada, nombreVentana)
{
    var obj=new Date();  
    var size = 'width=750,height=630';         
    
    //Ajuste para obligar, que, la pantalla popup cargue en el centro de la pantalla del monitor.
    var width;
    var height;
    var contador1;
    var contador2;  
    var arrDimensiones;
    var arrValoresDimensiones;
    var left;
    var top;
    var redimencionar='no';
    
    if (sizeParam == undefined)
    {
        sizeParam = size;
    }
        
    if(maximizada== 'maximizada')
    {
        redimencionar='yes';
        sizeParam='width='+screen.width+',height='+screen.height;                 
    }        
    

    arrDimensiones=sizeParam.split(",");            	
	for(contador1=0;contador1<arrDimensiones.length;contador1++)
    {
		arrValoresDimensiones = arrDimensiones[contador1].split("=")
		for(contador2=0;contador2<arrValoresDimensiones.length;contador2++)
        {
			if(contador1 == 0){
				width = arrValoresDimensiones[1];
			} else{
				height = arrValoresDimensiones[1];
			}
        }	
    }         	
    left = (screen.width - width) / 2;
    top = (screen.height - height) / 2;          
    
    var nombre = 'urlformulario'+obj.getTime();
    if(nombreVentana != undefined)
    {
        nombre = nombreVentana;
    }
	try
    {
        
      ventana = window.open(urlformulario, nombre, "modal,toolbar=false,location=false,directories=false,status=false,menubar=false,scrollbars=yes,resizable="+redimencionar+",left=" + left +",top=" + top +","+sizeParam);
    
	  colVentanas[cont] = ventana;    
      cont++;        
      ventana.focus();
      
      return(ventana);
    }
    catch(e)
    {
    }                  
} 

/********************************************************************
 * NOMBRE		: fDevolverValor
 * DESCRIPCIÓN	: Devuelve un valor en la ventana que abrio el popup
 * PARAMETROS	: campo  Objeto donde se debe colocar el valor
 *
 * Desarrollado Por	    : Diego Alvarez Zuluaga
 * Fecha de Creación	: 2007-05-25
 ********************************************************************/ 
function fDevolverValor(campo, valor, postback)
{
   window.opener.document.getElementById(campo).value = valor;   
   
   
   if (postback != undefined && postback == 'true')
   {
		window.opener.__doPostBack(campo,'');
		window.opener.focus();
	}		
	return false;
}


/********************************************************************
 * NOMBRE		: DevolverValor
 * DESCRIPCIÓN	: Devuelve un valor en la ventana que abrio el popup
 * PARAMETROS	: campo  Objeto donde se debe colocar el valor
 *
 * Desarrollado Por	    : Diego Alvarez Zuluaga
 * Fecha de Creación	: 2007-06-05
 ********************************************************************/ 
function fMensajeConfirmacion(mensaje)
{
   return confirm(mensaje);
}


/********************************************************************
 * NOMBRE		: MostrarMensajeValidacion
 * DESCRIPCIÓN	: Muestra un mensaje de validación e impide la acción del Submit retornando falso
 * PARAMETROS	: mensaje  El mensaje de validación que se muestra
 *
 * Desarrollado Por	    : César Augusto Avendaño Múnera
 * Fecha de Creación	: 2007-06-02
 ********************************************************************/ 
function MostrarMensajeValidacion(mensaje)
{
    alert(mensaje);
    return false;
}


// Función:
//      ColocarDatoEnPaginaOpener
// Descripción:
//      Gestiona la colocación de un valor o dato, en un
//      control específico, de la página llamadora o padre
// Parámetros:
//      identificadorControl - Identificador del control donde se colocará el dato
//                             de la Popup
//      dato                 - dato o valor de la Popup que se colocará en el campo
//                             de la página llamadora
function ColocarDatoEnPaginaOpener(identificadorControl, dato){
    var element;
    var idElemento;
    window.onerror=MostrarErrorPopup;
    element = window.opener.document.getElementById(identificadorControl); 
    if(element==null){
        idElemento = BuscarId(identificadorControl,true);
        element = window.opener.document.getElementById(idElemento);
    } 
    element.value =unescape(dato); 
}


/********************************************************************
     * NOMBRE		: Mostrar/ocultar botones con timeout
     * PARAMETROS	: 2 objetos, 1 que se muestra y el otro se oculta
     *
     * Desarrollado Por	    : Diego Alvarez Zuluaga
     * Fecha de Creación	: 2007-06-14
     ********************************************************************/ 
     function MostrarOcultarBoton(id1, id2)
     {         
        var objBotonMostrar = document.getElementById(id1);
        var objBotonOcultar = document.getElementById(id2);                                        
        
        if(objBotonMostrar != null)
            objBotonMostrar.style.visibility='hidden';
            
        if(objBotonOcultar != null)
            objBotonOcultar.style.visibility='hidden';
}

/********************************************************************
     * NOMBRE		: Establece cuales son los codigo seleccionados para el 
     *              : borrado de registros
     * PARAMETROS	: check sobbre el cual se hace la accion y el id del Hidden donde se guardan los codigos
     *
     * Desarrollado Por	    : Diego Alvarez Zuluaga
     * Fecha de Creación	: 2007-06-14
     ********************************************************************/ 
function fClickCheck(objthis,strIdHidden,strValor)
{
    var hidSeleccionadas=document.getElementById(strIdHidden)                        
    var ic;            
    if(objthis.checked)
    {
        if(hidSeleccionadas.value.indexOf(strValor)<0)
        {
            if(hidSeleccionadas.value.length==0)
            {
                hidSeleccionadas.value=strValor;
            }else{
                hidSeleccionadas.value=hidSeleccionadas.value+","+strValor;
            }                
        }
    }else{
        if(hidSeleccionadas.value.indexOf(strValor)>=0)
        {
            var arrCodigos=hidSeleccionadas.value.split(",");    
            hidSeleccionadas.value="";
            for(ic=0;ic<arrCodigos.length;ic++)
            {
                if(arrCodigos[ic]!=strValor)
                {
                    if(hidSeleccionadas.value!="")
                    {
                        hidSeleccionadas.value=hidSeleccionadas.value+","
                    }
                    hidSeleccionadas.value=hidSeleccionadas.value+arrCodigos[ic];
                }                    
            }
        }                        
    }                
}

/*funciones para el manejo de errores dentro del master page*/
function CerrarExitoServidor()
{                                
    document.getElementById('<%=imgPanErrorCerrar.ClientID%>').click();                                                 
    MostrarControlesErrorServidor();
}

function MostrarControlesExito()
{    
    var tagElements = document.getElementsByTagName('SELECT');
    for (var k = 0 ; k < tagElements.length; k++) {
        tagElements[k].style.visibility = 'visible';                    
    }    
}            

function CerrarExito()
{
    document.getElementById('<%=imgPanExitoCerrar.ClientID%>').click(); 
    MostrarControlesExito();
}

function CerrarError()
{
    document.getElementById('<%=panelErrores.ClientID%>').style.visibility = 'hidden';    
                                                                
}
function CargarCombo(componente,xmlResultado)
{
    componente.clearOptions();
    var xml =new Sys.Net.XMLDOM(xmlResultado);                                    
    var index;
    var codigo;
    var texto;
    for(index=0; index< xml.childNodes[0].childNodes.length; index++){            
        codigo=xml.childNodes[0].childNodes[index].childNodes[0].childNodes[0].nodeValue;
        texto=xml.childNodes[0].childNodes[index].childNodes[1].childNodes[0].nodeValue;        
        componente.addOption(codigo,texto);
    }                                  
}

function MarcarChecks(objthis, campos) {
    var listaCampos = campos.split(",");
    var index;
    var estado = objthis.checked;
    for (index = 0; index < listaCampos.length; index++) {
        document.getElementById(listaCampos[index]).checked = estado;
    }
}