var _val_IE=(document.all);
var _val_NS=((document.geElementById)&&(!document.all))


	//Crea el oOVPageBaseJS en window si no está creado
	if (top.oOVPageBaseJS == null) top.oOVPageBaseJS = new Object();

	//Constante del nombre del campo oculto
	var nameFieldHidden = "OVPageBasehParametrosG";
	var nameFieldHiddenControlCambios = "EBSCtrlHayCambios";
		
	top.oOVPageBaseJS.Init = Init;
	top.oOVPageBaseJS.BodyOnload = BodyOnload;
	top.oOVPageBaseJS.BodyOnkeypress = BodyOnkeypress;
	top.oOVPageBaseJS.BodyOnbeforeunload = BodyOnbeforeunload;
	top.oOVPageBaseJS.ObtenerParams = ObtenerParams;
	top.oOVPageBaseJS.InitParamsInternos = InitParamsInternos;
	top.oOVPageBaseJS.FormSubmit = FormSubmit;
	top.oOVPageBaseJS.FormOnsubmit = FormOnsubmit;
	top.oOVPageBaseJS.hagoSubmit = hagoSubmit;
	top.oOVPageBaseJS.EscribirParamsOut = EscribirParamsOut;
	top.oOVPageBaseJS.CC_BuscarObjeto = CC_BuscarObjeto;
	top.oOVPageBaseJS.SetControlDeCambios = SetControlDeCambios;
	top.oOVPageBaseJS._ControlDeCambios_SetMarca = _ControlDeCambios_SetMarca;
	top.oOVPageBaseJS._ControlDeCambios_BuscarObjetoTipo1 = _ControlDeCambios_BuscarObjetoTipo1;
	top.oOVPageBaseJS.SincroControlDeCambios = SincroControlDeCambios;
	top.oOVPageBaseJS.TestControlDeCambios = TestControlDeCambios;
	top.oOVPageBaseJS.AvisarPerdidaDeCambios = AvisarPerdidaDeCambios;
	top.oOVPageBaseJS.FWAvisarPerdidaDeCambios = FWAvisarPerdidaDeCambios;
	top.oOVPageBaseJS.UnsetControlDeCambios = UnsetControlDeCambios;
	top.oOVPageBaseJS.FWUnsetControlDeCambios = FWUnsetControlDeCambios;
	top.oOVPageBaseJS._ControlDeCambios_UnsetMarca = _ControlDeCambios_UnsetMarca;
	top.oOVPageBaseJS.ControlCambiosHayCambios = ControlCambiosHayCambios;
	top.oOVPageBaseJS.PermitirEnterEnControl = PermitirEnterEnControl;
	top.oOVPageBaseJS.PermitirUnaEnControlDeCambios = PermitirUnaEnControlDeCambios;
	
	if (_val_IE)
		top.oOVPageBaseJS.FiltrarEnter = IEFiltrarEnter;
	else
		top.oOVPageBaseJS.FiltrarEnter = NSFiltrarEnter;
		
	top.oOVPageBaseJS.BloqueaFormulario = BloqueaFormulario;
	top.oOVPageBaseJS.BloqueaElementos = BloqueaElementos;
	top.oOVPageBaseJS.ControlOnFocusIn = ControlOnFocusIn;
	top.oOVPageBaseJS.MantenerFoco = MantenerFoco;
	top.oOVPageBaseJS.MantenerScroll = MantenerScroll;
	top.oOVPageBaseJS.PosicionarScroll = PosicionarScroll;
	top.oOVPageBaseJS.CapturarPageScroll = CapturarPageScroll;
	top.oOVPageBaseJS.PosicionarPageScroll =  PosicionarPageScroll;
	top.oOVPageBaseJS.MensajeOpProcesando = MensajeOpProcesando;
		
	//Define la función init
	function Init(localWindow)
	{
		var oOVPageBaseJS = top.oOVPageBaseJS;
		var obody = localWindow.document.body;
		
		if (obody.oOVPageBaseAlmc == null)
		{
			obody.oOVPageBaseAlmc = new Object;
			obody.oOVPageBaseAlmc.Params = new Object;
			obody.oOVPageBaseAlmc.Params.In = new Object;
			obody.oOVPageBaseAlmc.Params.Internos = new Object;
			obody.oOVPageBaseAlmc.Params.Out = new Object;
			obody.oOVPageBaseAlmc.Eventos = new Object;
			//Almacena los parámetros en obody.oOVPageBaseAlmc.Params.In
			oOVPageBaseJS.ObtenerParams(obody.oOVPageBaseAlmc.Params.In, localWindow.document.getElementById(nameFieldHidden));
				
				
			if ((obody.oOVPageBaseAlmc.Params.In.mensajeonload != null) || 
				  (obody.oOVPageBaseAlmc.Params.In.controlfoco != null) || 
				  (obody.oOVPageBaseAlmc.Params.In.tipocontrolcambio != null) || 
				  (obody.oOVPageBaseAlmc.Params.In.ctrsmantscroll != null)|| 
				  (obody.oOVPageBaseAlmc.Params.In.mantenerscrollpage != null)|| 
				  (obody.oOVPageBaseAlmc.Params.In.configurarbarratitulo != null)) {
				    
				// se subscribe al evento onload				
				// YMV - 12/01/2005 Se sustituye para que funcione en NS
				//obody.oOVPageBaseAlmc.Eventos.BodyOnload = obody.onload;
				//obody.onload = oOVPageBaseJS.BodyOnload;
				obody.oOVPageBaseAlmc.Eventos.BodyOnload = localWindow.onload;
				localWindow.onload=oOVPageBaseJS.BodyOnload;
			}

			if ((obody.oOVPageBaseAlmc.Params.In.tipocontrolcambio != null) || 
				  (obody.oOVPageBaseAlmc.Params.In.bloquearform) || 
				  (obody.oOVPageBaseAlmc.Params.In.mantenerfoco) || 
				  (obody.oOVPageBaseAlmc.Params.In.ctrsmantscroll) || 
				  (obody.oOVPageBaseAlmc.Params.In.mantenerscrollpage) || 
				  (obody.oOVPageBaseAlmc.Params.In.idclimsgprocesando != null)) {
				  
				if ((obody.oOVPageBaseAlmc.Params.In.tipocontrolcambio != null) || 
					  (obody.oOVPageBaseAlmc.Params.In.bloquearform)) {
					// se subscribe al evento onbeforeunload
					// YMV - 13/01/2005 Se sustituye para que funcione en NS
					//obody.oOVPageBaseAlmc.Eventos.BodyOnbeforeunload = obody.onbeforeunload;
					//obody.onbeforeunload = oOVPageBaseJS.BodyOnbeforeunload;
					obody.oOVPageBaseAlmc.Eventos.BodyOnbeforeunload = localWindow.onbeforeunload;
					localWindow.onbeforeunload = oOVPageBaseJS.BodyOnbeforeunload;
					
					//Inicializa los parámetros internos (dentro de submit y onbeforeunload)
					oOVPageBaseJS.InitParamsInternos(obody.oOVPageBaseAlmc.Params.Internos);
				}
				
        //Obtiene el formulario principal
				if (obody.oOVPageBaseAlmc.Params.In.formularioprincipal != null)
				{
					var oform = document.forms[obody.oOVPageBaseAlmc.Params.In.formularioprincipal];
					if (oform != null) {
						// se subscribe al evento onSubmit
						obody.oOVPageBaseAlmc.Eventos._onsubmit = oform.onsubmit;
						oform.onsubmit = oOVPageBaseJS.FormOnsubmit;
						// se subscribe a la función submit
						obody.oOVPageBaseAlmc.Metodos = new Object;
						obody.oOVPageBaseAlmc.Metodos._submit = oform.submit;
						
						//YMV - 03/12/2004 - No funciona en IE5 (El objeto no permite esta propiedad o método)
						//oform.submit = oOVPageBaseJS.FormSubmit; 
					}
					else {
						alert("No encuentra el formulario");
					}
				}
			}
			// se subscribe al evento onkeypress
			if (obody.oOVPageBaseAlmc.Params.In.filtrarenter) {
				if (_val_IE) { 
					if (obody.onkeypress != "undefined")
						obody.oOVPageBaseAlmc.Eventos.BodyOnkeypress = obody.onkeypress;
					obody.onkeypress = oOVPageBaseJS.BodyOnkeypress;
				}
				else {	
					if (localWindow.onkeypress != "undefined")
						obody.oOVPageBaseAlmc.Eventos.BodyOnkeypress = localWindow.onkeypress;
					localWindow.onkeypress = oOVPageBaseJS.BodyOnkeypress;
				}
			}
		}
	}//End function init

	//Define la función BodyOnLoad
	function BodyOnload(e)
	{
		var oOVPageBaseAlmc = document.body.oOVPageBaseAlmc;
		if (oOVPageBaseAlmc != null)
		{
			if (oOVPageBaseAlmc.Eventos.BodyOnload != null) {
				oOVPageBaseAlmc.Eventos.BodyOnload();
			}
			
			//----------- Para el mensaje inicial --------------
			if (oOVPageBaseAlmc.Params.In.mensajeonload != null) {
				alert(oOVPageBaseAlmc.Params.In.mensajeonload);
			}

			if (oOVPageBaseAlmc.Params.In.configurarbarratitulo != null) {
				var arrAtributos = oOVPageBaseAlmc.Params.In.configurarbarratitulo.split("#");
				ConfigurarBarraTitulo(arrAtributos[0], (arrAtributos[1]=="True"));
			}
			
			//----------- Para el control de cambios ----------------
			if (oOVPageBaseAlmc.Params.In.tipocontrolcambio != null) {
				top.oOVPageBaseJS.SincroControlDeCambios(document.body);
			}

      //----------- Para el scroll de algunos controles ----------------
			// si hay controles a los que mantener el scroll
			if (oOVPageBaseAlmc.Params.In.ctrsmantscroll != null) { 
	      top.oOVPageBaseJS.PosicionarScroll(oOVPageBaseAlmc.Params.In.mantscrollclient);
			}
  				
  		//----------- Para el scroll de la pagina -------------------
			// si hay que mantener el scroll de la pagina
			if (oOVPageBaseAlmc.Params.In.mantenerscrollpage == "True") { 
	      top.oOVPageBaseJS.PosicionarPageScroll(oOVPageBaseAlmc.Params.In.mantpagescrollclient);
			}
			
			//----------- Para el control del foco -------------------
			if (oOVPageBaseAlmc.Params.In.controlfoco != null) {
				var focusControl = FindControlIdName(oOVPageBaseAlmc.Params.In.controlfoco);
				//hace lo necesario para llevar el foco a este control
				if (focusControl != null) {
					if (oOVPageBaseAlmc.Params.In.seleccontrolfoco == "True" && focusControl.select) {
						focusControl.select();
					}
					if ( focusControl != null && focusControl.focus ) {
						try {focusControl.focus();} catch(e){};
					}
				}
			}
		}
	}//End function BodyOnLoad
		
	//Define la función BodyOnKeyPress, hay que poner el parámetro para que funcione en NS
	function BodyOnkeypress(e)
	{
		var oOVPageBaseAlmc = document.body.oOVPageBaseAlmc;
		
		if (oOVPageBaseAlmc != null) {
			if (oOVPageBaseAlmc.Eventos.BodyOnkeypress != null) {
				oOVPageBaseAlmc.Eventos.BodyOnkeypress();
			}	
			
			if (oOVPageBaseAlmc.Params.In.filtrarenter) {
				// Hay que poner return para que funcione en NS
				return top.oOVPageBaseJS.FiltrarEnter(e);
			}	
		}
	}//End function BodyOnkeypress
		
	//Define la función BodyOnbeforeunload
	function BodyOnbeforeunload()
	{
		var oOVPageBaseAlmc = document.body.oOVPageBaseAlmc;

		//Si NO viene de submit comprueba si viene o no de un elemento <a href="javascript:__doPostBack('.../>
		if (!oOVPageBaseAlmc.Params.Internos.FlagVieneDeSubmit) {
			if (document.activeElement != null) {
				if (document.activeElement.tagName == 'A') {
					if (document.activeElement.href.indexOf(oOVPageBaseAlmc.Params.In.funcdopostback) != -1) {
						oOVPageBaseAlmc.Params.Internos.FlagTagAPostBack = true;
						//llama a lo que está subscrito al onbeforeunload del body en la página cliente
						if (oOVPageBaseAlmc.Eventos.BodyOnbeforeunload != null)
							oOVPageBaseAlmc.Eventos.BodyOnbeforeunload();
						return;
					}
					//Se trata de un href sin postBack que está en este documento y contiene o código javaScript o http;//...
					else {
						if (document.activeElement.href.indexOf("http://") != 0) {
        			//llama a lo que está subscrito al onbeforeunload del body en la página cliente
				      if (oOVPageBaseAlmc.Eventos.BodyOnbeforeunload != null)
					      oOVPageBaseAlmc.Eventos.BodyOnbeforeunload();
					    return;
						}
					}
				}
			}
		}

    //Si viene de submit o no viene de submit y no es un tag A
		//Si no es un elemento <a href="javascript:__doPostBack('.../>
		oOVPageBaseAlmc.Params.Internos.FlagVieneDeSubmit =false;
		if (oOVPageBaseAlmc != null) {
			if (oOVPageBaseAlmc.Params.In.tipocontrolcambio != null) {
				top.oOVPageBaseJS.TestControlDeCambios(oOVPageBaseAlmc.Params, event);
			}
			//llama a lo que está subscrito al onbeforeunload del body en la página cliente
			if (oOVPageBaseAlmc.Eventos.BodyOnbeforeunload != null)
				oOVPageBaseAlmc.Eventos.BodyOnbeforeunload();
		}

	}//End function BodyOnbeforeunload
		
	//Define la función obtenerParams
	//Almacena los parámetros del campo oculto en obody.oOVPageBaseAlmc.Params.In
	function ObtenerParams(In, campoOculto)
	{
		if (campoOculto != null) {
			var strPaquete = campoOculto.value;
			var arrayAtributos = strPaquete.split("$");
			var arrayAtr;
			var codeValue;

			for (cnt = 0; cnt < arrayAtributos.length; cnt++) {
				codeValue = arrayAtributos[cnt];
				arrayAtr = codeValue.split("&");
				if (arrayAtr.length > 1) {
					if (arrayAtr[0] == "mensajeonload")
						In.mensajeonload = arrayAtr[1];
					else
						eval("In." + arrayAtr[0] + " = '" + arrayAtr[1] + "';");
				}
			}
			//inicializa el valor del campo oculto
			campoOculto.value = "";
		}
	}//End function obtenerParams 
	
	//Define la función InitParamsInternos
	//Inicializa los parámetros que se utilizan a nivel interno en obody.oOVPageBaseAlmc.Params.Interno
	function InitParamsInternos(Int)
	{
		//Flag que indica si se ha hecho el submit
		//Para controlar los que los elementos <a href.../> no procesen el unbeforeunload
		Int.FlagVieneDeSubmit = false;
		//Flag que indica si se trata de un elemento<a href="javascript:__doPostBack(.../>
		Int.FlagTagAPostBack = false;
		//Controla que no se ponga dos veces la marca de modificado
		Int.CambiadoCtrlDeCambios = false;
		//Indica al onBeforeUnLoad si deja pasar o pregunta antes
		Int.dejarPasarOnBeforeUnLoad = false;
	}//End function InitParamsInternos
					
	//Define la función FormSubmit por aqui pasan todos los que hacen posBack
	//HtmlControls
	function FormSubmit()
	{
		var elt;
		var oOVPageBaseAlmc = document.body.oOVPageBaseAlmc;

    //guarda en elt el elemento que produce el submit				
		if (oOVPageBaseAlmc.Params.Internos.FlagTagAPostBack) {
			oOVPageBaseAlmc.Params.Internos.FlagTagAPostBack = false;
			elt = document.activeElement;
		}
		else {
			//Si window.event viene vacio se coge el id del elemento activo
			if (event != null) {
				elt = event.srcElement;
				//añadido por jjjimenez
				if (elt == null)
					elt = document.activeElement;
			}
			else
				//Este elemento activo puede venir sin id, si es asi no haría la pregunta en control de cambios
				elt = document.activeElement;
		}
			
		//Si se continua:
		if (top.oOVPageBaseJS.hagoSubmit(elt, document)) {
			if (oOVPageBaseAlmc.Metodos._submit != null) {
				top.oOVPageBaseJS.CapturarPageScroll(oOVPageBaseAlmc.Params);
				top.oOVPageBaseJS.MantenerScroll(oOVPageBaseAlmc.Params);
				top.oOVPageBaseJS.MantenerFoco(oOVPageBaseAlmc.Params, document.activeElement);
				//Escribe en la salida
				if (oOVPageBaseAlmc.Params.In.idclimsgprocesando != null)
					top.oOVPageBaseJS.MensajeOpProcesando(oOVPageBaseAlmc.Params.In.idclimsgprocesando);
				top.oOVPageBaseJS.EscribirParamsOut(document);
				oOVPageBaseAlmc.Metodos._submit();
				if (oOVPageBaseAlmc.Params.In.bloquearform) {
					//Bloquea el formulario despues de hacer el submit
					top.oOVPageBaseJS.BloqueaFormulario(elt);
				}
			}
		}
		//sino
		// como no llama a _submit no se hace nada
	}

	//Define la función FormOnsubmit por aqui pasan todos los que hacen submit antes de hacerlo
	//WebControls
	function FormOnsubmit()
	{
		var resHagoSubmit;
		var oOVPageBaseAlmc = document.body.oOVPageBaseAlmc;
		
		if (oOVPageBaseAlmc != null) {
			if (oOVPageBaseAlmc.Eventos._onsubmit != null) {
				//guarda el valor devuelto por onSubmit
				var res;
				res = document.body.oOVPageBaseAlmc.Eventos._onsubmit();

				if (typeof(res) == "undefined") {
					res = true;	
					if (_val_IE)
						res = event.returnValue;
				}	

				//Si se ha devuelto true o nada (undefined) se continua con hagoSubmit							
				if (res) {
					resHagoSubmit = top.oOVPageBaseJS.hagoSubmit(document.activeElement, document);
					if (resHagoSubmit)
					{
						top.oOVPageBaseJS.CapturarPageScroll(oOVPageBaseAlmc.Params);
						
						top.oOVPageBaseJS.MantenerScroll(oOVPageBaseAlmc.Params);
						
						top.oOVPageBaseJS.MantenerFoco(oOVPageBaseAlmc.Params, document.activeElement);
						//Escribe en la salida
						
						if (oOVPageBaseAlmc.Params.In.idclimsgprocesando != null)
							top.oOVPageBaseJS.MensajeOpProcesando(oOVPageBaseAlmc.Params.In.idclimsgprocesando);
															
						top.oOVPageBaseJS.EscribirParamsOut(document);
						//Si se va a hacer el submit bloqueo el formulario
						if (oOVPageBaseAlmc.Params.In.bloquearform)
							window.setTimeout("top.oOVPageBaseJS.BloqueaFormulario(document.activeElement)", 0);
					}
					return resHagoSubmit;
				}
				//return false y no se hace el submit
				else
					return false;
			}
			else
			{
				resHagoSubmit = top.oOVPageBaseJS.hagoSubmit(document.activeElement, document);
				if (resHagoSubmit) {
					top.oOVPageBaseJS.MantenerFoco(oOVPageBaseAlmc.Params, document.activeElement);
					//Escribe en la salida
					
					if (oOVPageBaseAlmc.Params.In.idclimsgprocesando != null) {
						top.oOVPageBaseJS.MensajeOpProcesando(oOVPageBaseAlmc.Params.In.idclimsgprocesando);
					}	
					
					top.oOVPageBaseJS.EscribirParamsOut(document);

					//Si se va a hacer el submit bloqueo el formulario
					if (oOVPageBaseAlmc.Params.In.bloquearform)
						window.setTimeout("top.oOVPageBaseJS.BloqueaFormulario(document.activeElement)", 0);
				}
				return resHagoSubmit;
			}
		}
	}

	//Define la función hagoSubmit, la cual decide si se deja hacer el submit o se pregunta antes
	function hagoSubmit(ctlActivo, oDocument)
	{
		var oParams = oDocument.body.oOVPageBaseAlmc.Params;
		if (oParams.In.tipocontrolcambio != null) {
			var In = oParams.In;
			var ParInternos = oParams.Internos;
				
			if (typeof(ctlActivo) != "undefined") {
				if (In.ctrsicontcdocambios != null) {
					//Si en controlespreguntansicontinuarcdohaycambios está el objeto que provoca el cambio entonces avisarPerdidaDeCambios
					if (In.ctrsicontcdocambios.indexOf('#' + ctlActivo.id + '#') != -1) {
						//si hago return false corta los eventos
						var res = top.oOVPageBaseJS.AvisarPerdidaDeCambios(oParams);
						if (res) {
							top.oOVPageBaseJS.EscribirParamsOut(oDocument);
							//Si se hace el submit pongo esta variable a true para que el onBeforeUnLoad sepa que viene del submit
							ParInternos.FlagVieneDeSubmit = true;
						}
						return res;
					}
				}
			}	
			//Si se hace el submit pongo esta variable a true para que pase el onBeforeUnLoad
			ParInternos.dejarPasarOnBeforeUnLoad = true;
			//Si se hace el submit pongo esta variable a true para que el onBeforeUnLoad sepa que viene del submit
			ParInternos.FlagVieneDeSubmit = true;
			
			//Escribe en la salida
			top.oOVPageBaseJS.EscribirParamsOut(oDocument);
		}
		return true;
	}//End hagoSubmit
				
	//Define la función obtenerParams
	//Almacena los parámetros del campo oculto en obody.oOVPageBaseAlmc.Params.In
	function EscribirParamsOut(oDocument)
	{
		//falta llamar a una función que recoga parámetros y los añada al out
		var InputHidden = oDocument.getElementById(nameFieldHidden);
		
		if (InputHidden != null) {
			var oOVPageBaseAlmc = oDocument.body.oOVPageBaseAlmc;
			var prop;
			var paquete = "";
		
			//Recorre los parámetros out
			for (prop in oOVPageBaseAlmc.Params.Out)  {
				paquete = paquete + prop.toString() + "&" + oOVPageBaseAlmc.Params.Out[prop] + "$";
			}
			
			//guarda el valor en el campo oculto
			InputHidden.value = paquete;
		}
		
	}//end EscribirParamsOut
		
