
/*************************************************************************************************/
/*   File: /AVComun/r01gHorizontalMenuVA/scripts/r01gHorizontalMenu.js*/
/*************************************************************************************************/

// SpryMenuBar.js - version 0.5 - Spry Pre-Release 1.5
//
// Copyright (c) 2006. Adobe Systems Incorporated.
// All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
//   * Redistributions of source code must retain the above copyright notice,
//     this list of conditions and the following disclaimer.
//   * Redistributions in binary form must reproduce the above copyright notice,
//     this list of conditions and the following disclaimer in the documentation
//     and/or other materials provided with the distribution.
//   * Neither the name of Adobe Systems Incorporated nor the names of its
//     contributors may be used to endorse or promote products derived from this
//     software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.

/*******************************************************************************

 SpryMenuBar.js
 This file handles the JavaScript for Spry Menu Bar.  You should have no need
 to edit this file.  Some highlights of the MenuBar object is that timers are
 used to keep submenus from showing up until the user has hovered over the parent
 menu item for some time, as well as a timer for when they leave a submenu to keep
 showing that submenu until the timer fires.

 *******************************************************************************/
var Spry;
if(!Spry){Spry = {};}
if(!Spry.Widget){Spry.Widget = {};}

// Constructor for Menu Bar
// element should be an ID of an unordered list (<ul> tag)
// preloadImage1 and preloadImage2 are images for the rollover state of a menu
Spry.Widget.MenuBar = function(element, opts){this.init(element, opts);};

Spry.Widget.MenuBar.prototype.init = function(element, opts){
	this.element = this.getElement(element);

	// represents the current (sub)menu we are operating on
	this.currMenu = null;

	var isie = navigator.userAgent.toString().match(/MSIE.([0-9\.]*)/i);
	if(typeof document.getElementById == 'undefined' || (navigator.vendor == 'Apple Computer, Inc.' && typeof window.XMLHttpRequest == 'undefined') || (isie && typeof document.uniqueID == 'undefined')){
		// bail on older unsupported browsers
		return;
	}		
	if(isie){
		this.isie = isie;
		this.version = parseFloat(isie[1]);
	}else{
		this.isie = false;
	}
	// Fix IE6 CSS images flicker
	if (isie && this.version < 7){
		try {
			document.execCommand("BackgroundImageCache", false, true);
		} catch(err) {}
	}
	// load hover images now
	if(opts){
		for(var k in opts){
			var rollover = new Image;
			rollover.src = opts[k];
		}
	}

	if(this.element){
		this.currMenu = this.element;
		var items = this.element.getElementsByTagName('li');
		for(var i=0; i<items.length; i++){
			this.initialize(items[i], element, isie);
			if(isie){
				this.addClassName(items[i], "r01gMenuBarItemIE");
				items[i].style.position = "static";
			}
		}
		if(isie){
			if(this.hasClassName(this.element, "r01gMenuBarVertical")){
				this.element.style.position = "relative";
			}
			var linkitems = this.element.getElementsByTagName('a');
			for(var i=0; i<linkitems.length; i++){
				linkitems[i].style.position = "relative";
			}
		}		 
	}				
};
Spry.Widget.MenuBar.prototype.getElement = function(ele){
	if (ele && typeof ele == "string")
		return document.getElementById(ele);
	return ele;
};

Spry.Widget.MenuBar.prototype.hasClassName = function(ele, className){
	if (!ele || !className || !ele.className || ele.className.search(new RegExp("\\b" + className + "\\b")) == -1){
		return false;
	}
	return true;
};

Spry.Widget.MenuBar.prototype.addClassName = function(ele, className){
	if (!ele || !className || this.hasClassName(ele, className)) return;
	ele.className += (ele.className ? " " : "") + className;	
};

Spry.Widget.MenuBar.prototype.removeClassName = function(ele, className){
	if (!ele || !className || !this.hasClassName(ele, className)) return;
	ele.className = ele.className.replace(new RegExp("\\s*\\b" + className + "\\b", "g"), "");
};

// addEventListener for Menu Bar
// attach an event to a tag without creating obtrusive HTML code
Spry.Widget.MenuBar.prototype.addEventListener = function(element, eventType, handler, capture){
	try {
		if (element.addEventListener){
			element.addEventListener(eventType, handler, capture);
		}else if (element.attachEvent){
			element.attachEvent('on' + eventType, handler);
		}
	} catch (e) {}
};

// createIframeLayer for Menu Bar
// creates an IFRAME underneath a menu so that it will show above form controls and ActiveX
Spry.Widget.MenuBar.prototype.createIframeLayer = function(menu){
	var layer = document.createElement('iframe');
	layer.tabIndex = '-1';
	layer.src = 'javascript:""';
	layer.frameBorder = '0';
	layer.scrolling = 'no';
	menu.parentNode.appendChild(layer);
	
	layer.style.left = menu.offsetLeft + 'px';
	layer.style.top = menu.offsetTop + 'px';
	layer.style.width = menu.offsetWidth + 'px';
	layer.style.height = menu.offsetHeight + 'px';
};

// removeIframeLayer for Menu Bar
// removes an IFRAME underneath a menu to reveal any form controls and ActiveX
Spry.Widget.MenuBar.prototype.removeIframeLayer =  function(menu){
	var layers = menu.parentNode.getElementsByTagName('iframe');
	while(layers.length > 0){
		layers[0].parentNode.removeChild(layers[0]);
	}
};

// clearMenus for Menu Bar
// root is the top level unordered list (<ul> tag)
Spry.Widget.MenuBar.prototype.clearMenus = function(root){
	var menus = root.getElementsByTagName('ul');	
	for(var i=0; i<menus.length; i++){
		this.hideSubmenu(menus[i]);
	}
	this.removeClassName(this.element, "r01gMenuBarActive");	
};

// bubbledTextEvent for Menu Bar
// identify bubbled up text events in Safari so we can ignore them
Spry.Widget.MenuBar.prototype.bubbledTextEvent = function(){
	return (navigator.vendor == 'Apple Computer, Inc.' && (event.target == event.relatedTarget.parentNode || (event.eventPhase == 3 && event.target.parentNode == event.relatedTarget)));
};

// showSubmenu for Menu Bar
// set the proper CSS class on this menu to show it
Spry.Widget.MenuBar.prototype.showSubmenu = function(menu){	
	if(this.currMenu){
		this.clearMenus(this.currMenu);
		this.currMenu = null;
	}		
	if (menu.className == "Level_2 Right") {
		if (document.all) { 		
			menu.style.marginLeft = (menu.offsetWidth-menu.parentElement.offsetWidth)*-1 + "px";
		} else { 				
			menu.style.marginLeft = (menu.offsetWidth-menu.offsetParent.offsetWidth)*-1 + "px";
		}
	} else if (menu.className == "Level_2 Left") {
		menu.style.marginLeft = "0";
	}
	if (menu.className == "Level_3 Right") {	
		menu.style.marginLeft = (menu.offsetWidth)*-1 + "px";
	}
	if (menu.className == "Level_3 Left") {
		menu.style.marginLeft = "100%";
	}		
	if(menu){		
		this.addClassName(menu, "r01gMenuBarSubmenuVisible");		
		if(typeof document.all != 'undefined' && typeof window.opera == 'undefined' && navigator.vendor != 'KDE'){		
			if(!this.hasClassName(this.element, "r01gMenuBarHorizontal") || menu.parentNode.parentNode != this.element){
				menu.style.top = menu.parentNode.offsetTop + 'px';
			}
		}
		if(this.isie && this.version < 7){
			this.createIframeLayer(menu);
		}
	}	
	this.addClassName(this.element, "r01gMenuBarActive");
};

// hideSubmenu for Menu Bar
// remove the proper CSS class on this menu to hide it
Spry.Widget.MenuBar.prototype.hideSubmenu = function(menu){
	if(menu){
		this.removeClassName(menu, "r01gMenuBarSubmenuVisible");
		if(typeof document.all != 'undefined' && typeof window.opera == 'undefined' && navigator.vendor != 'KDE'){
			menu.style.top = '';
			menu.style.left = '';
		}
		this.removeIframeLayer(menu);
	}
};

// initialize for Menu Bar
// create event listeners for the Menu Bar widget so we can properly
// show and hide submenus
Spry.Widget.MenuBar.prototype.initialize = function(listitem, element, isie){
	var opentime, closetime;
	var link = listitem.getElementsByTagName('a')[0];
	var submenus = listitem.getElementsByTagName('ul');
	var menu = (submenus.length > 0 ? submenus[0] : null);
	var hasSubMenu = false;
	if(menu){
		this.addClassName(link, "r01gMenuBarItemSubmenu");
		hasSubMenu = true;
	}
	if(!isie){
		// define a simple function that comes standard in IE to determine
		// if a node is within another node
		listitem.contains = function(testNode){
			// this refers to the list item
			if(testNode == null) return false;
			if(testNode == this) return true;
			else return this.contains(testNode.parentNode);
		};
	}	
	// need to save this for scope further down
	var self = this;
};

function r01gHorizontalMenuDespliega(ulID, objMenuName) {	

	var menu = document.getElementById(ulID);
	objMenu = eval(objMenuName);
	if(objMenu.bubbledTextEvent()){
		// ignore bubbled text events
		return;
	}
	clearTimeout(objMenu.closetime);	
	// show menu highlighting
	if(menu && !objMenu.hasClassName(menu, "r01gMenuBarSubmenuVisible")){		
		objMenu.showSubmenu(menu);
		r01gOcultarRestoDeMenus(objMenu, menu);		
	} else {
		objMenu.hideSubmenu(menu);
	}			
}

function r01gHorizontalMenuDespliegaInit(ulID, objMenuName, avName) {	
	var ulIndexID = ulID;
	var liAux = null;	
	var arrUl = new Array();
	var cont = 0;
		
	while (ulIndexID != ("UL_PRINCIPAL_" + avName) && cont <= 4) {					
		arrUl[arrUl.length] = ulIndexID;
		liAux = document.getElementById(ulIndexID).parentNode;				
		ulIndexID = liAux.parentNode.id; 		
		cont++;
	} 
		
	for (var i = arrUl.length;i>=0;i--) {	
		var menu = document.getElementById(arrUl[i]);
		objMenu = eval(objMenuName);
		if(objMenu.bubbledTextEvent()){
			// ignore bubbled text events
			return;
		}				
		clearTimeout(objMenu.closetime);	
		// show menu highlighting
		if(menu && !objMenu.hasClassName(menu, "r01gMenuBarSubmenuVisible")){		
			objMenu.showSubmenu(menu);		
			r01gOcultarRestoDeMenus(objMenu, menu);		
		} else {
			objMenu.hideSubmenu(menu);
		}			
	}	
}

/* ===== Funciones javascript para el plegado de las opciones del menú al cargar la página*/
function r01gOcultarSubmenusHorizontales(idContenedor) {	
	var objContenedor = document.getElementById(idContenedor);
	var divs = objContenedor.getElementsByTagName("div");
	var menu = divs[1]; // El primero(0) es el título y el siguiente(1) ya es el objeto menú.
	var bucle = menu.childNodes[0];
	var li;
	r01gOcultarSubmenuHorizontal(menu);	
}

function r01gOcultarSubmenuHorizontal(ul) {
	var ulChildren = ul.getElementsByTagName("ul");
	for (var i=0;i<ulChildren.length;i++) {
		ulChildren[i].className = ulChildren[i].className.replace(new RegExp("\\s*\\b" + "r01gMenuBarSubmenuVisible" + "\\b", "g"), "");
	}
}

function r01gOcultarRestoDeMenus(objMenu, ulMenu) {
	var arrUlIdNoOcultar = new Array();
	var aux = ulMenu;
	var idPadre = "UL_PRINCIPAL_";
	var elemPadre;
	var elemId = aux.id;
	arrUlIdNoOcultar[0] = elemId;
	var i = 1;
	while(elemId.substring(0,idPadre.length) != idPadre) {
		elemId = aux.parentNode.id;
		if (aux.parentNode.tagName != "LI" 
			&& aux.parentNode.id.substring(0,idPadre.length) != idPadre) {
			arrUlIdNoOcultar[i] = elemId;			
		}	
		aux = aux.parentNode;
		elemPadre = aux;
	}
	var todosUls = elemPadre.getElementsByTagName("ul");	
	var ocultar = true;	
	for (i=0;i<todosUls.length;i++) {
		for (var j=0;j<arrUlIdNoOcultar.length;j++) {
			if (todosUls[i].id == arrUlIdNoOcultar[j]) {
				ocultar = false; 
				break;
			}
		}		
		if (ocultar && todosUls[i] && objMenu.hasClassName(todosUls[i], "r01gMenuBarSubmenuVisible")) {			
			objMenu.hideSubmenu(todosUls[i]);
		}	
		ocultar = true;	
	}			
}

/*************************************************************************************************/
/*   File: /AV/r01gHorizontalMenuVA/scripts/r33-hmBarradeopcionesdeEuskadinetEjie.js*/
/*************************************************************************************************/

/* Despliegue por defecto de una opcion de menu */
var js_ul_menu_hmBarradeopcionesdeEuskadinetEjie = null;
function r01gHorizontalMenuOnLoad_hmBarradeopcionesdeEuskadinetEjie() {
 try {
     document.getElementById("UL_PRINCIPAL_hmBarradeopcionesdeEuskadinetEjie").style.display="block";
     js_ul_menu_hmBarradeopcionesdeEuskadinetEjie = new Spry.Widget.MenuBar("UL_PRINCIPAL_hmBarradeopcionesdeEuskadinetEjie", {});
     r01gOcultarSubmenusHorizontales("r01gMenuhmBarradeopcionesdeEuskadinetEjie" , js_ul_menu_hmBarradeopcionesdeEuskadinetEjie);
 } catch (e) {}
}

if (window.addEventListener) {
    window.addEventListener('load',r01gHorizontalMenuOnLoad_hmBarradeopcionesdeEuskadinetEjie,false);
} else if (window.attachEvent) {
    window.attachEvent('onload',r01gHorizontalMenuOnLoad_hmBarradeopcionesdeEuskadinetEjie);
}


/*************************************************************************************************/
/*   File: /AV/r01gHorizontalMenuVA/scripts/r33-hmBarradeherramientasdeEuskadinetEjie.js*/
/*************************************************************************************************/

/* Despliegue por defecto de una opcion de menu */
var js_ul_menu_hmBarradeherramientasdeEuskadinetEjie = null;
function r01gHorizontalMenuOnLoad_hmBarradeherramientasdeEuskadinetEjie() {
 try {
     document.getElementById("UL_PRINCIPAL_hmBarradeherramientasdeEuskadinetEjie").style.display="block";
     js_ul_menu_hmBarradeherramientasdeEuskadinetEjie = new Spry.Widget.MenuBar("UL_PRINCIPAL_hmBarradeherramientasdeEuskadinetEjie", {});
     r01gOcultarSubmenusHorizontales("r01gMenuhmBarradeherramientasdeEuskadinetEjie" , js_ul_menu_hmBarradeherramientasdeEuskadinetEjie);
 } catch (e) {}
}

if (window.addEventListener) {
    window.addEventListener('load',r01gHorizontalMenuOnLoad_hmBarradeherramientasdeEuskadinetEjie,false);
} else if (window.attachEvent) {
    window.attachEvent('onload',r01gHorizontalMenuOnLoad_hmBarradeherramientasdeEuskadinetEjie);
}


/*************************************************************************************************/
/*   File: /AVComun/r01gCommonSearchVA/scripts/r01gCommonSearchCalendar.js*/
/*************************************************************************************************/

//============================================================================\\
//                              CALENDARIO                                    \\
//============================================================================\\
/** 
 * Funcion de utilidad que se encarga de crear un calendario
 * Para cambiar la presentacion del calendario, tocar este metodo!!!!
 */
function showCalendar(anchorName,idioma,newInputField,showYearNav,day,month,year) {
	// Ver si el calendario estaba ya creado recorriendo el array de calendarios
	var calendar = null;
	for (var i=0; i<window.calendarInstances.length; i++) {
		if (window.calendarInstances[i].oInputField == newInputField) calendar = window.calendarInstances[i];
	}
	// Anular el calendario para partir siempre  de 0 asi cada vez que se entra se inicia
	// con la fecha que recibe y no con la primera que recogio.
	if (calendar != null) calendar = null;
	
    if (calendar == null) {
    	calendar = new Calendar("r01fpopUpWindowCalendar");		// Calendario en una capa
//    	calendar = new Calendar();					// Calendario en una nueva ventana
    	calendar.setInputField(newInputField); 
    	calendar.setLanguaje(idioma);
    	calendar.oCalendarWindow.isMoveable = true;
    	calendar.oCalendarWindow.appearance.title = "";
    		// Cambiar para permitir una capa movible o no
    	if (showYearNav != null) calendar.isShowYearNavigation = showYearNav;
    }
    if (arguments.length == 7) calendar.setDate(year,month,day);
    calendar.showCalendar(anchorName);
    return calendar;
}
function showCalendar2(anchorName,idioma,newInputField,showYearNav,day,month,year) {
	// Ver si el calendario estaba ya creado recorriendo el array de calendarios
	var calendar = null;
	for (var i=0; i<window.calendarInstances.length; i++) {
		if (window.calendarInstances[i].oInputField == newInputField) calendar = window.calendarInstances[i];
	}
	// Anular el calendario para partir siempre  de 0 asi cada vez que se entra se inicia
	// con la fecha que recibe y no con la primera que recogio.
	if (calendar != null) calendar = null;
	
    if (calendar == null) {
    	calendar = new Calendar();					// Calendario en una nueva ventana
    	calendar.setInputField(newInputField); 
    	calendar.setLanguaje(idioma);    	
    	if (showYearNav != null) calendar.isShowYearNavigation = showYearNav;
    }
    if (arguments.length == 7) calendar.setDate(year,month,day);
	calendar.oCalendarWindow.autoHideEnabled = true; 
    calendar.showCalendar(anchorName);
    return calendar;
}

//___________________________________________________________________________\\
// Propiedades de presentacion del calendario (son variables estaticas) que se guardan 
// en el contexto de la ventana
if (!window.calendarInitialized) {
	window.calendarInstances = new Array();		// Variable global que es un array que contiene los objetos calendar de la ventana
		
	window.calendarMonthNames = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
	window.calendarDayHeaders = new Array("S","M","T","W","T","F","S");
	window.calendarTodayString = "Today";
	window.calendarWeekStartDay = 0;
	window.calendarTitle = "Calendar";
	window.calendarIsShowYearNavigation = false;
	window.calendarInitialized = true;
}






//___________________________________________________________________________\\
// CONSTRUCTOR del objeto calendario
// @param: day
// @param: month
// @param: year
function Calendar() {
	// Mapeo de metodos
		this.setDate = Calendar_setDate;
		this.setInputField = Calendar_setInputField;
		this.setMonthNames = Calendar_setMonthNames;
		this.setDayHeaders = Calendar_setDayHeaders;
		this.setTodayLiteral = Calendar_setTodayLiteral;
		this.setWeekStartDay = Calendar_setWeekStartDay;
		this.setTitle = Calendar_setTitle;
		this.setLanguaje = Calendar_setLanguaje;
		this.showCalendar = Calendar_showCalendar;
		this.hideCalendar = Calendar_hideCalendar;
		this.composeHTML = Calendar_composeHTML;

	// Miembros
		var date;				// La fecha que guarda el calendario
		var index;				// Indice del calendario en el array global de calendarios window.calendarInstances
		var oCalendarWindow;	// Ventana con el calendario
		var oInputField;		// Objeto INPUT al que se va a devolver la fecha
		var returnFunction;		// Funcion a llamar al devolver
		
	// Inicializacion
		// Meter el objeto actual en un array global
		this.index = window.calendarInstances.length;
		window.calendarInstances[this.index] = this;
		// Inicializar la fecha que se muestra en el calendario
		this.date = new Date();		// Por defecto se establece la fecha de hoy
		this.language="es"; //por defecto idioma castellano
		// Ver si el calendario se muestra en un div o en una ventana
		if (arguments.length > 0) {		// Se abre en un div cuyo nombre se pasa como argumento
			this.oCalendarWindow = new PopUpWindow(arguments[0]);
			this.oCalendarWindow.isMoveable = true;
		} else {						// Se abre en una nueva ventana
			this.oCalendarWindow = new PopUpWindow();
		}
		// Establecer las opciones del popUp
		this.oCalendarWindow.setSize(150,165);
		this.oCalendarWindow.offsetX = -152;
		this.oCalendarWindow.offsetY = 25;
		this.oCalendarWindow.autoHide();	
		// Funcion a la que se llama para devolver el resultado
		this.returnFunction = "tmpReturnFunction";
		// Input field asociado al calendario
		this.oInputField = null;
}
//___________________________________________________________________________\\
/**
 * Funcion que establece la fecha del calendario a partir del anio, mes y dia
 */
function Calendar_setDate(newYear,newMonth,newDay) {
	var now = new Date();
	if (arguments.length > 2 && newDay != null) { 
		var day = arguments[2];
	} else {
		var day = now.getDate();
	}
	if (arguments.length > 1 && newMonth != null) {
		var month = arguments[1];
	} else {
		var month = now.getMonth()+1;
	}
	if (arguments.length > 0 && newYear != null) {
		var year = arguments[0];
	} else {
		var year = now.getFullYear();
	}
}
//___________________________________________________________________________\\
/**
 * Funcion que avisa cuando el calendario esta mal configurado y no se ha
 * especificado una funcion de retorno
 */
function Calendar_tmpReturnFunction() {
	alert('calendar: Utiliza al funcion setReturnFunction() para especificar a que funcion llamar cuando se pulse en un dia del calendario!');
}
//___________________________________________________________________________\\
/**
 * Establece la funcion a llamar cuando se pulsa en un dia
 */
function Calendar_setInputField(inputField) {
	if (inputField.tagName != "INPUT") {
		alert("calendar: El calendario solo se puede asociar a controles input y esto es un " + inputField.tagName);
		return;
	}
	this.oInputField = inputField;
}
//___________________________________________________________________________\\
/**
 * Sobreescribe los nombres de los meses con los que se pasan en el array
 */
