var indiceFormularioQ02b = 1;

var isAltaCuestionario = false;

var isEntradaDatos = false;

var xPos;

var yPos;

//plegado y deplegado de secciones

function initPage(){

	buscarFormQ02b();

	//En el portal de aplicaciones de ejie, se ejecutaba una funci?n en el window.load, que nosotros sobreescribimos por esta.Esta funci?n

	//se guarda en la variable funcionLoadPortal, que se ejecuta  dentro de la nuestra

	try{

		if(funcionLoadPortal)

			funcionLoadPortal.call();

	}catch(ex){}

	

	if( window.onLoadPage){

		setTimeout("onLoadPage()", 500);

	}

	/*if( window.loadControls){

		loadControls();

	}

	if(window.initializeMenus){

		initializeMenus();

	}*/

	if(document.forms[indiceFormularioQ02b]){

		document.forms[indiceFormularioQ02b]._submit=document.forms[indiceFormularioQ02b].submit;

		document.forms[indiceFormularioQ02b].submit=submitEtiqueta;

	}	

}



function getPosition( objid)

{	if (document.layers) {	

		xPos = document.images[ objid].x;

		yPos = document.images[ objid].y;

	} else if(!document.layers && document.all) {

		xPos     = document.all[ objid].offsetLeft;

		parentEl = document.all[ objid].offsetParent;

		while( parentEl != null) {

			xPos    += parentEl.offsetLeft;    

			parentEl = parentEl.offsetParent;       

		}

		yPos     = document.all[ objid].offsetTop;

		parentEl = document.all[ objid].offsetParent;  

		while( parentEl != null) {    

			yPos    += parentEl.offsetTop;               

			parentEl = parentEl.offsetParent;  

		}

	}else{

                xPos = document.images[ objid].x;

		yPos = document.images[ objid].y;

        }

}



//Funci?n que se ejecuta para mostrar un mensaje de carga de las pantallas

function submitEtiqueta(){

	mostrarCapa('etiquetaProceso');

	window.setTimeout ('javascript:ejecuta();', 1000); 

	

		 

}



function ejecuta(){

	document.forms[indiceFormularioQ02b]._submit();

}



/**

 * Funcion que carga un combo a traves del data launcher 

 *

 * moduloWar 		- Nombre del m?dulo en el cual se encuentra el combo

 * idioma	 		- Idioma obtenido del contexto de la aplicaci?n

 * tabla     		- Nombre de la tabla, vista o sin?nimo de la cual se quiere obtener el combo

 * campo_codigo		- Columna que contiene el ni

 * campo_descri 	- Columna que contiene la descripci?n

 * nombreCombo  	- Nombre del combo del formulario (en struts ser?a el atributo property)

 * optionalWhere	- Parte where opcional. En este apartado se podr?a incluir los roles.

 * distinct			- Variable a true o false. Si est? a true har? una distinct del campo_codigo

 * indBlancos		- Variable boolean que indica si quieres que en el combo aparezca una opci?n en blanco

 *

 */

function cargarComboDataLauncher(moduloWar, idioma, tabla, campo_codigo, campo_descri, nombreCombo, optionalWhere, distinct, indBlancos)

{

	//Se declara la variable ARQ_GDTP

	var GDTP = new ARQ_GDTP();

	GDTP.addGroup("APP_PARAMETERS");

	GDTP.addProperty("APP_PARAMETERS","CLASSNAME","q02b.exe.comun.Q02bCoddataLauncher");

	GDTP.addProperty("APP_PARAMETERS","METHOD","getComboDataJS");

	GDTP.addGroup("APP_DATA");

	GDTP.addProperty("APP_DATA","TABLE",tabla);

	GDTP.addProperty("APP_DATA","COD_COLUM_NAME_SELECT",campo_codigo);

	GDTP.addProperty("APP_DATA","DESC_COLUM_NAME_SELECT",campo_descri);

	GDTP.addProperty("APP_DATA","IDIOMA",idioma);

	if(optionalWhere != "" && optionalWhere != null)

	{

		GDTP.addProperty("APP_DATA","OPTIONAL_WHERE",optionalWhere);

	}

	if(distinct != "true"){ 

		distinct = "false";

	}

	GDTP.addProperty("APP_DATA","DISTINCT",distinct);

	var response 	= Comm.submitGDTP(GDTP,"/q02b"+moduloWar+"War/comunJSP/q02blauncher.jsp","POST");

	var result 		= response.getProperty("RESULT_1","RESULT");

	cargaDatosComboDataLauncher(response, result, nombreCombo,indBlancos);

}



/**

 * Funcion que carga un combo a traves del data launcher teniendo en cuenta los roles

 *

 * moduloWar 			- Nombre del m?dulo en el cual se encuentra el combo

 * idioma	 			- Idioma obtenido del contexto de la aplicaci?n

 * tabla     			- Nombre de la tabla, vista o sin?nimo de la cual se quiere obtener el combo

 * campo_codigo			- Columna que contiene el ni

 * campo_descri 		- Columna que contiene la descripci?n

 * nombreCombo  		- Nombre del combo del formulario (en struts ser?a el atributo property)

 * optionalWhere		- Parte where opcional. En este apartado se podr?a incluir los roles.

 * distinct				- Variable a true o false. Si est? a true har? una distinct del campo_codigo

 * indBlancos			- Variable boolean que indica si quieres que en el combo aparezca una opci?n en blanco

 * tablaRoles			- Tabla que contiene los roles del sistema

 * campo_codigo_roles	- Columna de la tabla de roles que contiene el n?mero interno

 * tablaRolesObjeto		- Tabla que contiene la relaci?n rol-objeto e.j. (rol-secci?n, rol-tema etc...)

 * rolesSeparadosComas	- Los roles del usuario del sistema separados por comas (est?n en una variable global JS)

 * rolesTablaNi			- Los roles del usuario del sistema preparados para ponerlos en una query

 *

 */

function cargarComboDataLauncherRoles(moduloWar, idioma, tabla, campo_codigo, campo_descri, nombreCombo, optionalWhere, distinct, indBlancos, tablaRoles, campo_codigo_roles, tablaRolesObjeto, rolesSeparadosComas, rolesTablaNi)

{

	//Se declara la variable ARQ_GDTP

	var GDTP = new ARQ_GDTP();

	GDTP.addGroup("APP_PARAMETERS");

	GDTP.addProperty("APP_PARAMETERS","CLASSNAME","q02b.exe.comun.Q99aCoddataLauncher");

	GDTP.addProperty("APP_PARAMETERS","METHOD","getComboDataJSRoles");

	GDTP.addGroup("APP_DATA");

	GDTP.addProperty("APP_DATA","TABLE",tabla);

	GDTP.addProperty("APP_DATA","COD_COLUM_NAME_SELECT",campo_codigo);

	GDTP.addProperty("APP_DATA","DESC_COLUM_NAME_SELECT",campo_descri);

	GDTP.addProperty("APP_DATA","IDIOMA",idioma);

	GDTP.addProperty("APP_DATA","TABLE_ROLES",tablaRoles);

	GDTP.addProperty("APP_DATA","COD_COLUM_TABLE_ROLES",campo_codigo_roles);

	GDTP.addProperty("APP_DATA","TABLE_RELACION_ROLES_OBJETO",tablaRolesObjeto);

	GDTP.addProperty("APP_DATA","ROLES_SEPARADOS_COMAS",rolesSeparadosComas);

	GDTP.addProperty("APP_DATA","ROLES_TABLA_NI",rolesTablaNi);

	if(optionalWhere != "" && optionalWhere != null)

	{

		GDTP.addProperty("APP_DATA","OPTIONAL_WHERE",optionalWhere);

	}

	if(distinct != "true"){ 

		distinct = "false";

	}

	GDTP.addProperty("APP_DATA","DISTINCT",distinct);

	var response 	= Comm.submitGDTP(GDTP,"/q02b"+moduloWar+"War/comunJSP/q02blauncher.jsp","POST");

	var result 		= response.getProperty("RESULT_1","RESULT");

	cargaDatosComboDataLauncher(response, result, nombreCombo,indBlancos);

}