//****************************************************************************
//								FUNCIONES PARA EL CONTROL DE CAMBIOS
//****************************************************************************

	//Busca el control donde se notifica los cambios segun el tipo de notificacion
	function CC_BuscarObjeto(oBody)
	{	
		var oParams = oBody.oOVPageBaseAlmc.Params;
		
		if (oParams.In.tipocontrolcambio != null) {
			if (oParams.Internos.CtrlDeCambios == null) {
				if (oParams.In.tipocontrolcambio.indexOf("Tipo1") != -1) {
					oParams.Internos.CtrlDeCambios = top.oOVPageBaseJS._ControlDeCambios_BuscarObjetoTipo1(oBody);
				}
	//			... Para los demas tipos
				else {
					if (oParams.In.tipocontrolcambio.indexOf("Tipo2") != -1) {
					
					}
				}	
			}
		}
	}

	//La utilizan los controles para notificar los cambios subscribiendose a un evento determinado (onchange, ...)
	function SetControlDeCambios(localWindow)
	{
		var oParams = localWindow.document.body.oOVPageBaseAlmc.Params;

		if (oParams.In.haycambios != null) {
			oParams.In.haycambios = 'Si';
			//Para que se envíe al servidor
			oParams.Out.haycambios = 'Si';

			top.oOVPageBaseJS.CC_BuscarObjeto(localWindow.document.body);
			top.oOVPageBaseJS._ControlDeCambios_SetMarca(oParams);
		}
	}

	//Pone la marca de modificado segun el tipo de control de cambio
	function _ControlDeCambios_SetMarca(oParams) 
	{
		if (oParams.Internos.CtrlDeCambios != null) {
			if (oParams.Internos.CambiadoCtrlDeCambios == false) {
				oParams.Internos.CambiadoCtrlDeCambios = true;
				
				if (oParams.In.tipocontrolcambio.indexOf("Tipo1") != -1) {
					//YMV 18/01/2004 Esto no funciona en NS
					if (oParams.Internos.CtrlDeCambios.innerText != null) {
						oParams.Internos.CtrlDeCambios.innerText += '*';
					}
					oParams.Internos.CtrlDeCambios.title = 'Hay modificaciones sin actualizar';
				}
				//... Para los demas tipos
				else 
				{
					if (oParams.In.tipocontrolcambio.indexOf("Tipo2") != -1) {
					
					}
				}
			}
		}
	}

	//Busca el control donde se escribe el * de notificación de cambios
	function _ControlDeCambios_BuscarObjetoTipo1(oBody) 
	{
			//Modificado por jjjimenez, este cambio depende del control de cambio utilizado para ponerle el *
			//YMV 18/01/2004 Se sustituye para que funcione en NS
			//var col1 = oBody.all.tags("span");
			var col1 = oBody.getElementsByTagName("span");
		
			for (var i=0; i<col1.length; i++) {
				if (col1.item(i).ControlDeCambiosString == 'Si') {
					return col1.item(i);
				}
			}
			return null;
	}

	//Se invoca al hacer el onload del body y pone la marca de modificado si hay que ponerla
	function SincroControlDeCambios(oBody)
	{
		var oParams = oBody.oOVPageBaseAlmc.Params;

		if (oParams.In.haycambios == 'Si') {
				oParams.Out.haycambios = 'Si';
				top.oOVPageBaseJS.CC_BuscarObjeto(oBody);
				top.oOVPageBaseJS._ControlDeCambios_SetMarca(oParams);
		}
	}

	//Se invoca al hacer el onbeforeunload del body
	function TestControlDeCambios(oParams, ev) 
	{
		var oParams = document.body.oOVPageBaseAlmc.Params;
		
		if (oParams.In.haycambios == 'Si') {
			if (oParams.Internos.dejarPasarOnBeforeUnLoad) {
				oParams.Internos.dejarPasarOnBeforeUnLoad = false;
			}
			else {
				ev.returnValue = 'Hay modificaciones sin actualizar.';
			}
		}
	}

	//Avisa de la perdida de cambios y si desea continuar
	//Se llama desde el FrameWork
	function FWAvisarPerdidaDeCambios(me)
	{
			if (me.document.body.oOVPageBaseAlmc != null)
				return AvisarPerdidaDeCambios(me.document.body.oOVPageBaseAlmc.Params);
			else
				return false;
	}
		
	//Avisa de la perdida de cambios y si desea continuar
	function AvisarPerdidaDeCambios(oParams)
	{
		var rc = true;

		if (oParams.In.haycambios == 'Si')
		{
			rc = confirm("¡EXISTEN CAMBIOS SIN ACTUALIZAR!\nSi desea perder los cambios pulse el botón Aceptar, en caso contrario pulse el botón Cancelar.");
			if (rc == true) top.oOVPageBaseJS.UnsetControlDeCambios(oParams);
		}
		return rc;
	}

	//Borra en el control oculto de cambios la marca de 'Hay Cambios' y llama a una función
	//para quitar la marca
	//Se llama desde el FrameWork
	function FWUnsetControlDeCambios(me)
	{
			if (me.document.body.oOVPageBaseAlmc != null)
				UnsetControlDeCambios(me.document.body.oOVPageBaseAlmc.Params);
	}
	
	//Borra en el control oculto de cambios la marca de 'Hay Cambios' y llama a una función
	//para quitar la marca
	function UnsetControlDeCambios(oParams) 
	{
		if (oParams.In.haycambios != null)
		{
				oParams.In.haycambios = 'No';
				//Para que se envía al servidor
				oParams.Out.haycambios = 'No';
				
				top.oOVPageBaseJS._ControlDeCambios_UnsetMarca(oParams);
		}
	}

	//Quita la marca de modificado si se puso
	function _ControlDeCambios_UnsetMarca(oParams) 
	{
		if (oParams.Internos.CtrlDeCambios != null) 
		{
			if (oParams.Internos.CambiadoCtrlDeCambios == true) 
			{

				if (oParams.In.tipocontrolcambio.indexOf("Tipo1") != -1)
				{
					//if (oParams.Internos.CtrlDeCambios.value != null)
					//YMV - 18/01/2005 Creo que esto no funciona en NS
					if (oParams.Internos.CtrlDeCambios.innerText != null) {
						oParams.Internos.CtrlDeCambios.innerText = oParams.Internos.CtrlDeCambios.innerText.substring(0, oParams.Internos.CtrlDeCambios.innerText.length - 1);
					}

					oParams.Internos.CtrlDeCambios.title = null;
				}
				//... Para los demas tipos
				else if (oParams.In.tipocontrolcambio.indexOf("Tipo2") != -1) {
				}

				oParams.Internos.CambiadoCtrlDeCambios = false;
			}
		}
	}//end top.oOVPageBaseJS._ControlDeCambios_UnsetMarca

	//Devuelve un bool de si hay o no cambios
	function ControlCambiosHayCambios(me) 
	{
		var oParamsIn = me.document.body.oOVPageBaseAlmc.Params.In;
		
		if (oParamsIn.haycambios != null) {
				return (oParamsIn.haycambios == 'Si')
		}
		else
			return false;
	}

	//Por una vez, permite ignorar el control de cambios, aunque no se pierde el estado de la marca.
	function PermitirUnaEnControlDeCambios(me) 
	{
		me.document.body.oOVPageBaseAlmc.Params.Internos.dejarPasarOnBeforeUnLoad = true;
	}