function Calendar_setMonthNames() {
	for (var i=0; i<arguments.length; i++) {
		window.calendarMonthNames[i] = arguments[i];
	}
}
//___________________________________________________________________________\\
/**
 * Sobreescribe los nombres de los dias con los que se pasan en el array
 */
function Calendar_setDayHeaders() {
	for (var i=0; i<arguments.length; i++) {
		window.calendarDayHeaders[i] = arguments[i];
	}
}
//___________________________________________________________________________\\
/**
 * Sobreescribe el literal para el texto "hoy" que aparece al pie del calendario
 */
function Calendar_setTodayLiteral(newTodayLiteral) {
	window.calendarTodayString = newTodayLiteral
}

//___________________________________________________________________________\\
/**
 * Establece el dia de la semana en el cual empieza la semana
 * (Para paises distintos de US la semana empieza en lunes (dia 1)
 * por lo que hay que llamar a esta funcion con el argumento 1
 */
function Calendar_setWeekStartDay(day) {
	window.calendarWeekStartDay = day;
}
//___________________________________________________________________________\\
/**
 * Sobreescribe el literal para el titulo de la ventana
 */
function Calendar_setTitle(newTitle) {
	window.calendarTitle = newTitle
}

//___________________________________________________________________________\\
/**
 * Establece el idioma (ingles, euskera o castellano)
 */
function Calendar_setLanguaje(idioma) {
	if (idioma == "es") {
		window.calendarMonthNames = new Array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
		window.calendarDayHeaders = new Array("D","L","M","X","J","V","S");
		window.calendarWeekStartDay = 1;
		window.calendarTodayString = "Hoy";
		window.calendarTitle = "Calendario";
	} else if (idioma == "eu") {
		window.calendarMonthNames = new Array("Urtarrila","Otsaila","Martxoa","Apirila","Maiatza","Ekaina","Uztaila","Abuztua","Iraila","Urria","Azaroa","Abendua");
		window.calendarDayHeaders = new Array("I","A","A","A","O","O","L");
		window.calendarWeekStartDay = 1;
		window.calendarTodayString = "Gaur";
		window.calendarTitle = "Calendario";
	} else if (idioma == "en") {
		window.calendarMonthNames = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
		window.calendarDayHeaders = new Array("S","M","T","W","T","F","S");
		window.calendarWeekStartDay = 0;
		window.calendarTodayString = "Today";
		window.calendarTitle = "Calendar";
	}
	this.language=idioma;
	this.oCalendarWindow.title = window.calendarTitle;
}
//___________________________________________________________________________\\
/**
 * Crear un nuevo calendario al lado del anchor <a> cuyo nombre se pasa
 */
function Calendar_showCalendar(anchorName) {
 	this.oCalendarWindow.setContents( this.composeHTML() );	// Ojo!! invertir el orden (anio/mes/dia)
	this.oCalendarWindow.showPopUp(anchorName);
}
//___________________________________________________________________________\\
/**
 * Esconde el objeto calendario
 */
function Calendar_hideCalendar() {
	this.oCalendarWindow.hidePopUp();
}
//___________________________________________________________________________\\		
// Funcion que refresca el contenido del calendario
function refreshCalendar(calendarIndex,newDate) {
	// A partir del indice del calendario obtener el objeto desde el
	// array global que contiene las instancias de calendario activas
	var thisCalendar = window.calendarInstances[calendarIndex];
	if (thisCalendar == null) thisCalendar = window.opener.calendarInstances[calendarIndex];
	// Refrescar el contenido del popUp
	thisCalendar.date = newDate;	// Actualizar la fecha...
	thisCalendar.oCalendarWindow.setContents( thisCalendar.composeHTML() );
	thisCalendar.oCalendarWindow.populate();
}

//___________________________________________________________________________\\
function Calendar_composeHTML() {
	var day = this.date.getDate();
	var month = this.date.getMonth() + 1;
	var year = this.date.getFullYear();
	var daysinmonth = new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
	if ( ( (year%4 == 0)&&(year%100 != 0) ) || (year%400 == 0) ) daysinmonth[2] = 29;	// Bisiesto (leap)
	var current_month = new Date(year,month-1,1);
	var display_year = year;
	var display_month = month;
	var display_date = 1;
	var weekday = current_month.getDay();
	var offset = 0;
	if (weekday >= window.calendarWeekStartDay) {
		offset = weekday - window.calendarWeekStartDay;
	} else {
		offset = 7-window.calendarWeekStartDay + weekday;
	}
	if (offset > 0) {
		display_month--;
		if (display_month < 1) {
			display_month = 12;
			display_year--;
		}
		display_date = daysinmonth[display_month]-offset+1;
	}
	var next_month = month;
	var next_month_year = year;
	if (next_month > 12) {
 		next_month = 1;
		next_month_year++;
	}
	var last_month = month-2;
	var last_month_year = year;
	if (last_month < 0) {
		last_month = 11;
		last_month_year--;
	}
	// TABLA 1: CABECERA DE NAVEGACION POR MESES Y ANIOS
	var sHtml = '';
	if (this.oCalendarWindow.type == "WINDOW") {
		// ATENCION A LA FORMA DE PASAR LOS JS!!!!!!!
		sHtml += "<link rel=StyleSheet href='/comun/styles/r01fCalendar.css' type='text/css'>\n";
		sHtml += "<script language='JavaScript'>\n";
		sHtml += 	"var script1 = document.createElement('script');\n"
		sHtml += 	"script1.type = 'text/javascript';\n";
		sHtml += 	"script1.src = '/comun/scripts/r01fCalendar.js';\n";
		sHtml += 	"document.getElementsByTagName('head')[0].appendChild(script1);\n";
		sHtml += 	"var script2 = document.createElement('script');\n"
		sHtml += 	"script2.type = 'text/javascript';\n";
		sHtml += 	"script2.src = '/comun/scripts/r01fScripts.js';\n";
		sHtml += 	"document.getElementsByTagName('head')[0].appendChild(script2);\n";
		sHtml += 	"var script3 = document.createElement('script');\n"
		sHtml += 	"script3.type = 'text/javascript';\n";
		sHtml += 	"script3.src = '/comun/scripts/r01fPopUp.js';\n";
		sHtml += 	"document.getElementsByTagName('head')[0].appendChild(script3);\n";
		sHtml += "</script>\n";
	}
	sHtml += "<table width='100%' cellspacing='0' cellpadding='0'>";
	sHtml += 	"<tr>";
	if (window.calendarIsShowYearNavigation) {
		sHtml +=	"<td class='r01fcalendarNavigator' width='144' align='center' valign='middle'>";
		sHtml +=		"<b><a class='r01fcalendar' href='JavaScript:refreshCalendar( " + this.index + ",new Date(" + last_month_year + "," + last_month + "," + day + ") )'>&lt;</a></b>";
		sHtml +=		"&nbsp;&nbsp;" + window.calendarMonthNames[month-1] + "&nbsp;&nbsp;";
		sHtml += 		"<b><a class='r01fcalendar' href='JavaScript:refreshCalendar( " + this.index + ",new Date(" + next_month_year + "," + next_month + "," + day + ") )'>&gt;</a></b>";
		sHtml +=		"&nbsp;&nbsp;&nbsp;&nbsp";
		sHtml +=		"<b><a class='r01fcalendar' href='JavaScript:refreshCalendar( " + this.index + ",new Date(" + (year-1) + "," + month + "," + day + ") )'>&lt;</a></b>";
		sHtml +=		"&nbsp;&nbsp;" + year + "&nbsp;&nbsp;";
		sHtml +=		"<b><a class='r01fcalendar' href='JavaScript:refreshCalendar( " + this.index + ",new Date(" + (year+1) + "," + month + "," + day + ") )'>&gt;</a></b>";
		sHtml +=	"</td>";
	} else {		
		sHtml +=	"<td class='r01fcalendarNavigator' width='22' align='center' valign='middle'>";
		sHtml +=		"<b><a class='r01fcalendar' href='JavaScript:refreshCalendar( " + this.index + ",new Date(" + last_month_year + "," + last_month + "," + day + ") )'>&lt;&lt;</a></b>";
		sHtml +=	"</td>";
		sHtml +=	"<td class='r01fcalendarNavigator' width='100' align='center'>" + window.calendarMonthNames[month-1] + " " + year + "</td>";
		sHtml +=	"<td class='r01fcalendarNavigator' width='22' align='center' valign='middle'>";
		sHtml +=		"<b><a class='r01fcalendar' href='JavaScript:refreshCalendar( " + this.index + ",new Date(" + next_month_year + "," + next_month + "," + day + ") )'>&gt;&gt;</a></b>";
		sHtml +=	"</td>";
	}	
	sHtml +=	"</tr>";
	sHtml += "</table>";
	//sHtml += "<br />";
	// TABLA 2: EL CALENDARIO....
	sHtml += "<table width='120' border='0' cellspacing='1' cellpadding='0' align='center'>";
	// Cabeceras para los dias de la semana	
	sHtml += 	"<tr>";
	sHtml +=		"<td class='r01fcalendarWeekDayTitle' align='right' width='14%'>" + window.calendarDayHeaders[(window.calendarWeekStartDay)%7]   + "</td>";
	sHtml +=		"<td class='r01fcalendarWeekDayTitle' align='right' width='14%'>" + window.calendarDayHeaders[(window.calendarWeekStartDay+1)%7] + "</td>";
	sHtml +=		"<td class='r01fcalendarWeekDayTitle' align='right' width='14%'>" + window.calendarDayHeaders[(window.calendarWeekStartDay+2)%7] + "</td>";
	sHtml +=		"<td class='r01fcalendarWeekDayTitle' align='right' width='14%'>" + window.calendarDayHeaders[(window.calendarWeekStartDay+3)%7] + "</td>";
	sHtml +=		"<td class='r01fcalendarWeekDayTitle' align='right' width='14%'>" + window.calendarDayHeaders[(window.calendarWeekStartDay+4)%7] + "</td>";
	sHtml +=		"<td class='r01fcalendarWeekDayTitle' align='right' width='14%'>" + window.calendarDayHeaders[(window.calendarWeekStartDay+5)%7] + "</td>";
	sHtml +=		"<td class='r01fcalendarWeekDayTitle' align='right' width='14%'>" + window.calendarDayHeaders[(window.calendarWeekStartDay+6)%7] + "</td>";
	sHtml +=	"</tr>";
	
	// Linea vacia
	sHtml +=	"<tr><td colspan='7' align='center'><img src='graypixel.gif' width='120' height='1'></td></tr>";
	
	// Los dias del calendario
	// Cada uno de los dias
	for (var row=1; row <= 6; row++) { 
		sHtml +=	"<tr>";
		var date_class;
		for (var col=1; col <= 7; col++) { 
			if (display_month == month) { 
				date_class = 'r01fcalendarThisMonth';
			} else { 
				date_class = 'r01fcalendarOtherMonth';
			} 			
			if ((display_month == month) && (display_date == day) && (display_year == year)) {
				td_class = 'r01fcalendarToday'; 
			} else { 
				td_class = 'r01fcalendarMonth';
			} 
			sHtml += "<td class='" + td_class + "'>";
			sHtml += 	"<a href='JavaScript:returnCalendar( " + this.index + "," + display_year + "," + display_month + "," + display_date + ",\"" + this.language + "\")' class=' " + date_class + "'>" + display_date + "</a>";
			sHtml += "</td>";
			display_date++; 		// Algo de JavaScript para seguir obteniendo dias
			if (display_date > daysinmonth[display_month]) { 
				display_date=1;
				display_month++; 
			} 
			if (display_month > 12) {
				display_month=1; 
				display_year++;
			} 
		} 	// for
		sHtml += "</tr>";
	}	// for
	
	// Una linea de separacion
	sHtml += "<tr><td colspan='7' align='center'><img src='graypixel.gif' width='120' height='1'></td></tr>";

	// El link con el dia de hoy
	var now = new Date();
	sHtml += "<tr>";
	sHtml += 	"<td colspan='7' align='center'>";
	sHtml +=		"<a class='r01fcalendarTodayLink' href='JavaScript:returnCalendar( " + this.index + "," + now.getFullYear() + "," + (now.getMonth()+1) + "," + now.getDate() + ",\"" + this.language + "\")'>" + window.calendarTodayString + "</a>";
	sHtml +=		"<br />";
	sHtml +=	"</td>";
	sHtml += "</tr>";
	
	
	sHtml += "</table>";
	return sHtml;
}	// fin de la funcion...
//___________________________________________________________________________\\
// Funcion que devuelve el resultado (el dia escogido)
function returnCalendar(calendarIndex,year,month,day, language) { 
	// A partir del indice del calendario obtener el objeto desde el
	// array global que contiene las instancias de calendario activas
	var thisCalendar = window.calendarInstances[calendarIndex];
	if (thisCalendar == null) thisCalendar = window.opener.calendarInstances[calendarIndex];

	// Copiar la fecha al inputField asociado
	if (thisCalendar.oInputField == null) {
		//alert('Fecha Escogida: [' + day + ':' + month + ':' + year + ']');
	} else {
		var oInput;
		if (thisCalendar.oCalendarWindow.type == "WINDOW") {
			oInput = thisCalendar.oInputField;
			//oInput = window.opener.document.all(thisCalendar.oInputField.name);
		} else {
			oInput = document.all(thisCalendar.oInputField.name);
		}
		
		day = (day.toString().length==1 ? "0" + day.toString() : day.toString());
		month = (month.toString().length==1 ? "0" + month.toString() : month.toString());

		if (language == "es") {
			oInput.value = day + '/' + month + '/' + year;
		} else {
			oInput.value = year + '/' + month + '/' + day;
		}	
	}
	// Cerrar la ventana
	thisCalendar.oCalendarWindow.hidePopUp();
} 




/*************************************************************************************************/
/*   File: /AVComun/r01gCommonSearchVA/scripts/r01gCommonSearchDateValidator.js*/
/*************************************************************************************************/

	function finMes(month, year){ 
			var nRes = 0; 
			switch (month){ 
				case 1: nRes = 31; break; 
				case 2: nRes = 28; break; 
				case 3: nRes = 31; break; 
				case 4: nRes = 30; break; 
				case 5: nRes = 31; break; 
				case 6: nRes = 30; break; 
				case 7: nRes = 31; break; 
				case 8: nRes = 31; break; 
				case 9: nRes = 30; break; 
				case 10: nRes = 31; break; 
				case 11: nRes = 30; break; 
				case 12: nRes = 31; break; 
			} 
			return nRes + (((month == 2) && (year % 4) == 0)? 1: 0); 
		}

		function valAno(year){ 
			var bOk = true; 
			bOk = bOk && (year.length == 4); 
			if (bOk){
				//compruebo que sean digitos el ao
				for (var i = 0; i < year.length; i++){
					digit = year.charAt(i).charCodeAt(0);
					bOk = bOk && (digit > 47 && digit < 58);
				} 
			}
			return bOk; 
		}

		function valFecha(fieldDate){ 
			var bOk = true;
			if (fieldDate.value != ""){
				var year = fieldDate.value.substr(6);  //coge de la posicion 6 en adelante.
				bOk = bOk && (valAno(year));
				//validacion del mes
				var month = parseInt(fieldDate.value.substr(3, 2), 10); 
				bOk = bOk && ((month >= 1) && (month <= 12)); 
				
				//validacion del dia
				var day = parseInt(fieldDate.value.substr(0, 2), 10); 
				bOk = bOk && ((day >= 1) && (day <= finMes(month, year))); 

				//validacion del separador
				var sep1 = fieldDate.value.charAt(2); 
				var sep2 = fieldDate.value.charAt(5); 
				var sepOk = ((sep1 == "/") && (sep2 == "/"));
				bOk = bOk && sepOk;

				if (!bOk){ 
					alert("Debes introducir una fecha correcta (dd/mm/aaaa)");
					fieldDate.value = "";
					fieldDate.focus();
				}
			} 
		} 
		
		function valFechaIdioma(fieldDate, idioma){ 
			var bOk = true;
			if (fieldDate.value != ""){
			
				if (idioma == "es") {
					var year = fieldDate.value.substr(6);  //coge de la posicion 6 en adelante.
					var month = parseInt(fieldDate.value.substr(3, 2), 10); 
					var day = parseInt(fieldDate.value.substr(0, 2), 10); 
				} else {
					var year = fieldDate.value.substr(0, 4);  
					var month = parseInt(fieldDate.value.substr(5, 2), 10); 
					var day = parseInt(fieldDate.value.substr(8), 10); 
				}
				bOk = bOk && (valAno(year));
				//validacion del mes
				bOk = bOk && ((month >= 1) && (month <= 12)); 
				//validacion del dia
				
				bOk = bOk && ((day >= 1) && (day <= finMes(month, year))); 
				//validacion del separador
				if(idioma == "es"){// Formato fecha en castellano -> dd/mm/aaaa
					var sep1 = fieldDate.value.charAt(2); 
					var sep2 = fieldDate.value.charAt(5);
				}
				else { // Formato fecha en euskera -> aaaa/mm/dd
					var sep1 = fieldDate.value.charAt(4); 
					var sep2 = fieldDate.value.charAt(7);
				} 
				var sepOk = ((sep1 == "/") && (sep2 == "/"));
				bOk = bOk && sepOk;

				if (!bOk){ 
					if (idioma == "es") {
						alert("Debes introducir una fecha correcta (dd/mm/aaaa)");
					} else {
						alert("Data egokia jarri behar duzu (aaaa/mm/dd)");
					} 	
					fieldDate.value = "";
					fieldDate.focus();
				}
			}
			
			return bOk;
			 
		} 		


/*************************************************************************************************/
/*   File: /AVComun/r01gCommonSearchVA/scripts/r01gCommonSearchPopUp.js*/
/*************************************************************************************************/

/***************************************************************************************************\
Liberias para mostrar ventanas PopUp que permiten parametros de entrada y
parametros de salida.
Utilizacion:
   - Ventana Padre:
          Para abrir la ventana hija utilizar un js como:
				function showPopUp(anchorName) {
					// Abrir en una ventana independiente
					oWin = new PopUpWindow();
					// o bien para abrir en una capa:
					// oWin = new PopUpWindow(divName[popUpWindow]);	// la capa ha de contener
																		// popUpWindow en su ID
					oWin.appearance.autoHideEnabled = true;
					oWin.sourceURL = "r01pagePopUpChild.html";
					oWin.appearance.resizable = true;
					oWin.addParam("param1","param1Value ");
					oWin.addParam("param2","param2Value");
					
					// Establecer la funcion de callback
					oCallBack = new PopUpCallBack();
					oCallBack.frameName = "myFrame";	// Opcional.. solo si hay frames
					oCallBack.functionName = "myCallBackFunction";					
					oWin.setCallBack(oCallBack);

					// Si se quiere sacar el popUp al lado de un anchor:					
					oWin.showPopUp("anchor1");
					// .. o bien, si se quiere sacar el popUp en una posicion
					oWin.appearance.x = 10;
					oWin.appearance.y = 25;
					oWin.showPopUp();					
				}		
			la cual despliega un PopUp ligado a un anchor o en una posicion dada.
			NOTA: Si se despliega el popUp ligado a un anchor, hay que incluir un anchor:
					<a href='#' name='anchor1' onClick='JavaScript:showPopUp("anchor1")'>Muestra Ventana</a>.
		
			Adicionalmente hay que proveer la funcion callBack que se ha establecido anteriormente
			(en el caso del ejemplo myCallBackFunction). Esta funcion recibe los parametros que se
			quiera y del tipo que se quiera
			function myCallBackFuncion(outParam) {	// El nombre es arbitrario... el que sea
				alert(outParam);
			}
			
	- Ventana PopUp:
			Cuando se desea que la ventana popUp "llame" a la ventana "padre", ha de 
			poner el siguiente codigo:
				returnPopUp(outValue);	
			siendo outValue una variable arbitraria (cualquiera) y de tipo arbitrario (el que sea...)
\*****************************************************************************************************/ 






/*****************************************************************************\
 *                           FUNCIONES AUXILIARES                            *
\*****************************************************************************/ 
/**
 * Muestra una ventana emergente
 * @param anchorName: El anchor a partir del cual se muestra la ventana
 * @param width: Ancho
 * @param height: Alto
 * @param x,y: Posicion del borde superior izquierdo de la ventana
 * @param resizable: Se puede cambiar el tama?o de la ventana?
 * @param scrollbars: Configuracion de las barras 
 */
function showPopUp(anchorName,width,height,x,y,resizable,scrollbars) {
	oWin = new PopUpWindow();
	oWin.autoHideEnabled = true;
	oWin.width = width;
	oWin.sourceURL = "http://www.google.com";
	oWin.resizable = true;
	oWin.showPopUp(anchorName);
}
/**
 * Obtiene el indice de la ventana desde la URL.
 * El indice ha de venir como parametro P01PopUpIndex
 */
function getPopUpIndex() {	
	var index =  thisWindowQuery.getParameter("P01PopUpIndex");
	if (index == null && document.getElementById("popUpContents") != null){
		index = document.all.popUpContents.index;
	} else if(index == null && document.getElementsByName("P01PopUpIndex") != null && document.getElementsByName("P01PopUpIndex").length>0){
		index = document.getElementsByName("P01PopUpIndex")[0].value;
	}
	return index;

}
/**
 * Funcion que devuelve los datos a la ventana padre. Esta funcion ha de ser llamada por la 
 * ventana popUp pasando su index y los parametros de salida.
 */