/*

 * Funcion que carga el combo a trav?s de los datos del data launcher

 *

 * response		- Variable que contiene los resultados obtenidos

 * result   	- Variable que indica si todo a ido bien

 * nombreCombo	- Nombre del combo del formulario (en struts ser?a el atributo property)

 *

 */

function cargaDatosComboDataLauncher(response, result, nombreCombo, indBlancos )

{

	if(result=="OK")

	{			

		var count = response.getProperty("RESULT_1","NUMREGISTROS");

		document.all[nombreCombo].options.length = 0;

		if ( indBlancos){

			document.all[nombreCombo].options[0] = new Option('','');

			for(i=0;i<count;i++)

			{

				var codigo 		= response.getProperty("RESULT_1","CODIGO_"+i);

				var descripcion = response.getProperty("RESULT_1","DESCRIPCION_"+i);

				document.all[nombreCombo].options[i+1] = new Option(descripcion,codigo);

			}			

		}else{

			for(i=0;i<count;i++)

			{

				var codigo 		= response.getProperty("RESULT_1","CODIGO_"+i);

				var descripcion = response.getProperty("RESULT_1","DESCRIPCION_"+i);

				document.all[nombreCombo].options[i] = new Option(descripcion,codigo);

			}	

		}

	}

}



/**

 * Funcion que obtiene varias columnas a traves del data launcher

 *

 * moduloWar 			- Nombre del m?dulo en el cual se encuentra el combo

 * idioma	 			- Idioma obtenido del contexto de la aplicaci?n

 * tabla     			- Nombre de la tabla, vista o sin?nimo de la cual se quiere obtener el combo

 * lista_campos			- String que contiene los nombres de las columnas a seleccionar separados por #

 * optionalWhere		- Parte where opcional. En este apartado se podr?a incluir los roles.

 *

 * Devuelve un string el resultado de la query. Los registros separados por # y las columnas por ,

 */

function cargarComboDataLauncherVariasColumnas(moduloWar, idioma, tabla, lista_campos, optionalWhere)

{

	//Se declara la variable ARQ_GDTP

	var GDTP = new ARQ_GDTP();

	GDTP.addGroup("APP_PARAMETERS");

	GDTP.addProperty("APP_PARAMETERS","CLASSNAME","q02b.exe.comun.Q02bCoddataLauncher");

	GDTP.addProperty("APP_PARAMETERS","METHOD","getListaVariasColumnas");

	GDTP.addGroup("APP_DATA");

	GDTP.addProperty("APP_DATA","TABLE",tabla);

	GDTP.addProperty("APP_DATA","LISTA_COLUM_NAME_SELECT",lista_campos);

	GDTP.addProperty("APP_DATA","IDIOMA",idioma);

	if(optionalWhere != "" && optionalWhere != null)

	{

		GDTP.addProperty("APP_DATA","OPTIONAL_WHERE",optionalWhere);

	}

	

	var response 	= Comm.submitGDTP(GDTP,"/q02b"+moduloWar+"War/comunJSP/q02blauncher.jsp","POST");

	var result 		= response.getProperty("RESULT_1","RESULTADO");

	return result;

}



/*

 * Se selecciona una opci?n de un combo determinado a partir del valor de un campos

 *

 * combo - Nombre del combo dentro del formulario

 * campo - Nombre del campo dentro del formulario que tiene un valor que coincide con un value del combo

 *

 */

function seleccionarComboDesdeCampo(combo,campo){

	var array = document.all[combo];

	for(i=0;i<array.options.length;i++){

		if(array.options[i].value==document.all[campo].value){		

			array.options[i].selected = true;

			break;

		}

	}

}

/*

 * Se selecciona un campo a partir del valor de un combo determinado 

 *

 * combo - Nombre del combo dentro del formulario

 * campo - Nombre del campo dentro del formulario que tiene un valor que coincide con un value del combo

 *

 */

function seleccionarCampoDesdeCombo(combo,campo){

campo.value= combo.options[combo.selectedIndex].value;

}



/*

 * Se selecciona una opci?n de un combo determinado a partir del valor de un campos

 *

 * combo - Nombre del combo dentro del formulario

 * campo - Nombre del campo dentro del formulario que tiene un valor que coincide con un value del combo

 *

 */

function seleccionarComboDesdeCampoObj(combo,campo){

	for(i=0;i<combo.options.length;i++){

		if(combo.options[i].value==campo.value){		

			combo.options[i].selected = true;

			break;

		}

	}

}



function seleccionarComboDesdeValor(combo,valor){

	for(i=0;i<combo.options.length;i++){

		if(combo.options[i].value==valor){		

			combo.options[i].selected = true;

			break;

		}

	}

}



function cargaRuta(user,modulo, seccion, accion){

	document.all["ruta"].innerHTML="Usuario " + user + ", est&aacute;s en : " + modulo + " ><a href='javascript: irInicio()'>" + seccion + "</a> >" + accion;

}





function abrirCalendario(nombreWar, campoFecha){

		window.open("/q02b"+nombreWar+"War/comunJSP/q02bCalendario.jsp?" + dameIndicativoNoPortalParaUrl () + "&input=" +  campoFecha ,'calendario','scrollbars=0,width=190 height=150');

}



function addOption(theSel, theText, theValue)

{

  var newOpt = new Option(theText, theValue);

  var selLength = theSel.length;

  theSel.options[selLength] = newOpt;

}



function deleteOption(theSel, theIndex)

{ 

  var selLength = theSel.length;

  if(selLength>0)

  {

    theSel.options[theIndex] = null;

  }

}







function cargaComboCodigos(name){	

	eval("for (i=0; i < listaCod" + name + ".length;i++){addOption(document.all['cmb_" + name + "'],listaDesc" + name + "[i],listaCod" + name + "[i]);}");

}



//recarga de combos

/*carga un combo con el valor introducido en el campo c?digo asociado, y adem?s lanza la recarga del 

combo  que tienes enlazado

campoCodigo: nombre del campo de c?digo (codPais)

campoCombo: nombre del combo (cmb_pais)

camboEnlazado: nombre del combo que tiene enlazado (cmb_comunidades)

*/

function cargaComboconEnlace(campoCodigo, campoCombo, comboEnlazado, campoEnlazado){

		cargaCampo( document.all[campoCodigo], document.all[campoCombo] );	

		if (trim(document.all[campoCombo].value) != "" ){

			eval( campoCombo + "_change()");

		}else{

			clearCombo(document.all[comboEnlazado]);		

		}

		document.all[campoEnlazado].value="";

	



	

}





//recarga de combos

/*carga un combo con el valor introducido en el campo c?digo asociado, y adem?s lanza la recarga del 

combo  que tienes enlazado

campoCodigo: nombre del campo de c?digo (codPais)

campoCombo: nombre del combo (cmb_pais)

camboEnlazado: nombre del combo que tiene enlazado (cmb_comunidades)

*/

function cargaCampoconEnlace(campoCodigo, campoCombo, comboEnlazado, campoEnlazado){

		cargaCampo( document.all[campoCombo], document.all[campoCodigo] );	

		if (trim(document.all[campoCombo].value) != "" ){

			eval( campoCombo + "_change()");

		}else{

			clearCombo(document.all[comboEnlazado]);		

		}

		document.all[campoEnlazado].value="";

		

}





//--------------------------------------------------------------------

function getPosition( objid)

{	if (document.layers) {	

		xPos = document.images[ objid].x;

		yPos = document.images[ objid].y;

	} else if(!document.layers && document.all) {

		xPos     = document.all[ objid].offsetLeft;

		parentEl = document.all[ objid].offsetParent;

		while( parentEl != null) {

			xPos    += parentEl.offsetLeft;    

			parentEl = parentEl.offsetParent;       

		}

		yPos     = document.all[ objid].offsetTop;

		parentEl = document.all[ objid].offsetParent;  

		while( parentEl != null) {    

			yPos    += parentEl.offsetTop;               

			parentEl = parentEl.offsetParent;  

		}

	}else{

        xPos = document.images[ objid].x;

		yPos = document.images[ objid].y;

        }

}