//****************************************************************************
//						FIN CONTROL DE CAMBIOS
//****************************************************************************

//****************************************************************************
//								FUNCIONES PARA LA TECLA ENTER
//****************************************************************************

//No procesa la tecla enter (13), para Netscape, mozilla, etc.
function NSFiltrarEnter(e) {
	var ret= (e.keyCode != 13);
	return ret;
}
		
//No procesa la tecla enter (13), para IExplorer
function IEFiltrarEnter(e) {
	e=event;
	var ret= (e.keyCode != 13);
	e.returnValue = ret;
}

//Permite la tecla enter
function PermitirEnterEnControl(e) 
{
	e.cancelBubble = true;	
	//return true;					
}

//****************************************************************************
//						FIN TECLA ENTER
//****************************************************************************

//****************************************************************************
//								FUNCIONES BLOQUEA FORMULARIO CUANDO SUBMIT
//****************************************************************************

//Nombre de Estilos utilizados (la página aspx debe implementar estos nombres de estilos)
var CajaDeTexto = "";
var CajaDeTextoSoloLectura = "sololec";
var CajaDeTextoAlingDer = "InputTextAlingDerecha";
var CajaDeTextoAlingDerSoloLectura = "soloLecAlingDerecha";
var Combo = "";
var ComboSoloLectura = "sololec";
var CajaDeTextoNumerica = "";
var CajaDeTextoNumericaSoloLectura = "sololec";
var CajaDeOpcion = "CHECKBOX";
var CajaDeOpcionSoloLectura = "checkSololec";
var BotonAct = "boton";
var BotonDesact = "botonDesac";

