﻿// Archivo JScript de scripts comunes a toda la aplicación

    //********************************
    //Funciones de uso General
    //********************************
    
    //Añade al objeto string el método trim(), que elimina espacios en una cadena al comienzo y al final de la misma
    String.prototype.trim = function() 
        {
	        return this.replace(/^\s+|\s+$/g, "");
        }
        
    //Añade al objeto string el método htmlEncode(), que codifica una cadena, sustituyendo:
    //  - los caracteres acentuados con las  correspondientes entidades numéricas (ejemplo: "á" -> "&#225;");
    //  - el ampersand "&" con la correspondiente entidad "&amp;"
    //  - el ">" con la correspondiente entidad "&gt;"
    //  - el "<" con la correspondiente entidad "&lt;"
    //  - el "\"" con la correspondiente entidad "&quot;"
    String.prototype.htmlEncode = function() 
        {
	        var result = '';
	        
	        if(this.length > 0)
	        {
	            for (var i = 0; i < this.length; i++)
	            {
		            var c = this.charAt(i);
		            
		            if(c == '&')
		            {
    		            //Escaping del ampersand:
		                c = '&amp;';
                    }
                    else if(c == '<')
                    {
                        //Escaping del "<":
		                c = '&lt;';
                    }
                    else if(c == '>')
                    {
                        //Escaping del ">":
		                c = '&gt;';
		            }
                    else if(c == '"')
                    {
                        //Escaping del "\"":
		                c = '&quot;';
		            }
                    else if (c < ' ' || c > '~')
		            {
			            //Escaping de los demás caracteres (á, é, í, ñ, ...):
			            c = '&#' + c.charCodeAt() + ';';
		            }
		            
		            result += c;
	            }
            }
            
	        return result;
        }

    //Esta función escribe en la propiedad "innerText" (que no se llama así en Firefox) 
    //del control 'aControl' el texto 'aText'
    function setInnerText(aControl, aText)
    {
        //Ver http://blog.coderlab.us/2006/04/18/the-textcontent-and-innertext-properties/ para detalles
        //Esta variable establece si los objetos del DOM html del explorador corriente
        //soportan la propiedad innerText (caso de IE) o la textContent (caso de Firefox/Mozilla)
        var hasInnerText = (document.getElementsByTagName("body")[0].innerText != undefined);

        if(hasInnerText)
        {
            //IE:
            aControl.innerText = aText;
        }
        else
        {
            //Firefox:
            aControl.textContent = aText;
        }
    }
    
    //Dada una Url, extrae el nombre del fichero (último segmento de la misma) 
    function getFileNameFromUrl(url)
    {
        if(url == "")
        {
            return "";
        }
            
        var urlParts = url.split("/");
        return urlParts[urlParts.length - 1];
    }
    
	//Devuelve el objeto de índice 'index' entre todos los hijos del objeto 'control'
	//que sean de tipo 'type'
	function getChildOfType(control, type, index)
	{
		var children = getChildrenOfType(control, type);

		if(index >= children.length)
			return null;

		return children[index];
	}

	//Devuelve todos los objetos hijos del objeto 'control' que sean de tipo 'type'
	//Si 'type' == "" -> devuelve todos los hojos del control, independientemente de su tipo
	
	//TODO:
	// 21-05-09. TPP. Este procedimiento sólo encontraba los controles de primer nivel del control.
	// Es necesario hacerlo recursivamente para que encuentre todos los controles dentro del control principal
	// Esta búsqueda no los controles fechadesde, fechahasta, etc del buscador desde que se han insertado
	// entre divisiones. 
	function getChildrenOfType(control, type, result)
	{
		var listChildren = control.childNodes;
		if (result==null)
		    result = new Array();

		type = type.toLowerCase();

		for(var i = 0; i < listChildren.length; i++)
		{
			if((listChildren[i].tagName) && ( ("" == type) || (listChildren[i].tagName.toLowerCase() == type) ))
			{
				result.length++;
				result[result.length - 1] = listChildren[i];
			}

            //Añadir hijos
            var control = listChildren[i];
		    result = getChildrenOfType(control, type,result);
		}

		return result;
	}
	
	//Devuelve el objeto de tipo 'type' entre todos los antepasados del objeto 'control'
	function getAncestorOfType(control, type)
	{
		var result = control;
		
		type = type.toLowerCase();
        
        while(result && result.tagName && result.tagName.toLowerCase() != type)
        {
            if(result.parentElement)
            //IE:
                result = result.parentElement;
            else
            //Firefox:
                result = result.parentNode;
        }            

		if(result && result.tagName && result.tagName.toLowerCase() == type)
		    return result;
		    
        return null;
	
	}
	
	//Permite la impresión del contenido de una página
	function doPrint(containerName,NomPagImprime)
	{
	    var printPageUrl = "/imprime" + NomPagImprime + ".htm?contenedor=" + containerName;
	    var windowOptions = "top=0, left=0, width=800, height=600, scrollbars=yes, resizable=yes, directories=no, location=no, menubar=no, status=no, titlebar=no, toolbar=no";
	    
	    window.open(printPageUrl, "ventanaImprimir", windowOptions);
    }
	
    //********************************
    //Funciones de uso General (End)
    //********************************

    //**********************************************************
    //Funciones para la Manipulación del control de vídeo
    //**********************************************************
    
    //Función (genérica) que permite invocar la reproducción de un vídeo/audio/imagen en un control
    function playMedia(playerId, titleTagId, mediaUrl, mediaTitle, objLink, cssClass, cssClassSelected)
	{
	    //alert(6);
		var player = document.getElementById(playerId);
        //Si el control tiene puesto MostrarTitle=false, tras esta instrucción
        //titleTag es undefined
		var titleTag = document.getElementById(titleTagId);

		//se pone a false el flag de autoplay del vídeo correspondiente
		//(hay que saltarse el display de la imagen):
		//eval('isAutoPlay' + playerId + ' = false;');

		//Se Actualiza el título:
		if(titleTag && mediaTitle != "") //si no es undefined Y el título es != ""
		{
		    setInnerText(titleTag, mediaTitle);
        }
  
        //se marca como seleccionado el elemento corriente en la lista:
        selectListElement(objLink, cssClass, cssClassSelected);
 
        //Se reproduce el vídeo:
		player.URL = mediaUrl;

		player.controls.play();       		
	}
	
	//Selecciona un video de la galeria de videos
	function seleccionarVideo(playerId, indiceVideo, objLink, cssClass, cssClassSelected, titleTagId, aMailTo)
	{	     
        videoSeleccionado = primerVideo + indiceVideo;
        document.getElementById(aMailTo).href = mailto[videoSeleccionado];		           
        idVideoActual = idVideo[videoSeleccionado];
        document.getElementById('span_lugarYFecha').innerHTML = lugarYFecha[videoSeleccionado];		

        playMedia(playerId, titleTagId, urlVideo[videoSeleccionado], tituloVideo[videoSeleccionado], objLink, cssClass, cssClassSelected);	    
	}
	
	//Recibe el primer video que se mostrará en la página
	//factor sera -1 o 1 e indicara si se desplazan los videos hacia delante o hacia atrás.
	function mostrarVideos(desplazamiento, factor, idControl, cssAnteriorHabilitado, cssAnteriorDeshabilitado, cssPosteriorHabilitado, cssPosteriorDeshabilitado, cssNoSeleccionado, cssSeleccionado)
	{   
		if ( (factor == 1 && masHabilitado) || (factor == -1 && menosHabilitado) ) 
		{	
	        primerVideo = primerVideo + (factor * desplazamiento);
	        var j = 0;
	        for (i = primerVideo; i < primerVideo + videosPorPagina; i++)
	        {	            
	            if (videoSeleccionado == i)
	            {
	                document.getElementById("li_" + idControl + "_" + j).className = cssSeleccionado;
	            }
	            else
	            {
	                document.getElementById("li_" + idControl + "_" + j).className = cssNoSeleccionado;
	            }
	        
	            if (i<tituloVideo.length)
	            {	            
	                document.getElementById("li_" + idControl + "_" + j).style.display = "";
	                document.getElementById("p_" + idControl + "_" + j).innerHTML = tituloVideo[i];
	                document.getElementById("p_" + idControl + "_" + j + "_duracion").innerHTML = duracion[i];
	                document.getElementById("p_" + idControl + "_" + j + "_indice").innerHTML = i+1;
	                document.getElementById("a_" + idControl + "_" + j).title = tituloVideo[i];
	                
	                //estamos en modo edición
	                if (urlPostingPadre[i] != '')
	                {
	                    document.getElementById("a_" + idControl + "_" + j).href = urlPostingPadre[i];	                
	                }
	            }	
	            else 
	            {	
	                document.getElementById("li_" + idControl + "_" + j).style.display = "none";	         
	            }        

	            j++;	        
	        }
           
	        document.getElementById("a_" + idControl + "_menos").className =  (primerVideo != 0) ? cssAnteriorHabilitado : cssAnteriorDeshabilitado;
	        document.getElementById("a_" + idControl + "_mas").className =  ((primerVideo + videosPorPagina) < tituloVideo.length) ? cssPosteriorHabilitado : cssPosteriorDeshabilitado;
          
	        masHabilitado = (primerVideo + videosPorPagina) < tituloVideo.length;
	        menosHabilitado = primerVideo != 0 ;
	    }
	}
		
    //Aplica, al <li> que contiene el objeto ojbLink la clase cssClassSelected y a todos sus hermanos
    //la clase cssClass
	function selectListElement(objLink, cssClass, cssClassSelected)
	{
	    //Se busca el padre del objeto (<li>):
	    var objLi = getAncestorOfType(objLink, "li");

	    //Se busca el abuelo del objeto (<ul>):
	    var objUl = getAncestorOfType(objLi, "ul");
	    
	    var ulChildren = getChildrenOfType(objUl, "li");
	    for(var i=0;i<ulChildren.length;i++)
	    {
	        if(ulChildren[i])
	        {
	            ulChildren[i].className = cssClass;
            }
        }
        objLi.className = cssClassSelected;
	}
	
    //**********************************************************
    //Funciones para la Manipulación del control de vídeo (End)
    //**********************************************************

    //*******************************************************
    //Funciones para la gestión de la interacción AJAX
    //*******************************************************

    //Crea una instancia del objeto XMLHttp cualquiera que sea el navegador.
    //Se ha probado en:
    //  IE6, IE7, IE8
    //  Firefox
    //  Chrome
    //  Opera
    //  Safari
    function getXmlHttp()
    {
        var obj;
        var xml = new Array();
        xml[0] = "MSXML2.XMLHTTP.5.0";
        xml[1] = "MSXML2.XMLHTTP.4.0";
        xml[2] = "MSXML2.XMLHTTP.3.0";
        xml[3] = "MSXML2.XMLHTTP";
        xml[4] = "Microsoft.XMLHTTP";
        xml[5] = "WinHttp.WinHttpRequest.5";
        xml[6] = "WinHttp.WinHttpRequest.5.1";
        
        try
        {
            obj = new XMLHttpRequest();
        } 
        catch(e) 
        {
            obj = null;
        }
        
        if(obj)
        {
            return obj;
        }

        for (var i=0; i<xml.length; i++) 
        {
            try 
            {
                obj = new ActiveXObject(xml[i]);
                break;
            } 
            catch(e) 
            {
                obj = null;
            }
        }

        return obj;
    }
    
    var nLoads = 0;
    
    //Renderiza mediante AJAX, un control WCC Genérico:
    function renderControlAjax(serverUrlWithParams, containerID)
    {
         renderControlAjax2(serverUrlWithParams, containerID, true);
    }
    
    //Renderiza mediante AJAX, un control WCC Genérico:
    function renderControlAjax2(serverUrlWithParams, containerID, encolarHistorial)
    {
   
        var xmlHttp = getXmlHttp();
        var divContainer = document.getElementById(containerID);

        if(!xmlHttp)
        {
            alert('Error en comunicación Ajax - No se ha podido crear el objeto para comunicación asíncrona.');
            return;
        }

        xmlHttp.open("GET", serverUrlWithParams, true);
        xmlHttp.onreadystatechange = function()
        {
            if (xmlHttp.readyState == 4) 
            {
                if (xmlHttp.status == 200) 
                {                    
                    divContainer.innerHTML = xmlHttp.responseText;
                } 
                else
                {
                    divContainer.innerHTML = "<b>Error de comunicación (" + xmlHttp.status + ")</b>";
                }
                
                if (encolarHistorial)
                {
                    if(typeof(dhtmlHistory) != 'undefined')
                    {  
                        //Se añade una entrada al gestor de histórico rsh:
                        nLoads++;
                        var key = "key" + nLoads;
                        var value = serverUrlWithParams + ";;" + containerID;
                        
                        //alert('encolo: \n\t' + key + '\n\t' + value);
                        dhtmlHistory.add(key, value);                        
                    }
                }
            }
        };        

        xmlHttp.send(null);
    }
       
    //Renderiza mediante AJAX, un control WCCCalendario:
    //  Server      :   AjaxServers/WCCCalendarioServer.aspx
    //  QueryString :   ?mes=<mes en formato yyyymm>
    //                  &container=<id del contenedor cliente (=ClientID del control cliente)>
    function renderCalendarioAjax(mes, containerID)
    {
        var serverUrl = "/AjaxServers/WCCCalendarioServer.aspx";
        
        mes = encodeURI(mes);
        serverUrl += "?mes=" + mes;
        serverUrl += "&container=" + containerID;
        
        renderControlAjax(serverUrl, containerID);
    }
    
    var mesActual = true;
    
    //Renderiza mediante AJAX, un control WCCCalendario:
    //  Server      :   AjaxServers/WCCCalendarioServer.aspx
    //  QueryString :   ?actualNoSiguiente=  0 o 1 indicando si es el mes actual o el siguiente
    //                  &container=<id del contenedor cliente (=ClientID del control cliente)>
    function cambiarMesCalendarioAgenda(containerID, controlAccionId, spanMesId)
    {        
        var serverUrl = "/AjaxServers/WCCCalendarioServer.aspx";       
        mesActual = !mesActual;
        var actualNoSiguiente = mesActual ? 1 : 0;
        
        serverUrl += "?actualNoSiguiente=" + actualNoSiguiente;
        serverUrl += "&container=" + containerID;
//alert(serverUrl);
        renderControlAjax(serverUrl, containerID);
        
        document.getElementById(controlAccionId).innerHTML = acciones[actualNoSiguiente];        
        document.getElementById(spanMesId).innerHTML = meses[actualNoSiguiente];     
//alert(document.getElementById('spanMes').innerHTML);
    }
    
    //Renderiza mediante AJAX, un control WCCEnlacesPaged:
    //  Server      :   AjaxServers/WCCEnlacesPagedServer.aspx
    //  QueryString :   ?source=<lugar desde donde se efectúa la llamada (sirve para determinar el tipo de llamada a hacer al servicio Web)>
    //                  &p=<página a visualizar>
    //                  &pt=<total de elementos de la consulta>    
    //                  &container=<id del contenedor cliente (=ClientID del control cliente)>
    //                  &guid=<guid de la página llamante>
    //                  &mts=<mes a mostrar, en formato yyyymm>
    //  el parámetro searchControl representa el objeto DOM que corresponde al buscador (<div>).
    function renderEnlacesPagedAjax(page, total, source, containerID, searchControl, guid, mts, emo)
    {

        var serverUrl = "/AjaxServers/WCCEnlacesPagedServer.aspx";
        
        source = encodeURI(source);
        serverUrl += "?source=" + source;
        serverUrl += "&p=" + page; 
        serverUrl += "&pt=" + total; 
        serverUrl += "&container=" + containerID;
        serverUrl += "&guid=" + guid;
        serverUrl += "&emo=" + emo;

        if(searchControl && searchControl != null && searchControl != "")
        {
            serverUrl += getSearchParams(searchControl);
        }
        
        if(mts && mts != null && mts != "")
        {
            serverUrl += "&mts=" + mts;
        }

        renderControlAjax(serverUrl, containerID);
    }
    
    //Renderiza mediante AJAX, un control WCCIniciativasTabbed:
    //  Server      :   AjaxServers/WCCIniciativasTabbedServer.aspx
    //  QueryString :   ?tab=<tab seleccionado>    
    //                  &container=<id del contenedor cliente (=ClientID del control cliente)>
    function renderIniciativasTabbedAjax(tab, containerID)
    {       
        var serverUrl = "/AjaxServers/WCCIniciativasTabbedServer.aspx";
       
        serverUrl += "?tabIniciativa=" + tab;        
        serverUrl += "&container=" + containerID;

        //alert("serverUrl = " + serverUrl + " -- containerID = " + containerID);
        renderControlAjax(serverUrl, containerID);
    }
    

    //Construye una cadena (segmento de queryString) con todos los datos de los campos del buscador:
    //la cadena empieza por '&'
    function getSearchParams(searchControlID)
    {
        var searchControl = document.getElementById(searchControlID);
        var result = "";
        
        //Todos los controles de tipo <input/>:
        var inputControls = getChildrenOfType(searchControl, "input");
        for(var i = 0; i < inputControls.length; i++)
        {
            //Se añade al querystring si no es un radiobutton o si lo es y está checked:
            if(inputControls[i].type != "radio" || inputControls[i].checked)
            {
                result += "&" + inputControls[i].name + "=" + encodeURI(inputControls[i].value);
            }
        }
    
        //Todos los controles de tipo <select/>:
        var selectControls = getChildrenOfType(searchControl, "select");
        for(var i = 0; i < selectControls.length; i++)
        {
            for(var j = 0; j < selectControls[i].options.length; j++)
            {
                if(selectControls[i].options[j].selected)
                {
                    result += "&" + selectControls[i].name + "=" +  encodeURI(selectControls[i].options[j].value);
                }
            }
        }

        //Se añade también el id (cliente) del mismo control de búsqueda:
        result += "&searchControlId=" + searchControl.id;

        return result;
    }

    //*******************************************************
    //Funciones para la gestión de la interacción AJAX (End)
    //*******************************************************
    
    //***********************************************************
    //Funciones para la gestión del formulario de búsqueda
    //***********************************************************
    
    //Limpia el formulario de búsqueda
    function clearSearchForm(searchControlID)
    {
        var searchControl = document.getElementById(searchControlID);
        
        //Todos los controles de tipo <input/>:
        var inputControls = getChildrenOfType(searchControl, "input");
        for(var i = 0; i < inputControls.length; i++)
        {
            switch(inputControls[i].type)
            {
                case "radio":
                case "checkbox":
                    inputControls[i].checked = false;
                    break;
                case "text":
                case "textarea": 
                    inputControls[i].value = "";
                    break;
                default:
                    break;
            }
        }
    
        //Todos los controles de tipo <select/>:
        var selectControls = getChildrenOfType(searchControl, "select");
        for(var i = 0; i < selectControls.length; i++)
        {
            if(selectControls[i].options && selectControls[i].options[0])
            {
                selectControls[i].options[0].selected = true;
            }
        }
    }
    
    //Controla que una fecha sea válida y en formato 'dd/mm/aaaa':
    //  strDate: Cadena que contiene la fecha a validar
    function checkDate(strDate) 
    {
        if (strDate == "")
        {
            return true;
        }
        
        var iDay, iMonth, iYear;
        var arrValues;
        arrValues = strDate.split("/");
        iDay = arrValues[0];
        iMonth = arrValues[1];
        iYear = arrValues[2];
        if ((iMonth == null) || (iYear == null))
        {
            return false;
        }
        
        if ((iDay > 31) || (iMonth > 12))
        {
          return false;
        }

        var dummyDate = new Date(iYear, iMonth - 1, iDay);

        var resultOk = !( (dummyDate.getDate() != iDay) || (dummyDate.getMonth() != iMonth - 1) || (dummyDate.getFullYear() != iYear) );
        return resultOk;
    }
        
    //Devuelve el valor seleccionado en el control "Tipo de Búsqueda":
    //  - El atributo value del radiobutton seleccionado, en caso de Radiobutton Set
    //  - El atributo value de la opción seleccionada, en caso de Combobox
    //En caso no se haya seleccionado nada, devuelve "-1"
    function getSearchTypeValue(searchTypeControl)
    {
        var control = document.forms["aspnetForm"][searchTypeControl]
        var searchTypeIsCombo = (control.tagName && control.tagName.toLowerCase() == "select");

        if(searchTypeIsCombo)
        {
            //Combobox:
            var options = control.options;
            for(var i=0;i<options.length;i++)
            {
                if(options[i].selected)
                    return options[i].value;
            }
        }
        else
        {
            //Radiobutton Set:
            var radios = control;
            for(var i=0;i<radios.length;i++)
                if(radios[i].checked)
                    return radios[i].value;
        }
        
        return "-1";
    }
    
    //Selecciona el radiobutton con id igual a radioId
    function checkRadioValue(radioId)
    {
        var radio = document.getElementById(radioId);
        radio.checked = true;
    }
    
    //Selecciona la option, del SELECT de id selectId, que tiene valor optionValue
    function selectOption(selectName, optionValue)
    {
        var options = document.forms["aspnetForm"][selectName].options;
        for(var i=0;i<options.length;i++)
        {
            if(options[i].value == optionValue)
            {
                options[i].selected = true;
                break;
            }
        }
    }
    
    //***********************************************************
    //Funciones para la gestión del formulario de búsqueda (End)
    //***********************************************************
    
    //****************************************************************************************
    //Funciones para la gestión del formulario de búsqueda en Sharepoint Portal Server
    //****************************************************************************************
    
    //Controla que los prámetros de búsqueda sean correctos:
    //  -   Si no se admite búsqueda nula, uno por lo menos entre los campos "texto de búsqueda", "fecha desde", "fecha hasta" y "lugar" debe tener valor
    //  -   Cada una de las casillas de texto de fecha, si tiene valor, debe tener contenido válido (fecha válida en formato 'dd/mm/aaaa'):
    //<Gianluca Risi>
    //NOTA:
    //  Las variables WCCBUSCADORSPS_JS_MSG_ERROR_BUSQUEDA_VACIA, WCCBUSCADORSPS_JS_MSG_ERROR_FECHA_DESDE_ERRONEA y WCCBUSCADORSPS_JS_MSG_ERROR_FECHA_HASTA_ERRONEA
    //  están definidas en una llamada a Page.ClientScript.RegisterClientScriptBlock() en el OnInit() del control WCCBuscadorSPS.
    //</Gianluca Risi>
    function checkSPSFormData(dateFrom, dateTo, searchText, externalSearchText, location, allowEmptySearch)
    {
        var dateFromControl = document.forms["aspnetForm"][dateFrom];
        var dateToControl = document.forms["aspnetForm"][dateTo];
        var seachTextControl = document.forms["aspnetForm"][searchText];
        var externalSearchTextControl = document.forms["aspnetForm"][externalSearchText];
        var locationControl = document.forms["aspnetForm"][location];
        var errorEmptySearch = false;

        if(!allowEmptySearch)
        {
            //Una búsqueda se considera vacía si no se ha specificado ningún texto de búsqueda, ninguna fecha ni un valor para el campo "lugar"
            var isSearchFormEmpty = (seachTextControl.value.trim() == "")
                             && (dateFromControl.value.trim() == "")
                             && (dateToControl.value.trim() == "")
                             && (locationControl.value.trim() == "")

            if(!externalSearchTextControl)
                errorEmptySearch = isSearchFormEmpty;
            else
                errorEmptySearch = isSearchFormEmpty && (externalSearchTextControl.value.trim() == "");
        }

        if(errorEmptySearch)
        {
            alert(WCCBUSCADORSPS_JS_MSG_ERROR_BUSQUEDA_VACIA);
            seachTextControl.focus();
            seachTextControl.select();
            return false;
        }
        
        if(dateFromControl.value != "" && !checkDate(dateFromControl.value))
        {
            alert(WCCBUSCADORSPS_JS_MSG_ERROR_FECHA_DESDE_ERRONEA);
            dateFromControl.focus();
            dateFromControl.select();
            return false;
        }
        
        if(dateToControl.value != "" && !checkDate(dateToControl.value))
        {
            alert(WCCBUSCADORSPS_JS_MSG_ERROR_FECHA_HASTA_ERRONEA);
            dateToControl.focus();
            dateToControl.select();
            return false;
        }

        return true;
    }
    
    //****************************************************************************************
    //Funciones para la gestión del formulario de búsqueda en Sharepoint Portal Server (End)
    //****************************************************************************************

    //**************************************************************************************
    //Función para la gestión de la plantilla ENANUBAN.ASPX
    //**************************************************************************************
    
	function onClickBrowse()
	{
		// Call InternalLinks.aspx with "wbc_caller=IEModal" query string to indicate that
		// we called it with IE's showModalDialog() call instead of JavaScript window.open()
		// Also, need to set NRMODE to Unpublished in order for the tree to display offline objects
		//var strUrl = document.HLink_Form.HRef.value;
		var strUrl = "";
		var strDlgRet = window.showModalDialog(IDS_FRAMEWORK_NEW_VIRTUAL_PATH + "/Dialogs/InternalLinks/InternalLinks.aspx" + "?NRMODE=Unpublished&wbc_caller=IEModal",strUrl, IDS_IEWIN_INTLINKS_FEATURES);
		if (strDlgRet != "Cancel")
		{
			document.getElementById('txtUrl').value= strDlgRet;		
		}	
	}
	
	function onClickBrowseLink(txtLinkName)
	{
		//Se reescribe la función de arriba de tipo paramétrico con respecto al objeto en el que escribir el valor devuelto
		var strUrl = "";
		var strDlgRet = window.showModalDialog(IDS_FRAMEWORK_NEW_VIRTUAL_PATH + "/Dialogs/InternalLinks/InternalLinks.aspx" + "?NRMODE=Unpublished&wbc_caller=IEModal", strUrl, IDS_IEWIN_INTLINKS_FEATURES);
		if (strDlgRet != "Cancel")
		{
			document.getElementById(txtLinkName).value = strDlgRet;
		}
	}
	
	function onClickBrowseLinkRelativeToObject(obj)
    {
        //"Sobrecarga" de la función anterior que recibe el objeto botón.
        //A partir de él, se busca la casilla de texto como el primero de los elementos "input" de tipo "button" hijos del padre del objeto pasado
        var parentObject = obj.parentElement;
        var inputControls = getChildrenOfType(parentObject, "input");
        
        for(var i=0;i<inputControls.length;i++)
        {
            if(inputControls[i].type == "text")
            {
                var textBox = inputControls[i];
                break;
            }
        }
        
        if(textBox)
        {
            onClickBrowseLink(textBox.id)
        }
    }

	//******************************************************************************************
    //Función para la gestión de la plantilla ENANUBAN.ASPX (End)
    //******************************************************************************************
    
    //Selector de foto-noticias:
    function pickAFotoNoticia(controlId)
	{
		var linkListPageUrl = "/Authoring/ItemsSelector.aspx";
		var addNewDialogFeatures = "resizable: yes; dialogWidth: 800px; dialogHeight: 800px";

		//Se pone una componente random en la url para evitar que IE saque la página de la cache:
		var url = linkListPageUrl + "?objectType=fotoNoGaleria&rnd=" + Math.random();
		
		var result = window.showModalDialog(url, "", addNewDialogFeatures);
		//window.open(url);
		if (typeof(result) != "undefined")
		{     
            var control = document.getElementById(controlId);
            control.value = result.url;
		}
	}

	//Determina el ancho del browser en función de la resolución de la pantalla
	function BrowserWidth()
	{			
		var result;
		if (self.innerHeight) //Todos excepto explorer
		{
			result = self.innerWidth;				
		}
		else if (document.documentElement && document.documentElement.clientHeight)
		{						
			result = document.documentElement.clientWidth;			
        }
		else if (document.body) // Otros exploradores
		{					
		    result = document.body.clientWidth;											
		}
        
        return result;
	}	

    //****************************************************************************************
    // TPP. Configuración servicio de Voz (Inicio)
    //****************************************************************************************
    
    function AbreVentanaVoz(url)
    {
        window.open(url, "LaMoncloaVoz", "height=200, width=200, toolbar=no, menubar=no, directories=no, scrollbars=yes, status=no");
    }

    //****************************************************************************************
    // TPP. Configuración servicio de Voz (Fin)
    //****************************************************************************************

    //****************************************************************************************
    // Funciones para mostrar y ocultar un div de forma centrado respecto a otro div
    //****************************************************************************************
         
    function mostrarDiv(div1, div2, evento)
    {
        var desplazamientoY = 10; //Define la distancia en el ejeY entre los dos DIV's
        
        var d1= document.getElementById(div1);
        var d2= document.getElementById(div2);          
        var isIE = (document.all);            
        var offsetX = (isIE) ? evento.offsetX : evento.pageX - d1.offsetLeft;
        var offsetY = (isIE) ? evento.offsetY : evento.pageY - d1.offsetTop;

        d2.style.display = "";
        d2.style.left =  evento.clientX - offsetX - (d2.offsetWidth / 2) + (d1.offsetWidth / 2) + "px";
        //- document.documentElement.scrollTop funciona bien en todos los navegadores excepto Chrome
        //- document.body.scrollTop fonciona sólo en Chrome
        d2.style.top = document.documentElement.scrollTop + document.body.scrollTop + evento.clientY - offsetY - d2.offsetHeight - desplazamientoY  + "px";     
    }
    
    function ocultarDiv(div)
    {   
        document.getElementById(div).style.display = "none";            
    }
    
    //****************************************************************************************
    // Funciones del control WCCGobierno
    //****************************************************************************************
      
    var innerRaton = ""; 

    function mostrarInformacion(divRaton, divInfoMinistro)
    {
        var d1 = document.getElementById(divRaton);
        var d2 = document.getElementById(divInfoMinistro);
        
        innerRaton = d1.innerHTML;
        d1.innerHTML = d2.innerHTML;         
    } 

    function ocultarInformacion(divRaton)
    {         
        var d1 = document.getElementById(divRaton);
        d1.innerHTML = innerRaton;  
    }
    
    function mostrarIniciativa(indice)
    {         
        for (i=0; i < numIniciativas; i++)
        {              
            if (i==indice)
            {
                document.getElementById("IniciativasContenido_" + i).className = claseSeleccionada;  
                document.getElementById("IniciativasLI_" + i).className = claseTabSeleccionado;                               
            }
            else            
            {
                document.getElementById("IniciativasContenido_" + i).className = claseNoSeleccionada ;     
                document.getElementById("IniciativasLI_" + i).className = claseTabSeleccionable ;             
            }     
        }          
    }

   var Enabled=0;
   
   function AlternarPostingGaleria(indice)
   { 
        if (Enabled==0)
        {
            var timerID;
           if(!indice || indice > 3) {
                indice = 0;
            }
            ActualizarImagenPostingGaleria(indice);
            timerID = setTimeout('AlternarPostingGaleria(' + (indice+1) + ')', 15000);
        }
   }
   
    function seleccionarPostingGaleria(indice)
    {   
        Enabled=1;
        ActualizarImagenPostingGaleria(indice);
    }
       
    function ActualizarImagenPostingGaleria(indice)
    {
        for (i=0; i < gpNumElementos; i++)
        {
            var li = document.getElementById("gpLI_" + i);   
            if (i==indice)
            {                
                li.className = gpLISeleccionado;    
               // li.innerHTML = '<span title=\'' + gpTitulo[i] + '\'>' + (i+1) + '</span>';    
                li.innerHTML = '<span title=\'' + gpTitulo[i] + '\'>' + gpPestania[i] + '</span>';    
            }
            else
            {   
                li.className = gpLINoSeleccionado;                  
                //li.innerHTML = '<a title=\'' + gpTitulo[i] + '\' href=\'#\' onmouseover="showThumbnails(\'' + gpTitulo[i] + '\', \'' + gpImgP[i] + '\' , \'galleryContenedorControlesNavegacionOver\')"; onmouseout="hideThumbnails(\'galleryContenedorControlesNavegacion\');" onclick="seleccionarPostingGaleria(' + i + ')"><span>' + (i+1) + '</span></a>';                                      
                li.innerHTML = '<a title=\'' + gpTitulo[i] + '\' href=\'#\' onmouseover="showThumbnails(\'' + gpTitulo[i] + '\', \'' + gpImgP[i] + '\' , \'galleryContenedorControlesNavegacionOver\')"; onmouseout="hideThumbnails(\'galleryContenedorControlesNavegacion\');" onclick="seleccionarPostingGaleria(' + i + ')"><span>' + gpPestania[i] + '</span></a>';                                      
            }                 
        }       
        
        hideThumbnails("galleryContenedorControlesNavegacion");

        var aux = '';
        var a ='';

        if (gpURL[indice] != '')
        {
            a = '<a title=\'' + gpTituloPpal[indice] + '\' target=\'' + gpTarget[indice] + '\' href=\'' + gpURL[indice] + '\'>';                   }               

        aux = a +  '<img alt=\'' + gpTituloPpal[indice] + '\' class=\'' + gpClaseImagen + '\'  src=\'' + gpImgG[indice] + '\'>';  
                    
        if (gpURL[indice] != '')
        {
            aux = aux + '</a>';                    
        }
        document.getElementById("gpDivIMG").innerHTML = aux ;         
        document.getElementById("gpP").innerHTML =  gpP[indice];
        document.getElementById("gpH2").innerHTML = a + gpTitulo[indice] + '</a>' ;

        var aVerMas = document.getElementById("gpAVerMas");

        if (gpURL[indice] != '')
        {
            aVerMas.className = gpClaseVerMas;
            aVerMas.href = gpURL[indice];
            aVerMas.title =  gpTooltipVerMas[indice];            
            aVerMas.target =  gpTarget[indice];                
        }
        else
        {
              aVerMas.className = 'oculto';
        }
        
    }
    
         function calculaAnnioJubilacion(edadForm, anniosCotizadosForm, minimoAnniosACotizar, edadMinimaDeJubilacion,textoAnnioJubilacionNameForm,textoAnniosCotizadosNameForm )
    {
    
        var edad = document.forms["aspnetForm"][edadForm].value;
        var anniosCotizados = document.forms["aspnetForm"][anniosCotizadosForm].value;
        edad=parseInt(edad);
        anniosCotizados=parseInt(anniosCotizados);

        
        var anniosPorCotizar = minimoAnniosACotizar - anniosCotizados;
        var  edadDeJubilacion = edad + anniosPorCotizar;
        var fecha_actual = new Date()

        if (edadDeJubilacion < edadMinimaDeJubilacion)
        {
           // Sumar a los años pendientes de cotizar aquellos que faltan hasta la edad mínima de jubilación
                anniosPorCotizar+= edadMinimaDeJubilacion - edadDeJubilacion;
        }

        annioJubilacion = fecha_actual.getFullYear() + anniosPorCotizar;
            
        document.forms["aspnetForm"]["AnnioJubilacion"].value= annioJubilacion;
        document.forms["aspnetForm"]["AnniosPorCotizar"].value = anniosPorCotizar

        return true;
    }