function posicionaCapa(img,nomDiv,desX,desY)

{

  getPosition(img); 

  

  if ( !document.layers && document.all){

	document.all[nomDiv].style.posTop  = yPos - desY;

	document.all[nomDiv].style.posLeft = xPos - desX;

  } else if(document.layers){

	document.layers[nomDiv].top  = yPos - desY;

	document.layers[nomDiv].left = xPos - desX;

	}else{

        document.getElementById(nomDiv).style.top  = yPos - desY;

		document.getElementById(nomDiv).style.left = xPos - desX;

	

	}



}





/*---------------------------------------------------------------------

posiciona la capa nomDiv en las coordenadas donde esta la imagen img

Parametros:

	img:nombre de la imagen donde queremos posicionar la capa

	nomDiv:nombre de la capa a posicionar

*/

function posiciona(img,nomDiv)

{

	 posicionaCapa(img,nomDiv,0,0)

}







function zoom(valor, nomImg){	

	var tam = new String(valor).length;

	var num = tam/400;

	var cadena = '<table width="450" border="4" cellspacing="2" cellpadding="2"><tr><td class="q02bDiv">';

	cadena = cadena + valor;

	cadena = cadena + "</td></tr></table>";

	document.getElementById("zoom").innerHTML = "";

	document.getElementById("zoom").innerHTML = cadena;    

	

	posicionaCapa(nomImg,"zoom", 500  ,70 );	

	document.getElementById("zoom").style.visibility="visible";

}





function zoomOf(){

	document.getElementById("zoom").style.visibility="hidden";

}

function cargaCampo(objOrigen, objDestino){	

		objDestino.value = trim(objOrigen.value);

		

}



function cargaCombo(objOrigen, objDestino){	

		objDestino.value = trim(objOrigen.value);

		

}



function clearCombo( cmb){		

	var i = 1;

	for (i = cmb.length; i >= 1;   i--)  {

		cmb.options.remove(i);

	}	

}







   



function coddata(inputObj, outputObj, tableName, codColumName, descColumName){

	

	var GDTP=new ARQ_GDTP();

	GDTP.addGroup("APP_PARAMETERS");

	GDTP.addProperty("APP_PARAMETERS","CLASSNAME","q02b.exe.comun.CoddataLauncher");

	GDTP.addProperty("APP_PARAMETERS","METHOD","getData");

	//campos modificables: transportista, art?culo, observaciones y descuento

	GDTP.addGroup("APP_DATA");

	GDTP.addProperty("APP_DATA","TABLE", tableName);

	GDTP.addProperty("APP_DATA","COD_NAME",codColumName);

	GDTP.addProperty("APP_DATA","COD_VALUE",inputObj.value);

	GDTP.addProperty("APP_DATA","DESC_NAME",descColumName);

	



	var response = Comm.submitGDTP(GDTP, "/q02bEntidadesWar/comunJSP/q02blauncher.jsp","POST");

	var result = response.getProperty("RESULT_1", "RESULT");



	if(result == ARQ_RESULT_OK){		

		outputObj.value = response.getProperty("RESULT_1", "DATA_VALUE");

	}	



}



/*

valida si una fecha es menor que otra

*/



function antes(objDate1,objDate2)

{

	

	if ( objDate1.getFullYear()  > objDate2.getFullYear() )

	{

		return false;

	}

	if ( objDate1.getFullYear()  < objDate2.getFullYear() )

	{

		return true;

	}

	if ( objDate1.getFullYear() == objDate2.getFullYear() )

	{

		if (objDate1.getMonth()  < objDate2.getMonth())

		{

			return true;

		}

		if (objDate1.getMonth()  >  objDate2.getMonth())

		{

			return false;

		}

		if (objDate1.getMonth() == objDate2.getMonth())

		{

			

			if (objDate1.getDate() < objDate2.getDate())

			{

				return true;

			}else{

				return false;

			}

		}

	}

}







	



function trim( campoTexto){

    var des = new String(campoTexto);

	while( des.charAt(0)== " "){

        des = des.substring( 1, des.length);

	}



    return RTrim( des);

}



function RTrim(str)

{

    var whitespace = new String(" ");

    var s = new String(str);



    if (whitespace.indexOf(s.charAt(s.length-1)) != -1) {

	    var i = s.length - 1;       



        while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)

        i--;

        s = s.substring(0, i+1);

    }

	aux = s.valueOf();

    return aux;

}





//------------------------------------------------------------------------------------------------

/*

 Formatea el contenido del input text poni?ndole los puntos de las centenas y verificando 

 que no haya letras o varias comas

 V?lida para campos dentro de capas

 Entrada: fmtObject objeto con el valor que se desea desformatear.

 		 cero: si es S y el campo es vacio pone un 0.Si es N y el campo es vacio lo deja vac?o.

*/

function FormatearValor( valor, cero)

{

	

    valor = trim (desFormatearValor( valor));

	valor = valor.replace(',','');



    //fmtObject.value = RTrim(fmtObject.value);

	var numero  = valor;

	var aux     = new String();

	var entera  = new String();

	var decimal = new String();

	var finales = new String();

	var final1  = new String();

	var fin     = false;

	var primera = true;

	var esCero  = true;

	var resto   = new String();

	//quita los ceros por delante:

	if ( trim(numero) == "0"){

		return;

	}

	if ( numero == ""){

	    if ( cero == "S"){ 

		    valor = "0";

		} else{ 

		    valor="";

		}

	} else {	

		

		while( esCero) {

			if ( numero.charAt( 0) == '0') {

			    if ( numero.length == 1){

			        numero = '0';

			        esCero = false;

			    } else {

				    numero = numero.substring( 1, numero.length);

				}

			} else {

			    if ( numero.charAt( 0) == ',') {

			        numero = '0' + numero;

			    }

				esCero = false;

			}		

		}

		//le quita las letras:

		i       = 0;

		primera = true;

		while( i < numero.length) {

			if ( ( ( numero.charCodeAt( i) < 48 ) || (numero.charCodeAt( i) > 57 ) ) && 

			       ( numero.charCodeAt( i) != 44 ) && ( numero.charCodeAt( i) != 46 )) {

				return;

			}

			if ( numero.charCodeAt( i) == 44) {

			    if ( primera) {

				    primera = false;

				} else {

				    return;

				}    

			}

			i++;

		}

		//le quita los puntos que ya tenga puestos

		while ( numero.length > 0 && fin == false) {

			if ( numero.indexOf( '.') != -1) {	

				var indice = numero.indexOf('.');

				aux = aux.concat( numero.substring( 0, indice));								

				numero = numero.substring( indice + 1, numero.length);

			} else {

				aux = aux.concat( numero);

				fin = true;

			}	

		}

		

		//guardamos los decimales:

		var indice = aux.indexOf(',');

		if ( indice!=-1) {			

			entera = aux.substring( 0, indice);

			decimal = aux.substring( indice, aux.length);	

		} else {

			entera  = aux;

			decimal = "";

		}

		

		//ponemos los puntos de los miles:

		while( entera.length > 3){

			var longitud = entera.length;

			resto   = entera.substring( longitud-3, longitud);

			entera  = entera.substring( 0, entera.lastIndexOf( resto));

			finales = "." + resto + finales;

		}

	   

		final1 = final1.concat( entera, finales, decimal);

		return final1;

    }

	 

	

}





//------------------------------------------------------------------------------------------------

/*

 Formatea el contenido del input text poni?ndole los puntos de las centenas y verificando 

 que no haya letras o varias comas

 V?lida para campos dentro de capas

 Entrada: fmtObject objeto con el valor que se desea desformatear.

 		 cero: si es S y el campo es vacio pone un 0.Si es N y el campo es vacio lo deja vac?o.

*/

function FormatearObjeto( fmtObject, cero)