// Esta función intenta reducir el problema de pulsar múltiples veces 'aceptar' antes que el servidor
// procese la primera petición.
// Se sustituye el botón es un botón de servidor 
//
// Parámetros:
//  Control : Control, se utiliza para deshabilitarlo y llegar al formulario.
//	me: es el valor this
function BloqueaFormulario(ctlActivo)
{
  
  var oOVPageBaseAlmc = document.body.oOVPageBaseAlmc;	

	if (typeof(ctlActivo) != "undefined")
		if (ctlActivo.disabled != null)
			ctlActivo.disabled = true;  // Lo primero es deshabilitar el Control para que no se vuelva a pulsar.
		
	//Obtiene el formulario principal
	if (oOVPageBaseAlmc.Params.In.formularioprincipal != null)
	{
		var parentForm = document.forms[oOVPageBaseAlmc.Params.In.formularioprincipal];
	  parentForm.style.cursor = "Wait";  // Cambio del icono del cursor.
  	
	  try
	  {
	    // Recorremos el formulario para desactivar todos los elementos que podamos.
	    top.oOVPageBaseJS.BloqueaElementos(parentForm);
	  } 
	  // si hubo algun error, restablecemos los valores a los iniciales
	  catch(e)
	  {    
	    ctlActivo.disabled = false;  // Lo primero es habilitar el Control para que no se vuelva a pulsar.
	    parentForm.style.cursor = "auto";  // Cambio del icono del cursor.
	  }
  }
	return;
}