function returnPopUp() {
	var popUpIndex = eval("getPopUpIndex()");
	
	var thisPopUp = window.opener.popUpObjects[popUpIndex];		
	
	if (thisPopUp == null) alert("No se puede encontrar el objeto de definicion del popUp");
	
	if (thisPopUp == null || thisPopUp.closed) {
		alert("No se pueden devolver datos ya que la ventana se ha cerrado");
	} else if (window.opener == null || window.opener.closed) {
		alert("No se pueden devolver datos ya que la ventana a la que devolverlos se ha cerrado");
	} else {
		// Llamar a la funcion de vuelta, pasandole todos los argumentos
		// var callBackFunctionSignature = "thisPopUp.popUpWindow.opener." + thisPopUp.popUpWindow.callBack.functionName + "(";			
		var callBackFunctionSignature = "window.opener." + thisPopUp.callBack.functionName + "(";
		if (arguments.length > 0) {
			for (var i=0; i < arguments.length; i++) {
				callBackFunctionSignature += ("arguments[" + i + "]");
				if (i < arguments.length - 1)  callBackFunctionSignature += ","; 
			}
		}
		callBackFunctionSignature += ")";
		eval(callBackFunctionSignature);
		// Cerrar la ventana
		thisPopUp.hidePopUp();
	}
}





//___________________________________________________________________________\\
/*****************************************************************************\
 *                           OBJETO POPUPWINDOW                              *
 *		Ventana simulando un "popUp" con alguna caracteristica adicional     *
 *      como que cuando se pincha fuera de ella se oculta autom?ticamente    *
 *      y que permite utilizar popUps en forma de div, para lo cual basta    *
 *      con pasar el nombre de un DIV                                        *
\*****************************************************************************/ 
function PopUpWindow(divName) {
	// Mapeo de metodo
		this.getPositionAnchorRelative = PopUpWindow_getPositionAnchorRelative;
		this.setPosition = PopUpWindow_setPosition;
		this.moveTo = PopUpWindow_moveTo;
		this.populate = PopUpWindow_populate;
		this.setContents = PopUpWindow_setContents;
		this.showPopUp = PopUpWindow_showPopUp;
		this.hidePopUp = PopUpWindow_hidePopUp;
		this.setSize = PopUpWindow_setSize;
		this.isClicked = PopUpWindow_isClicked;
		this.autoHide = PopUpWindow_autoHide;
		this.hideIfNotClicked = PopUpWindow_hideIfNotClicked;
		this.attachEvents = PopUpWindow_attachEvents;
		this.addParam = PagePopUpWindow_addParam;
		this.setCallBack = PagePopUpWindow_setCallBack;
		
	// Miembros
		var index;			// Indice del calendario en el array global de calendarios window.calendarInstances		
		var popUpWindow;	// La ventana
		var callBack;		// Los parametros para que la ventana "hija" sepa como devolver los datos
		var sourceURL;		// URL origen del popup
		var populated;		// Indica si se ha cargado el popup
		var contents;		// En el caso de tratarse de un DIV, el HTML del div
		var inputParams;	// Parametros atributo - valor para el popUp
		var appearance;		// La apariencia de la ventana
				

	// Inicializacion
		// Array de popUpWindow Objects que almacena todos los popUps
		if (!window.popUpObjects) { 
			window.popUpObjects = new Array(); 
		}		
		// Indice de esta ventana dentro del array de ventanas
		this.index = window.popUpObjects.length;
		// A?adir la ventana en un array que controla las ventanas abiertas
		window.popUpObjects[this.index] = this;

		this.popUpWindow = null;			// La ventana (puede ser una referencia a un div o un popUp)....
		this.populated = false;				// ?Se ha establecido el contenido del popUp?
		this.contents = "";					// El html del popUp		
		this.callBack = null;				// De momento no hay parametros de callback
		this.sourceURL = "about:blank";		// Pagina en blanco
		this.inputParams = null;			// No hay parametros de entrada
		this.appearance = new PopUpAppearance();	// Apariencia por defecto		
		
		// Inicializar el tipo de div
		if (arguments.length > 0) {
			this.type = "DIV";
			if (ie6 || ns6) {				
				this.popUpWindow = document.getElementById(arguments[0]);
			} else if (ie4) { 
				this.popUpWindow = document.all[arguments[0]];
			} else if (ns4) { 
				this.popUpWindow = document.layers[arguments[0]]; 
			}
			if (this.popUpWindow == null) alert("ERROR EN EL HTML\r\nNo existe el div o layer '" + arguments[0]);
			// Establecer las propiedades de la capa
			this.popUpWindow.style.border = 1.5;
			this.popUpWindow.style.borderStyle = "solid";
			this.popUpWindow.style.position = "absolute";
			this.popUpWindow.style.visibility = "hidden";
			this.popUpWindow.style.zIndex = 1000;
		} else {
			this.type="WINDOW";				// Un popUp en base a una ventana emergente
		}
}
//___________________________________________________________________________\\
/**
 * Funcion que a?ade un parametro (atributo - valor) para la pagina que
 * se va a abrir en el PopUp
 * @param paramName: El nombre del parametro
 * @param paramValue: El valor del parametro
 */
function PagePopUpWindow_addParam(paramName,paramValue) {
		if (this.inputParams == null) this.inputParams = new Array();
		// Si el parametro ya ha sido introducido, se mete como un array para poder pasar mas de un 
		// parametro con el mismo nombre
		if (this.inputParams[paramName] != null) {
			var parameter = this.inputParams[paramName];
			// Si el parametro no era ya un array, se crea uno y se guarda el string existente en la primera posicion
			var arrayParameter;
			if (parameter[0] == null) {
				arrayParameter = new Array();
				arrayParameter[0] = parameter;
			} else {
				arrayParameter = parameter;
			}
			arrayParameter[arrayParameter.length] = paramValue;
			this.inputParams[paramName] = arrayParameter;
		} else {
			// Si es el primer valor que se introduce con este nombre, se guarda sin array
			this.inputParams[paramName] = paramValue;
		}
}
//___________________________________________________________________________\\
/**
 * Funcion que referencia el objeto con los parametros de callback que se pasan
 * a la ventana popup creada para que sepa como devolver los datos.
 * @param callBackParams: Un objeto PopUpCallBack con datos para que la ventana
 *                        "hija" sepa como devolver los datos.
 */
function PagePopUpWindow_setCallBack(newCallBack) {
	if (newCallBack == null || !instanceOf(newCallBack,PopUpCallBack)) { 
		alert("Error en la llamada a PopUpWindow.setCallBack(): El objeto callBack es null o no es un objeto valido de la clase 'PopUpCallBack'");	
		return;
	}
	this.callBack = newCallBack;
}
//___________________________________________________________________________\\
/**
 * Funcion que a?ade al codigo del evento onMouseUp y onMouseDown del documento, el 
 * codigo JS necesario para drag & drop y para habilitar la propiedad autoHide que
 * esconde la ventana cuando se pincha fuera de ella
 */ 
function PopUpWindow_attachEvents() {
	if (ns4) {
		document.captureEvents(Event.MOUSEUP);
	}
	// Guardar los antiguos codigos de evento
	window.popUpWindowOldOnMouseUpEvent = document.onmouseup;
	window.popUpWindowOldOnMouseDownEvent = document.onmousedown;
	
	// Atachar los eventos drag & drop y el evento que permite esconder la ventana
	// cuando se pincha fuera de ella si la propiedad autoHide est? habilitad
	var strEvent = "";
	if (this.appearance.isMoveable) {
		strEvent = "window.dragging = false;" + (window.popUpWindowOldMouseUpEvent != null ? "window.popUpWindowOldMouseUpEvent();":"") + "PopUpWindow_hidePopUpWindows();";
	} else {
		strEvent = (window.popUpWindowOldMouseUpEvent != null ? "window.popUpWindowOldMouseUpEvent();":"") + "PopUpWindow_hidePopUpWindows();";
	}
	document.onmouseup = new Function(strEvent);

	if (this.appearance.isMoveable) {
		if (document.all) {
			strEvent = (window.popUpWindowOldMouseDownEvent != null ? "window.popUpWindowOldMouseDownEvent();":"") + "PopUpWindow_InitializeDrag();";
		} else {
			strEvent = (window.popUpWindowOldMouseDownEvent != null ? "window.popUpWindowOldMouseDownEvent();":"") + "PopUpWindow_InitializeDrag(Event);";
		} 	
	} else {
		strEvent = (window.popUpWindowOldMouseDownEvent != null ? "window.PopUpWindowOldMouseDownEvent();":"");
	}
	document.onmousedown = new Function(strEvent);
	
}
//___________________________________________________________________________\\
/** Posiciona una ventana popUp al lado del anchor <a> cuyo nombre se pasa */
function PopUpWindow_getPositionAnchorRelative(anchorname) {
	var coordinates;
	if (this.type == "WINDOW") {
		coordinates = getAnchorPositionScreenRelative(anchorname);
	} else {
		coordinates = getAnchorPositionWindowRelative(anchorname);
	}
	this.appearance.x = coordinates.x;
	this.appearance.y = coordinates.y;		
}
//___________________________________________________________________________\\
/** Posiciona una ventana popUp en las coordenadas que se pasan */
function PopUpWindow_setPosition(left,top) {
	this.appearance.x = left;
	this.appearance.y = top;
}
//___________________________________________________________________________\\
/** Mueve una ventana popUp en las coordenadas que se pasan */
function PopUpWindow_moveTo(left,top) {
	this.appearance.x = left;
	this.appearance.y = top;
	if (this.type == "DIV") {
		this.popUpWindow.style.left = this.appearance.x;
		this.popUpWindow.style.top = this.appearance.y;
	} else {
		this.popUpWindow.moveTo(this.appearance.x,this.appearance.y);
	}
}
//___________________________________________________________________________\\
/** Establece el tama?o (width/height) de un popUp tipo div */
function PopUpWindow_setSize(width,height) {
	this.appearance.width = width;
	this.appearance.height = height;
}
//___________________________________________________________________________\\
/** Llena una ventana con el conteido HTML */
function PopUpWindow_setContents(contents) {
	this.contents = contents;
}
//___________________________________________________________________________\\
/** Refresca los contenidos mostrados en una ventana */
function PopUpWindow_populate() {
	var strContents = "";
	if (this.type == "DIV") {
		// Si la ventana es movible, a?adir al contenido la barra superior
		if (this.appearance.isMoveable) {
			strContents = getMoveablePopUpWindowHTML(this.index,this.appearance.title,this.contents);
		} else {
			strContents = this.contents;
		}
		// Establecer el html interno
		if (ie6 || ns6 || ie4) {
			this.popUpWindow.innerHTML = strContents;
		} else if (ns4) { 
			this.popUpWindow.document.open();
			this.popUpWindow.document.writeln(strContents);
			this.popUpWindow.document.close();
		}
	} else if (this.type == "WINDOW") {
		strContents = getIndependentWindowHTML(this,this.contents,this.index);
		if (strContents != null && this.popUpWindow != null && !this.popUpWindow.closed) {
			this.popUpWindow.document.open();
			this.popUpWindow.document.writeln(strContents);		
			//this.popUpWindow.document.close();	// No descomentar... casca!!
		}
	}
	this.populated = true;		// Ya se ha llenado con los datos
}
//___________________________________________________________________________\\
/**
 * Muestra y posiciona una ventana en relacion a la posicion del anchor <a>
 * que se pasa
 */
function PopUpWindow_showPopUp(anchorname) {
	// Si se failita un anchor, se muestra la ventana relativa al anchor, sino
	// se toma el valor de this.appearance.x y this.appearance.y para situar el popUp
	if (arguments.length == 1) this.getPositionAnchorRelative(anchorname);
	// Posicionar el popup
	this.appearance.x += this.appearance.offsetX;
	this.appearance.y += this.appearance.offsetY;
	// Si la popUp se va a salir de la pantalla, moverla...
	if (screen && screen.availHeight) {
		if ((this.appearance.y + this.appearance.height) > screen.availHeight) {
			this.appearance.y = screen.availHeight - this.appearance.height;
		}
	}
	if (screen && screen.availWidth) {
		if ((this.appearance.x + this.appearance.width) > screen.availWidth) {
			this.appearance.x = screen.availWidth - this.appearance.width;
		}
	}	
	
	if (this.type == "DIV") {
		// IMPORTANTE!!!
		//		En el caso de mostrar con DIV no es necesario pasar los parametros de entrada
		//		ya que al estar en la propia ventana tiene acceso a todos los datos.
		
		// Obtener el HTML del DIV
		if (!this.populated && (this.contents != "")) this.populate();		
		// Mostrar el DIV
		this.popUpWindow.style.left = this.appearance.x;
		this.popUpWindow.style.top = this.appearance.y;
		this.popUpWindow.style.width = this.appearance.width;
		this.popUpWindow.style.Heigth = this.appearance.height;
		this.popUpWindow.style.visibility = "visible";
		
		this.attachEvents();
		
	} else if (this.type == "WINDOW") {
		// No hacer nada si ya estaba abierta
		if (this.popUpWindow != null && !this.popUpWindow.closed) return;	
		
		//Vamos a enviar los paramtros via POST. (Antes se hacia via GET
		var formPopUp = document.createElement("FORM");		
		formPopUp.method = "post";
		
		var formInputParam;
			
		// Se llama a una URL remota.
		if (this.sourceURL != "about:blank" && (this.contents == null || this.contents.length == 0)) {			
			// Obtener una parte de la URL con los parametros de entrada para la
			// popUpWindow.
			var popUpInputParamsStr = "P01PopUpIndex=" + this.index;
			if (this.inputParams != null) {
				for (currParam in this.inputParams) {					
					var currParamValue = this.inputParams[currParam];
					// currParamValue puede ser un array o no en funcion de si hay mas
					// parametros con el mismo nombre
					if (typeof(currParamValue) == "string") {					
					    try {
					        //IE (no se puede establecer el atributo name de la forma formInputParam.name = "valor";
					        formInputParam = document.createElement("<INPUT type='hidden' name='" + escape(currParam) + "'>");
					    }
					    catch (e) {
					        //FIREFOX (no se puede crear el objeto mediante document.createElement("<INPUT type='hidden' name='";
					        formInputParam = document.createElement("INPUT");
					        formInputParam.type = "hidden";
					        formInputParam.name = currParam;						        
					    }
					    formInputParam.value = currParamValue;	     		        
					    formPopUp.insertAdjacentElement("beforeEnd", formInputParam);						
					} else {
						// Es es un array: a?adir cada uno de los elementos como parametro con el mismo nombre
						for (i=0;currParamValue!=null && i<currParamValue.length;i++) {							
						    try {
						        //IE (no se puede establecer el atributo name de la forma formInputParam.name = "valor";
						        formInputParam = document.createElement("<INPUT type='hidden' name='" + currParam + "'>");
						    }
						    catch (e) {
						        //FIREFOX (no se puede crear el objeto mediante document.createElement("<INPUT type='hidden' name='";
						        formInputParam = document.createElement("INPUT");
						        formInputParam.type = "hidden";
						        formInputParam.name = currParam;	

						    }						    
						 	formInputParam.value = currParamValue[i];	     		        
						    formPopUp.insertAdjacentElement("beforeEnd", formInputParam);							
						}					
					}
				}
			}			
			
			// Componer la URL con todas las historietas	
			var popUpWindowURL = "";			
			if (this.sourceURL.indexOf("?") == -1) {
				var popUpWindowURL = this.sourceURL + "?" + popUpInputParamsStr;
			} else {
				var popUpWindowURL = this.sourceURL + "&" + popUpInputParamsStr;
			}										
		} 
		if (popUpWindowURL == null || popUpWindowURL.length == 0) {
			popUpWindowURL = "about:blank";
		}	
				
		formPopUp.action = popUpWindowURL;
				
		// Creamos un n?mero aleatorio para que no coincidan los nombres de los pop_up
		nombrePopUp = Math.round (Math.random()*1000);
		formPopUp.target = "window_" + nombrePopUp;
				
		//this.popUpWindow = window.open(popUpWindowURL,"window_" + this.index,"toolbar=no,menubar=no,alwaysRaised,dependent,titlebar=no," + 
		this.popUpWindow = window.open("about:blank","window_" + nombrePopUp,"toolbar=no,menubar=no,alwaysRaised,dependent,titlebar=no," + 
																			  "scrollbars="+(this.appearance.scrollbars ? "yes":"no") + "," + 				
									                                          "location=" + (this.appearance.location ? "yes":"no") + "," +									                                         
									                                          "status=" + (this.appearance.status ? "yes":"no") + "," +
									                                          "resizable=" + (this.appearance.resizable ? "yes":"no") + "," +
																			  "width=" + this.appearance.width + "," + 
																			  "height=" + this.appearance.height + "," + 
																			  "screenX=" + this.appearance.x + "," + 
																			  "left=" + this.appearance.x + "," + 
																			  "screenY=" + this.appearance.y + "," + 
																			  "top=" + this.appearance.y + "");
		
		if (document.all) {																	  
			document.body.insertAdjacentElement("beforeEnd", formPopUp);
		} else {
			document.body.appendChild(formPopUp);
		}	
																									  																			  
		// Atachar a la ventana creada una referencia a la ventana que la ha abierto
		// (sirve para simular el window.opener...)
		this.popUpWindow.opener = self;		
		// Establecer los parametros de callBack en la ventana hija:
		if (this.callBack != null) this.popUpWindow.callBack = this.callBack;
		// A pesar de que los parametros de entrada se pasan como parametro en la URL,
		// se pasa un objeto con los parametros a la ventana hija
		if (this.inputParams != null) this.popUpWindow.inputParams = this.inputParams;
		
		// Si el contenido de la ventana se pasa en HTML, popular esta ventana...
		if (this.sourceURL == "about:blank" && this.contents != null && this.contents.length > 0)
			this.populate();
			
		this.attachEvents();
		if (popUpWindowURL != "about:blank") {
			formPopUp.submit();
		}	
	}
	// Preparar el drag & drop y la propiedad autoHide
	
}
//___________________________________________________________________________\\
/** Oculta una ventana popUp */
function PopUpWindow_hidePopUp() {
	if (this.type == "DIV") {
		this.popUpWindow.style.visibility = "hidden";
	} else {
		if (this.popUpWindow && !this.popUpWindow.closed) {
			this.popUpWindow.close();
			this.popUpWindow = null;
		}
	}
}
//___________________________________________________________________________\\
/** Se le pasa un evento y devuelve si se ha hecho click en el popUp o fuera de el */
function PopUpWindow_isClicked(e) {
	if (this.type != "DIV") return false;
	if (ns4) {
		var clickX = e.pageX;
		var clickY = e.pageY;
		var t = this.popUpWindow;
		if ((clickX > t.left) && (clickX < t.left+t.clip.width) && (clickY > t.top) && (clickY < t.top+t.clip.height)) {
			return true;
		} else { 
			return false; 
		}
	} else if (ie6 || ie4) { 	// Need to hard-code this to trap IE for error-handling
		var t = window.event.srcElement;
		while (t.parentElement != null) {
			if (t.id == this.popUpWindow.id) {
				return true;
			}
			t = t.parentElement;
		}
		return false;
	} else if (ns4) {
		var t = e.originalTarget;
		while (t.parentNode != null) {
			if (t.id == this.popUpWindow.id) {
				return true;
			}
			t = t.parentNode;
		}
		return false;
	}
	return false;
}
//___________________________________________________________________________\\
/** 
 * Se le pasa un evento y devuelve si se puede cerrar el popUp dependiendo de 
 * si se ha hecho click en el popUp o fuera de el 
 */
function PopUpWindow_hideIfNotClicked(e) {
	if (this.appearance.autoHideEnabled && !this.isClicked(e)) {
		this.hidePopUp();
	}
}
//___________________________________________________________________________\\
/** Si se hace click fuera del popUp se cierra la ventana */
function PopUpWindow_autoHide() {
	this.appearance.autoHideEnabled = true;
}



//____________________________________________________________________________\\
/////////////////////////////////
//drag drop function for NS 4////
/////////////////////////////////
	var popUpWindow_DragSwitch = 0;
	var nsx;		// PosX for NS
	var nsy;		// PosY for NS
	var nstemp;	

	function PopUpWindow_DragDropNS(name){
		if (!ns4) return;
		temp = eval(name);
		temp.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP);
		temp.onmousedown = popUpWindow_GoNS;
		temp.onmousemove = popUpWindow_DragNS;
		temp.onmouseup = popUpWindow_StopNS;
	}
	function PopUpWindow_GoNS(e){
		temp.captureEvents(Event.MOUSEMOVE);
		nsx = e.x;
		nsy = e.y;
	}
	function PopUpWindow_DragNS(e){
		if (popUpWindow_DragSwitch == 1) {
			temp.moveBy(e.x-nsx,e.y-nsy);
			return false;
		}
	}
	function PopUpWindow_StopNS(){
		temp.releaseEvents(Event.MOUSEMOVE);
	}
/////////////////////////////////////////
//drag drop function for ie4+ and NS6////
/////////////////////////////////////////
	window.popUpInDragProcess = null;		// El popUp que se esta moviendo en estos momentos
	window.dragging = false;				// Se est? moviendo un popup
	var tempX = 0;		// Posici?n left de la ventana
	var tempY = 0;		// Posici?n top de la ventana
	var offsetX = 0;
	var offsetY = 0;
		
	function PopUpWindow_DragDrop(e) {
		if (!ns6 && window.dragging) {
			window.popUpInDragProcess.style.left = tempX + event.clientX-offsetX;
			window.popUpInDragProcess.style.top = tempY + event.clientY-offsetY;
			return false;
		} else if (ns6 && window.dragging) {
			window.popUpInDragProcess.style.left = tempX + e.clientX-offsetX;
			window.popUpInDragProcess.style.top = tempY + e.clientY-offsetY;
			return false;
		}
	}
	function PopUpWindow_InitializeDrag(e) {	
		var firedObj = ns6 ? e.target : event.srcElement;	// El objeto que genero el evento
		var topElement = ns6 ? "HTML" : "BODY";
	
		if (firedObj == null || firedObj == "undefined") return;
		if (firedObj.tagName == null || firedObj.tagName == "undefined") return;
		// Encontrar el div en el que se define el popup. Recordar que el nombre
		// del div ha de tener las letras popUpWindow
		while ( firedObj.tagName != topElement && firedObj.id.indexOf("popUpWindow") < 0 ) {
			firedObj = ns6 ?firedObj.parentNode : firedObj.parentElement;		// Ir buscando el div con id='popUpWindow<loquesea>'
		}
		if ( firedObj.id.indexOf("popUpWindow") >= 0 ) {
			window.popUpInDragProcess = firedObj;
			// Mover la ventanita
			offsetX = (ie4 || ie6) ? event.clientX : e.clientX;
			offsetY = (ie4 || ie6) ? event.clientY : e.clientY;

			tempX = parseInt(window.popUpInDragProcess.style.left);
			tempY = parseInt(window.popUpInDragProcess.style.top);

			window.dragging = true;		// Se esta moviendo un objeto
			document.onmousemove = PopUpWindow_DragDrop;
		}
	}