{

	desFormatearObjecto( fmtObject);

    fmtObject.value = trim (fmtObject.value);

    //fmtObject.value = RTrim(fmtObject.value);

	var numero  = ( fmtObject.value).toString();

	var aux     = new String();

	var entera  = new String();

	var decimal = new String();

	var finales = new String();

	var final1  = new String();

	var fin     = false;

	var primera = true;

	var esCero  = true;

	var resto   = new String();

	//quita los ceros por delante:

	if ( trim(numero) == "0"){

		return;

	}

	if ( numero == ""){

	    if ( cero == "S"){ 

		    fmtObject.value = "0";

		} else{ 

		    fmtObject.value="";

		}

	} else {	

		

		while( esCero) {

			if ( numero.charAt( 0) == '0') {

			    if ( numero.length == 1){

			        numero = '0';

			        esCero = false;

			    } else {

				    numero = numero.substring( 1, numero.length);

				}

			} else {

			    if ( numero.charAt( 0) == ',') {

			        numero = '0' + numero;

			    }

				esCero = false;

			}		

		}

		//le quita las letras:

		i       = 0;

		primera = true;

		while( i < numero.length) {

			if ( ( ( numero.charCodeAt( i) < 48 ) || (numero.charCodeAt( i) > 57 ) ) && 

			       ( numero.charCodeAt( i) != 44 ) && ( numero.charCodeAt( i) != 46 )) {

				return;

			}

			if ( numero.charCodeAt( i) == 44) {

			    if ( primera) {

				    primera = false;

				} else {

				    return;

				}    

			}

			i++;

		}

		//le quita los puntos que ya tenga puestos

		while ( numero.length > 0 && fin == false) {

			if ( numero.indexOf( '.') != -1) {	

				var indice = numero.indexOf('.');

				aux = aux.concat( numero.substring( 0, indice));								

				numero = numero.substring( indice + 1, numero.length);

			} else {

				aux = aux.concat( numero);

				fin = true;

			}	

		}

		//guardamos los decimales:

		var indice = aux.indexOf(',');

		if ( indice!=-1) {

			entera = aux.substring( 0, indice);

			decimal = aux.substring( indice, aux.length);	

		} else {

			entera  = aux;

			decimal = "";

		}

		

		//ponemos los puntos de los miles:

		while( entera.length > 3){

			var longitud = entera.length;

			resto   = entera.substring( longitud-3, longitud);

			entera  = entera.substring( 0, entera.lastIndexOf( resto));

			finales = "." + resto + finales;

		}

	   

		final1 = final1.concat( entera, finales, decimal);

		fmtObject.value = final1;

    }

	 

	

}

//------------------------------------------------------------------------------------------------

/*

 Formatea el num?rico que se pasa poni?ndole los puntos de las centenas y verificando 

 que no haya letras o varias comas

  Entrada: valor: n?mero que se desea desformatear.

 		 cero: si es S y el campo es vacio pone un 0.Si es N y el campo es vacio lo deja vac?o.

  Salida: valor formateado

*/

function FormatearNumero ( valor, cero)

{

	//valor = trim (valor);

	var numero  = trim(valor);

	var aux     = new String();

	var entera  = new String();

	var decimal = new String();

	var finales = new String();

	var final1  = new String();

	var fin     = false;

	var primera = true;

	var esCero  = true;

	var resto   = new String();

	//quita los ceros por delante:

	

	if ( numero == ""){

	    if ( cero == "S"){ 

		    numero = "0";

		} else{ 

		    numero="";

		}

	} else {	

		

		while( esCero) {

			if ( numero.charAt( 0) == '0') {

			    if ( numero.length == 1){

			        numero = '0';

			        esCero = false;

			    } else {

				    numero = numero.substring( 1, numero.length);

				}

			} else {

			    if ( numero.charAt( 0) == ',') {

			        numero = '0' + numero;

			    }

				esCero = false;

			}		

		}

		//le quita las letras:

		i       = 0;

		primera = true;

		while( i < numero.length) {

			if ( ( ( numero.charCodeAt( i) < 48 ) || (numero.charCodeAt( i) > 57 ) ) && 

			       ( numero.charCodeAt( i) != 44 ) && ( numero.charCodeAt( i) != 46 )) {

				return;

			}

			if ( numero.charCodeAt( i) == 44) {

			    if ( primera) {

				    primera = false;

				} else {

				    return;

				}    

			}

			i++;

		}

		//le quita los puntos que ya tenga puestos

		while ( numero.length > 0 && fin == false) {

			if ( numero.indexOf( '.') != -1) {	

				var indice = numero.indexOf('.');

				aux = aux.concat( numero.substring( 0, indice));								

				numero = numero.substring( indice + 1, numero.length);

			} else {

				aux = aux.concat( numero);

				fin = true;

			}	

		}

		//guardamos los decimales:

		var indice = aux.indexOf(',');

		if ( indice!=-1) {

			entera = aux.substring( 0, indice);

			decimal = aux.substring( indice, aux.length);	

		} else {

			entera  = aux;

			decimal = "";

		}

		

		//ponemos los puntos de los miles:

		while( entera.length > 3){

			var longitud = entera.length;

			resto   = entera.substring( longitud-3, longitud);

			entera  = entera.substring( 0, entera.lastIndexOf( resto));

			finales = "." + resto + finales;

		}

	   

		final1 = final1.concat( entera, finales, decimal);

		numero = final1;

    }

    return numero;

	

}



function desFormatearValor( valor)

{

	numero = valor;

	

	var aux = new String();

	var fin = false;

	var esCero = true;



	if ( trim(numero) == "0"){

		return;

	}

		

	while ( esCero)	{

		if ( numero.charAt( 0) == '0') {

			numero=numero.substring( 1, numero.length);

		} else {

			if ( numero.charAt( 0) == ',') {			

			    numero = '0' + numero;

			}

			esCero = false;

		}		

	}

	while ( ( numero.length > 0) && !fin) {

	

		if (numero.indexOf('.') != -1 ) {	

			var indice = numero.indexOf( '.');

			aux = aux.concat( numero.substring( 0, indice));								

			numero = numero.substring( indice + 1, numero.length);

		} else {

			aux = aux.concat( numero);

			fin=true;

		}	

	}

	valor = aux;

	return valor;

}





function desFormatearObjecto( fmtObject)

{

	numero = ( fmtObject.value).toString();

	

	var aux = new String();

	var fin = false;

	var esCero = true;



	if ( trim(numero) == "0"){

		return;

	}

		

	while ( esCero)	{

		if ( numero.charAt( 0) == '0') {

			numero=numero.substring( 1, numero.length);

		} else {

			if ( numero.charAt( 0) == ',') {

			    numero = '0' + numero;

			}

			esCero = false;

		}		

	}

	while ( ( numero.length > 0) && !fin) {

		if (numero.indexOf('.') != -1 ) {	

			var indice = numero.indexOf( '.');

			aux = aux.concat( numero.substring( 0, indice));								

			numero = numero.substring( indice + 1, numero.length);

		} else {

			aux = aux.concat( numero);

			fin=true;

		}	

	}

	fmtObject.value = aux;

}

//------------------------------------------------------------------------------------------------

/*

 Desformatea una cadena. Entiendo por desformatear lo siguiente:



	- quita los puntos de los millares

	- los ceros por delante

	- si es de tipo ,XX cambia a 0,XX



 Entrada: cadena con el valor que se desea desformatear.

 Return:  cadena desformateada

*/

function desFormatearNumero( numero)

{

	var aux = new String();

	var fin = false;

	var esCero = true;

		

	while ( esCero)	{

		if ( numero.charAt( 0) == '0') {

			numero=numero.substring( 1, numero.length);

		} else {

			if ( numero.charAt( 0) == ',') {

			    numero = '0' + numero;

			}

			esCero = false;

		}		

	}

	while ( ( numero.length > 0) && !fin) {

		if (numero.indexOf('.') != -1 ) {	

			var indice = numero.indexOf( '.');

			aux = aux.concat( numero.substring( 0, indice));								

			numero = numero.substring( indice + 1, numero.length);

		}else {

			if (numero.indexOf(',') != -1 ) {	

				var indice2 = numero.indexOf( ',');

				aux = aux.concat( numero.substring( 0, indice2));

				aux = aux.concat(".");

				numero = numero.substring( indice2 + 1, numero.length);

			}else{

				aux = aux.concat( numero);

				fin=true;

			}

		}	

	}

	

	return aux;

}