//Bloquea los elementos buttons, text, a, ...
function BloqueaElementos(obj) {
	var i = 0;
	var col;
	
	if (obj == null) return;
	//YMV 18/01/2004 Se sustituye para que funcione en NS
	//col = obj.all.tags("INPUT");
	col=document.body.getElementsByTagName("INPUT")
	for (i = 0; i < col.length; i++) {
		switch (col[i].type) {
			case "text" :
				if (!col[i].readOnly) {
					col[i].readOnly = true;
					if (col[i].className == CajaDeTexto)
						col[i].className = CajaDeTextoSoloLectura;
					else if (col[i].className == CajaDeTextoAlingDer)
						col[i].className = CajaDeTextoAlingDerSoloLectura;
						// añadido por jjjimenez
						else
							col[i].className += "_RO"; // JoRoPi 30/06/2004. Primera aproximación para no depender tanto del nombre del estilo.
					}
				break;

			case "image":
			case "submit":
			case "button":
				col[i].disabled = true;
				if (col[i].className == BotonAct)
					col[i].className = BotonDesact;
				else if (col[i].className != "")
					col[i].className += "_DBL"; // JoRoPi 30/06/2004. Primera aproximación para no depender tanto del nombre del estilo.
				break;
			case "checkbox":
			    col[i].disabled = true;
				break;  
		}
	}
	
	//YMV 18/01/2004 Se sustituye para que funcione en NS
	//col = obj.all.tags("TEXTAREA");
	// VOY POR AQUI
	col=document.body.getElementsByTagName("TEXTAREA")
	for (i = 0; i < col.length; i++) {
		col[i].readOnly = true;
		if (col[i].className == CajaDeTexto)
			col[i].className = CajaDeTextoSoloLectura;
		else if (col[i].className == CajaDeTextoAlingDer)
			col[i].className = CajaDeTextoAlingDerSoloLectura;
	}

	col = obj.all.tags("SELECT");
	for (i = 0; i < col.length; i++) {
		col[i].disabled = true;
		col[i].className = ComboSoloLectura;
	}

	col = obj.all.tags("A");
	for (i = 0; i < col.length; i++) {
		col[i].style.display="none";
	}

	col = obj.all.tags("IMG");
	for (i = 0; i < col.length; i++) {
		col[i].disabled = true;
	}

	col = obj.all.tags("SPAN");
	for (i = 0; i < col.length; i++) {
		if (col[i].className == CajaDeOpcion) {
			col[i].className = CajaDeOpcionSoloLectura;
			col[i].disabled = true;
		}
	}
}