//==========================================================================\\
//                 FUNCIONES AUXILIARES PARA VENTANAS                       \\
//==========================================================================\\
//____________________________________________________________________________\\
	/**
	 * Obtiene el html de una ventana movible, en ventana independiente
     */
	function getIndependentWindowHTML(oWindow,contents,index) {
		var html = "";
		html += "<html>\n";
		html += "<head>\n";
		html += 		"<title>" + oWindow.title + "</title>\n";
		html += 		"<script language='JavaScript' src='/comun/scripts/r01fScripts.js'></script>\n";
		html += 		"<script language='JavaScript' src='/comun/scripts/r01fPopUp.js'></script>\n";
		html += "</head>\n";
		html += "<body marginwidth='0' marginheight='0' topmargin='0' rightMargin='0' leftMargin='0'\n";
		html += 	"<center>\n";
		html += 	"<table width='100%' border='1' borderwidth='0' cellspacing='0' cellpadding='0'>\n";
		html += 		"<tr>\n";
		html += 			"<td id='popUpContents' index='" + index + "'>\n";
		html += contents + "\n";
		html += 			"</td>\n";
		html += 		"</tr>\n";
		html += 	"</table>\n";
		html += 	"</center>\n";
		html += "</body>\n";
		html += "</html>\n";
		return html;
	}
//____________________________________________________________________________\\
	/**
	 * Obtiene el html de una ventana movible, a?adiendo a los contenidos
	 * una barra para poder hacer drag & drop
     */
	function getMoveablePopUpWindowHTML(index,title,contents) {
		var sHtml = "";
		sHtml += "<table class='r01popUpWindow' border='0' cellspacing='0' cellpadding='3'>\r\n";
		// Fila superior para mover la ventana
		sHtml +=	"<tr class='r01popUpWindowDragBar'>\r\n";
		sHtml +=		"<td width='100%'>\r\n";
		sHtml +=			"<ilayer width='100%' onSelectStart='return false'>\r\n";
		sHtml +=				"<layer width='100%' onMouseOver='popUpWindow_DragSwitch=1; if(ns4) popUpWindow_DragDropNS(popUpWindow)' onMouseOout='popUpWindow_DragSwitch=0'>\r\n";
		sHtml += title + "\r\n";	// El titulo de la barra para hacer drag & drop
		sHtml +=				"</layer>\r\n";
		sHtml +=			"</ilayer>\r\n";
		sHtml +=		"</td>\r\n";
		sHtml +=		"<td>\r\n";
		sHtml +=			"<a href='#' onClick='JavaScript:PopUpWindow_hidePopUpWindow(" + index + ");return false'>\r\n";
		sHtml +=				"<img src='/comun/images/r01lclose.gif' width='16' height='14' border='0'>\r\n";
		sHtml +=			"</a>\r\n";
		sHtml +=		"</td>\r\n";
		sHtml +=	"</tr>\r\n";
		// Contenidos de la ventana
		sHtml +=	"<tr>\r\n";
		sHtml +=		"<td width='100%' id='popUpContents' colspan='2'>\r\n";
		sHtml += contents + "\r\n";	// Los contenidos de la ventanita...
		sHtml +=		"</td>\r\n";
		sHtml +=	"</tr>\r\n";
		sHtml += "</table>\r\n";
		return sHtml;
	}
//___________________________________________________________________________\\
/** 
 * Si la propiedad autoHide est? habilitada, oculta las ventanas cuando se 
 * pincha fuera de una de ellas
 */
function PopUpWindow_hidePopUpWindows(e) {
	for (var i=0; i < window.popUpObjects.length; i++) {
		if (window.popUpObjects[i] != null) {
			var p = window.popUpObjects[i];
			p.hideIfNotClicked(e);
		}
	}
}
//___________________________________________________________________________\\
/** Oculta la ventana cuyo indice se pasa como parametro */
function PopUpWindow_hidePopUpWindow(index) {
	if (window.popUpObjects == null) return;
	var currWin = window.popUpObjects[index];
	if (currWin == null) return;
	currWin.hidePopUp();
}




/*****************************************************************************\
 *                        OBJETO POPUPCALLBACK                           *
 * Parametros que se pasan a la ventana popUp para que "sepa" como devolver  *
 * los datos a la ventana "padre"                                            *
\*****************************************************************************/ 
function PopUpCallBack() {
	// Method mappings
	
	// Atributos
			var frame;					// Referencia al frame a el que se van a devolver los datos			
			var functionName = null;	// Referencia a la funcion a la que se va a llamar para devolver
										// los datos							
	// Inicializacion	
			this.frame = null;
			this.functionName = null;
}


/*****************************************************************************\
 *                         OBJETO PopUpAppearance                            *
 * Parametros visuales de como se quiere mostrar el popUp, entre ellos:      *
\*****************************************************************************/ 
function PopUpAppearance() {
	// Method mappings
	
	// Atributos
		var width;				// Ancho del popUp
		var height;				// Alto del popUp
		var visible;			// ?Es visible el popUp?
		var autoHideEnabled;	// ?El popUp se oculta automaticamente cuando se pincha fuera de el?
		var title;				// Titulo del popUp
		var resizable;			// ?La ventana cambia de tama?o?
		var isMoveable;			// ?El popUp se puede mover (drag & drop)?		
		var scrollBars;			// Scrolls: no=ninguno, l=vertical, 2=vertical+horizontal
		var x;					// Posicion x (left) del borde superior izquierdo del popUp
		var y;					// Posicion y (top) del borde superior izquierdo del popUp`
		var offsetX;			// Offset a partir de la posicion X
		var offsetY;			// Offset a partir de la posicion Y
		var status; 			// Control de la barra de estado
		var location; 			// Control de la barra de direcciones
		
	// Inicializacion
		this.width = screen.availWidth/3;
		this.height = screen.availHeight/3;	
		this.x = (screen.availWidth - this.width) / 2;
		this.y = (screen.availHeight - this.height) / 2;	
		this.visible = false;				// PopUp NO VISIBLE por defecto
		this.autoHideEnabled = false;		// No se oculta automaticamente
		this.title = "PopUp_Window";		// Titulo por defecto
		this.resizable = true;				// Se puede cambiar el tama?o
		this.isMoveable = true;				// ?El popUp se puede mover (drag & drop)?		
		this.scrollBars = false;			// No hay scrolls
		this.offsetX = 0;					//
		this.offsetY = 0;					//
		this.status = false;
		this.location = false; 
}



/*************************************************************************************************/
/*   File: /AVComun/r01gCommonSearchVA/scripts/r01gCommonSearchContentSearchForm.js*/
/*************************************************************************************************/