function esNumeroValido(texto,formato)

{	if ( formato == "S"){

		numero = desFormatearNumero( trim(texto));

		

	}else{

		numero=texto;

	}

	i=0;

	while (i < numero.length )

	{

		if  (  ((numero.charCodeAt(i)<48 ) || (numero.charCodeAt(i)>57 )) && (numero.charCodeAt(i)!=46 )) {

			return false;

		}

		i++;

	}

	return true;

}



function esNumerico(e)

{

	if (document.all)

		var tecla = event.keyCode;

	else if(document.layers)

		var tecla = e.which;

	if ((tecla > 47 && tecla < 58) || (tecla == 44))

	{

		return true;

	}

	else

	{

		if (tecla != 8)

			event.keyCode = 0;

		else

			return true;

	}

}



function cambiarComa()

{

	var e = document.forms["formCuestionariosAyunMen"].elements["cuestionarioAyunMen(ppto)"].value;

	var aux = new String();

	var fin = false;

	while ( (e.length() > 0) && !fin) {

		if (e.indexOf(',') != -1 ) {	

			var indice2 = e.indexOf( ',');

			aux = aux.concat( e.substring( 0, indice2));

			aux = aux.concat(".");

			aux = aux.concat(e.substring( indice2 + 1, e.length()));

			fin = true;

		}else{	    				

			fin=true;

		}

	}

		document.forms["formCuestionariosAyunMen"].elements["cuestionarioAyunMen(ppto)"].value= aux;		





}



//----------------------------------------------------------------

/*

 Comprueba contiene caracteres num?ricos.

 Entrada: cadena con el valor que se desea comprobar.

 Return: true: si el campo contiene exclus?vamente caracteres num?ricos.

		 false: en caso contrario.

*/

function esNumero(texto)

{

	return esNumeroValido(texto,"N")

}





function limpiaComillas(campoTexto){

	var aux = new String();

	

	var comita = '"';

	aux = campoTexto;

	for (i=0;i<aux.length;i++)

	{

		if (aux.charAt(i)=="'")

		{

			campoTexto = campoTexto.replace(aux.charAt(i),comita);

		}

	}

	return campoTexto;

}







function limpiaRetornos(campoTexto){

	var aux = new String();



	aux = campoTexto.replace(/[\r\n]/g,' ');



	return aux;

}



function despliegaSeccionDoble(objeto){

	eval("document.all('seccion"+objeto+"Mas').style.display='inline'");

	eval("document.all('seccion"+objeto+"Menos').style.display='none'");

	despliegaImgSeccion(objeto);

}



function pliegaSeccionDoble(objeto){

	eval("document.all('seccion"+objeto+"Mas').style.display='none'");

	eval("document.all('seccion"+objeto+"Menos').style.display='inline'");

	pliegaImgSeccion(objeto)

}



function despliegaSeccionSimple(objeto){

	eval("document.all('seccion"+objeto+"').style.display='inline'");

	despliegaImgSeccion(objeto);

}



function pliegaSeccionSimple(objeto){

	eval("document.all('seccion"+objeto+"').style.display='none'");

	pliegaImgSeccion(objeto)

}



function despliegaImgSeccion(objeto){

	pliegaSimple("img" + objeto + "Plegado");

	despliegaSimple("img" + objeto + "Desplegado");

}



function pliegaImgSeccion(objeto){

	pliegaSimple("img" + objeto + "Desplegado");

	despliegaSimple("img" + objeto + "Plegado");

}





function despliegaDoble(objeto){

	eval("document.all('"+objeto+"Mas').style.display='inline'");

	eval("document.all('"+objeto+"Menos').style.display='none'");

}

function pliegaDoble(objeto)

{

	eval("document.all('"+objeto+"Mas').style.display='none'");

	eval("document.all('"+objeto+"Menos').style.display='inline'");

}



function despliegaSimple(objeto){

	eval("document.all('"+objeto+"').style.display='inline'");



}

function pliegaSimple(objeto){

	eval("document.all('"+objeto+"').style.display='none'");

}



function expandAll(){

	/*for (k=0; k < document.all.length ; k++ ){			

		obj = document.all[k];			

		if ( (obj.tagName == "TD" || obj.tagname == "td") && obj.id.indexOf("seccion") != -1 ){									

			if (obj.id.indexOf("Mas") != -1){

				var aux = new String(obj.id);

				var aux1 = "";

				var aux2 = "";

				aux1 = aux.substring(aux.indexOf("seccion") + 7, aux.length);

				aux2 = aux1.substring(0,aux1.indexOf("Mas"));

				despliegaSeccionDoble(aux2);

			}else{

				if (obj.id.indexOf("Menos") == -1 ){					

					var aux = new String(obj.id);

					var aux1 = "";

					aux1 = aux.substring(aux.indexOf("seccion") + 7, aux.length);

					despliegaSeccionSimple(aux1);

				}

			}

		}				

	}*/

	var lista = document.getElementsByTagName("div");

	for (i=0;i<lista.length;i++){

		var element = lista[i];

		if (element.id.indexOf("seccion") != -1){

			if (element.id.indexOf("Mas") != -1){

				var aux = new String(element.id);

				var aux1 = "";

				var aux2 = "";

				aux1 = aux.substring(aux.indexOf("seccion") + 7, aux.length);

				aux2 = aux1.substring(0,aux1.indexOf("Mas"));

				despliegaSeccionDoble(aux2);

			}else{

				if (element.id.indexOf("Menos") == -1 ){					

					var aux = new String(element.id);

					var aux1 = "";

					aux1 = aux.substring(aux.indexOf("seccion") + 7, aux.length);

					despliegaSeccionSimple(aux1);

				}

			}

		}

	}

}



function colapseAll(){

	/*for (k=0; k < document.all.length ; k++ ){			

		obj = document.all[k];			

		if ( (obj.tagName == "TD" || obj.tagname == "td") && obj.id.indexOf("seccion") != -1 ){									

			if (obj.id.indexOf("Mas") != -1){

				var aux = new String(obj.id);

				var aux1 = "";

				var aux2 = "";

				aux1 = aux.substring(aux.indexOf("seccion") + 7, aux.length);

				aux2 = aux1.substring(0,aux1.indexOf("Mas"));

				pliegaSeccionDoble(aux2);

			}else{

				if (obj.id.indexOf("Menos") == -1 ){					

					var aux = new String(obj.id);

					var aux1 = "";

					aux1 = aux.substring(aux.indexOf("seccion") + 7, aux.length);

					pliegaSeccionSimple(aux1);

				}

			}

		}				

	}*/



	var lista = document.getElementsByTagName("div");

	for (i=0;i<lista.length;i++){

		var element = lista[i];

		if (element.id.indexOf("seccion") != -1){

			if (element.id.indexOf("Mas") != -1){

				var aux = new String(element.id);

				var aux1 = "";

				var aux2 = "";

				aux1 = aux.substring(aux.indexOf("seccion") + 7, aux.length);

				aux2 = aux1.substring(0,aux1.indexOf("Mas"));

				pliegaSeccionDoble(aux2);

			}else{

				if (element.id.indexOf("Menos") == -1 ){					

					var aux = new String(element.id);

					var aux1 = "";

					aux1 = aux.substring(aux.indexOf("seccion") + 7, aux.length);

					pliegaSeccionSimple(aux1);

				}

			}

		}

	}

}





function clearFiltro(){

	for (  k = 0; k < document.forms.length ;  k ++){	

		objForm = document.forms[k];

		for( i=0 ; i < objForm.elements.length ; i++){

			obj = objForm.elements[i];

			if (obj.type == "text"){					

				obj.value = "";

			}else{

				if (obj.type.indexOf("select") != -1){

					obj.selectedIndex = 0;

				}else{

					if (obj.type.indexOf("checkbox") != -1){

						obj.checked="";

					}	

				}

			}

		}

	}

}