//****************************************************************************
//								FUNCIONES PARA EL CONTROL DE MANTENER SCROLL
//****************************************************************************

///***********************************************
///
///
///***********************************************
function MantenerScroll(oParams)
{
  // comprobamos que esta esa funcionalidad
  if ((oParams.In.ctrsmantscroll != null) && (oParams.In.ctrsmantscroll != ""))
	{ 
    
    // buscamos los controles, para recoger su scroll
		var arrayControles = oParams.In.ctrsmantscroll.split("#");
		var controlID;
		var c;

    oParams.Out.MantScrollClient = ""
		for (cnt = 0; cnt < arrayControles.length; cnt++)
		{
			controlID = arrayControles[cnt];
			if (controlID != "")
			{
			  c = FindControl(controlID, "")
			  if (c != null)
         	oParams.Out.MantScrollClient +=  '#' + c.id + '*' + c.scrollLeft + '_' + c.scrollTop;   
		  }
		}
		if (oParams.Out.MantScrollClient != "")
		  oParams.Out.MantScrollClient += '#'; 
	}
 }

///***********************************************
///
///
///***********************************************
function PosicionarScroll(MantScrollClient)
{
  // comprobamos que esta esa funcionalidad
  if ((MantScrollClient != null) && (MantScrollClient != ""))
	{    
    // buscamos los controles, para recoger su scroll
		var arrayControles = MantScrollClient.split("#");
		var control;
		var c;

    for (cnt = 0; cnt < arrayControles.length; cnt++)
		{
			control = arrayControles[cnt];
			if (control != "")
			{
			  // separamos cada control con su scroll
			  var arrayControl_scroll = control.split("*");
			  if (arrayControl_scroll.length > 1)
			  {
			    c = FindControl(arrayControl_scroll[0], "")
			    if (c != null)
			    {
			      // separamos cada posicion del scroll del control
			      var posScroll = arrayControl_scroll[1].split("_");
			      if (posScroll.length == 2)
			      {
		  	 	    c.scrollLeft = posScroll[0] ;
		  	 	    c.scrollTop = posScroll[1];
		  	 	  }
		  	  }
		  	}
		  }
		}
	}	
}	// fin function PosicionarScroll
	        			
	        			
//****************************************************************************
//								FUNCIONES PARA EL CONTROL DE MANTENER SCROLL DE LA PAGINA
//****************************************************************************