var selectedCluster = "0";
var selectedFamily = "0";
var selectedType = "0";
var searchClicked = false;
/**
* Metodo usado para que al cambiar cluster muestre uno u otro combo de familia
*/
function r01changeCluster() {
	//indice del cluster seleccionado
	var indice = document.contentSearchForm.clusters.selectedIndex;
	//establece valor del cluster seleccionado (clusteroid)
	selectedCluster = document.contentSearchForm.clusters.options[indice].value;
	//oculta todos los combos de tipos de contenidos menos el vacio
	r01hiddenAllTypes();
	//recorre los combos de familias mostrando el relacionado con el cluster seleccionado y ocultando el resto
	for (i = 0; i < document.contentSearchForm.clusters.length; i++) {
		var clusterOid = document.contentSearchForm.clusters.options[i].value;
		if (selectedCluster != clusterOid) {
			document.getElementById("divFamilies__" + clusterOid).style.display = "none";
		} else {
			document.getElementById("divFamilies__" + clusterOid).style.display = "block";
		}
	}
}
/**
* Funcion que se ejecuta cuando se cambia de familia y que oculta y muestra combos de tipos de contenidos
*/
function r01changeFamily() {
	var selectFamilies = eval("document.contentSearchForm.families__" + selectedCluster);
	//indice de la familia seleccionada
	var indice = selectFamilies.selectedIndex;
	//valor de la familia seleccionada (familyOid)
	selectedFamily = selectFamilies.options[indice].value;
	//recorre todas las familias del combo visible
	for (i = 0; i < selectFamilies.length; i++) {
		var familyOid = selectFamilies.options[i].value;
		//oculta todos los combos de tipos distintos del relacionado con la familia seleccionada
		if (familyOid != selectedFamily) {
			if (familyOid == "0") {
				document.getElementById("divTypes__0__0").style.display = "none";
			} else {
				document.getElementById("divTypes__" + selectedCluster + "__" + familyOid).style.display = "none";
			}
		} else {
			if (familyOid == "0") {
				document.getElementById("divTypes__0__0").style.display = "block";
			} else {
				document.getElementById("divTypes__" + selectedCluster + "__" + familyOid).style.display = "block";
			}
		}
	}
}
/*
* FUNCION QUE CAMBIA EL TIPO DE CONTENIDO SELECCIONADO
*/
function r01changeType() {
	var selectTypes = eval("document.contentSearchForm.types__" + selectedCluster + "__" + selectedFamily);
	//indice de la familia seleccionada
	var indice = selectTypes.selectedIndex;
	//valor de la familia seleccionada (familyOid)
	selectedType = selectTypes.options[indice].value;
}
/**
* oculta todos los combos de tipos de contenidos
*/
function r01hiddenAllTypes() {
	//recorre todos los posibles cluster
	for (i = 0; i < document.contentSearchForm.clusters.length; i++) {
		var clusterOid = document.contentSearchForm.clusters.options[i].value;
		var families = eval("document.contentSearchForm.families__" + clusterOid);
		//inicializa los combos al primer valor
		families.selectedIndex = "0";
		//recorre todos los combos de familias
		for (j = 0; j < families.length; j++) {
			var familyOid = families.options[j].value;
			if (familyOid != "0") {
				//oculta todos los combos de tipos
				document.getElementById("divTypes__" + clusterOid + "__" + familyOid).style.display = "none";
				var types = eval("document.contentSearchForm.types__" + clusterOid + "__" + familyOid);
				//inicializa todos los combos a 0
				types.selectedIndex = "0";
			}
		}
	}
	//muestra el combo de tipos vacio
	document.getElementById("divTypes__0__0").style.display = "block";
}
/**
* FUNCION QUE MUESTRA LOS METADATOS ASOCIADOS AL CLUSTER SELECCIONADO
*/
function r01showMetaData(type) {
	//oculta todos los metadatos de categoria igual o inferior
	r01hiddenMetaData(type);
	//si el que cambia es un cluster
	if (type == "C") {
		if (selectedCluster != "0") {
			if (document.getElementById("metaData__" + selectedCluster + "__"+ type)) {
				document.getElementById("metaData__" + selectedCluster + "__"+ type).style.display = "block";
			}
		}
		
	//si el que cambia es una familia
	} else {
		if (type == "F") {
			if (selectedFamily != "0") {
				if (document.getElementById("metaData__" + selectedFamily + "__"+ type)) {
					document.getElementById("metaData__" + selectedFamily + "__"+ type).style.display = "block";
				}
			}

	//si el que cambia es un tipo
		} else {
			if (type == "T") {
				if (selectedType != "0") {
					if (document.getElementById("metaData__" + selectedType + "__"+ type)) {
						document.getElementById("metaData__" + selectedType + "__"+ type).style.display = "block";
					}
				}
			}
		}
	}
}
/**
* FUNCION QUE OCULTA TODOS LOS METADATOS
*/
function r01hiddenMetaData(type) {
	//recorre todos los posibles cluster
	for (i = 0; i < document.contentSearchForm.clusters.length; i++) {
		var clusterOid = document.contentSearchForm.clusters.options[i].value;
		var families = eval("document.contentSearchForm.families__" + clusterOid);
		//Si cambio de cluster oculto todos los metadatos asociados a clusters
		if (type == "C") {							
			if (document.getElementById("metaData__" + clusterOid + "__" + "C")) {
				document.getElementById("metaData__" + clusterOid + "__" + "C").style.display = "none";
			}
		}
		//recorre todos los combos de familias		
		for (j = 0; j < families.length; j++) {
			var familyOid = families.options[j].value;
			//Si cambio de cluster o familia oculto todos los metadatos asociados a la familia
			if (type == "C" || type == "F") {
				if (document.getElementById("metaData__" + familyOid + "__" + "F")) {
					document.getElementById("metaData__" + familyOid + "__" + "F").style.display = "none";
				}		
			}
			if (familyOid != "0") {
				//oculta todos los combos de tipos
				var types = eval("document.contentSearchForm.types__" + clusterOid + "__" + familyOid);				
				//recorre todos los combos de tipos de contenidos
				for (k = 0; k < types.length; k++) {
					var typeOid = types.options[k].value;					
					//Los combos de typos se ocultan si o si
					if (document.getElementById("metaData__" + typeOid + "__" + "T")) {
						document.getElementById("metaData__" + typeOid + "__" + "T").style.display = "none";
					}						
				}
			}
		}
	}
}
var selectedTypeOnlyOld = "";
/**
*	FUNCION QUE MUESTRA LOS METADATOS ASOCIADOS AL TIPO DE CONTENIDO SELECCIONADO
*/
function r01showMetaDataTypeOnly() {
	r01hiddenMetaDataTypeOnly();				
	//indice del tipo seleccionado
	var indice = document.contentSearchForm.typesCombo.selectedIndex;
	//valor del cluster seleccionado (clusteroid)
	var selectedTypeOnly = document.contentSearchForm.typesCombo.options[indice].value;
	var typology = selectedTypeOnly.split("__");	
	if (typology[0] != "0") {		
		if (document.getElementById("metaData__" + typology[0] + "__" + "C")) {			
			document.getElementById("metaData__" + typology[0] + "__" + "C").style.display = "block";
		}
	}		
	if (typology[1] != "0") {
		if (document.getElementById("metaData__" + typology[1] + "__" + "F")) {			
			document.getElementById("metaData__" + typology[1] + "__" + "F").style.display = "block";
		}
	}				
	if (typology[2] != "0") {
		if (document.getElementById("metaData__" + typology[2] + "__" + "T")) {
			document.getElementById("metaData__" + typology[2] + "__" + "T").style.display = "block";
		}
	}
	selectedTypeOnlyOld = selectedTypeOnly;				
}
function r01hiddenMetaDataTypeOnly() {
	var typology = selectedTypeOnlyOld.split("__");
	var clusterOid = typology[0];
	var familyOid = typology[1];
	var typeOid = typology[2];
	if (document.getElementById("metaData__" + clusterOid + "__" + "C")) {
		document.getElementById("metaData__" + clusterOid + "__" + "C").style.display = "none";
	}
	if (document.getElementById("metaData__" + familyOid + "__" + "F")) {
		document.getElementById("metaData__" + familyOid + "__" + "F").style.display = "none";
	}
	if (document.getElementById("metaData__" + typeOid + "__" + "T")) {
		document.getElementById("metaData__" + typeOid + "__" + "T").style.display = "none";
	}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
* Array donde se almacena los componentes de la url que se esta formando
*/
urlArray = new Array();
/**
*	FUNCION QUE COMPONE LA TIPOLOGIA SELECCIONADA
*   introduce elementos de la forma ty(clusterOid, familyOid, typeOid)
*/
function r01composeTypology() {	
	if (document.getElementById("formPresentation").value == "0") {
		//si no se muestran los combos de la tipologia seleccionada, la busqueda tiene que filtrar por todos
		for (i = 0; document.getElementById("selectedTypes") && i < parseInt(document.getElementById("selectedTypes").value); i++) {
			//valor de la tipologia preseleccionada
			var typeValue = document.getElementById("types" + i).value;			
			var typeSplit = typeValue.split("__");
			//si la longitud no es 3 significa que algo se ha hecho mal, revisar el oid de tipo, familia y cluster
			if (typeSplit.length == 3) {
				urlArray[urlArray.length] = "ty(" + globalCluster[typeSplit[0]] + "#" + globalFamily[typeSplit[1]] + "#" + globalType[typeSplit[2]] + ")";
			} else {
				alert("Error en la tipologia!!!");
				return null;
			}
		}
	} else if (document.getElementById("formPresentation").value == "1") {		
		//si solo se muestra el combo de tipos de contenidos filtra por el tipo seleccionado, familias pre-seleccionadas
		//a las que pertenece el tipo y clusters pre-seleccionados a las que pertenecen las familias y tipo
		if (document.getElementById("typesCombo")) {
			var typeValue = document.getElementById("typesCombo").value;
			var typeSplit = typeValue.split("__");					
			if (typeSplit[0] != "0" && typeSplit[0] != null && typeSplit[0] != "undefined") typeSplit[0] = globalCluster[typeSplit[0]];
			if (typeSplit[1] != "0" && typeSplit[1] != null && typeSplit[1] != "undefined") typeSplit[1] = globalFamily[typeSplit[1]];
			if (typeSplit[2] != "0" && typeSplit[2] != null && typeSplit[2] != "undefined") typeSplit[2] = globalType[typeSplit[2]];
			
			//si la longitud no es 3 significa que algo se ha hecho mal, revisar el oid de tipo, familia y cluster
			if (typeSplit.length == 3) {
				urlArray[urlArray.length] = "ty(" + typeSplit[0] + "#" + typeSplit[1] + "#" + typeSplit[2] + ")";
			}
		}
	} else {								
		//si se muestran los tres combos
		var clusterIndice = document.contentSearchForm.clusters.selectedIndex;
		//si no se selecciona cluster
		var clusterOid = "0";
		if (clusterIndice != null) {
			clusterOid = document.contentSearchForm.clusters.options[clusterIndice].value;
		}
		var selectFamilies = eval("document.contentSearchForm.families__" + clusterOid);
		//indice de la familia seleccionada
		var familyIndice = selectFamilies.selectedIndex;
		//valor de la familia seleccionada (familyOid)
		var familyOid = "0";
		if (familyIndice != null) {
			familyOid = selectFamilies.options[familyIndice].value;
		} 
		var selectTypes = eval("document.contentSearchForm.types__" + clusterOid + "__" + familyOid);
		var typeOid = "0";
		if (selectTypes) {
			//indice del tipo seleccionado
			var typeIndice = selectTypes.selectedIndex;
			if (typeIndice != null) {
				//valor del tipo seleccionado (typeOid)	
				typeOid = selectTypes.options[typeIndice].value;
			}
		}
		if (clusterOid != "0" && clusterOid != null && clusterOid != "undefined") clusterOid = globalCluster[clusterOid];
		if (familyOid != "0" && familyOid != null && familyOid != "undefined") familyOid = globalFamily[familyOid];					
		if (typeOid != "0" && typeOid != null && typeOid != "undefined") typeOid = globalType[typeOid];		
																																																				
		//introducir en el array de la url					
		urlArray[urlArray.length] = "ty(" + clusterOid + "#" + familyOid + "#" + typeOid + ")";										
	}
}
/**
* Funcion que calcula la fecha del sistema y la devuelve
*	dd/mm/yyyy
*/
function systemDate() {
	var fechaActual = new Date();
	var day = fechaActual.getDate() + "";
	if (day.length == 1) {
		day = "0" + day;
	}
	var month = (fechaActual.getMonth() + 1) + "";
	if (month.length == 1) {
		month = "0" + month;
	}
	var year = fechaActual.getYear();
	return day + "/" + month + "/" + year;
}
/**
* Funcion que compone los METADATOS SELECCIONADOS
*/
function r01composeMetaData() {	
	//recorre la lista de metaDatos, sacando del campo oculto los datos de los oid, operaciones, padres de cada uno de ellos
	if (document.getElementById("metaDataParentInfoOidSize")) {
		for (p = 0; p < parseInt(document.getElementById("metaDataParentInfoOidSize").value); p++) {
			
			for (i = 0; i < parseInt(document.getElementById("metaDataListSize" + p).value); i++) {
				var metaDatinfo = document.getElementById("metaData" + p + "_" + i).value;
				var metaDataInfoSplit = metaDatinfo.split("__");

				//oid del metaDato
				var metaDataOid = metaDataInfoSplit[0];
				//identificador de la operacion seleccionada
				var metaDataOperation = metaDataInfoSplit[1];
				//padre del metaData
				var metaDataParentOid = metaDataInfoSplit[2];
				//typo del padre del metaData
				var metaDataParentType = metaDataInfoSplit[3];
								
				//si se muestra alguno de los combos de tipologia
				//comprueba si la capa donde esta situado el metaDato, esto es la capa con el nombre del padre,
				//se encuentra seleccionada, esto es es visible
				//si la capa no es visible el metadato no se aniadira en el filtro aunque tenga falor por defecto
				var isFilter = true;
				if (document.getElementById("formPresentation").value != "0") {
					isFilter = false;
					for (var j = 0; j < urlArray.length; j++) {												
						var type = urlArray[j].substr(3, urlArray[j].length-4);
						var typeSplit = type.split("#"); 	
																		
						if (metaDataParentType == "C" && typeSplit[0] != "0" && globalCluster[metaDataParentOid] == typeSplit[0]) {
							isFilter = true;
							break;
						}											
						if (metaDataParentType == "F" && typeSplit[1] != "0" && globalFamily[metaDataParentOid] == typeSplit[1]) {
							isFilter = true;
							break;
						}											
						if (metaDataParentType == "T" && typeSplit[2] != "0" && globalType[metaDataParentOid] == typeSplit[2]) {
							isFilter = true;
							break;
						}																	
					}
				}
				
				//si el padre del metaDato ha sido seleccionado se puede incluir el metaDato en el filtro
				if (isFilter) {
					//si la operacion en BETWEEN hay don cuadros de texto text__sinceMetadaOid y text__untilMetadataOid
					if (metaDataOperation.toUpperCase() == "BETWEEN") {
						var metaDataTextSince = document.getElementById("text__since" + metaDataOid + "__" + metaDataParentOid + "__" + metaDataParentType);
						var metaDataTextUntil = document.getElementById("text__until" + metaDataOid + "__" + metaDataParentOid + "__" + metaDataParentType);
						if (metaDataTextSince && metaDataTextUntil) {
							var sinceValue = metaDataTextSince.value;
							var untilValue = metaDataTextUntil.value;
							//si se introduce la fecha DESDE pero no la fecha HASTA la introducimos como la fecha actual del sistema
							if ((sinceValue != null && sinceValue != "") && (untilValue == null || untilValue == "")) {
								untilValue = systemDate();
							}
							//si no se introduce la fecha DESDE si la fecha HASTA fija la fecha DESDE como 01/01/2000 ya que anteriormente no
							//existen contenidos
							if ((sinceValue == null || sinceValue == "") && (untilValue != null && untilValue != "")) {
								sinceValue = "01/01/2000";
							}
							//introducir en el array de la url
							if ((sinceValue != null && sinceValue != "") || (untilValue != null && untilValue != "")) {
								sinceValue = sinceValue.replace(/-/gi, "/").replace(/$$/gi, "");
								untilValue = untilValue.replace(/-/gi, "/").replace(/$$/gi, "");
								urlArray[urlArray.length] = "md(" + metaDataOid + "#" + metaDataOperation + "#" + sinceValue + "," + untilValue + ")";
							}
						}
					} else {
						var metaDataText = document.getElementById("text__" + metaDataOid + "__" + metaDataParentOid + "__" + metaDataParentType);
						if (metaDataText) {
							if (metaDataText.value != null && metaDataText.value != "") {
								var metaDataValue = metaDataText.value.replace(/-/gi, "").replace(/$$/gi, "");
								urlArray[urlArray.length] = "md(" + metaDataOid + "#" + metaDataOperation + "#" + metaDataValue + ")";
							}
						}
					}
				}//fin del if isFilter
			}//fin del for de la lista de metadatos
		}//fin del for de la lista de posiblesPadres
	}
}

/**
* Funcion que compone la parte de url correspondiente a los repositorios de publicacion
*/
function r01composePublishRepositories(){
	if(document.getElementById("numberOfPublishRepositories")){
		var numberOfPublishRepositories = document.getElementById("numberOfPublishRepositories").value;
		var publishRespositories ="";
		for(i=0; i<parseInt(numberOfPublishRepositories); i++){
			var publishRepositoryOid = eval(document.getElementById("publishRepositoryOid__"+i));
			publishRespositories += publishRepositoryOid.value;
			if(i != parseInt(numberOfPublishRepositories)-1){
				publishRespositories += "#";
			}
		}
		urlArray[urlArray.length] = "pr("+publishRespositories+")";
	}
}

//Array que almacena los combos con su seleccion.
var arrNodes = new Array();
var arrNodesLevel1 = new Array();
/**
* Funcion para identificar el elemento seleccionado del combo de etiquetas
*/
function selectedLabel(nodeId, level, identify, labelName) {					
	var objeto = new objetoCombo();
	objeto.identify = identify;
	objeto.nodeId = nodeId;		
	objeto.level = level;
	objeto.labelName = labelName;	
	arrNodes[objeto.identify] = objeto;	
}
		
//Objeto combo necesario para almacenar la informacion que se pasa al servlet
function objetoCombo() {
	this.identify = "";
	this.level = "";
	this.nodeId = "";
	this.labelName = "";
}
/**
* Funcion que compone la parte correspondiente a los ejes de la url
*/
function r01composeAxes() {
	if(!window.document.getElementById("comboStructuresSize")){
		return;
	}

	if (document.getElementById("comboStructuresSize").value == null 
		|| document.getElementById("comboStructuresSize").value == "") return;

	var comboStructuresSize = parseInt(document.getElementById("comboStructuresSize").value, 10);
	
	for (var i=0;i<comboStructuresSize;i++) {
		var selectIds = document.getElementById("comboStructureIds_" + i).value;	
		var arrIds = selectIds.split(";");
		
		for (var j=0;j<arrIds.length;j++) {
			if (document.getElementById(arrIds[j]).value.substr(0,2) != "0_") {
				try {
					document.getElementById(arrIds[j]).fireEvent("onchange");
				} catch (e) {
					document.getElementById(arrIds[j]).onchange();
				}	
			}	
		}
	}

	var axes = "";		
	var axesConcat = "ax(";	
	for (var i = 0; i < arrNodes.length; i++) {
		if (arrNodes[i] != null && arrNodes[i] != undefined) {
			var nodeId = arrNodes[i].nodeId.replace(";", ",");			
			if (nodeId.length>0) {
				axes += axesConcat + nodeId;
				axesConcat = "#"
			}	
		}
	}
		
	if (axes.length>0) {
		axes += ")";
		urlArray[urlArray.length] = axes;
	}
}
function r01composeAxesNew(){
	if (document.getElementById("comboStructuresSize").value == null 
		|| document.getElementById("comboStructuresSize").value == "") return;
		
	var comboStructuresSize = parseInt(document.getElementById("comboStructuresSize").value, 10);
	var axes = "ax(";
	for (var j=0;j<comboStructuresSize;j++) {
		var numCombos = eval("numCombos"+j);
		for(var i = numCombos-1; i >= 0; i--){
			if (document.getElementById("combo_"+j+"_"+i).value != 0){
				value = document.getElementById("combo_"+j+"_"+i).value;
				if(axes != "ax("){
					axes += "#";
				}
				var structureId = eval("structureId"+j);
				axes += structureId+","+value;
				
				break;
			}
		}
	}
	axes += ")";
	urlArray[urlArray.length]= axes;
}


/**
* FUNCION QUE LANZA LA BUSQUEDA
* LLAMA A LAS FUNCIONES QUE COMPONEN LA URL (TYPOLOGY, METADATA, AXIS) Y MONTA LA URL CON EL ARRAY QUE LE LLEGA
*/
function r01composeSearchQueryString() {
	searchClicked = true;
	//TIPOLOGIA
	r01composeTypology();
	//METADATOS
	r01composeMetaData();
	//EJES
	if (window.document.getElementById("combo_0_0")){
		r01composeAxesNew();
	}
	else{
		r01composeAxes();
	}
	//REPOSITORIOS DE PUBLICACION
	r01composePublishRepositories();
	
	//enlazar todos los atributos del filtro
	var parameters = "";
	for (i = 0; i < urlArray.length; i++) {
		
		if (i != urlArray.length - 1) {
			parameters += urlArray[i] + "$$";
		} else {
			parameters += urlArray[i];
		}
	}	
								
	//PAGINA DE PRESENTACION DE LOS RESULTADOS
	var resultsPresentationPage = document.getElementById("searchResultPageLink").value;

	//descomentar cuando queramos que funcione cogiendo pagina de presentacion	

	var commonSeachForm;
		
	if (document.all) {
		var htmlForm = "<form name=\"commonSeachForm\">";						 
		commonSeachForm =  document.createElement(htmlForm);				   
	} else {
		commonSeachForm = document.createElement("form");		
		commonSeachForm.setAttribute("name", "commonSeachForm");							
	}
				
	commonSeachForm.setAttribute("id", "commonSeachForm");
	commonSeachForm.setAttribute("method", "get");
	commonSeachForm.setAttribute("action", resultsPresentationPage);	
			
	//atributo para el envio de la querySeleccionada
	var paramQueryCommonSearchQry = r01CreateInputObject("hidden", "r01kCommonSearchQry", "r01kCommonSearchQry", "", "", "", "", "");
	
	if (document.all) {
		commonSeachForm.insertAdjacentElement("beforeEnd", paramQueryCommonSearchQry);
	} else  {
		commonSeachForm.appendChild(paramQueryCommonSearchQry);	
	}
	
	//Darle el valor siempre después de añadir al formulario	
	paramQueryCommonSearchQry.value = parameters;
						
	var numResults = document.getElementById("numResults").value;
	//atributo para el envio de la querySeleccionada
	var paramQueryNumResults = r01CreateInputObject("hidden", "r01kNumResultsPerPage", "r01kNumResultsPerPage", numResults, "", "", "", "");
	
	if (document.all) {
		commonSeachForm.insertAdjacentElement("beforeEnd", paramQueryNumResults);
	} else {
		commonSeachForm.appendChild(paramQueryNumResults);	
	}
		
	//reinicializa
	urlArray = new Array();		
	//introducir en formulario en el body de la pagina

	if (document.all) {
		window.document.body.insertAdjacentElement("beforeEnd", commonSeachForm);
	} else {
		window.document.body.appendChild(commonSeachForm);
	}	
		
	commonSeachForm.submit();	
}

function r01CreateInputObject(type, id, name, value, checked, size, textAlign, maxLength) {
	var objInput = null;
 	//Creamos el radio button
	if (document.all) {
		if (!checked) {
			checked = null;
		}    
		//IE (no se puede establecer el atributo name de la forma radioLayout.name = "valor";
		var htmlInput = "<INPUT";
		if (type != null) {
			htmlInput += " type='" + type + "'";
		}
		if (id != null) {
			htmlInput += " id='" + id + "'";
		}
		if (name != null) {
			htmlInput += " name='" + name + "'";
		}
		if (value != null) {
			htmlInput += " value='" + value + "'";
		}
		if (checked != null) {
			htmlInput += " checked='" + checked + "'";
		}
		if (size != null) {
			htmlInput += " size='" + size + "'";
		}
		if (maxLength != null) {
			htmlInput += " maxLength='" + maxLength + "'";
		}
		htmlInput += ">";
		objInput = document.createElement(htmlInput);
	} else {
		//FIREFOX (no se puede crear el objeto mediante document.createElement("<INPUT type='radio' name='";
		objInput = document.createElement("INPUT");
		if (type != null) {
			objInput.type = type;
		}
		if (id != null) {
			objInput.id = id;
		}
		if (name != null) {
			objInput.name = name;
		}
		if (value != null) {
			objInput.value = value;
		}
		if (checked != null) {
			objInput.checked = checked;
		}
		if (size != null) {
			objInput.size = size;
		}
		if (maxLength != null) {
			objInput.maxLength = maxLength;
		}
	}
	if (textAlign != null) {
		objInput.style.textAlign = textAlign;
	}
	return objInput;
}

function getElementsByClassName(tagName, className){
	var returnArray = new Array();
	var elementsArray = document.getElementsByTagName(tagName);
	for(var i=0;i<elementsArray.length;i++){
		if(elementsArray[i].className.indexOf(className) != -1){
		//if(elementsArray[i].className == className){
			returnArray[returnArray.length]=elementsArray[i];
		}
	}
	return returnArray;
}

/*************************************************************************************************/
/*   File: /AVComun/r01gCommonSearchVA/scripts/r01gCommonSearchComboStructures.js*/
/*************************************************************************************************/

/*
existe la variable global:
labelGuidStr_cont
cadena que contiene los guid de todas las etiquetas separadas por ";"
*/
function changeCombo(labelGUID, numberCombo, identify, structureGUID, level){
	var comboId = document.getElementById('comboStructure_'+labelGUID);
	var inputHiddenId ="level_comboStructure_"+labelGUID;
	var comboLevel=document.getElementById(inputHiddenId).value;		
	var label = new Array();
	label = comboId.value.split("_");
	var labelName = label[2];
	
	var nodeId = structureGUID+";"+label[0]+";"+label[1];
	
	if (searchClicked) {
		//Si entra por pulsar Buscar selecciona label(Arreglo al ir por pulsar atrás)
		selectedLabel(nodeId, level, identify, labelName);
		//En esté caso no hay que hacer nada con los combos
		return true;
	}			
		
	hiddenCombo(comboLevel, identify);
	
	if(numberCombo > comboLevel){
		var comboHijo = document.getElementById(label[0]+"_"+label[1]+"_"+identify);
		if (label[0]==0){
			var inputHijoHiddenId = "level_root_0_"+identify;
		}
		else {			
			var inputHijoHiddenId = "level_"+label[0]+"_"+label[1]+"_"+identify;
		}
		var comboLevelHijo = document.getElementById(inputHijoHiddenId).value;
		
		//funcion para devolver a la jsp donde se usen los combos 
		//el guid de la etiqueta seleccionada		
		if(comboHijo!=null){
			var comboEmpty = document.getElementById("id_"+comboLevelHijo+"_"+identify);
			comboHijo.style.display="block";
			comboEmpty.style.display="none";
		}
	}
}

function hiddenCombo(level, identify){
	var labelGUID = new Array();	
	var labels = document.getElementById("id_"+identify);
	var labelsGUID = document.getElementById("labelGuidJS_id_"+identify).value;
	labelGUID = labelsGUID.split(";");
	var comboDiv = "";
	var inputHiddenComboDiv = "";
	var levelComboDiv = "";
	var comboElement = "";
	var comboEmpty = "";
	
	for(i=0; i<labelGUID.length; i++){
		if(labelGUID[i]!=""){
			comboDiv = document.getElementById(labelGUID[i]);
			inputHiddenComboDiv = "level_"+labelGUID[i];
			levelComboDiv = document.getElementById(inputHiddenComboDiv).value;
			comboElement = document.getElementById('comboStructure_'+labelGUID[i]);
			
			if(parseInt(levelComboDiv) > parseInt(level)){
				comboEmpty = document.getElementById("id_"+levelComboDiv+"_"+identify);
				comboDiv.style.display="none";
				comboElement.selectedIndex=0;
				comboEmpty.style.display="block";
			}			
		}
	}
}
/**
* funcion establece el texto a todos los titulos del mismo nivel al ser cambiado
*/	
function levelTextChange(objEvent, level, comboIdentify) {
	var textValue = objEvent.value;	
	var inputs = document.getElementsByTagName("INPUT");
	
	for (var i=0;i<inputs.length;i++) {
		if (inputs[i].id != null && inputs[i].id.indexOf("text_"+level+"_"+comboIdentify) != -1) {
			inputs[i].value = textValue;
		}
	}	
}

/********************************************************************************************************/
/*********************  Nuevas funciones para pintar solo el numero de combos elejido *******************/
/********************************************************************************************************/
/*
	Funcion que carga los combos con las opciones necesarias
*/
function loadComboOptions(objSelect,comboIdentify){
	var id = objSelect.id; 
	var indiceCombo = parseInt(id.substr(id.lastIndexOf("_")+1,id.length),10);
	var selectedValue = objSelect.value;
	var comboId = "";
	var numCombos = eval("numCombos"+comboIdentify);
	
	if (selectedValue == 0){
		for (var i = (indiceCombo+1); i<numCombos; i++){
			comboId = "combo_"+comboIdentify+"_"+i;
			resetCombo(comboId);
		}
	}
	else if ((indiceCombo+1) < numCombos){
		comboId = "combo_"+comboIdentify+"_"+(indiceCombo+1);
		childArray = null;
		var arrayJSON = eval("arrayJSON"+comboIdentify);
		getArrayOptions(arrayJSON,selectedValue);
		resetCombo(comboId);
		loadOptions(childArray,comboId);
	}
}

/*
	Resetea el combo seleccionado, es decir elimina todas las opciones y pone la opcion inicial
	@param: id del combo
*/
function resetCombo(comboId){
	document.getElementById(comboId).options.length = 0;
	document.getElementById(comboId).options[0]= new Option(defaultValueTxt,"0");
}

/*
	Carga en combo las opciones que obtenemos del JSON
	@param: array JSON con las opciones a cargar
	@param: id del combo en el que cargamos las opciones
*/
function loadOptions(arrayOptions, comboId){
	if(arrayOptions != null){
		for(var i=0; i<arrayOptions.length; i++){
			var newOption = new Option(arrayOptions[i].labelName,arrayOptions[i].labelOid);
			document.getElementById(comboId).options[document.getElementById(comboId).options.length] = newOption;
		}
	}
}

/*
	Funcion recursiva que busca los hijos del elemento seleccionado y los carga en un array 
	definido como variable global llamado childArray
	@param: array donde iniciar la busqueda
	@param: elto seleccionado
*/
function getArrayOptions(arraySearch,selectedValue){
	var arrayOptions = arraySearch;
	for (var i=0; i<arrayOptions.length; i++){
		if(arrayOptions[i].labelOid == selectedValue){
		childArray = arrayOptions[i].child;
		}
		else{
			if(hasChild(arrayOptions[i].child)){
				getArrayOptions(arrayOptions[i].child,selectedValue)
			} 
		}
	}
}

/*
	Funcion a la que le pasamos un array de hijos y nos dice si tiene elementos
	@param: array de hijos
	@return: boolean (true si tiene hijos, false si no los tiene)
*/
function hasChild(child){
	return (child.length > 0);
}

/*************************************************************************************************/
/*   File: /AVComun/r01gCommonSearchVA/scripts/r01gCommonSearchScripts.js*/
/*************************************************************************************************/

/*
 * jQuery 1.2.6 - New Wave Javascript
 *
 * Copyright (c) 2008 John Resig (jquery.com)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $
 * $Rev: 5685 $
 */
  if(window.$ == undefined){
	eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(H(){J w=1b.4M,3m$=1b.$;J D=1b.4M=1b.$=H(a,b){I 2B D.17.5j(a,b)};J u=/^[^<]*(<(.|\\s)+>)[^>]*$|^#(\\w+)$/,62=/^.[^:#\\[\\.]*$/,12;D.17=D.44={5j:H(d,b){d=d||S;G(d.16){7[0]=d;7.K=1;I 7}G(1j d=="23"){J c=u.2D(d);G(c&&(c[1]||!b)){G(c[1])d=D.4h([c[1]],b);N{J a=S.61(c[3]);G(a){G(a.2v!=c[3])I D().2q(d);I D(a)}d=[]}}N I D(b).2q(d)}N G(D.1D(d))I D(S)[D.17.27?"27":"43"](d);I 7.6Y(D.2d(d))},5w:"1.2.6",8G:H(){I 7.K},K:0,3p:H(a){I a==12?D.2d(7):7[a]},2I:H(b){J a=D(b);a.5n=7;I a},6Y:H(a){7.K=0;2p.44.1p.1w(7,a);I 7},P:H(a,b){I D.P(7,a,b)},5i:H(b){J a=-1;I D.2L(b&&b.5w?b[0]:b,7)},1K:H(c,a,b){J d=c;G(c.1q==56)G(a===12)I 7[0]&&D[b||"1K"](7[0],c);N{d={};d[c]=a}I 7.P(H(i){R(c 1n d)D.1K(b?7.V:7,c,D.1i(7,d[c],b,i,c))})},1g:H(b,a){G((b==\'2h\'||b==\'1Z\')&&3d(a)<0)a=12;I 7.1K(b,a,"2a")},1r:H(b){G(1j b!="49"&&b!=U)I 7.4E().3v((7[0]&&7[0].2z||S).5F(b));J a="";D.P(b||7,H(){D.P(7.3t,H(){G(7.16!=8)a+=7.16!=1?7.76:D.17.1r([7])})});I a},5z:H(b){G(7[0])D(b,7[0].2z).5y().39(7[0]).2l(H(){J a=7;1B(a.1x)a=a.1x;I a}).3v(7);I 7},8Y:H(a){I 7.P(H(){D(7).6Q().5z(a)})},8R:H(a){I 7.P(H(){D(7).5z(a)})},3v:H(){I 7.3W(19,M,Q,H(a){G(7.16==1)7.3U(a)})},6F:H(){I 7.3W(19,M,M,H(a){G(7.16==1)7.39(a,7.1x)})},6E:H(){I 7.3W(19,Q,Q,H(a){7.1d.39(a,7)})},5q:H(){I 7.3W(19,Q,M,H(a){7.1d.39(a,7.2H)})},3l:H(){I 7.5n||D([])},2q:H(b){J c=D.2l(7,H(a){I D.2q(b,a)});I 7.2I(/[^+>] [^+>]/.11(b)||b.1h("..")>-1?D.4r(c):c)},5y:H(e){J f=7.2l(H(){G(D.14.1f&&!D.4n(7)){J a=7.6o(M),5h=S.3h("1v");5h.3U(a);I D.4h([5h.4H])[0]}N I 7.6o(M)});J d=f.2q("*").5c().P(H(){G(7[E]!=12)7[E]=U});G(e===M)7.2q("*").5c().P(H(i){G(7.16==3)I;J c=D.L(7,"3w");R(J a 1n c)R(J b 1n c[a])D.W.1e(d[i],a,c[a][b],c[a][b].L)});I f},1E:H(b){I 7.2I(D.1D(b)&&D.3C(7,H(a,i){I b.1k(a,i)})||D.3g(b,7))},4Y:H(b){G(b.1q==56)G(62.11(b))I 7.2I(D.3g(b,7,M));N b=D.3g(b,7);J a=b.K&&b[b.K-1]!==12&&!b.16;I 7.1E(H(){I a?D.2L(7,b)<0:7!=b})},1e:H(a){I 7.2I(D.4r(D.2R(7.3p(),1j a==\'23\'?D(a):D.2d(a))))},3F:H(a){I!!a&&D.3g(a,7).K>0},7T:H(a){I 7.3F("."+a)},6e:H(b){G(b==12){G(7.K){J c=7[0];G(D.Y(c,"2A")){J e=c.64,63=[],15=c.15,2V=c.O=="2A-2V";G(e<0)I U;R(J i=2V?e:0,2f=2V?e+1:15.K;i<2f;i++){J d=15[i];G(d.2W){b=D.14.1f&&!d.at.2x.an?d.1r:d.2x;G(2V)I b;63.1p(b)}}I 63}N I(7[0].2x||"").1o(/\\r/g,"")}I 12}G(b.1q==4L)b+=\'\';I 7.P(H(){G(7.16!=1)I;G(b.1q==2p&&/5O|5L/.11(7.O))7.4J=(D.2L(7.2x,b)>=0||D.2L(7.34,b)>=0);N G(D.Y(7,"2A")){J a=D.2d(b);D("9R",7).P(H(){7.2W=(D.2L(7.2x,a)>=0||D.2L(7.1r,a)>=0)});G(!a.K)7.64=-1}N 7.2x=b})},2K:H(a){I a==12?(7[0]?7[0].4H:U):7.4E().3v(a)},7b:H(a){I 7.5q(a).21()},79:H(i){I 7.3s(i,i+1)},3s:H(){I 7.2I(2p.44.3s.1w(7,19))},2l:H(b){I 7.2I(D.2l(7,H(a,i){I b.1k(a,i,a)}))},5c:H(){I 7.1e(7.5n)},L:H(d,b){J a=d.1R(".");a[1]=a[1]?"."+a[1]:"";G(b===12){J c=7.5C("9z"+a[1]+"!",[a[0]]);G(c===12&&7.K)c=D.L(7[0],d);I c===12&&a[1]?7.L(a[0]):c}N I 7.1P("9u"+a[1]+"!",[a[0],b]).P(H(){D.L(7,d,b)})},3b:H(a){I 7.P(H(){D.3b(7,a)})},3W:H(g,f,h,d){J e=7.K>1,3x;I 7.P(H(){G(!3x){3x=D.4h(g,7.2z);G(h)3x.9o()}J b=7;G(f&&D.Y(7,"1T")&&D.Y(3x[0],"4F"))b=7.3H("22")[0]||7.3U(7.2z.3h("22"));J c=D([]);D.P(3x,H(){J a=e?D(7).5y(M)[0]:7;G(D.Y(a,"1m"))c=c.1e(a);N{G(a.16==1)c=c.1e(D("1m",a).21());d.1k(b,a)}});c.P(6T)})}};D.17.5j.44=D.17;H 6T(i,a){G(a.4d)D.3Y({1a:a.4d,31:Q,1O:"1m"});N D.5u(a.1r||a.6O||a.4H||"");G(a.1d)a.1d.37(a)}H 1z(){I+2B 8J}D.1l=D.17.1l=H(){J b=19[0]||{},i=1,K=19.K,4x=Q,15;G(b.1q==8I){4x=b;b=19[1]||{};i=2}G(1j b!="49"&&1j b!="H")b={};G(K==i){b=7;--i}R(;i<K;i++)G((15=19[i])!=U)R(J c 1n 15){J a=b[c],2w=15[c];G(b===2w)6M;G(4x&&2w&&1j 2w=="49"&&!2w.16)b[c]=D.1l(4x,a||(2w.K!=U?[]:{}),2w);N G(2w!==12)b[c]=2w}I b};J E="4M"+1z(),6K=0,5r={},6G=/z-?5i|8B-?8A|1y|6B|8v-?1Z/i,3P=S.3P||{};D.1l({8u:H(a){1b.$=3m$;G(a)1b.4M=w;I D},1D:H(a){I!!a&&1j a!="23"&&!a.Y&&a.1q!=2p&&/^[\\s[]?H/.11(a+"")},4n:H(a){I a.1C&&!a.1c||a.2j&&a.2z&&!a.2z.1c},5u:H(a){a=D.3k(a);G(a){J b=S.3H("6w")[0]||S.1C,1m=S.3h("1m");1m.O="1r/4t";G(D.14.1f)1m.1r=a;N 1m.3U(S.5F(a));b.39(1m,b.1x);b.37(1m)}},Y:H(b,a){I b.Y&&b.Y.2r()==a.2r()},1Y:{},L:H(c,d,b){c=c==1b?5r:c;J a=c[E];G(!a)a=c[E]=++6K;G(d&&!D.1Y[a])D.1Y[a]={};G(b!==12)D.1Y[a][d]=b;I d?D.1Y[a][d]:a},3b:H(c,b){c=c==1b?5r:c;J a=c[E];G(b){G(D.1Y[a]){2U D.1Y[a][b];b="";R(b 1n D.1Y[a])1X;G(!b)D.3b(c)}}N{1U{2U c[E]}1V(e){G(c.5l)c.5l(E)}2U D.1Y[a]}},P:H(d,a,c){J e,i=0,K=d.K;G(c){G(K==12){R(e 1n d)G(a.1w(d[e],c)===Q)1X}N R(;i<K;)G(a.1w(d[i++],c)===Q)1X}N{G(K==12){R(e 1n d)G(a.1k(d[e],e,d[e])===Q)1X}N R(J b=d[0];i<K&&a.1k(b,i,b)!==Q;b=d[++i]){}}I d},1i:H(b,a,c,i,d){G(D.1D(a))a=a.1k(b,i);I a&&a.1q==4L&&c=="2a"&&!6G.11(d)?a+"2X":a},1F:{1e:H(c,b){D.P((b||"").1R(/\\s+/),H(i,a){G(c.16==1&&!D.1F.3T(c.1F,a))c.1F+=(c.1F?" ":"")+a})},21:H(c,b){G(c.16==1)c.1F=b!=12?D.3C(c.1F.1R(/\\s+/),H(a){I!D.1F.3T(b,a)}).6s(" "):""},3T:H(b,a){I D.2L(a,(b.1F||b).6r().1R(/\\s+/))>-1}},6q:H(b,c,a){J e={};R(J d 1n c){e[d]=b.V[d];b.V[d]=c[d]}a.1k(b);R(J d 1n c)b.V[d]=e[d]},1g:H(d,e,c){G(e=="2h"||e=="1Z"){J b,3X={30:"5x",5g:"1G",18:"3I"},35=e=="2h"?["5e","6k"]:["5G","6i"];H 5b(){b=e=="2h"?d.8f:d.8c;J a=0,2C=0;D.P(35,H(){a+=3d(D.2a(d,"57"+7,M))||0;2C+=3d(D.2a(d,"2C"+7+"4b",M))||0});b-=29.83(a+2C)}G(D(d).3F(":4j"))5b();N D.6q(d,3X,5b);I 29.2f(0,b)}I D.2a(d,e,c)},2a:H(f,l,k){J e,V=f.V;H 3E(b){G(!D.14.2k)I Q;J a=3P.54(b,U);I!a||a.52("3E")==""}G(l=="1y"&&D.14.1f){e=D.1K(V,"1y");I e==""?"1":e}G(D.14.2G&&l=="18"){J d=V.50;V.50="0 7Y 7W";V.50=d}G(l.1I(/4i/i))l=y;G(!k&&V&&V[l])e=V[l];N G(3P.54){G(l.1I(/4i/i))l="4i";l=l.1o(/([A-Z])/g,"-$1").3y();J c=3P.54(f,U);G(c&&!3E(f))e=c.52(l);N{J g=[],2E=[],a=f,i=0;R(;a&&3E(a);a=a.1d)2E.6h(a);R(;i<2E.K;i++)G(3E(2E[i])){g[i]=2E[i].V.18;2E[i].V.18="3I"}e=l=="18"&&g[2E.K-1]!=U?"2F":(c&&c.52(l))||"";R(i=0;i<g.K;i++)G(g[i]!=U)2E[i].V.18=g[i]}G(l=="1y"&&e=="")e="1"}N G(f.4g){J h=l.1o(/\\-(\\w)/g,H(a,b){I b.2r()});e=f.4g[l]||f.4g[h];G(!/^\\d+(2X)?$/i.11(e)&&/^\\d/.11(e)){J j=V.1A,66=f.65.1A;f.65.1A=f.4g.1A;V.1A=e||0;e=V.aM+"2X";V.1A=j;f.65.1A=66}}I e},4h:H(l,h){J k=[];h=h||S;G(1j h.3h==\'12\')h=h.2z||h[0]&&h[0].2z||S;D.P(l,H(i,d){G(!d)I;G(d.1q==4L)d+=\'\';G(1j d=="23"){d=d.1o(/(<(\\w+)[^>]*?)\\/>/g,H(b,a,c){I c.1I(/^(aK|4f|7E|aG|4T|7A|aB|3n|az|ay|av)$/i)?b:a+"></"+c+">"});J f=D.3k(d).3y(),1v=h.3h("1v");J e=!f.1h("<au")&&[1,"<2A 7w=\'7w\'>","</2A>"]||!f.1h("<ar")&&[1,"<7v>","</7v>"]||f.1I(/^<(aq|22|am|ak|ai)/)&&[1,"<1T>","</1T>"]||!f.1h("<4F")&&[2,"<1T><22>","</22></1T>"]||(!f.1h("<af")||!f.1h("<ad"))&&[3,"<1T><22><4F>","</4F></22></1T>"]||!f.1h("<7E")&&[2,"<1T><22></22><7q>","</7q></1T>"]||D.14.1f&&[1,"1v<1v>","</1v>"]||[0,"",""];1v.4H=e[1]+d+e[2];1B(e[0]--)1v=1v.5T;G(D.14.1f){J g=!f.1h("<1T")&&f.1h("<22")<0?1v.1x&&1v.1x.3t:e[1]=="<1T>"&&f.1h("<22")<0?1v.3t:[];R(J j=g.K-1;j>=0;--j)G(D.Y(g[j],"22")&&!g[j].3t.K)g[j].1d.37(g[j]);G(/^\\s/.11(d))1v.39(h.5F(d.1I(/^\\s*/)[0]),1v.1x)}d=D.2d(1v.3t)}G(d.K===0&&(!D.Y(d,"3V")&&!D.Y(d,"2A")))I;G(d[0]==12||D.Y(d,"3V")||d.15)k.1p(d);N k=D.2R(k,d)});I k},1K:H(d,f,c){G(!d||d.16==3||d.16==8)I 12;J e=!D.4n(d),40=c!==12,1f=D.14.1f;f=e&&D.3X[f]||f;G(d.2j){J g=/5Q|4d|V/.11(f);G(f=="2W"&&D.14.2k)d.1d.64;G(f 1n d&&e&&!g){G(40){G(f=="O"&&D.Y(d,"4T")&&d.1d)7p"O a3 a1\'t 9V 9U";d[f]=c}G(D.Y(d,"3V")&&d.7i(f))I d.7i(f).76;I d[f]}G(1f&&e&&f=="V")I D.1K(d.V,"9T",c);G(40)d.9Q(f,""+c);J h=1f&&e&&g?d.4G(f,2):d.4G(f);I h===U?12:h}G(1f&&f=="1y"){G(40){d.6B=1;d.1E=(d.1E||"").1o(/7f\\([^)]*\\)/,"")+(3r(c)+\'\'=="9L"?"":"7f(1y="+c*7a+")")}I d.1E&&d.1E.1h("1y=")>=0?(3d(d.1E.1I(/1y=([^)]*)/)[1])/7a)+\'\':""}f=f.1o(/-([a-z])/9H,H(a,b){I b.2r()});G(40)d[f]=c;I d[f]},3k:H(a){I(a||"").1o(/^\\s+|\\s+$/g,"")},2d:H(b){J a=[];G(b!=U){J i=b.K;G(i==U||b.1R||b.4I||b.1k)a[0]=b;N 1B(i)a[--i]=b[i]}I a},2L:H(b,a){R(J i=0,K=a.K;i<K;i++)G(a[i]===b)I i;I-1},2R:H(a,b){J i=0,T,2S=a.K;G(D.14.1f){1B(T=b[i++])G(T.16!=8)a[2S++]=T}N 1B(T=b[i++])a[2S++]=T;I a},4r:H(a){J c=[],2o={};1U{R(J i=0,K=a.K;i<K;i++){J b=D.L(a[i]);G(!2o[b]){2o[b]=M;c.1p(a[i])}}}1V(e){c=a}I c},3C:H(c,a,d){J b=[];R(J i=0,K=c.K;i<K;i++)G(!d!=!a(c[i],i))b.1p(c[i]);I b},2l:H(d,a){J c=[];R(J i=0,K=d.K;i<K;i++){J b=a(d[i],i);G(b!=U)c[c.K]=b}I c.7d.1w([],c)}});J v=9B.9A.3y();D.14={5B:(v.1I(/.+(?:9y|9x|9w|9v)[\\/: ]([\\d.]+)/)||[])[1],2k:/75/.11(v),2G:/2G/.11(v),1f:/1f/.11(v)&&!/2G/.11(v),42:/42/.11(v)&&!/(9s|75)/.11(v)};J y=D.14.1f?"7o":"72";D.1l({71:!D.14.1f||S.70=="6Z",3X:{"R":"9n","9k":"1F","4i":y,72:y,7o:y,9h:"9f",9e:"9d",9b:"99"}});D.P({6W:H(a){I a.1d},97:H(a){I D.4S(a,"1d")},95:H(a){I D.3a(a,2,"2H")},91:H(a){I D.3a(a,2,"4l")},8Z:H(a){I D.4S(a,"2H")},8X:H(a){I D.4S(a,"4l")},8W:H(a){I D.5v(a.1d.1x,a)},8V:H(a){I D.5v(a.1x)},6Q:H(a){I D.Y(a,"8U")?a.8T||a.8S.S:D.2d(a.3t)}},H(c,d){D.17[c]=H(b){J a=D.2l(7,d);G(b&&1j b=="23")a=D.3g(b,a);I 7.2I(D.4r(a))}});D.P({6P:"3v",8Q:"6F",39:"6E",8P:"5q",8O:"7b"},H(c,b){D.17[c]=H(){J a=19;I 7.P(H(){R(J i=0,K=a.K;i<K;i++)D(a[i])[b](7)})}});D.P({8N:H(a){D.1K(7,a,"");G(7.16==1)7.5l(a)},8M:H(a){D.1F.1e(7,a)},8L:H(a){D.1F.21(7,a)},8K:H(a){D.1F[D.1F.3T(7,a)?"21":"1e"](7,a)},21:H(a){G(!a||D.1E(a,[7]).r.K){D("*",7).1e(7).P(H(){D.W.21(7);D.3b(7)});G(7.1d)7.1d.37(7)}},4E:H(){D(">*",7).21();1B(7.1x)7.37(7.1x)}},H(a,b){D.17[a]=H(){I 7.P(b,19)}});D.P(["6N","4b"],H(i,c){J b=c.3y();D.17[b]=H(a){I 7[0]==1b?D.14.2G&&S.1c["5t"+c]||D.14.2k&&1b["5s"+c]||S.70=="6Z"&&S.1C["5t"+c]||S.1c["5t"+c]:7[0]==S?29.2f(29.2f(S.1c["4y"+c],S.1C["4y"+c]),29.2f(S.1c["2i"+c],S.1C["2i"+c])):a==12?(7.K?D.1g(7[0],b):U):7.1g(b,a.1q==56?a:a+"2X")}});H 25(a,b){I a[0]&&3r(D.2a(a[0],b,M),10)||0}J C=D.14.2k&&3r(D.14.5B)<8H?"(?:[\\\\w*3m-]|\\\\\\\\.)":"(?:[\\\\w\\8F-\\8E*3m-]|\\\\\\\\.)",6L=2B 4v("^>\\\\s*("+C+"+)"),6J=2B 4v("^("+C+"+)(#)("+C+"+)"),6I=2B 4v("^([#.]?)("+C+"*)");D.1l({6H:{"":H(a,i,m){I m[2]=="*"||D.Y(a,m[2])},"#":H(a,i,m){I a.4G("2v")==m[2]},":":{8D:H(a,i,m){I i<m[3]-0},8C:H(a,i,m){I i>m[3]-0},3a:H(a,i,m){I m[3]-0==i},79:H(a,i,m){I m[3]-0==i},3o:H(a,i){I i==0},3S:H(a,i,m,r){I i==r.K-1},6D:H(a,i){I i%2==0},6C:H(a,i){I i%2},"3o-4u":H(a){I a.1d.3H("*")[0]==a},"3S-4u":H(a){I D.3a(a.1d.5T,1,"4l")==a},"8z-4u":H(a){I!D.3a(a.1d.5T,2,"4l")},6W:H(a){I a.1x},4E:H(a){I!a.1x},8y:H(a,i,m){I(a.6O||a.8x||D(a).1r()||"").1h(m[3])>=0},4j:H(a){I"1G"!=a.O&&D.1g(a,"18")!="2F"&&D.1g(a,"5g")!="1G"},1G:H(a){I"1G"==a.O||D.1g(a,"18")=="2F"||D.1g(a,"5g")=="1G"},8w:H(a){I!a.3R},3R:H(a){I a.3R},4J:H(a){I a.4J},2W:H(a){I a.2W||D.1K(a,"2W")},1r:H(a){I"1r"==a.O},5O:H(a){I"5O"==a.O},5L:H(a){I"5L"==a.O},5p:H(a){I"5p"==a.O},3Q:H(a){I"3Q"==a.O},5o:H(a){I"5o"==a.O},6A:H(a){I"6A"==a.O},6z:H(a){I"6z"==a.O},2s:H(a){I"2s"==a.O||D.Y(a,"2s")},4T:H(a){I/4T|2A|6y|2s/i.11(a.Y)},3T:H(a,i,m){I D.2q(m[3],a).K},8t:H(a){I/h\\d/i.11(a.Y)},8s:H(a){I D.3C(D.3O,H(b){I a==b.T}).K}}},6x:[/^(\\[) *@?([\\w-]+) *([!*$^~=]*) *(\'?"?)(.*?)\\4 *\\]/,/^(:)([\\w-]+)\\("?\'?(.*?(\\(.*?\\))?[^(]*?)"?\'?\\)/,2B 4v("^([:.#]*)("+C+"+)")],3g:H(a,c,b){J d,1t=[];1B(a&&a!=d){d=a;J f=D.1E(a,c,b);a=f.t.1o(/^\\s*,\\s*/,"");1t=b?c=f.r:D.2R(1t,f.r)}I 1t},2q:H(t,o){G(1j t!="23")I[t];G(o&&o.16!=1&&o.16!=9)I[];o=o||S;J d=[o],2o=[],3S,Y;1B(t&&3S!=t){J r=[];3S=t;t=D.3k(t);J l=Q,3j=6L,m=3j.2D(t);G(m){Y=m[1].2r();R(J i=0;d[i];i++)R(J c=d[i].1x;c;c=c.2H)G(c.16==1&&(Y=="*"||c.Y.2r()==Y))r.1p(c);d=r;t=t.1o(3j,"");G(t.1h(" ")==0)6M;l=M}N{3j=/^([>+~])\\s*(\\w*)/i;G((m=3j.2D(t))!=U){r=[];J k={};Y=m[2].2r();m=m[1];R(J j=0,3i=d.K;j<3i;j++){J n=m=="~"||m=="+"?d[j].2H:d[j].1x;R(;n;n=n.2H)G(n.16==1){J g=D.L(n);G(m=="~"&&k[g])1X;G(!Y||n.Y.2r()==Y){G(m=="~")k[g]=M;r.1p(n)}G(m=="+")1X}}d=r;t=D.3k(t.1o(3j,""));l=M}}G(t&&!l){G(!t.1h(",")){G(o==d[0])d.4s();2o=D.2R(2o,d);r=d=[o];t=" "+t.6v(1,t.K)}N{J h=6J;J m=h.2D(t);G(m){m=[0,m[2],m[3],m[1]]}N{h=6I;m=h.2D(t)}m[2]=m[2].1o(/\\\\/g,"");J f=d[d.K-1];G(m[1]=="#"&&f&&f.61&&!D.4n(f)){J p=f.61(m[2]);G((D.14.1f||D.14.2G)&&p&&1j p.2v=="23"&&p.2v!=m[2])p=D(\'[@2v="\'+m[2]+\'"]\',f)[0];d=r=p&&(!m[3]||D.Y(p,m[3]))?[p]:[]}N{R(J i=0;d[i];i++){J a=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];G(a=="*"&&d[i].Y.3y()=="49")a="3n";r=D.2R(r,d[i].3H(a))}G(m[1]==".")r=D.5m(r,m[2]);G(m[1]=="#"){J e=[];R(J i=0;r[i];i++)G(r[i].4G("2v")==m[2]){e=[r[i]];1X}r=e}d=r}t=t.1o(h,"")}}G(t){J b=D.1E(t,r);d=r=b.r;t=D.3k(b.t)}}G(t)d=[];G(d&&o==d[0])d.4s();2o=D.2R(2o,d);I 2o},5m:H(r,m,a){m=" "+m+" ";J c=[];R(J i=0;r[i];i++){J b=(" "+r[i].1F+" ").1h(m)>=0;G(!a&&b||a&&!b)c.1p(r[i])}I c},1E:H(t,r,h){J d;1B(t&&t!=d){d=t;J p=D.6x,m;R(J i=0;p[i];i++){m=p[i].2D(t);G(m){t=t.8r(m[0].K);m[2]=m[2].1o(/\\\\/g,"");1X}}G(!m)1X;G(m[1]==":"&&m[2]=="4Y")r=62.11(m[3])?D.1E(m[3],r,M).r:D(r).4Y(m[3]);N G(m[1]==".")r=D.5m(r,m[2],h);N G(m[1]=="["){J g=[],O=m[3];R(J i=0,3i=r.K;i<3i;i++){J a=r[i],z=a[D.3X[m[2]]||m[2]];G(z==U||/5Q|4d|2W/.11(m[2]))z=D.1K(a,m[2])||\'\';G((O==""&&!!z||O=="="&&z==m[5]||O=="!="&&z!=m[5]||O=="^="&&z&&!z.1h(m[5])||O=="$="&&z.6v(z.K-m[5].K)==m[5]||(O=="*="||O=="~=")&&z.1h(m[5])>=0)^h)g.1p(a)}r=g}N G(m[1]==":"&&m[2]=="3a-4u"){J e={},g=[],11=/(-?)(\\d*)n((?:\\+|-)?\\d*)/.2D(m[3]=="6D"&&"2n"||m[3]=="6C"&&"2n+1"||!/\\D/.11(m[3])&&"8q+"+m[3]||m[3]),3o=(11[1]+(11[2]||1))-0,d=11[3]-0;R(J i=0,3i=r.K;i<3i;i++){J j=r[i],1d=j.1d,2v=D.L(1d);G(!e[2v]){J c=1;R(J n=1d.1x;n;n=n.2H)G(n.16==1)n.4q=c++;e[2v]=M}J b=Q;G(3o==0){G(j.4q==d)b=M}N G((j.4q-d)%3o==0&&(j.4q-d)/3o>=0)b=M;G(b^h)g.1p(j)}r=g}N{J f=D.6H[m[1]];G(1j f=="49")f=f[m[2]];G(1j f=="23")f=6u("Q||H(a,i){I "+f+";}");r=D.3C(r,H(a,i){I f(a,i,m,r)},h)}}I{r:r,t:t}},4S:H(b,c){J a=[],1t=b[c];1B(1t&&1t!=S){G(1t.16==1)a.1p(1t);1t=1t[c]}I a},3a:H(a,e,c,b){e=e||1;J d=0;R(;a;a=a[c])G(a.16==1&&++d==e)1X;I a},5v:H(n,a){J r=[];R(;n;n=n.2H){G(n.16==1&&n!=a)r.1p(n)}I r}});D.W={1e:H(f,i,g,e){G(f.16==3||f.16==8)I;G(D.14.1f&&f.4I)f=1b;G(!g.24)g.24=7.24++;G(e!=12){J h=g;g=7.3M(h,H(){I h.1w(7,19)});g.L=e}J j=D.L(f,"3w")||D.L(f,"3w",{}),1H=D.L(f,"1H")||D.L(f,"1H",H(){G(1j D!="12"&&!D.W.5k)I D.W.1H.1w(19.3L.T,19)});1H.T=f;D.P(i.1R(/\\s+/),H(c,b){J a=b.1R(".");b=a[0];g.O=a[1];J d=j[b];G(!d){d=j[b]={};G(!D.W.2t[b]||D.W.2t[b].4p.1k(f)===Q){G(f.3K)f.3K(b,1H,Q);N G(f.6t)f.6t("4o"+b,1H)}}d[g.24]=g;D.W.26[b]=M});f=U},24:1,26:{},21:H(e,h,f){G(e.16==3||e.16==8)I;J i=D.L(e,"3w"),1L,5i;G(i){G(h==12||(1j h=="23"&&h.8p(0)=="."))R(J g 1n i)7.21(e,g+(h||""));N{G(h.O){f=h.2y;h=h.O}D.P(h.1R(/\\s+/),H(b,a){J c=a.1R(".");a=c[0];G(i[a]){G(f)2U i[a][f.24];N R(f 1n i[a])G(!c[1]||i[a][f].O==c[1])2U i[a][f];R(1L 1n i[a])1X;G(!1L){G(!D.W.2t[a]||D.W.2t[a].4A.1k(e)===Q){G(e.6p)e.6p(a,D.L(e,"1H"),Q);N G(e.6n)e.6n("4o"+a,D.L(e,"1H"))}1L=U;2U i[a]}}})}R(1L 1n i)1X;G(!1L){J d=D.L(e,"1H");G(d)d.T=U;D.3b(e,"3w");D.3b(e,"1H")}}},1P:H(h,c,f,g,i){c=D.2d(c);G(h.1h("!")>=0){h=h.3s(0,-1);J a=M}G(!f){G(7.26[h])D("*").1e([1b,S]).1P(h,c)}N{G(f.16==3||f.16==8)I 12;J b,1L,17=D.1D(f[h]||U),W=!c[0]||!c[0].32;G(W){c.6h({O:h,2J:f,32:H(){},3J:H(){},4C:1z()});c[0][E]=M}c[0].O=h;G(a)c[0].6m=M;J d=D.L(f,"1H");G(d)b=d.1w(f,c);G((!17||(D.Y(f,\'a\')&&h=="4V"))&&f["4o"+h]&&f["4o"+h].1w(f,c)===Q)b=Q;G(W)c.4s();G(i&&D.1D(i)){1L=i.1w(f,b==U?c:c.7d(b));G(1L!==12)b=1L}G(17&&g!==Q&&b!==Q&&!(D.Y(f,\'a\')&&h=="4V")){7.5k=M;1U{f[h]()}1V(e){}}7.5k=Q}I b},1H:H(b){J a,1L,38,5f,4m;b=19[0]=D.W.6l(b||1b.W);38=b.O.1R(".");b.O=38[0];38=38[1];5f=!38&&!b.6m;4m=(D.L(7,"3w")||{})[b.O];R(J j 1n 4m){J c=4m[j];G(5f||c.O==38){b.2y=c;b.L=c.L;1L=c.1w(7,19);G(a!==Q)a=1L;G(1L===Q){b.32();b.3J()}}}I a},6l:H(b){G(b[E]==M)I b;J d=b;b={8o:d};J c="8n 8m 8l 8k 2s 8j 47 5d 6j 5E 8i L 8h 8g 4K 2y 5a 59 8e 8b 58 6f 8a 88 4k 87 86 84 6d 2J 4C 6c O 82 81 35".1R(" ");R(J i=c.K;i;i--)b[c[i]]=d[c[i]];b[E]=M;b.32=H(){G(d.32)d.32();d.80=Q};b.3J=H(){G(d.3J)d.3J();d.7Z=M};b.4C=b.4C||1z();G(!b.2J)b.2J=b.6d||S;G(b.2J.16==3)b.2J=b.2J.1d;G(!b.4k&&b.4K)b.4k=b.4K==b.2J?b.6c:b.4K;G(b.58==U&&b.5d!=U){J a=S.1C,1c=S.1c;b.58=b.5d+(a&&a.2e||1c&&1c.2e||0)-(a.6b||0);b.6f=b.6j+(a&&a.2c||1c&&1c.2c||0)-(a.6a||0)}G(!b.35&&((b.47||b.47===0)?b.47:b.5a))b.35=b.47||b.5a;G(!b.59&&b.5E)b.59=b.5E;G(!b.35&&b.2s)b.35=(b.2s&1?1:(b.2s&2?3:(b.2s&4?2:0)));I b},3M:H(a,b){b.24=a.24=a.24||b.24||7.24++;I b},2t:{27:{4p:H(){55();I},4A:H(){I}},3D:{4p:H(){G(D.14.1f)I Q;D(7).2O("53",D.W.2t.3D.2y);I M},4A:H(){G(D.14.1f)I Q;D(7).4e("53",D.W.2t.3D.2y);I M},2y:H(a){G(F(a,7))I M;a.O="3D";I D.W.1H.1w(7,19)}},3N:{4p:H(){G(D.14.1f)I Q;D(7).2O("51",D.W.2t.3N.2y);I M},4A:H(){G(D.14.1f)I Q;D(7).4e("51",D.W.2t.3N.2y);I M},2y:H(a){G(F(a,7))I M;a.O="3N";I D.W.1H.1w(7,19)}}}};D.17.1l({2O:H(c,a,b){I c=="4X"?7.2V(c,a,b):7.P(H(){D.W.1e(7,c,b||a,b&&a)})},2V:H(d,b,c){J e=D.W.3M(c||b,H(a){D(7).4e(a,e);I(c||b).1w(7,19)});I 7.P(H(){D.W.1e(7,d,e,c&&b)})},4e:H(a,b){I 7.P(H(){D.W.21(7,a,b)})},1P:H(c,a,b){I 7.P(H(){D.W.1P(c,a,7,M,b)})},5C:H(c,a,b){I 7[0]&&D.W.1P(c,a,7[0],Q,b)},2m:H(b){J c=19,i=1;1B(i<c.K)D.W.3M(b,c[i++]);I 7.4V(D.W.3M(b,H(a){7.4Z=(7.4Z||0)%i;a.32();I c[7.4Z++].1w(7,19)||Q}))},7X:H(a,b){I 7.2O(\'3D\',a).2O(\'3N\',b)},27:H(a){55();G(D.2Q)a.1k(S,D);N D.3A.1p(H(){I a.1k(7,D)});I 7}});D.1l({2Q:Q,3A:[],27:H(){G(!D.2Q){D.2Q=M;G(D.3A){D.P(D.3A,H(){7.1k(S)});D.3A=U}D(S).5C("27")}}});J x=Q;H 55(){G(x)I;x=M;G(S.3K&&!D.14.2G)S.3K("69",D.27,Q);G(D.14.1f&&1b==1S)(H(){G(D.2Q)I;1U{S.1C.7V("1A")}1V(3e){3B(19.3L,0);I}D.27()})();G(D.14.2G)S.3K("69",H(){G(D.2Q)I;R(J i=0;i<S.4W.K;i++)G(S.4W[i].3R){3B(19.3L,0);I}D.27()},Q);G(D.14.2k){J a;(H(){G(D.2Q)I;G(S.3f!="68"&&S.3f!="1J"){3B(19.3L,0);I}G(a===12)a=D("V, 7A[7U=7S]").K;G(S.4W.K!=a){3B(19.3L,0);I}D.27()})()}D.W.1e(1b,"43",D.27)}D.P(("7R,7Q,43,85,4y,4X,4V,7P,"+"7O,7N,89,53,51,7M,2A,"+"5o,7L,7K,8d,3e").1R(","),H(i,b){D.17[b]=H(a){I a?7.2O(b,a):7.1P(b)}});J F=H(a,c){J b=a.4k;1B(b&&b!=c)1U{b=b.1d}1V(3e){b=c}I b==c};D(1b).2O("4X",H(){D("*").1e(S).4e()});D.17.1l({67:D.17.43,43:H(g,d,c){G(1j g!=\'23\')I 7.67(g);J e=g.1h(" ");G(e>=0){J i=g.3s(e,g.K);g=g.3s(0,e)}c=c||H(){};J f="2P";G(d)G(D.1D(d)){c=d;d=U}N{d=D.3n(d);f="6g"}J h=7;D.3Y({1a:g,O:f,1O:"2K",L:d,1J:H(a,b){G(b=="1W"||b=="7J")h.2K(i?D("<1v/>").3v(a.4U.1o(/<1m(.|\\s)*?\\/1m>/g,"")).2q(i):a.4U);h.P(c,[a.4U,b,a])}});I 7},aL:H(){I D.3n(7.7I())},7I:H(){I 7.2l(H(){I D.Y(7,"3V")?D.2d(7.aH):7}).1E(H(){I 7.34&&!7.3R&&(7.4J||/2A|6y/i.11(7.Y)||/1r|1G|3Q/i.11(7.O))}).2l(H(i,c){J b=D(7).6e();I b==U?U:b.1q==2p?D.2l(b,H(a,i){I{34:c.34,2x:a}}):{34:c.34,2x:b}}).3p()}});D.P("7H,7G,7F,7D,7C,7B".1R(","),H(i,o){D.17[o]=H(f){I 7.2O(o,f)}});J B=1z();D.1l({3p:H(d,b,a,c){G(D.1D(b)){a=b;b=U}I D.3Y({O:"2P",1a:d,L:b,1W:a,1O:c})},aE:H(b,a){I D.3p(b,U,a,"1m")},aD:H(c,b,a){I D.3p(c,b,a,"3z")},aC:H(d,b,a,c){G(D.1D(b)){a=b;b={}}I D.3Y({O:"6g",1a:d,L:b,1W:a,1O:c})},aA:H(a){D.1l(D.60,a)},60:{1a:5Z.5Q,26:M,O:"2P",2T:0,7z:"4R/x-ax-3V-aw",7x:M,31:M,L:U,5Y:U,3Q:U,4Q:{2N:"4R/2N, 1r/2N",2K:"1r/2K",1m:"1r/4t, 4R/4t",3z:"4R/3z, 1r/4t",1r:"1r/as",4w:"*/*"}},4z:{},3Y:H(s){s=D.1l(M,s,D.1l(M,{},D.60,s));J g,2Z=/=\\?(&|$)/g,1u,L,O=s.O.2r();G(s.L&&s.7x&&1j s.L!="23")s.L=D.3n(s.L);G(s.1O=="4P"){G(O=="2P"){G(!s.1a.1I(2Z))s.1a+=(s.1a.1I(/\\?/)?"&":"?")+(s.4P||"7u")+"=?"}N G(!s.L||!s.L.1I(2Z))s.L=(s.L?s.L+"&":"")+(s.4P||"7u")+"=?";s.1O="3z"}G(s.1O=="3z"&&(s.L&&s.L.1I(2Z)||s.1a.1I(2Z))){g="4P"+B++;G(s.L)s.L=(s.L+"").1o(2Z,"="+g+"$1");s.1a=s.1a.1o(2Z,"="+g+"$1");s.1O="1m";1b[g]=H(a){L=a;1W();1J();1b[g]=12;1U{2U 1b[g]}1V(e){}G(i)i.37(h)}}G(s.1O=="1m"&&s.1Y==U)s.1Y=Q;G(s.1Y===Q&&O=="2P"){J j=1z();J k=s.1a.1o(/(\\?|&)3m=.*?(&|$)/,"$ap="+j+"$2");s.1a=k+((k==s.1a)?(s.1a.1I(/\\?/)?"&":"?")+"3m="+j:"")}G(s.L&&O=="2P"){s.1a+=(s.1a.1I(/\\?/)?"&":"?")+s.L;s.L=U}G(s.26&&!D.4O++)D.W.1P("7H");J n=/^(?:\\w+:)?\\/\\/([^\\/?#]+)/;G(s.1O=="1m"&&O=="2P"&&n.11(s.1a)&&n.2D(s.1a)[1]!=5Z.al){J i=S.3H("6w")[0];J h=S.3h("1m");h.4d=s.1a;G(s.7t)h.aj=s.7t;G(!g){J l=Q;h.ah=h.ag=H(){G(!l&&(!7.3f||7.3f=="68"||7.3f=="1J")){l=M;1W();1J();i.37(h)}}}i.3U(h);I 12}J m=Q;J c=1b.7s?2B 7s("ae.ac"):2B 7r();G(s.5Y)c.6R(O,s.1a,s.31,s.5Y,s.3Q);N c.6R(O,s.1a,s.31);1U{G(s.L)c.4B("ab-aa",s.7z);G(s.5S)c.4B("a9-5R-a8",D.4z[s.1a]||"a7, a6 a5 a4 5N:5N:5N a2");c.4B("X-9Z-9Y","7r");c.4B("9W",s.1O&&s.4Q[s.1O]?s.4Q[s.1O]+", */*":s.4Q.4w)}1V(e){}G(s.7m&&s.7m(c,s)===Q){s.26&&D.4O--;c.7l();I Q}G(s.26)D.W.1P("7B",[c,s]);J d=H(a){G(!m&&c&&(c.3f==4||a=="2T")){m=M;G(f){7k(f);f=U}1u=a=="2T"&&"2T"||!D.7j(c)&&"3e"||s.5S&&D.7h(c,s.1a)&&"7J"||"1W";G(1u=="1W"){1U{L=D.6X(c,s.1O,s.9S)}1V(e){1u="5J"}}G(1u=="1W"){J b;1U{b=c.5I("7g-5R")}1V(e){}G(s.5S&&b)D.4z[s.1a]=b;G(!g)1W()}N D.5H(s,c,1u);1J();G(s.31)c=U}};G(s.31){J f=4I(d,13);G(s.2T>0)3B(H(){G(c){c.7l();G(!m)d("2T")}},s.2T)}1U{c.9P(s.L)}1V(e){D.5H(s,c,U,e)}G(!s.31)d();H 1W(){G(s.1W)s.1W(L,1u);G(s.26)D.W.1P("7C",[c,s])}H 1J(){G(s.1J)s.1J(c,1u);G(s.26)D.W.1P("7F",[c,s]);G(s.26&&!--D.4O)D.W.1P("7G")}I c},5H:H(s,a,b,e){G(s.3e)s.3e(a,b,e);G(s.26)D.W.1P("7D",[a,s,e])},4O:0,7j:H(a){1U{I!a.1u&&5Z.9O=="5p:"||(a.1u>=7e&&a.1u<9N)||a.1u==7c||a.1u==9K||D.14.2k&&a.1u==12}1V(e){}I Q},7h:H(a,c){1U{J b=a.5I("7g-5R");I a.1u==7c||b==D.4z[c]||D.14.2k&&a.1u==12}1V(e){}I Q},6X:H(a,c,b){J d=a.5I("9J-O"),2N=c=="2N"||!c&&d&&d.1h("2N")>=0,L=2N?a.9I:a.4U;G(2N&&L.1C.2j=="5J")7p"5J";G(b)L=b(L,c);G(c=="1m")D.5u(L);G(c=="3z")L=6u("("+L+")");I L},3n:H(a){J s=[];G(a.1q==2p||a.5w)D.P(a,H(){s.1p(3u(7.34)+"="+3u(7.2x))});N R(J j 1n a)G(a[j]&&a[j].1q==2p)D.P(a[j],H(){s.1p(3u(j)+"="+3u(7))});N s.1p(3u(j)+"="+3u(D.1D(a[j])?a[j]():a[j]));I s.6s("&").1o(/%20/g,"+")}});D.17.1l({1N:H(c,b){I c?7.2g({1Z:"1N",2h:"1N",1y:"1N"},c,b):7.1E(":1G").P(H(){7.V.18=7.5D||"";G(D.1g(7,"18")=="2F"){J a=D("<"+7.2j+" />").6P("1c");7.V.18=a.1g("18");G(7.V.18=="2F")7.V.18="3I";a.21()}}).3l()},1M:H(b,a){I b?7.2g({1Z:"1M",2h:"1M",1y:"1M"},b,a):7.1E(":4j").P(H(){7.5D=7.5D||D.1g(7,"18");7.V.18="2F"}).3l()},78:D.17.2m,2m:H(a,b){I D.1D(a)&&D.1D(b)?7.78.1w(7,19):a?7.2g({1Z:"2m",2h:"2m",1y:"2m"},a,b):7.P(H(){D(7)[D(7).3F(":1G")?"1N":"1M"]()})},9G:H(b,a){I 7.2g({1Z:"1N"},b,a)},9F:H(b,a){I 7.2g({1Z:"1M"},b,a)},9E:H(b,a){I 7.2g({1Z:"2m"},b,a)},9D:H(b,a){I 7.2g({1y:"1N"},b,a)},9M:H(b,a){I 7.2g({1y:"1M"},b,a)},9C:H(c,a,b){I 7.2g({1y:a},c,b)},2g:H(k,j,i,g){J h=D.77(j,i,g);I 7[h.36===Q?"P":"36"](H(){G(7.16!=1)I Q;J f=D.1l({},h),p,1G=D(7).3F(":1G"),46=7;R(p 1n k){G(k[p]=="1M"&&1G||k[p]=="1N"&&!1G)I f.1J.1k(7);G(p=="1Z"||p=="2h"){f.18=D.1g(7,"18");f.33=7.V.33}}G(f.33!=U)7.V.33="1G";f.45=D.1l({},k);D.P(k,H(c,a){J e=2B D.28(46,f,c);G(/2m|1N|1M/.11(a))e[a=="2m"?1G?"1N":"1M":a](k);N{J b=a.6r().1I(/^([+-]=)?([\\d+-.]+)(.*)$/),2b=e.1t(M)||0;G(b){J d=3d(b[2]),2M=b[3]||"2X";G(2M!="2X"){46.V[c]=(d||1)+2M;2b=((d||1)/e.1t(M))*2b;46.V[c]=2b+2M}G(b[1])d=((b[1]=="-="?-1:1)*d)+2b;e.3G(2b,d,2M)}N e.3G(2b,a,"")}});I M})},36:H(a,b){G(D.1D(a)||(a&&a.1q==2p)){b=a;a="28"}G(!a||(1j a=="23"&&!b))I A(7[0],a);I 7.P(H(){G(b.1q==2p)A(7,a,b);N{A(7,a).1p(b);G(A(7,a).K==1)b.1k(7)}})},9X:H(b,c){J a=D.3O;G(b)7.36([]);7.P(H(){R(J i=a.K-1;i>=0;i--)G(a[i].T==7){G(c)a[i](M);a.7n(i,1)}});G(!c)7.5A();I 7}});J A=H(b,c,a){G(b){c=c||"28";J q=D.L(b,c+"36");G(!q||a)q=D.L(b,c+"36",D.2d(a))}I q};D.17.5A=H(a){a=a||"28";I 7.P(H(){J q=A(7,a);q.4s();G(q.K)q[0].1k(7)})};D.1l({77:H(b,a,c){J d=b&&b.1q==a0?b:{1J:c||!c&&a||D.1D(b)&&b,2u:b,41:c&&a||a&&a.1q!=9t&&a};d.2u=(d.2u&&d.2u.1q==4L?d.2u:D.28.5K[d.2u])||D.28.5K.74;d.5M=d.1J;d.1J=H(){G(d.36!==Q)D(7).5A();G(D.1D(d.5M))d.5M.1k(7)};I d},41:{73:H(p,n,b,a){I b+a*p},5P:H(p,n,b,a){I((-29.9r(p*29.9q)/2)+0.5)*a+b}},3O:[],48:U,28:H(b,c,a){7.15=c;7.T=b;7.1i=a;G(!c.3Z)c.3Z={}}});D.28.44={4D:H(){G(7.15.2Y)7.15.2Y.1k(7.T,7.1z,7);(D.28.2Y[7.1i]||D.28.2Y.4w)(7);G(7.1i=="1Z"||7.1i=="2h")7.T.V.18="3I"},1t:H(a){G(7.T[7.1i]!=U&&7.T.V[7.1i]==U)I 7.T[7.1i];J r=3d(D.1g(7.T,7.1i,a));I r&&r>-9p?r:3d(D.2a(7.T,7.1i))||0},3G:H(c,b,d){7.5V=1z();7.2b=c;7.3l=b;7.2M=d||7.2M||"2X";7.1z=7.2b;7.2S=7.4N=0;7.4D();J e=7;H t(a){I e.2Y(a)}t.T=7.T;D.3O.1p(t);G(D.48==U){D.48=4I(H(){J a=D.3O;R(J i=0;i<a.K;i++)G(!a[i]())a.7n(i--,1);G(!a.K){7k(D.48);D.48=U}},13)}},1N:H(){7.15.3Z[7.1i]=D.1K(7.T.V,7.1i);7.15.1N=M;7.3G(0,7.1t());G(7.1i=="2h"||7.1i=="1Z")7.T.V[7.1i]="9m";D(7.T).1N()},1M:H(){7.15.3Z[7.1i]=D.1K(7.T.V,7.1i);7.15.1M=M;7.3G(7.1t(),0)},2Y:H(a){J t=1z();G(a||t>7.15.2u+7.5V){7.1z=7.3l;7.2S=7.4N=1;7.4D();7.15.45[7.1i]=M;J b=M;R(J i 1n 7.15.45)G(7.15.45[i]!==M)b=Q;G(b){G(7.15.18!=U){7.T.V.33=7.15.33;7.T.V.18=7.15.18;G(D.1g(7.T,"18")=="2F")7.T.V.18="3I"}G(7.15.1M)7.T.V.18="2F";G(7.15.1M||7.15.1N)R(J p 1n 7.15.45)D.1K(7.T.V,p,7.15.3Z[p])}G(b)7.15.1J.1k(7.T);I Q}N{J n=t-7.5V;7.4N=n/7.15.2u;7.2S=D.41[7.15.41||(D.41.5P?"5P":"73")](7.4N,n,0,1,7.15.2u);7.1z=7.2b+((7.3l-7.2b)*7.2S);7.4D()}I M}};D.1l(D.28,{5K:{9l:9j,9i:7e,74:9g},2Y:{2e:H(a){a.T.2e=a.1z},2c:H(a){a.T.2c=a.1z},1y:H(a){D.1K(a.T.V,"1y",a.1z)},4w:H(a){a.T.V[a.1i]=a.1z+a.2M}}});D.17.2i=H(){J b=0,1S=0,T=7[0],3q;G(T)ao(D.14){J d=T.1d,4a=T,1s=T.1s,1Q=T.2z,5U=2k&&3r(5B)<9c&&!/9a/i.11(v),1g=D.2a,3c=1g(T,"30")=="3c";G(T.7y){J c=T.7y();1e(c.1A+29.2f(1Q.1C.2e,1Q.1c.2e),c.1S+29.2f(1Q.1C.2c,1Q.1c.2c));1e(-1Q.1C.6b,-1Q.1C.6a)}N{1e(T.5X,T.5W);1B(1s){1e(1s.5X,1s.5W);G(42&&!/^t(98|d|h)$/i.11(1s.2j)||2k&&!5U)2C(1s);G(!3c&&1g(1s,"30")=="3c")3c=M;4a=/^1c$/i.11(1s.2j)?4a:1s;1s=1s.1s}1B(d&&d.2j&&!/^1c|2K$/i.11(d.2j)){G(!/^96|1T.*$/i.11(1g(d,"18")))1e(-d.2e,-d.2c);G(42&&1g(d,"33")!="4j")2C(d);d=d.1d}G((5U&&(3c||1g(4a,"30")=="5x"))||(42&&1g(4a,"30")!="5x"))1e(-1Q.1c.5X,-1Q.1c.5W);G(3c)1e(29.2f(1Q.1C.2e,1Q.1c.2e),29.2f(1Q.1C.2c,1Q.1c.2c))}3q={1S:1S,1A:b}}H 2C(a){1e(D.2a(a,"6V",M),D.2a(a,"6U",M))}H 1e(l,t){b+=3r(l,10)||0;1S+=3r(t,10)||0}I 3q};D.17.1l({30:H(){J a=0,1S=0,3q;G(7[0]){J b=7.1s(),2i=7.2i(),4c=/^1c|2K$/i.11(b[0].2j)?{1S:0,1A:0}:b.2i();2i.1S-=25(7,\'94\');2i.1A-=25(7,\'aF\');4c.1S+=25(b,\'6U\');4c.1A+=25(b,\'6V\');3q={1S:2i.1S-4c.1S,1A:2i.1A-4c.1A}}I 3q},1s:H(){J a=7[0].1s;1B(a&&(!/^1c|2K$/i.11(a.2j)&&D.1g(a,\'30\')==\'93\'))a=a.1s;I D(a)}});D.P([\'5e\',\'5G\'],H(i,b){J c=\'4y\'+b;D.17[c]=H(a){G(!7[0])I;I a!=12?7.P(H(){7==1b||7==S?1b.92(!i?a:D(1b).2e(),i?a:D(1b).2c()):7[c]=a}):7[0]==1b||7[0]==S?46[i?\'aI\':\'aJ\']||D.71&&S.1C[c]||S.1c[c]:7[0][c]}});D.P(["6N","4b"],H(i,b){J c=i?"5e":"5G",4f=i?"6k":"6i";D.17["5s"+b]=H(){I 7[b.3y()]()+25(7,"57"+c)+25(7,"57"+4f)};D.17["90"+b]=H(a){I 7["5s"+b]()+25(7,"2C"+c+"4b")+25(7,"2C"+4f+"4b")+(a?25(7,"6S"+c)+25(7,"6S"+4f):0)}})})();',62,669,'|||||||this|||||||||||||||||||||||||||||||||||if|function|return|var|length|data|true|else|type|each|false|for|document|elem|null|style|event||nodeName|||test|undefined||browser|options|nodeType|fn|display|arguments|url|window|body|parentNode|add|msie|css|indexOf|prop|typeof|call|extend|script|in|replace|push|constructor|text|offsetParent|cur|status|div|apply|firstChild|opacity|now|left|while|documentElement|isFunction|filter|className|hidden|handle|match|complete|attr|ret|hide|show|dataType|trigger|doc|split|top|table|try|catch|success|break|cache|height||remove|tbody|string|guid|num|global|ready|fx|Math|curCSS|start|scrollTop|makeArray|scrollLeft|max|animate|width|offset|tagName|safari|map|toggle||done|Array|find|toUpperCase|button|special|duration|id|copy|value|handler|ownerDocument|select|new|border|exec|stack|none|opera|nextSibling|pushStack|target|html|inArray|unit|xml|bind|GET|isReady|merge|pos|timeout|delete|one|selected|px|step|jsre|position|async|preventDefault|overflow|name|which|queue|removeChild|namespace|insertBefore|nth|removeData|fixed|parseFloat|error|readyState|multiFilter|createElement|rl|re|trim|end|_|param|first|get|results|parseInt|slice|childNodes|encodeURIComponent|append|events|elems|toLowerCase|json|readyList|setTimeout|grep|mouseenter|color|is|custom|getElementsByTagName|block|stopPropagation|addEventListener|callee|proxy|mouseleave|timers|defaultView|password|disabled|last|has|appendChild|form|domManip|props|ajax|orig|set|easing|mozilla|load|prototype|curAnim|self|charCode|timerId|object|offsetChild|Width|parentOffset|src|unbind|br|currentStyle|clean|float|visible|relatedTarget|previousSibling|handlers|isXMLDoc|on|setup|nodeIndex|unique|shift|javascript|child|RegExp|_default|deep|scroll|lastModified|teardown|setRequestHeader|timeStamp|update|empty|tr|getAttribute|innerHTML|setInterval|checked|fromElement|Number|jQuery|state|active|jsonp|accepts|application|dir|input|responseText|click|styleSheets|unload|not|lastToggle|outline|mouseout|getPropertyValue|mouseover|getComputedStyle|bindReady|String|padding|pageX|metaKey|keyCode|getWH|andSelf|clientX|Left|all|visibility|container|index|init|triggered|removeAttribute|classFilter|prevObject|submit|file|after|windowData|inner|client|globalEval|sibling|jquery|absolute|clone|wrapAll|dequeue|version|triggerHandler|oldblock|ctrlKey|createTextNode|Top|handleError|getResponseHeader|parsererror|speeds|checkbox|old|00|radio|swing|href|Modified|ifModified|lastChild|safari2|startTime|offsetTop|offsetLeft|username|location|ajaxSettings|getElementById|isSimple|values|selectedIndex|runtimeStyle|rsLeft|_load|loaded|DOMContentLoaded|clientTop|clientLeft|toElement|srcElement|val|pageY|POST|unshift|Bottom|clientY|Right|fix|exclusive|detachEvent|cloneNode|removeEventListener|swap|toString|join|attachEvent|eval|substr|head|parse|textarea|reset|image|zoom|odd|even|before|prepend|exclude|expr|quickClass|quickID|uuid|quickChild|continue|Height|textContent|appendTo|contents|open|margin|evalScript|borderTopWidth|borderLeftWidth|parent|httpData|setArray|CSS1Compat|compatMode|boxModel|cssFloat|linear|def|webkit|nodeValue|speed|_toggle|eq|100|replaceWith|304|concat|200|alpha|Last|httpNotModified|getAttributeNode|httpSuccess|clearInterval|abort|beforeSend|splice|styleFloat|throw|colgroup|XMLHttpRequest|ActiveXObject|scriptCharset|callback|fieldset|multiple|processData|getBoundingClientRect|contentType|link|ajaxSend|ajaxSuccess|ajaxError|col|ajaxComplete|ajaxStop|ajaxStart|serializeArray|notmodified|keypress|keydown|change|mouseup|mousedown|dblclick|focus|blur|stylesheet|hasClass|rel|doScroll|black|hover|solid|cancelBubble|returnValue|wheelDelta|view|round|shiftKey|resize|screenY|screenX|relatedNode|mousemove|prevValue|originalTarget|offsetHeight|keyup|newValue|offsetWidth|eventPhase|detail|currentTarget|cancelable|bubbles|attrName|attrChange|altKey|originalEvent|charAt|0n|substring|animated|header|noConflict|line|enabled|innerText|contains|only|weight|font|gt|lt|uFFFF|u0128|size|417|Boolean|Date|toggleClass|removeClass|addClass|removeAttr|replaceAll|insertAfter|prependTo|wrap|contentWindow|contentDocument|iframe|children|siblings|prevAll|wrapInner|nextAll|outer|prev|scrollTo|static|marginTop|next|inline|parents|able|cellSpacing|adobeair|cellspacing|522|maxLength|maxlength|readOnly|400|readonly|fast|600|class|slow|1px|htmlFor|reverse|10000|PI|cos|compatible|Function|setData|ie|ra|it|rv|getData|userAgent|navigator|fadeTo|fadeIn|slideToggle|slideUp|slideDown|ig|responseXML|content|1223|NaN|fadeOut|300|protocol|send|setAttribute|option|dataFilter|cssText|changed|be|Accept|stop|With|Requested|Object|can|GMT|property|1970|Jan|01|Thu|Since|If|Type|Content|XMLHTTP|th|Microsoft|td|onreadystatechange|onload|cap|charset|colg|host|tfoot|specified|with|1_|thead|leg|plain|attributes|opt|embed|urlencoded|www|area|hr|ajaxSetup|meta|post|getJSON|getScript|marginLeft|img|elements|pageYOffset|pageXOffset|abbr|serialize|pixelLeft'.split('|'),0,{}))
  }
/****************************************************************************\
 *          				DETECCION DEL BROWSER             			    *
\****************************************************************************/
// Deteccion del browser
var ns4 = document.layers;								// NS4
var ie4 = document.all;									// IE 4+
var ie5 = document.all;									// IE 5
var ie6 = document.getElementById && document.all;		// IE6
var ns6 = document.getElementById && !document.all;		// NS6


/**
 * Detecta el explorador que se esta utilizando de forma mas precisa,
 * devolviendo un objeto que contiene toda la informaci?n del browser
 */
function UserAgent() {
	var b = navigator.appName.toUpperCase();

	if (b == "NETSCAPE") this.b = "ns";
	else if (b == "MICROSOFT INTERNET EXPLORER") this.b = "ie";
	else if (b == "OPERA") this.b = "op"; 
	else this.b = b;

	this.version = navigator.appVersion;
	this.v = parseInt(this.version);

	this.ns = (this.b == "ns" && this.v >= 4);
	this.ns4 = (this.b == "ns" && this.v == 4);
	this.ns5 = (this.b == "ns" && this.v == 5);

	this.ie = (this.b == "ie" && this.v >= 4);
	this.ie4 = (this.version.indexOf('MSIE 4') > 0);
	this.ie5 = (this.version.indexOf('MSIE 5') > 0);
	this.ie55 = (this.version.indexOf('MSIE 5.5') > 0);
	this.ie6 = (this.version.indexOf('MSIE 6') > 0);

	this.op = (this.b == "op");
	this.op4 = (this.b == "op" && this.v == 4);
	this.op5 = (this.b == "op" && this.v == 5);
}

// Inicializacion de un objeto global
var navegador = new UserAgent();	// Objeto que almacena el navegador

/****************************************************************************\
 *             FUNCIONES AUXILIARES PARA EL MANEJO DE LA QUERY STRING       *
\****************************************************************************/
/**
 * Objeto que modela la request, permitiendo obtener parametros de la url
 */
function QueryString(inQueryStr) {
	// Method mappings
		this.getParameter = QueryString_getParameter;
		this.parse = QueryString_parse;
	// Atributos	
		var queryStr = window.location.search.substring(1);	// Query String, por defecto la url del navegador		
		var params = null;
	// Inicializacion
		if (inQueryStr != null && inQueryStr.length > 0) this.queryStr = inQueryStr;
		this.parse();		// Parsear la query		
}
// Parsea la query string que se pasa como parametro
function QueryString_parse() {
	if (this.queryStr == null) return null;
	var pairs = this.queryStr.split("&");	
	for (var i=0;i<pairs.length;i++) {
		var pos = pairs[i].indexOf('=');
		if (pos >= 0) {
			var paramName = pairs[i].substring(0,pos);
			var paramValue = pairs[i].substring(pos+1);
			if (this.params == null) this.params = new Array();
			this.params[paramName] = paramValue;
		}
	}
}
// Obtiene el valor de una clave que se pasa como parametro
function QueryString_getParameter(key) {
	if (key == null) return null;
	var value = null;
	for (currParamName in this.params) {
		if (currParamName == key) {
			value = this.params[currParamName];
			break;
		}
	}
	return value;
}

// inicializacion de objetos globales para el manejo de la query string
var thisWindowQuery = new QueryString(window.location.search.substring(1));



/****************************************************************************\
 *               FUNCIONES AUXILIARES PARA MANEJO DE OBJETOS                *
\****************************************************************************/
/**
 * Devuelve si un objeto es instancia de una determinada clase
 * @param object: El objeto
 * @param constructor: La clase
 */
function instanceOf(object, constructor) { 
	if (ns4) {
	   while (object != null) { 
		  if (object == constructor.prototype) 
			 return true; 
		  object = object.__proto__; 
	   } 
	   return false; 
	} else {
		return object instanceof constructor;
	}
} 



//==========================================================================\\
// FUNCIONES AUXILIARES PARA CONOCER LA POSICI?N DE UN ANCHOR               \\
//==========================================================================\\
/**
 * getAnchorPositionScreenRelative(anchorname)
 *   Devuelve un objeto que tiene las propiedades .x y .y que son las coordenadas
 *   relativas a la PANTALLA de un elemento anchor <a></a>.
 */
function getAnchorPositionScreenRelative(anchorname) {
	var coordinates = getAnchorPositionWindowRelative(anchorname);
	var x=0;
	var y=0;
	if (ie6 || ns6) {
		if (isNaN(window.screenX)) {
			x = coordinates.x - document.body.scrollLeft + window.screenLeft;
			y = coordinates.y - document.body.scrollTop + window.screenTop;
		} else {
			x = coordinates.x + window.screenX + (window.outerWidth-window.innerWidth) - window.pageXOffset;
			y = coordinates.y + window.screenY + (window.outerHeight-24-window.innerHeight) - window.pageYOffset;
		}
	} else if (ie4) {
		x = coordinates.x - document.body.scrollLeft + window.screenLeft;
		y = coordinates.y - document.body.scrollTop + window.screenTop;
	} else if (ns4) {
		x = coordinates.x + window.screenX + (window.outerWidth-window.innerWidth) - window.pageXOffset;
		y = coordinates.y + window.screenY + (window.outerHeight-24-window.innerHeight) - window.pageYOffset;
	}
	coordinates.x = x;
	coordinates.y = y;
	return coordinates;
}
//___________________________________________________________________________\\
/**
 * getAnchorPositionWindowRelative(anchorname)
 *   Devuelve un objeto que tiene las propiedades .x y .y que son las coordenadas
 *   relativas a la VENTANA DEL NAVEGADOR de un elemento anchor <a></a>.
 */
function getAnchorPositionWindowRelative(anchorname) {
	// This function will return an Object with x and y properties
	var useWindow = false;
	var coordinates = new Object();
	var x=0;
	var y=0;
	// Encontrar el anchor (recorrer todo el documento y buscar aquel cuyo id es el que se pasa
 	if (ie6) {
		x = AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
		y = AnchorPosition_getPageOffsetTop(document.all[anchorname]);
	} else if (ns6) {
		var o = document.getElementById(anchorname);
		x = o.offsetLeft;
		y = o.offsetTop;
	} else if (ie4) {
		x = AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
		y = AnchorPosition_getPageOffsetTop(document.all[anchorname]);
	} else if (ns4) {
		var found=0;
		for (var i=0; i<document.anchors.length; i++) {
			if (document.anchors[i].name == anchorname) {
				found=1;
				break;
			}
		}
		if (found == 0) {
			coordinates.x=0; 
			coordinates.y=0; 
			return coordinates;
		}
		x = document.anchors[i].x;
		y = document.anchors[i].y;
	} else {
		coordinates.x=0; 
		coordinates.y=0; 
		return coordinates;
	}
	coordinates.x = x;
	coordinates.y = y;
	return coordinates;		// Devuelve un objeto con dos miembros x e y
	}
//___________________________________________________________________________\\
// Funciones de IE para obtener la posicion de un elemento
function AnchorPosition_getPageOffsetLeft (el) {
	var ol = el.offsetLeft;
	while ((el = el.offsetParent) != null) { 
		ol += el.offsetLeft; 
	}
	return ol;
}
function AnchorPosition_getPageOffsetTop (el) {
	var ot = el.offsetTop;
	while((el = el.offsetParent) != null) { 
		ot += el.offsetTop; 
	}
	return ot;
}
//___________________________________________________________________________\\
/****************************************************************************\
 *          		FUNCIONES MATEMATICAS AUXILIARES             			*
\****************************************************************************/
/** 
 * Hex to Decimal converter
 * Covert decimal to hex number, return dec num as string
 */
function toDec(dec) {
	
	dec_val = parseInt(dec.toUpperCase(),16);
	
	return dec_val
}
//_______________________________________________________________________________________________\\
/**
 * Decimal to Hex converter
 * Covert decimal to hex number, return hex num as string
 */
function toHex(hex) {
	
	var hex_val = hex.toString(16).toUpperCase();
	
	if (hex_val.length == 1) {
		var temp = "0" + hex_val
		hex_val = temp;
	}
	return hex_val
}
//_______________________________________________________________________________________________\\
/**
 * Obtiene el valor decimal de un numero
 */
function toDecimals(val,n) {
    if (isNaN(n)) return val;
	   if (n<=0) return Math.round(val);
    for (var m=0; m<n; m++)  val *= 10;
    val = Math.round(val);
    valstr = val.toString();
    len = valstr.length;
    if (len>n)
        valstr = valstr.substring(0,len-n) + "." + valstr.substring(len-n,len);
    else {
        while (valstr.length<n) valstr = "0" + valstr;
        valstr = "0." + valstr;
    }
    return valstr;
}
//_______________________________________________________________________________________________\\

/**
 * Sustituye valor "&#39;" por el apostrofe o comilla simple
 */
function decodeApostrophe(str) {
	var result = str;
    while(result.indexOf("&#39;") != -1) result = result.replace("&#39;", "'");     
    return result;
}

/**
 * Calcula la posicion top absoluta 
 */
function getAbsoluteOffsetTop(obj) {
    var top = obj.offsetTop;
    var parent = obj.offsetParent;
    while (parent != document.getElementsByTagName("body")[0]) {
        top += parent.offsetTop;
        parent = parent.offsetParent;
    }
    return top;
}
/**
 * Calcula la posicion left absoluta 
 */
function getAbsoluteOffsetLeft(obj) {
    var left = obj.offsetLeft;
    var parent = obj.offsetParent;
    while (parent != document.getElementsByTagName("body")[0]) {
        left += parent.offsetLeft;
        parent = parent.offsetParent;
    }
    return left;
}

/*************************************************************************************************/
/*   File: /AV/r01gCommonSearchVA/scripts/r33-asrchAyudasSubvencionesBecas.js*/
/*************************************************************************************************/

/* Hace visible el commonSearch con soporte javascript. */
function r01gCommonSearchOnLoad_asrchAyudasSubvencionesBecas(){
if(document.getElementById("clustersComboasrchAyudasSubvencionesBecas")){//Se muestran todos los combos.
document.getElementById("clustersComboasrchAyudasSubvencionesBecas").style.display='block';
var metaDataArray = getElementsByClassName("div", "metaData");
for(var i=0;i<metaDataArray.length;i++){
if(metaDataArray[i].className == "metaData") metaDataArray[i].style.display='none';
}
} else if(document.getElementById("comboTypoasrchAyudasSubvencionesBecas")){//En este caso sólo se muestra el combo de Typo
document.getElementById("comboTypoasrchAyudasSubvencionesBecas").style.display='block';
var metaDataArray = getElementsByClassName("div", "metaData");
for(var i=0;i<metaDataArray.length;i++){
if(metaDataArray[i].className == "metaData") metaDataArray[i].style.display='none';
}
} else {// En este caso no se muestra ningún combo de typologías, así que se muestran todos los metadatos
}
if(document.getElementById("btnBuscarCommonSearch")){
document.getElementById("btnBuscarCommonSearch").style.display='inline';
}
if(getElementsByClassName("div", "r01gCatalogationData").length > 0){
var catalogationData = getElementsByClassName("div", "r01gCatalogationData");
for(var i=0; i<catalogationData.length; i++){
catalogationData[i].style.display='block';
}
}
}
if (window.addEventListener) {
window.addEventListener('load', r01gCommonSearchOnLoad_asrchAyudasSubvencionesBecas, false);
}else if (window.attachEvent) {
window.attachEvent('onload', r01gCommonSearchOnLoad_asrchAyudasSubvencionesBecas);
}