function clearFiltroHidden(){

for (  k = 0; k < document.forms.length ;  k ++){	

		objForm = document.forms[k];

		for( i=0 ; i < objForm.elements.length ; i++){

			obj = objForm.elements[i];

			if (obj.type == "text" || obj.type == "hidden"){					

				obj.value = "";

			}else{

				if (obj.type.indexOf("select") != -1){

					obj.selectedIndex = 0;

				}else{

					if (obj.type.indexOf("checkbox") != -1){

						obj.checked="";

					}	

				}

			}

		}

	}

}



function disabledAll(nombreForm){

	for( i=0 ; i < document[nombreForm].elements.length ; i++){

		obj = document[nombreForm].elements[i];

		if (obj.type.indexOf("text") != -1 || obj.type.indexOf("select") != -1 ){					

			obj.disabled = true;		

		}		

	}

}



function abrirModal(url,width,height){

	 var izq = (screen.width - width) / 2;

     var arr = (screen.height - height) / 2;

	if (window.showModalDialog) {

  		var caracteristicas = "dialogTop="+arr+";dialogLeft="+izq+";dialogWidth="+width+"px;dialogHeight="+height+"px;center=yes;help=no;"; 

    	var newWindow = window.showModalDialog(url, window, caracteristicas);

  	}else{

  		abrirPopUp(url,width,height);

  	}

}



function abrirPopUp(url,width,height){

	var izq = (screen.width - width) / 2;

    var arr = (screen.height - height) / 2;

	var caracteristicas = "height="+height+", width="+ width +",left=" + izq + ",top=" + arr +", toolbar=0, directories=0," +   

    		"status=0, linemenubar=0, modal=yes, left="+izq+", top="+arr+", dialog=yes," +       

        	"resizable=0, scrollbars";

    	newWindow = window.open(url,'modal',caracteristicas);

    	newWindow.focus();

}





function reloadParent(path){

	if (window.dialogArguments){

		window.dialogArguments.location.href = unescape(path);

	}else{

		window.opener.location.href = unescape(path);

	}	

}



function one2two(lista1, lista2) {

    var lista1length = lista1.length ;

	var lista2length = lista2.length;

	var existe = false;

    for ( i=0; i<lista1length ; i++){

        if (lista1.options[i].selected == true ) {

            for (j =0;j<lista2length ; j++ ){

				if (lista2.options[j].value == lista1.options[i].value){

					existe = true;

					break;

				}

            }

			if (existe == false){

				lista2.options[lista2.length]= new Option(lista1.options[i].text,lista1.options[i].value);

			}

        }

    }



    for ( i = (lista1length -1); i>=0; i--){

        if (lista1.options[i].selected == true ) {

            lista1.options[i] = null;

        }

    }

}





function two2one(lista1, lista2) {

    var lista2length = lista2.length ;

	var lista1length = lista1.length;

	var existe = false;

	for ( i=0; i<lista2length ; i++){

		if (lista2.options[i].selected == true ) {

			 for (j =0;j<lista1length ; j++ ){

				if (lista1.options[j].value == lista2.options[i].value){

					existe = true;

					break;

				}

            }

			if (existe == false){	

				lista1.options[lista1.length]= new Option(lista2.options[i].text,lista2.options[i].value);

			}

		}

	}

	for ( i=(lista2length-1); i>=0; i--) {

		if (lista2.options[i].selected == true ) {

			lista2.options[i] = null;

		}

	}

}







function imprimir(){

	if( window.print) {

		window.print() ;

	} else {

		var WebBrowser = "<OBJECT ID='WebBrowser1' WIDTH=0 HEIGHT=0 CLASSID='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'></OBJECT>";

		document.body.insertAdjacentHTML("beforeEnd", WebBrowser);

		WebBrowser1.ExecWB(6, 2);

		WebBrowser1.outerHTML = "";

	}

}



/* ----------------------------------------------------------------------------------

 * Esta function valida los datos entroducidos en un campo enlazado con un combo 

 * y carga el combo si se valida el dato del campo 

 * En el caso contrario, borra los datos del campo 

 * 

 * Nombre1 y Nombre2 son los Nombres del campo y del campo 

 * El orden no importa 

 -------------------------------------------------------------------------------------*/ 



function validaYcargaCombo (Nombre1 , Nombre2 ) { 



// se puede llamar con los parametros en desorden 



	if ( document.all[Nombre1].type == "text" ) { 

		combo = document.all[Nombre2] ; 

		campo = document.all[Nombre1] ;

	}

	else 

	{

		combo = document.all[Nombre1] ; 

		campo = document.all[Nombre2] ;

	}



// Si la llamada se hizo sin ningun combo, el programador se equivoc? 

	if (combo.type != "select-one" ) 

		alert ("Error de llamada"); 



	//Se comprueba que existe el codigo introducido

	var result = false;

	for(i=0; i < combo.options.length ; i++){

		if(combo.options[i].value==campo.value){

			combo.options[i].selected = true;		

			result = true;

			break;

		}

	}



	if (result) {

		//Se asigna el valor seleccionado al combo

		combo.value = campo.value;

	} else {

		// O se borran los 2 inputs campo y combo  

		combo.value = ""

		campo.value = "";

	}

	

}





/* La funci?n seleccionarElementosComboMultiple(lista,listaSeleccionados) selecciona los elementos del combo m?ltiple

 * lista a partir de los elementos contenidos en el array listaSeleccionados

 *   lista				select	Combo m?ltiple del que queremos seleccionar los elementos

 *   listaSeleccionados array	Array con los elementos a seleccionar

 */

function seleccionarElementosComboMultiple(lista, listaSeleccionados){

	

	for (i=0; i<lista.length; i++){

		for (j=0; j<listaSeleccionados.length;j++){

			if (lista.options[i].value == listaSeleccionados[j]) {

				lista.options[i].selected = true;

			}

		}

	}

}



/* La funci?n anadirOpcionesCombo carga las opciones del comboHasta con las opciones del comboDesde

 *    comboDesde    select  Combo con los elementos que queremos a?adir

 *    comboHasta    select  Combo donde dejaremos los elementos

 */

function anadirOpcionesCombo(comboDesde,comboHasta){

 	// Primero se borran las opciones que tenga el combo destino

	comboHasta.options.length = 0;

	for(i=0;i<comboDesde.options.length;i++){

		comboHasta.options[i] = new Option(comboDesde.options[i].text,comboDesde.options[i].value);

	}

}



/* La funci?n mostrarCapa habilita la capa con el id que se pasa como par?metro

 *    idCapa    String  Identificador de la capa a visualizar

 */

 function mostrarCapa(idCapa){ 

	document.getElementById(idCapa).style.display='block'; 

} 



/* La funci?n ocultarCapa deshabilita la capa con el id que se pasa como par?metro

 *    idCapa    String  Identificador de la capa a ocultar

 */

function ocultarCapa(idCapa){

	document.getElementById(idCapa).style.display='none';

} 



//Se cierra el pop-up

function cerrarPopUp(){

	window.close();

}



/*

 * La funci?n devolverCliqueado devuelve el valor de un campo

 *	 campo nombre del campo del que queremos obtener su valor

 */

function devolverCliqueado(campo){

	//Se obtiene la variable a recorrer

	var array 		= eval("document.forms[indiceFormularioQ02b]."+campo);

	if(array){

		//Se entra en esta opci?n cuando solo existe un valor en el listado (se puede dar cuando hay paginaci?n)

		if(array.length == undefined){

			return array.value;

		} else {

			//Se recorre el array y se obtiene el valor seleccionado

			for(i=0;i<array.length;i++){

				if(array[i].checked==true){

					return array[i].value;

				}

			}

		}

	}

}



//Funci?n que devuelve el p?rametro que usa el portal para indicarle que la p?gina que se va a mostrar

function dameIndicativoNoPortalParaUrl()

{

	return "R01HNoPortal=true";

}



function buscarFormQ02b()

{

	for(i=0;i<document.forms.length;i++)

	{

		if(document.forms[i].action.indexOf("q02") !=-1)

		{

			indiceFormularioQ02b=i;

			break;

		}

	}

}