///***********************************************
///
///
///***********************************************
function CapturarPageScroll(oParams)
{ 
  // comprobamos que esta esa funcionalidad
  if ((oParams.In.mantenerscrollpage != null) && (oParams.In.mantenerscrollpage != ""))
    oParams.Out.MantPageScrollClient = document.body.scrollLeft + '_' + document.body.scrollTop;
}

///***********************************************
///
///
///***********************************************
function PosicionarPageScroll(scrollpage)
{ 
  // comprobamos que esta esa funcionalidad
  if ((scrollpage != null) && (scrollpage != ""))
	{    
     // separamos cada posicion del scroll del control
     var posScroll = scrollpage.split("_");
     if (posScroll.length == 2)
     {
 	 	    document.body.scrollLeft = posScroll[0] ;
	 	    document.body.scrollTop = posScroll[1];
	 	  }
  }
}

//****************************************************************************
//								FUNCIONES PARA EL CONTROL DE MANTENER FOCO
//****************************************************************************

//Guarda en una variable interna de que elemento viene el foco
function ControlOnFocusIn(me)
{ 
  if ((event.fromElement!=null)&&(event.fromElement.id != ""))
	  me.document.body.oOVPageBaseAlmc.Params.Internos.EltOnFocusIn = event.fromElement;
  else
		me.document.body.oOVPageBaseAlmc.Params.Internos.EltOnFocusIn = null;
}