/**

* Funci?n que limita el tama?o de un textarea 

* Recibe como par?metros el objeto textArea y el tama?o m?ximo que puede tener

*/

function limitarTam(objTA, tam) {

    if (objTA.value.length >= tam) {

        objTA.value = objTA.value.substring(0, tam-1);

    }

}//fin limitarTam









/*

 * Funcion que carga el combo a trav?s de los datos del data launcher

 *

 * response		- Variable que contiene los resultados obtenidos

 * result   	- Variable que indica si todo a ido bien

 * nombreCombo	- Nombre del combo del formulario (en struts ser?a el atributo property)

 *

 */

function cargaDatosComboDataLauncher(response, result, nombreCombo, indBlancos )

{

	

	if(result=="OK")

	{		

			

		var count = response.getProperty("RESULT_1","NUMREGISTROS");

		document.all[nombreCombo].options.length = 0;

		if ( indBlancos){

			document.all[nombreCombo].options[0] = new Option('','');

			for(i=0;i<count;i++)

			{

				var codigo 		= response.getProperty("RESULT_1","CODIGO_"+i);

				var descripcion = response.getProperty("RESULT_1","DESCRIPCION_"+i);

				document.all[nombreCombo].options[i+1] = new Option(descripcion,codigo);

			}			

		}else{

			for(i=0;i<count;i++)

			{

				var codigo 		= response.getProperty("RESULT_1","CODIGO_"+i);

				var descripcion = response.getProperty("RESULT_1","DESCRIPCION_"+i);

				document.all[nombreCombo].options[i] = new Option(descripcion,codigo);

			}	

		}

	}

}



/**

 * Funcion que obtiene varias columnas a traves del data launcher

 *

 * moduloWar 			- Nombre del m?dulo en el cual se encuentra el combo

 * idioma	 			- Idioma obtenido del contexto de la aplicaci?n

 * tabla     			- Nombre de la tabla, vista o sin?nimo de la cual se quiere obtener el combo

 * lista_campos			- String que contiene los nombres de las columnas a seleccionar separados por #

 * optionalWhere		- Parte where opcional. En este apartado se podr?a incluir los roles.

 *

 * Devuelve un string el resultado de la query. Los registros separados por # y las columnas por ,

 */

function cargarComboDataLauncherVariasColumnas(moduloWar, idioma, tabla, lista_campos, optionalWhere)

{

	//Se declara la variable ARQ_GDTP

	var GDTP = new ARQ_GDTP();

	GDTP.addGroup("APP_PARAMETERS");

	GDTP.addProperty("APP_PARAMETERS","CLASSNAME","s99b.exe.comun.S99bCoddataLauncher");

	GDTP.addProperty("APP_PARAMETERS","METHOD","getListaVariasColumnas");

	GDTP.addGroup("APP_DATA");

	GDTP.addProperty("APP_DATA","TABLE",tabla);

	GDTP.addProperty("APP_DATA","LISTA_COLUM_NAME_SELECT",lista_campos);

	GDTP.addProperty("APP_DATA","IDIOMA",idioma);

	if(optionalWhere != "" && optionalWhere != null)

	{

		GDTP.addProperty("APP_DATA","OPTIONAL_WHERE",optionalWhere);

	}

	

	var response 	= Comm.submitGDTP(GDTP,"/s99b"+moduloWar+"War/comunJSP/s99blauncher.jsp?" + getIndNoPortalParaUrl(),"POST");

	var result 		= response.getProperty("RESULT_1","RESULTADO");

	return result;

}



/**

 * Funcion que carga un combo ordenado a traves del data launcher 

 *

 * moduloWar 		- Nombre del m?dulo en el cual se encuentra el combo

 * idioma	 		- Idioma obtenido del contexto de la aplicaci?n

 * tabla     		- Nombre de la tabla, vista o sin?nimo de la cual se quiere obtener el combo

 * campo_codigo		- Columna que contiene el ni

 * campo_descri 	- Columna que contiene la descripci?n

 * nombreCombo  	- Nombre del combo del formulario (en struts ser?a el atributo property)

 * optionalWhere	- Parte where opcional. En este apartado se podr?a incluir los roles.

 * distinct			- Variable a true o false. Si est? a true har? una distinct del campo_codigo

 * indBlancos		- Variable boolean que indica si quieres que en el combo aparezca una opci?n en blanco

 * columOrden		- Variable que indica el nombre de la columna por la que se va a ordenar

 * sentidoOrden		- Variable que indica el sentido del orden(ASC/DESC)

 */

function cargarComboDataLauncherOrdenado(moduloWar, idioma, tabla, campo_codigo, campo_descri, nombreCombo, optionalWhere, distinct, indBlancos, columOrden, sentidoOrden)

{

	//Se declara la variable ARQ_GDTP

	var GDTP = new ARQ_GDTP();

	GDTP.addGroup("APP_PARAMETERS");

	GDTP.addProperty("APP_PARAMETERS","CLASSNAME","q02b.exe.comun.Q02bCoddataLauncher");

	GDTP.addProperty("APP_PARAMETERS","METHOD","getComboDataJS");

	GDTP.addGroup("APP_DATA");

	GDTP.addProperty("APP_DATA","TABLE",tabla);

	GDTP.addProperty("APP_DATA","COD_COLUM_NAME_SELECT",campo_codigo);

	GDTP.addProperty("APP_DATA","DESC_COLUM_NAME_SELECT",campo_descri);

	GDTP.addProperty("APP_DATA","IDIOMA",idioma);

	GDTP.addProperty("APP_DATA","COLUM_ORDER",columOrden);

	GDTP.addProperty("APP_DATA","SENTIDO_ORDER",sentidoOrden);

	if(optionalWhere != "" && optionalWhere != null){

		GDTP.addProperty("APP_DATA","OPTIONAL_WHERE",optionalWhere);

	}

	if(distinct != "true"){ 

		distinct = "false";

	}

	GDTP.addProperty("APP_DATA","DISTINCT",distinct);

	var response 	= Comm.submitGDTP(GDTP,"/q02b"+moduloWar+"War/comunJSP/q02blauncher.jsp?" + getIndNoPortalParaUrl(),"POST");

	var result 		= response.getProperty("RESULT_1","RESULT");

	cargaDatosComboDataLauncher(response, result, nombreCombo,indBlancos);

}



/*

 * Se selecciona una opci?n de un combo determinado a partir del valor de un campos

 *

 * combo - Nombre del combo dentro del formulario

 * campo - Nombre del campo dentro del formulario que tiene un valor que coincide con un value del combo

 *

 */

function seleccionarComboDesdeCampo(combo,campo){

	var array = document.all[combo];

	for(i=0;i<array.options.length;i++){

		if(array.options[i].value==document.all[campo].value){		

			array.options[i].selected = true;

			break;

		}

	}

}

/*

 * Se selecciona un campo a partir del valor de un combo determinado 

 *

 * combo - Nombre del combo dentro del formulario

 * campo - Nombre del campo dentro del formulario que tiene un valor que coincide con un value del combo

 *

 */

function seleccionarCampoDesdeCombo(combo,campo){

campo.value= combo.options[combo.selectedIndex].value;

}



/*

 * Se selecciona una opci?n de un combo determinado a partir del valor de un campos

 *

 * combo - Nombre del combo dentro del formulario

 * campo - Nombre del campo dentro del formulario que tiene un valor que coincide con un value del combo

 *

 */

function seleccionarComboDesdeCampoObj(combo,campo){

	for(i=0;i<combo.options.length;i++){

		if(combo.options[i].value==campo.value){		

			combo.options[i].selected = true;

			break;

		}

	}

}



function seleccionarComboDesdeValor(combo,valor){

	for(i=0;i<combo.options.length;i++){

		if(combo.options[i].value==valor){		

			combo.options[i].selected = true;

			break;

		}

	}

}



function getIndNoPortalParaUrl(){

   return "R01HNoPortal=true";

}



/*

* Funci?n que comprueba si la fecha introducida es correcta

*

*/



//Los mensajes de los alerts se definen en la jsp, cogi?ndolos de los ficheros multiidioma

function comprobarFecha(objTxt){

	var txtFecha = objTxt.value;

	var dtFecha = validarFecha(txtFecha);

	var dtFechaActual = new Date();

	var resp=true;

	if (typeof(dtFecha)=="number"){ //Ha devuelto un error.

		var resp=false;

		switch (dtFecha) {

			case 1: alert(fechaNoValida);

				objTxt.focus();

				break;

			case 2: alert(anoNoValido);

				objTxt.focus();

				break;

			case 3: alert(mesNoValido);

				objTxt.focus();

				break;

			case 4: alert(diaNoValido);

				objTxt.focus();

				break;

			case 5: //La fecha est? vac?a.

				resp=true;

				break;

			default: alert(fechaNoValida);

				objTxt.focus();

				break;



		}

	}else{

			resp=true;

			objTxt.value=formateaFecha(dtFecha);

	}

	return resp;

}



function validarFecha(txtFecha){

	if(txtFecha==""){

		//La fecha est? vac?a.

		return 5;

	}

	var expresionRegular = /\D/gi;

	txtFecha  = txtFecha.replace(expresionRegular,"/");

	var txtDia, txtMes, txtAnno;

	var numDia, numMes, numAnno;

	arrFecha = txtFecha.split("/");

	if (arrFecha.length==3) {

		//Los n?meros est?n separados por caracteres no num?ricos.

	}else if (arrFecha.length==1) {

		//Los n?meros est?n seguidos.

		if(txtFecha.toString().length==6){

			//El formato de las fechas es ddmmaa

			arrFecha[0]=txtFecha.substr(0,2);

			arrFecha[1]=txtFecha.substr(2,2);

			arrFecha[2]=txtFecha.substr(4,2);

		}else if(txtFecha.toString().length==8){

			//El formato de las fechas es ddmmaaaa

			arrFecha[0]=txtFecha.substr(0,2);

			arrFecha[1]=txtFecha.substr(2,2);

			arrFecha[2]=txtFecha.substr(4,4);

		}else{

			//El formato de las fechas es incorrecto

			return 1;

		}

	}else{

		return 1;

	}

	txtDia = arrFecha[0];

	txtMes = arrFecha[1];

	txtAnno =arrFecha[2];

	numDia = new Number(txtDia);

	numMes = new Number(txtMes);

	numAnno = new Number(txtAnno);

	//Compruebo se el a?o es v?lido.

	var longitudAnno = txtAnno.length;

	if(longitudAnno==2){

		if (numAnno<50){

			txtAnno = "20"+txtAnno;

		}else{

			txtAnno = "19"+txtAnno;

		}

      		numAnno = new Number(txtAnno);

	}else if (longitudAnno!=4){

		return 2;

	}

	//Compruebo el mes.

	if(0<numMes&&numMes<13){

		numMes = parseInt(numMes)-1;	//Los meses en el objeto Date van entre 0 y 11.

	}else{

		return 3;

	}

	//Compruebo el d?a.

	dtFecha = new Date(numAnno,(numMes+1),0);	//Es el ?ltimo d?a del mes.

	if(0<numDia&&numDia<=dtFecha.getDate()){

		//Dia correcto;

	}else{

		return 4;

	}

	dtFecha = new Date(numAnno,numMes,numDia);

	return dtFecha;

}



function formateaFecha(objFecha){

	var txtAnno = objFecha.getFullYear();

	var txtMes = objFecha.getMonth()+1;

	var txtDia = objFecha.getDate();

	if (parseInt(txtMes)<10) txtMes = "0" + txtMes;

	if (parseInt(txtDia)<10) txtDia = "0" + txtDia;

	txtFecha = txtDia + "/" + txtMes + "/" + txtAnno;

	return txtFecha;

}



function mostrarAyudaContextual(imgActual, idAyuda){	

	getPosition( imgActual);  

	document.all[ "divAyudaContextual"].style.posTop  = yPos - 20;

	document.all[ "divAyudaContextual"].style.posLeft = xPos + 25;	

	document.all[ "divAyudaContextual"].innerHTML="<div class='q02_textoParrafo'>" + eval(idAyuda) + "</div></br>";

	document.all[ "divAyudaContextual"].style.visibility="visible";

}



function ocultarAyudaContextual(){

	document.getElementById("divAyudaContextual").innerHTML="";

	document.getElementById("divAyudaContextual").style.visibility="hidden";

}  



function mostrarAyudaContextualXY(imgActual, idAyuda, offsetX, offsetY){	

	getPosition( imgActual);  

	document.all[ "divAyudaContextual"].style.posTop  = yPos - offsetY;

	document.all[ "divAyudaContextual"].style.posLeft = xPos + offsetX;	

	document.all[ "divAyudaContextual"].innerHTML="<div class='q02_textoParrafo'>" + eval(idAyuda) + "</div></br>";

	document.all[ "divAyudaContextual"].style.visibility="visible";

}



//Comprueba si el valor recibido se encuentra entre las opcines de la combo

function existeValorCombo(valor, combo){

	for (i=0;i<combo.length;i++ ){

		if (combo.options[i].value == valor){

			return true;

		}

	}

	return false;

}



/* La funcion abrirInforme abre la p?gina de descarga de los informes

 *    codInforme    	String  c?digo del informe que se genera

 *    aditionalWhere    String  clausula where adicional

 */

function abrirInforme(codInforme, aditionalWhere){  

    abrirInforme(codInforme, aditionalWhere , "");

}



/* La funcion abrirInformeTexto abre la p?gina de descarga de los informes para descargar el informe en fichero de texto plano

 *    codInforme    	String  c?digo del informe que se genera

 *    aditionalWhere    String  clausula where adicional

 */

function abrirInformeTexto(codInforme, aditionalWhere){  

    abrirInforme(codInforme, aditionalWhere , "");

}



/* La funcion abrirInforme abre la p?gina de descarga de los informes

 *    codInforme    	String  c?digo del informe que se genera

 *    aditionalWhere    String  clausula where adicional

 *    prefijo    		String  

 */

function abrirInforme(codInforme, aditionalWhere , prefijo){    

	var url = "../comunJSP/q02bdescargaExcel.jsp?"+ dameIndicativoNoPortalParaUrl() + "&codInforme=" + codInforme + "&aditional=" + aditionalWhere ;

	var window_width = screen.availWidth;

	var window_height = screen.availHeight;

	var window_left = (screen.availWidth)-(window_width);

	var window_top = (screen.availHeight)-(window_height);

	var winParms = "Status=yes" + ",resizable=yes" + ",height="+window_height+",width="+window_width + ",left="+window_left+",top="+window_top+",toolbar=yes,menubar=yes";

	var newwindow = window.open(url,'_blank',winParms);

	newwindow.focus();

}



/* La funcion abrirInformeTexto abre la página de descarga de los informes para descargar el informe en fichero de texto plano

 *    codInforme    	String  c?digo del informe que se genera

 *    aditionalWhere    String  clausula where adicional

 *    prefijo    		String  

 */

function abrirInformeTexto(codInforme, aditionalWhere , prefijo){    

	var url = "../comunJSP/q02bdescargaTexto.jsp?"+ dameIndicativoNoPortalParaUrl() + "&codInforme=" + codInforme + "&aditional=" + aditionalWhere ;

	var window_width = screen.availWidth;

	var window_height = screen.availHeight;

	var window_left = (screen.availWidth)-(window_width);

	var window_top = (screen.availHeight)-(window_height);

	var winParms = "Status=yes" + ",resizable=yes" + ",height="+window_height+",width="+window_width + ",left="+window_left+",top="+window_top+",toolbar=yes,menubar=yes";

	var newwindow = window.open(url,'_blank',winParms);

	newwindow.focus();

}



// Funcion que devuelve false si no cumple el estandar

// hay que pasarle el valor del EMAIL

function validaEmail(valor){

	if (valor!="")

	{

	  //if( !(/\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(valor)) ) 

	  if (!(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(valor)))

	 	return false;

	  else return true;

	}else  return true;

}