//Pasa al servidor el id del control que va a tener el foco despues del submit
function MantenerFoco(oParams, elt)
{
  if ((oParams.In.mantenerfoco) && (elt != null)) {
		//Si está incluido en los controles que dan el foco al anterior
		if ((oParams.In.ctrsmantfocoant != null) && (oParams.In.ctrsmantfocoant.indexOf('#' + elt.id + '#') != -1)) {
			if (oParams.Internos.EltOnFocusIn != null) { 
			    // evitamos posicionar el foco sobre los controles que deben mantener el scroll
			    if ((oParams.In.ctrsmantscroll == null) || (oParams.In.ctrsmantscroll.indexOf(oParams.Internos.EltOnFocusIn.id) == -1))
				    elt = oParams.Internos.EltOnFocusIn;
			}
		}
		oParams.Out.FocoClient = elt.id + '#' + elt.name;//elt.uniqueID;
	}
}

//****************************************************************************
//								FUNCIONES PRIVADAS
//****************************************************************************

//Busca un control a partir de un parámetro IdName que contiene el id del control
//i el name del control separados por '#'
function FindControlIdName(IdName)
{
	if ((IdName != null) && (IdName != ""))
	{
		//extraer el id y el name de la propiedad IdName
		arrayIdName = IdName.split("#");
		if (arrayIdName.length > 1)
		{
			return FindControl(arrayIdName[0], arrayIdName[1]);
		}
	}
	//Sino
	return null;
}

//Función que encuentra un control por el id y sino lo encuentra lo busca por el name
//ejemplo de llamada: FindControl(c.ClientID, c.UniqueID);
function FindControl( id, name ) 
{
	var Control;
	if ( typeof(document.getElementById) != "undefined" ) 
	{
		Control = document.getElementById(id);
		if ( Control != null ) 
		{
			return Control;
		}
	}
	var theForm;
	for( var i = 0; i < document.forms.length; i++ ) 
	{
		theForm = document.forms[i];
		Control = theForm[name];
		if ( Control != null ) 
		{
			return Control;
		}
	}
	return null;
}

//Función que configura la barra de título para cada página que se carga en el iframe de 
//la página inicio.aspx. Permite configurar el título y la visibilidad o no del link
//para seleccionar contratos.
function ConfigurarBarraTitulo(stitulo, blinkSelContratos) {

	var tdfrmTitulo = parent.document.getElementById("tdFrameTitulo");
	var lnkfrmSelecContrato = parent.document.getElementById("lnkFrameSelecContrato");
	
	if (_val_IE) {
		if (tdfrmTitulo != null) {
			tdfrmTitulo.innerText=stitulo;
		}	
				
	}	
	else {
		if (tdfrmTitulo != null) {
			if (tdfrmTitulo.childNodes.length > 0) {
				tdfrmTitulo.childNodes[0].nodeValue = stitulo;
			}	
			else	{
				var tnTitulo = document.createTextNode(stitulo);
				var res=tdfrmTitulo.appendChild(tnTitulo);
			}	
		}	
	}
	
	if (lnkfrmSelecContrato != null) {
		if (blinkSelContratos)
			lnkfrmSelecContrato.style.display="";
		else	
			lnkfrmSelecContrato.style.display="none";
	}
	
	
	
}

function MensajeOpProcesando(sdiv) {

	var ctlDiv = document.getElementById(sdiv);
	var oOVPageBaseAlmc = document.body.oOVPageBaseAlmc;	
	
	if (ctlDiv != null) {
		var parentForm;

		//Obtiene el formulario principal
		if (oOVPageBaseAlmc.Params.In.formularioprincipal != null)
		{
			parentForm = document.forms[oOVPageBaseAlmc.Params.In.formularioprincipal];
			if (ctlDiv.style.display=="none") {
				ctlDiv.style.display="";
				parentForm.style.display="none";
			}
			else {
				ctlDiv.style.display="none";
				parentForm.style.display="";
			}
		}
	}
}

//YMV - 03/12/2004 - Se ha añadido un botón para hacer submit.
//Motivo: En IE5 no funciona reemplazar el submit por el nuestro.
function SubmitConOpConValidacion() {
	var oOVPageBaseAlmc = document.body.oOVPageBaseAlmc;	
	if (oOVPageBaseAlmc.Params.In.formularioprincipal != null) {
		var parentForm = document.forms[oOVPageBaseAlmc.Params.In.formularioprincipal];
		parentForm.OVPageBaseSubmitConVal.click();
	}
}

//YMV - 03/12/2004 - Se ha añadido un botón para hacer submit.
//Motivo: En IE5 no funciona reemplazar el submit por el nuestro.
function SubmitConOpSinValidacion() {
	var oOVPageBaseAlmc = document.body.oOVPageBaseAlmc;	
	if (oOVPageBaseAlmc.Params.In.formularioprincipal != null) {
		var parentForm = document.forms[oOVPageBaseAlmc.Params.In.formularioprincipal];
		parentForm.OVPageBaseSubmitSinVal.click();
	}
}



//****************************************************************************
//								FIN
//****************************************************************************


