/* 
    This file is part of MiraMon Map Browser.
    MiraMon Map Browser is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    Foobar is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with MiraMon Map Browser.  If not, see "http://www.gnu.org/licenses/".

    Copyright 2001, 2011 Xavier Pons

    Aquest codi JavaScript ha estat realitzat per Joan Masó Pau 
    (joan maso at uab cat) i Nuria Julià (n julia at creaf uab cat)
    dins del grup de MiraMon. MiraMon és un projecte del Centre
    de recerca i aplicacions forestals (CREAF) que elabora programari de 
    Sistema d'Informació Geogràfica i de Teledetecció per a la 
    visualització, consulta, edició i anàlisi de mapes ràsters i 
    vectorials. Elabora programari d'escriptori i també servidors i clients 
    per Internet. No tots aquests productes són gratuïts o de codi obert. 
    En particular, el Navegador de Mapes del MiraMon (client per Internet) 
    es distribueix sota els termes de la llicència "GNU General Public 
    License". Es pot actualitzar des de www.creaf.uab.es/miramon/mmn
*/

var opcio_predefinit=0x00;
var opcio_editable=0x01;
var opcio_url=0x02;


var AJAX_ID=0;

function CancelAjaxExecuteWPS()
{
	if (AJAX_ID)
	{
		clearTimeout(AJAX_ID);
		AJAX_ID=0;
	}
}


var ChronoStartTime = 0;
var ChronoEndTime = 0;
var ChronoDiffTime = 0;
var ChronoTimerID = 0;

function ChrnoInternals(chrono_id)
{
	ChronoEndTime = new Date()
	ChronoDiffTime = ChronoEndTime - ChronoStartTime
	ChronoDiffTime = new Date(ChronoDiffTime)
	var msec = ChronoDiffTime.getMilliseconds()
	var sec = ChronoDiffTime.getSeconds()
	var min = ChronoDiffTime.getMinutes()
	var hr = ChronoDiffTime.getHours()-1
	if (min < 10){
		min = "0" + min
	}
	if (sec < 10){
		sec = "0" + sec
	}
	if(msec < 10){
		msec = "00" +msec
	}
	else if(msec < 100){
		msec = "0" +msec
	}
	document.getElementById(chrono_id).innerHTML = hr + ":" + min + ":" + sec + ":" + msec;
	ChronoTimerID = setTimeout("ChrnoInternals(\""+chrono_id+"\")", 10);
}

function ChronoResetAndStart(chrono_id)
{
	document.getElementById(chrono_id).innerHTML = "0:00:00:000";
	ChronoStop();
	ChronoStartTime = new Date();
	ChrnoInternals(chrono_id);
}

function ChronoStop()
{
	if (ChronoTimerID)
	{
		clearTimeout(ChronoTimerID);
		ChronoTimerID=0;
	}
}

var ajaxExecuteWPS=new Array();

function UpdateAjaxExecuteWPS(url)
{
var url2;
var index=ajaxExecuteWPS.length;

	//WARNING: In order this to work, the server has to be configured to expire the content immmendiatelly in this folder
	ajaxExecuteWPS[index]=new Ajax();
	if (location.host && DonaHost(url).toLowerCase()!=location.host.toLowerCase() && ServidorLocal)
	{
		
		var s_host=DonaHost(ServidorLocal);
		var pos_host=(-1!=ServidorLocal.indexOf("//")) ? ServidorLocal.indexOf("//")+2 : 0;
		if (s_host.toLowerCase()!=location.host.toLowerCase())
		{
			url2=DonaNomServidorCaracterFinal(ServidorLocal.substring(0,pos_host)+
											  location.host+
			 							      ServidorLocal.substring(pos_host+s_host.length, ServidorLocal.length))+
			"ServerToRequest="+DonaNomServidorSenseCaracterFinal(url);
		}
		else
			url2=DonaNomServidorCaracterFinal(ServidorLocal) + "ServerToRequest="+DonaNomServidorSenseCaracterFinal(url);
	}
	else
		url2=url;
	ajaxExecuteWPS[index].doGet(url2, AvaluaRespostaExecuteWPS, "text/xml", 
					document);
}

function AvaluaRespostaExecuteWPS(doc, document_html)
{
var root;
var i,j;

	if(!doc) 
		return;	
	root=doc.documentElement;
	if(!root) 
		return;
	resposta=document.getElementById("responseWPS");
	if (root.xml && resposta)
	{		
		resposta.value=root.xml;
	}
	else if (XMLSerializer && resposta)
	{
		var serializer = new XMLSerializer();   
		resposta.value=serializer.serializeToString(root);		
	}
	else if(resposta)
		resposta.value="Sorry, the server responded but I do not know how to show the result on this browser.";	
	if(root.nodeName!="wps:ExecuteResponse")  //Això passa quan ho he fet amb soap
		root=root.getElementsByTagName('wps:ExecuteResponse')[0];

	if (root.getElementsByTagName('wps:Reference')[0])
	{		
		var reference=root.getElementsByTagName('wps:Reference')[0];
		if(reference)
		{			
			document.getElementById("ResponseWPSReference").innerHTML="<b>"+DonaCadena3("Resultat: ", "Resultado: ", "Result: ")+"</b><br>"+
				"<a href=\"" + reference.getAttribute('href') + "\" target=\"_blank\">" + reference.getAttribute('href') + "</a>";			
		}
	}
	var localitzacio_estat=root.getAttribute('statusLocation');
	
	if (root.getElementsByTagName('wps:Status')[0])
	{
		var status=root.getElementsByTagName('wps:Status')[0];
		var percent=-1;
		if (status.getElementsByTagName('wps:ProcessAccepted')[0])
		{
			AJAX_ID=setTimeout("UpdateAjaxExecuteWPS(\"" + localitzacio_estat + "\");", 2*1000);					
			document.getElementById("StatusResponseWPS").innerHTML=DonaCadena3("Acceptat", "Aceptado", "Accepted");
			return;
		}
		else if (status.getElementsByTagName('wps:ProcessStarted')[0])
		{
			var process_started=status.getElementsByTagName('wps:ProcessStarted')[0];
			percent=parseInt(process_started.getAttribute('percentCompleted'),10);
			
			AJAX_ID=setTimeout("UpdateAjaxExecuteWPS(\"" + localitzacio_estat + "\");", 2*1000);					
			document.getElementById("StatusResponseWPS").innerHTML=DonaCadena3("Iniciat", "Iniciado", "Started")+ 
			DonaCadena3(" percentatge completat: ","porcentaje completado: ","percent completed: ")+percent+"%";
			return;
		}
		else if (status.getElementsByTagName('wps:ProcessPaused')[0])
		{
			var process_paused=status.getElementsByTagName('wps:ProcessPaused')[0];
			percent=parseInt(process_paused.getAttribute('percentCompleted'),10);
			
			AJAX_ID=setTimeout("UpdateAjaxExecuteWPS(\"" + localitzacio_estat + "\");", 2*1000);					
			if(percent!=-1)
				document.getElementById("StatusResponseWPS").innerHTML=DonaCadena3("Pausat", "Pausado", "Paused")+ 
				DonaCadena3(" percentatge completat: ","porcentaje completado: ","percent completed: ")+percent+"%";
			else
				document.getElementById("StatusResponseWPS").innerHTML=DonaCadena3("Pausat", "Pausado", "Paused");
			return;
		}
		else if (status.getElementsByTagName('wps:ProcessSucceeded')[0])
		{
			document.getElementById("StatusResponseWPS").innerHTML=DonaCadena3("Finalitzat", "Finalizado", "Succeeded");
			document.getElementById("ResponseWPSReference").style.display="inline";
		}
		else if (status.getElementsByTagName('wps:ProcessFailed')[0])
		{
			var codi_error=null, text_error=null;
			var excepcio=(status.getElementsByTagName('wps:ProcessFailed')[0]).getElementsByTagName('ows:ExceptionReport');
			if(excepcio)
			{
				excepcio=excepcio[0].getElementsByTagName('ows:Exception');
				if(excepcio)
				{
					excepcio=excepcio[0];
					codi_error=excepcio.getAttribute('exceptionCode');
					text_error=excepcio.getElementsByTagName('ows:ExceptionText');
					if(text_error)
						text_error=text_error[0].childNodes[0].nodeValue;
				}
			}
			var cadena=DonaCadena3("Error: ", "Error: ", "Failed: ");
			if(codi_error)
				cadena+=codi_error;
			if(text_error)
				cadena+="<blockquote><br>\""+text_error+ "\"";
						
			document.getElementById("StatusResponseWPS").innerHTML=cadena;
		}			
		document.getElementById("StatusResponseWPS").style.display="inline";
	}				
	ChronoStop();
	return;
}


function CreaInputDeProcesAExecutar(id, valor, flags)
{
	this.identificador=id;
	this.valor=valor;
	this.flags=flags;
}

function CreaProcesAExecutar(servidor,operacio,inputs)
{
	this.servidor=servidor;  //URL del servidor
	this.servidor_on_fer_peticio=null;
	this.operacio=operacio; //identificador de l'operació
	this.input=inputs; //new Array de CreaInputDeProcesAExecutar
}

var ProcessosAExecutar=new Array();


function OmpleCreaProcesAExecutarDeFormulari(i_capa)
{
var input=new Array();
var i_proces=document.SeleccionaProcesCapa.sel_proces.value;
var operacio=capa[i_capa].proces[i_proces].operacio;
var s1;

	for(var i=0; i<operacio.par_input.length; i++)
	{
		if(operacio.par_input[i].flags_valor&valor_capa_wps)
		{
			s1=capa[i_capa].proces[i_proces].capa_wps;			
		}
		else if(operacio.par_input[i].flags_valor&valor_editable && operacio.par_input[i].flags_valor&valor_predefinit)
		{
			var opcio=document.getElementById("e_opcio_"+i);
			var sel_opcio;
			if(opcio.checked)
				sel_opcio=opcio_editable;
			else
			{
				opcio=document.getElementById("u_opcio_"+i);
				if(opcio && opcio.checked)
					sel_opcio=opcio_url;
				else
					sel_opcio=opcio_predefinit;
			}

			if(sel_opcio==opcio_predefinit)
			{
				var i_selec=parseInt(document.getElementById("p_sel_input_"+i).value,10);
				s1=CanviaRepresentacioCaractersProhibitsPerAtributXML(operacio.par_input[i].valors[i_selec].nom);
			}
			else if(sel_opcio==opcio_editable)
			{
				var text=document.getElementById("e_text_"+i);
				if(text && text.value && text.value!="")
					s1=CanviaRepresentacioCaractersProhibitsPerAtributXML(text.value);
				else
				{
					var cadena_error=DonaCadena3("No s'ha definit cap valor pel paràmetre \"",
									  "No se ha definido ningún valor para el paràmetro \"",
									  "Any value has been defined by parameter \"")+ DonaCadena(operacio.par_input[i].nom.desc)+ "\"";
					
					var file=document.getElementById("e_file_"+i);
					if(file && file.value)
					{
						cadena_error+=DonaCadena3("\r\nCal enviar el fitxer al servidor abans d'executar el procès.",
												  "\r\nEs necesario enviar el fichero al servidor antes de ejecutar el proceso.",
												  "\r\nIt is necessary to send the file to the server before executing the process.");
					}
					alert(cadena_error);					
					return -1;
				}
			}
			else
			{
				var text=document.getElementById("u_text_"+i);
				if(text && text.value && text.value!="")
				{
					if(false==ComprovaSiFormatFitxerParamProcesEsCorrecte(text.value, i_capa, i_proces, i))
						return;
					if(false==EsUnaURLValida(text.value))
					{
						alert(DonaCadena3("La URL introduïda en el paràmetre \"", 
										  "La URL introducida en el parametro \"", 
										  "The URL introduced in the parameter \"") +
							  DonaCadena(capa[i_capa].proces[i_proces].operacio.par_input[i].nom.desc)+ 
						  	  DonaCadena3("\" és invàlida.","\" es invalida.", "is invalid."));
						return;
					}					
					s1=CanviaRepresentacioCaractersProhibitsPerAtributXML(text.value);					
				}
				else
				{
					alert(DonaCadena3("No s'ha definit cap valor pel paràmetre \"",
									  "No se ha definido ningún valor para el paràmetro \"",
									  "Any value has been defined by parameter \"")+ DonaCadena(operacio.par_input[i].nom.desc)+ "\"");
					
				}
			}
		}
		else if(operacio.par_input[i].flags_valor&valor_predefinit)
		{
			var i_selec=parseInt(document.getElementById("p_sel_input_"+i).value,10);
			s1=CanviaRepresentacioCaractersProhibitsPerAtributXML(operacio.par_input[i].valors[i_selec].nom);
		}
		else //if(operacio.par_input[i].flags_valor&valor_editable)
		{
			var opcio=document.getElementById("e_opcio_"+i);
			if(opcio.checked)
			{
				var text=document.getElementById("e_text_"+i);
				if(text && text.value)
					s1=CanviaRepresentacioCaractersProhibitsPerAtributXML(text.value);
				else
				{
					var cadena_error=DonaCadena3("No s'ha definit cap valor pel paràmetre: \"",
										  "No se ha definido ningún valor para el paràmetro: \"",
										  "Any value has been defined by parameter: \"")+ DonaCadena(operacio.par_input[i].nom.desc)+ "\"";
						
					var file=document.getElementById("e_file_"+i);
					if(file && file.value)
					{
						cadena_error+=DonaCadena3("\r\nCal enviar el fitxer al servidor abans d'executar el procès.",
												  "\r\nEs necesario enviar el fichero al servidor antes de ejecutar el proceso.",
												  "\r\nIt is necessary to send the file to the server before executing the process.");
					}
					alert(cadena_error);					
					return -1;
				}
			}
			else
			{
				var text=document.getElementById("u_text_"+i);
				if(text && text.value && text.value!="")
				{
					if(false==ComprovaSiFormatFitxerParamProcesEsCorrecte(text.value, i_capa, i_proces, i))
						return;
					if(false==EsUnaURLValida(text.value))
					{
						alert(DonaCadena3("La URL introduïda en el paràmetre \"", 
										  "La URL introducida en el parametro \"", 
										  "The URL introduced in the parameter \"") +
							  DonaCadena(capa[i_capa].proces[i_proces].operacio.par_input[i].nom.desc)+ 
						  	  DonaCadena3("\" és invàlida.","\" es invalida.", "is invalid."));
						return;
					}
					s1=CanviaRepresentacioCaractersProhibitsPerAtributXML(text.value);
				}
				else
				{
					alert(DonaCadena3("No s'ha definit cap valor pel paràmetre \"",
									  "No se ha definido ningún valor para el paràmetro \"",
									  "Any value has been defined by parameter \"")+ DonaCadena(operacio.par_input[i].nom.desc)+ "\"");
					
				}
			}
		}
		input[input.length]=new CreaInputDeProcesAExecutar(operacio.par_input[i].nom.nom, s1, operacio.par_input[i].flags_tipus);	
	}
	//Falten els outputs ·$·
	ProcessosAExecutar[ProcessosAExecutar.length]=new CreaProcesAExecutar(operacio.servidor, operacio.id_operacio.nom, input);
	
	return (ProcessosAExecutar.length-1);
}

function DonaRequestExecuteProces(i_proces)
{
var cdns=new Array();

	//si el servidor no és el local cal afegir el paràmetre servertoreuqes,
	//mirar com fer-ho en aquest cas

	if(ProcessosAExecutar && i_proces<ProcessosAExecutar.length)
	{
		var peticio_en_cascada=false;
		if (location.host && DonaHost(ProcessosAExecutar[i_proces].servidor).toLowerCase()!=location.host.toLowerCase() && ServidorLocal)
			peticio_en_cascada=true;
		
		cdns.push("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\r\n");
		
		if(peticio_en_cascada)
			cdns.push("<soap:Envelope xmlns:soap=\"http://www.w3.org/2001/12/soap-envelope\" ",
				  "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ",
				  "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" ",
				  "xsi:schemaLocation=\"http://www.w3.org/2001/12/soap-envelope http://www.w3.org/2001/12/soap-envelope.xsd\">\r\n",
				  "<soap:Body>\r\n");
			
		cdns.push("<Execute service=\"WPS\" version=\"1.0.0\" xmlns=\"http://www.opengis.net/wps/1.0.0\" \r\n",
				  "xmlns:ows=\"http://www.opengis.net/ows/1.1\" \r\n",
				  "xmlns:xlink=\"http://www.w3.org/1999/xlink\" \r\n",
				  "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.opengis.net/wps/1.0.0 \r\n",
				  WPSschemaURL+"/wps/1.0.0/wpsExecute_request.xsd\">\r\n",
				  "	<ows:Identifier>",ProcessosAExecutar[i_proces].operacio,"</ows:Identifier>\r\n");
		if(ProcessosAExecutar[i_proces].input)
		{
			cdns.push("	<DataInputs>\r\n");		
			for(var i=0; i<ProcessosAExecutar[i_proces].input.length; i++)
			{
				cdns.push("		<Input>\r\n",
						"			<ows:Identifier>",ProcessosAExecutar[i_proces].input[i].identificador,"</ows:Identifier>\r\n");
				
				if(ProcessosAExecutar[i_proces].input[i].flags&tipus_referencia || 
					ProcessosAExecutar[i_proces].input[i].flags&tipus_referencia_fitxer)
				{
					cdns.push("			<Reference xlink:href=\"" , ProcessosAExecutar[i_proces].input[i].valor , "\" schema=\"\"/>\r\n");
				}
				else
				{
					cdns.push("			<Data>\r\n",
							"				<LiteralData>", ProcessosAExecutar[i_proces].input[i].valor +"</LiteralData>\r\n" ,
							"			</Data>\r\n");
					//De tipus Data n'hi ha 3: LiteralData, ComplexData permet incrustar el gml directament aquí o BoundingBoxData
				}
				cdns.push("</Input>\r\n");
			}
			cdns.push("	</DataInputs>\r\n");
		}
		
		//Falten els outputs ·$·
		cdns.push("	<ResponseForm>\r\n",
				"		<ResponseDocument storeExecuteResponse=\"true\" status=\"true\">\r\n",
				"			<Output asReference=\"true\">\r\n",			
				"				<ows:Identifier>result</ows:Identifier>\r\n",
				"			</Output>\r\n",
				"		</ResponseDocument>\r\n",				
				"	</ResponseForm>\r\n",
				"</Execute>\r\n");
		
		if(peticio_en_cascada)
		{
			var s_host=DonaHost(ServidorLocal);
			var pos_host=(-1!=ServidorLocal.indexOf("//")) ? ServidorLocal.indexOf("//")+2 : 0;
			if (s_host.toLowerCase()!=location.host.toLowerCase())
				ProcessosAExecutar[i_proces].servidor_on_fer_peticio=DonaNomServidorCaracterFinal(ServidorLocal.substring(0,pos_host)+
								location.host+ServidorLocal.substring(pos_host+s_host.length, ServidorLocal.length));
			else
				ProcessosAExecutar[i_proces].servidor_on_fer_peticio=ServidorLocal;
			cdns.push("<ServerToRequest>",DonaNomServidorSenseCaracterFinal(ProcessosAExecutar[i_proces].servidor),"</ServerToRequest>\n");
		}
		else
			ProcessosAExecutar[i_proces].servidor_on_fer_peticio=DonaNomServidorSenseCaracterFinal(ProcessosAExecutar[i_proces].servidor);
		if(peticio_en_cascada)
			cdns.push("</soap:Body>\n",
					"</soap:Envelope>\n");	
	
		return cdns.join("");
	}
	return "";
}

function ExecutaRequestProces(servidor, request)
{
	ChronoResetAndStart("ChronoTimeWPS");
	CancelAjaxExecuteWPS();

	ajaxExecuteWPS=new Ajax();
	ajaxExecuteWPS.doPost(servidor, 
			"text/xml", request, 
			AvaluaRespostaExecuteWPS, "text/xml", 
			document);				
}

var MostraAvancadesWPS=true;

function MostraOAmagaAvancades()
{
	var resposta=document.getElementById("responseWPS");
	if(resposta)
	{
		if(MostraAvancadesWPS)
		{
			resposta.style.display="inline";
			MostraAvancadesWPS=false;
		}
		else
		{
			resposta.style.display="none";
			MostraAvancadesWPS=true;
		}		
	}
}

function OmpleEstructGlobalIExecutaProces(i_capa)
{
var request;
var i_proces_a_executar;


	if (!document.ExecutaProcesCapa)
		return false;

	//Agafo la info del formulari més la de la estructura i construeixo la petició		
	i_proces_a_executar=OmpleCreaProcesAExecutarDeFormulari(i_capa);
	if(i_proces_a_executar==-1)
		return false;

	request=DonaRequestExecuteProces(i_proces_a_executar);		
	if(request!="")
	{
		var cdns=new Array();
		var elem=getLayer(this, "executarProces_finestra");
		var i_proces=document.SeleccionaProcesCapa.sel_proces.value;
		
		contentLayer(elem, null);
		MostraAvancadesWPS=true;
		cdns.push("<div class=\"finestraproces\" name=\"estat_execucio\" id=\"estat_execucio\">",
				  "<b>",DonaCadena3("Estat de l'execució", "Estado de la ejecución", "State of execution"),"</b><hr><br>",
				  "<b>",DonaCadena3("Capa: ","Capa: ","Layer: "),"</b>",DonaCadena(capa[i_capa].desc),"<br><br>",
				  "<b>",DonaCadena3("Procés: ", "Proceso: ", "Process: "),"</b>", DonaCadena(capa[i_capa].proces[i_proces].operacio.id_operacio.desc),"<br><br>",
				  "<b>",DonaCadena3("Temps d'execució: ","Tiempo de ejecución:	","Execution time: "),"</b>","<span id=\"ChronoTimeWPS\">0:00:00:00</span><br><br>",
				  "<b>",DonaCadena3("Estat: ", "Estado: ", "Status: "),"</b>", "<span id=\"StatusResponseWPS\"></span>",
				  "<br><br><span id=\"ResponseWPSReference\"></span>",
				  "<br><br><a  href=\"javascript:void(0);\" onClick=\"MostraOAmagaAvancades()\"; id=\"AvancadesResponseWPS\">",
				  DonaCadena3("Opcions avançades","Opciones avanzadas","Advanced options"),"</a>", 
				  "<textarea class=\"Verdana11px\" name=\"responseWPS\" id=\"responseWPS\" wrap=off cols=80 rows=15 style=\"display:none\"></textarea>",
				  "<br><br><center><input type=\"button\" value=\"",DonaCadena3("Tancar", "Cerrar", "Close"),
				  "\" onClick=\"TancaFinestra_executarProces();\" /></center></div>");
		s=cdns.join("");
		contentLayer(elem, s);			
		ExecutaRequestProces(ProcessosAExecutar[i_proces_a_executar].servidor_on_fer_peticio, request);
		return true;
	}
	else
	{
		alert(DonaCadena3("Error al construir la petició d'execució", "Error al construir la petición de ejecución", "Error while building execution request"));
		return false;
	}
}//Fi de OmpleEstructGlobalIExecutaProces()


function TancaFinestra_executarProces()
{
	hideFinestraLayer(this, "executarProces");
}//Fi de TancaFinestra_executarProces()


var ajaxEstatEnviaFitxer=new Array();
var EstatProcesEnviaFitxer=new Array();

function CreaEstatProcesEnviaFitxer(i_capa, i_proces_sel, i_input, id_proces)
{
	this.i_capa=i_capa;
	this.i_proces_sel=i_proces_sel;
	this.i_input=i_input;
	this.id_proces=id_proces;
}


function ActivaIMostraButtonEnviar(activar, i_input)
{
var boto_submit=document.getElementById("e_submit_"+i_input);
var boto_cancel=document.getElementById("e_cancel_"+i_input);
var exp_file=document.getElementById("e_file_"+i_input);
var path_file=document.getElementById("e_filepath_user_"+i_input);
var form=document.getElementById("e_form_input_"+i_input);
var opcio=document.getElementById("e_opcio_"+i_input);
	
	if(activar)
	{
		exp_file.style.display="none";
		path_file.style.display="inline";
		path_file.innerHTML=exp_file.value;
		boto_submit.style.display="inline";
		boto_submit.disabled=false;
		boto_cancel.style.display="inline";
		boto_cancel.disabled=false;
	}
	else
	{
		form.reset();
		opcio.checked=true;
		exp_file.style.display="inline";		
		path_file.style.display="none";
		boto_submit.style.display="none";
		boto_cancel.style.display="none";	
	}
}

function EsUnaURLValida(text)
{
	//var re=/^(file|http):\/\/S+.(com|net|org|info|biz|ws|us|es|cat|tv|cc)$/i;
	//La cadena ha de començar per file o http, 
	//S vol dir que busqui un caracter no blanc
	//S+ vol dir que n'hi hagi com a mínim un 
	//.
	//i alguna  de les seguënts extensions

	var re=/^(file|http):\/\/\w+(\.\w+)*\.\w{2,3}$/i; 	
	//http o file ://(n caracteres).(n caracteres)(0 ó más veces).(2 ó 3 caracteres)
	if (re.test(text))
		return true;
	return false;
}

function DonaExtensioFitxerSensePunt(fitxer)
{
	var i=fitxer.lastIndexOf(".");
	if(i==-1)
		return null;
	return fitxer.substring(i+1, fitxer.length);
}


function ComprovaSiFormatFitxerParamProcesEsCorrecte(sz_fitxer, i_capa, i_proces_sel, i_input)
{
	if(capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].formats)
	{
		var ext_fitxer=DonaExtensioFitxerSensePunt(sz_fitxer);
		if(!ext_fitxer)
		{
			alert(DonaCadena3("Format incorrecte. Formats permesos by parameter ", 
						  "Formato incorrecto. Formatos permitidos by parameter ", 
						  "Wrong format. Allowed formats by parameter ") +
				  "\"" + DonaCadena(capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].nom.desc)+ "\" :"+
				  capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].formats.join(",") + ".");
			return false;
		}
		ext_fitxer=ext_fitxer.toLowerCase();
		for(var i=0; i<capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].formats.length; i++)
		{
			if(ext_fitxer==capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].formats[i].toLowerCase())
				return true;
		}
		alert(DonaCadena3("Format incorrecte. Formats permesos by parameter ", 
					      "Formato incorrecto. Formatos permitidos by parameter ", 
					      "Wrong format. Allowed formats by parameter ") +
			  "\""+ DonaCadena(capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].nom.desc)+ "\" :"+
		      capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].formats.join(",") + ".");
		return false;
	}
	return true;
}
function ComprovaActivaIMostraButtonEnviar(activar, i_capa, i_proces_sel, i_input)
{
var exp_file=document.getElementById("e_file_"+i_input);
	
	if(exp_file && exp_file.value)
	{
		if(true==ComprovaSiFormatFitxerParamProcesEsCorrecte(exp_file.value, i_capa, i_proces_sel, i_input))
			ActivaIMostraButtonEnviar(activar, i_input);
	}
}

function TornaASeleccionarFitxer(i_capa, i_proces_sel, i_input)
{
//Mostro el selector de fitxers i esborro la selecció que hi havia
var span_estat_file=document.getElementById("estat_file_"+i_input);
var nom_fitxer_servidor=document.getElementById("e_text_"+i_input);
var nom_fitxer_usuari=document.getElementById("e_file_user_"+i_input);		
var exp_file=document.getElementById("e_file_"+i_input);
var path_file=document.getElementById("e_filepath_user_"+i_input);
var boto_submit=document.getElementById("e_submit_"+i_input);
var boto_cancel=document.getElementById("e_cancel_"+i_input);
var boto_sel_altre_fitxer=document.getElementById("e_sel_file_"+i_input);
var form=document.getElementById("e_form_input_"+i_input);
var opcio_e=document.getElementById("e_opcio_"+i_input);
var opcio_u=document.getElementById("u_opcio_"+i_input);
var opcio_p=document.getElementById("u_opcio_"+i_input);
var sel_opcio=0;

	if(capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].flags_valor&valor_editable &&
	   capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].flags_tipus&tipus_referencia_fitxer)
	{
		
		if(opcio_e && opcio_e.checked)
			sel_opcio=opcio_editable;
		else
		{
			if(opcio_u && opcio_u.checked)
				sel_opcio=opcio_url;
			else
				sel_opcio=opcio_predefinit;
		}
	}
	form.reset();
	exp_file.style.display="inline";
	exp_file.value="";
	boto_submit.style.display="none";
	boto_cancel.style.display="none";
	path_file.style.display="none";
	path_file.innerHTML="";
	span_estat_file.style.display="none";
	nom_fitxer_servidor.value="";		
	nom_fitxer_usuari.style.display="none";
	nom_fitxer_usuari.value="";
	boto_sel_altre_fitxer.style.display="none";
	
	//Genero un nou identificador de proces
	NIdProces++;
	var id_proces=IdProces+"_"+NIdProces;
	var id_file=document.getElementById("id_file_"+i_input);
	id_file.value=id_proces;
		
	if(capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].flags_valor&valor_editable &&
	   capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].flags_tipus&tipus_referencia_fitxer)
	{
		if(sel_opcio==opcio_predefinit)
		{
			opcio_p.checked=true;
			ActivaTextPredefinit(i_input);
		}
		else if(sel_opcio==opcio_editable)
		{
			opcio_e.checked=true;
			ActivaTextEditable(i_input);
		}
		else 
		{
			opcio_u.checked=true;
			ActivaTextURL(i_input);
		}
	}
}

function AvaluaRespostaEstatProcesEnviaFitxer(doc, estat_proces)
{
var percentatge=-1;
var nom_fitxer, descp_fitxer;
var node, node2;

	//en cas d'error crec que hauria de modificar el formulari perquè no estigui esperant indefinidament el fitxer
	if(doc)
	{
		var root=doc.documentElement;	
		if(root)
		{
			node=root.getElementsByTagName('status');
			node=node[0];
			if(node && node.childNodes)
			{
				for(var i=0; i<node.childNodes.length; i++)
				{
					node2=node.childNodes[i];
					if(node2.nodeName=="ProcessAccepted")
					{
						percentatge=0;
						break;
					}
					else if(node2.nodeName=="ProcessStarted")
					{
						percentatge=node2.getAttribute('percentCompleted');
						break;
					}
					else if(node2.nodeName=="ProcessSucceeded")
					{
						percentatge=100;
						nom_fitxer=node2.getAttribute('serverfile');
						descp_fitxer=node2.getAttribute('userfilename');
						break;
					}
				}
			}
		}
	}
	//S'ha de modificar alguna cosa del formulari
	
	if(percentatge==-1)
	{
		alert(DonaCadena3("S'ha produït algun error durant l'enviament del fitxer. Torna-ho a intentar",
						  "Se ha producido algun error durante el envío del fichero. Vuélvalo a intentar",
						  "Has been occurred an error while sending the file. Try again"));
		//S'ha produit algun error torno a deixar les coses preparades per enviar un altre fitxer
		TornaASeleccionarFitxer(estat_proces.i_capa, estat_proces.i_proces_sel, estat_proces.i_input);
		return;
	}
	var span_estat_file=document.getElementById("estat_file_"+estat_proces.i_input);
	var nom_fitxer_servidor=document.getElementById("e_text_"+estat_proces.i_input);
	var nom_fitxer_usuari=document.getElementById("e_file_user_"+estat_proces.i_input);		
	var exp_file=document.getElementById("e_file_"+estat_proces.i_input);
	var path_file=document.getElementById("e_filepath_user_"+estat_proces.i_input);
	var boto_submit=document.getElementById("e_submit_"+estat_proces.i_input);
	var boto_cancel=document.getElementById("e_cancel_"+estat_proces.i_input);
	var boto_sel_altre_fitxer=document.getElementById("e_sel_file_"+estat_proces.i_input);
	if(percentatge<100)
	{
		//Mostro l'estat d'enviament i desactivo la resta de coses
		var cdns=new Array(); 
		cdns.push(DonaCadena3("Enviant fitxer", "Enviando fichero", "Sending file"), " ", percentatge, "%");
		span_estat_file.innerHTML=cdns.join("");
		span_estat_file.style.display="inline";						
	}
	else
	{
		span_estat_file.style.display="none";				
		nom_fitxer_servidor.value=nom_fitxer;	
		nom_fitxer_usuari.style.display="inline";
		nom_fitxer_usuari.value=descp_fitxer;		
		boto_sel_altre_fitxer.style.display="inline";
	}
	path_file.style.display="none";
	exp_file.style.display="none";
	boto_submit.style.display="none";
	boto_cancel.style.display="none";		
	if(percentatge>=0 && percentatge<100)
		setTimeout("ActualitzaValorParametre("+estat_proces.i_capa+","+estat_proces.i_proces_sel+","+estat_proces.i_input+", \'"+estat_proces.id_proces+"\')", 500);
	return;
}

function ActualitzaValorParametre(i_capa, i_proces_sel, i_input, id_proces)
{
var i_ajax=ajaxEstatEnviaFitxer.length;
		
	if (location.host && DonaHost(ServidorLocal).toLowerCase()!=location.host.toLowerCase())
	{
		var s_host=DonaHost(ServidorLocal);
		var pos_host=(-1!=ServidorLocal.indexOf("//")) ? ServidorLocal.indexOf("//")+2 : 0;
		if (s_host.toLowerCase()!=location.host.toLowerCase())
		{
			//Canvio l'arrel del servidor local per l'arrel de la plana del navegador per estar segur que l'ajax funcionarà sense "cross server vulmerability".
			servidor=DonaNomServidorCaracterFinal(ServidorLocal.substring(0,pos_host)+location.host+ServidorLocal.substring(pos_host+s_host.length, ServidorLocal.length));
		}
		else
			servidor=DonaNomServidorCaracterFinal(ServidorLocal);
	}
	else
		servidor=DonaNomServidorCaracterFinal(ServidorLocal);
	
	var request=servidor+"VERSION=1.2.0&REQUEST=GetProcessStatus&IDPROCES="+id_proces+"&FORMAT=text/xml&I_AJAX="+i_ajax;

	ajaxEstatEnviaFitxer[i_ajax]=new Ajax();
	EstatProcesEnviaFitxer[i_ajax]=new CreaEstatProcesEnviaFitxer(i_capa, i_proces_sel, i_input, id_proces);

	ajaxEstatEnviaFitxer[i_ajax].doGet(request, AvaluaRespostaEstatProcesEnviaFitxer, 
									   "text/xml", EstatProcesEnviaFitxer[i_ajax]);
}
	
function EnviarFitxerAlServidor(i_capa, i_proces_sel, i_input)
{
	var id_file=document.getElementById("id_file_"+i_input);
	var id_proces=id_file.value;

	setTimeout("ActualitzaValorParametre("+i_capa+","+i_proces_sel+","+i_input+", \'"+id_proces+"\')", 500);
	return;
}

function ActivaTextURL(i_input)
{
var elem;
	elem=this.document.getElementById("p_opcio_"+i_input);
	if(elem)
		elem.checked=false;		
	elem=this.document.getElementById("e_opcio_"+i_input);
	if(elem)
		elem.checked=false;		
	elem=this.document.getElementById("p_sel_input_"+i_input);
	if(elem)
		elem.disabled=true;
	elem=this.document.getElementById("e_file_"+i_input);
	if(elem)
		elem.disabled=true;		
	elem=this.document.getElementById("e_submit_"+i_input);
	if(elem)
		elem.disabled=true;		
	elem=this.document.getElementById("e_cancel_"+i_input);
	if(elem)
		elem.disabled=true;			
	elem=this.document.getElementById("e_sel_file_"+i_input);						
	if(elem)
		elem.disabled=true;		
	elem=this.document.getElementById("e_text_"+i_input);
	if(elem)
		elem.disabled=true;
	elem=this.document.getElementById("u_text_"+i_input);
	if(elem)
		elem.disabled=false;
}

function ActivaTextPredefinit(i_input)
{
var elem;
	elem=this.document.getElementById("e_opcio_"+i_input);
	if(elem)
		elem.checked=false;
	elem=this.document.getElementById("u_opcio_"+i_input);
	if(elem)
		elem.checked=false;
	elem=this.document.getElementById("p_sel_input_"+i_input);
	if(elem)
		elem.disabled=false;
	elem=this.document.getElementById("e_file_"+i_input);
	if(elem)
		elem.disabled=true;		
	elem=this.document.getElementById("e_submit_"+i_input);
	if(elem)
		elem.disabled=true;		
	elem=this.document.getElementById("e_cancel_"+i_input);
	if(elem)
		elem.disabled=true;			
	elem=this.document.getElementById("e_sel_file_"+i_input);						
	if(elem)
		elem.disabled=true;		
	elem=this.document.getElementById("e_text_"+i_input);
	if(elem)
		elem.disabled=true;
	elem=this.document.getElementById("u_text_"+i_input);
	if(elem)
		elem.disabled=true;
}

function ActivaTextEditable(i_input, flags)
{
var elem;
	elem=this.document.getElementById("p_opcio_"+i_input);
	if(elem)
		elem.checked=false;
	elem=this.document.getElementById("u_opcio_"+i_input);
	if(elem)
		elem.checked=false;
	elem=this.document.getElementById("p_sel_input_"+i_input);
	if(elem)
		elem.disabled=true;
	elem=this.document.getElementById("e_file_"+i_input);
	if(elem)
		elem.disabled=false;		
	elem=this.document.getElementById("e_submit_"+i_input);
	if(elem)
		elem.disabled=false;
	elem=this.document.getElementById("e_cancel_"+i_input);
	if(elem)
		elem.disabled=false;						
	elem=this.document.getElementById("e_sel_file_"+i_input);						
	if(elem)
		elem.disabled=false;					
	elem=this.document.getElementById("e_text_"+i_input);
	if(elem)
		elem.disabled=false;
	elem=this.document.getElementById("u_text_"+i_input);
		if(elem)
			elem.disabled=true;
}

function ActualitzaParametresProces(i_capa, i_proces_sel)
{
var i_valor;
var cdns=new Array(); 

	contentLayer(getLayer(this, "parametres_operacio_wps"), null);	
	if(capa[i_capa].proces[i_proces_sel].operacio.par_input)
	{				
		cdns.push("<b>",DonaCadena3("Paràmetres d'entrada: ","Parámetros de entrada: ", "Input parameters: "), "</b>","<br><br>");
		for(var i_input=0; i_input<capa[i_capa].proces[i_proces_sel].operacio.par_input.length; i_input++)
		{
			cdns.push(DonaCadena(capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].nom.desc), ": ");
			if(capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].flags_valor&valor_capa_wps)
			{
				cdns.push("<form style=\"margin-top:3px;margin-bottom:0\" id=\"p_form_input_",i_input,"\" name=\"p_form_input_",i_input, "\">",
						  "<input class=\"Verdana11px\" readonly type=\"text\" size=\"50px\" name=\"p_text_", 
						  i_input, "\" id=\"p_text_", i_input, "\" value=\"", DonaCadena(capa[i_capa].desc),"\" />",
						  "</form>");
			}
			else if(capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].flags_valor&valor_editable &&
					 capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].flags_valor&valor_predefinit)
			{
				//Formulari de la part de l'input predefinida
				cdns.push("<form style=\"margin-top:3px;margin-bottom:0\" id=\"p_form_input_",i_input,"\" name=\"p_form_input_",i_input, "\">",
						  "<input class=\"Verdana11px\" type=\"radio\" id=\"p_opcio_", i_input, "\" name=\"p_opcio_", i_input, 
						  "\" value=\"predefinit\" onClick=\"ActivaTextPredefinit(",i_input, ");\" checked />");
				if(capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].flags_tipus&tipus_referencia_fitxer)
					cdns.push("<label for=\"p_opcio_",i_input,"\">",DonaCadena3("Predefinit","Predefinido","Predefined"),": </label>");
				cdns.push("<select class=\"Verdana11px\" name=\"p_sel_input_", i_input, "\" id=\"p_sel_input_", i_input,"\">");
				for(i_valor=0; i_valor<capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].valors.length; i_valor++)
				{
					cdns.push("<option value=\"", i_valor,"\" ",
							((capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].valors[i_valor].sel) ? "selected" : ""), ">",
							DonaCadena(capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].valors[i_valor].desc), "</option>");
				}
				cdns.push("</select></form>");
				
				//Formulari de la part de l'input editable				
				if(capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].flags_tipus&tipus_referencia_fitxer)
				{					
	  				NIdProces++;
					var id_proces=IdProces+"_"+NIdProces;
												
					//El selector de fitxers locals
					cdns.push("<form style=\"margin-top:3px;margin-bottom:0\" id=\"e_form_input_",i_input,
							  "\" name=\"e_form_input_",i_input, "\" action=\"",ServidorLocal,"\"",
							  "enctype=\"multipart/form-data\" method=\"post\" target=\"retorn_fitxers_operacio_wps_",i_input,
							  "\" onSubmit=\"EnviarFitxerAlServidor(",i_capa,",",i_proces_sel,",",i_input,");\" >",							  
							  "<input class=\"Verdana11px\" type=\"radio\"  id=\"e_opcio_", i_input, "\" name=\"e_opcio_", i_input, 
						  	  "\" value=\"editable\" onClick=\"ActivaTextEditable(", i_input,",",
						      capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].flags_tipus,");\" />",							  
							  "<label for=\"e_opcio_",i_input,"\">",DonaCadena3("Local","Local","Local"),": </label>",
							  "<span class=\"Verdana11px\" id=\"estat_file_",i_input,"\" style=\"display:none\"></span>",
							  "<input type=\"hidden\" id=\"id_file_",i_input, "\" name=\"idfile\" value=\"",id_proces,"\" />",
							  "<input class=\"Verdana11px\" disabled size=\"40\" type=\"file\" id=\"e_file_", i_input, "\" name=\"datafile\" ",
							  "onChange=\"ComprovaActivaIMostraButtonEnviar(true,",i_capa,",",i_proces_sel,",",i_input,");\" />",
							  "<input class=\"Verdana11px\" readonly size=\"40\" type=\"text\" id=\"e_file_user_", i_input, "\" style=\"display:none\" />",
							  "<span class=\"Verdana11px\" id=\"e_filepath_user_", i_input, "\" style=\"display:none\"></span>",
 							  "<input class=\"Verdana11px\" disabled type=\"button\" id=\"e_sel_file_", i_input, "\" style=\"display:none\" value=\"",
							  DonaCadena3("Canviar el fitxer", "Cambiar el fichero", "Change a file"),"\" onclick=\"",
							  "TornaASeleccionarFitxer(", i_capa, ",", i_proces_sel, ",", i_input, ");\" />",
							  "<input type=\"hidden\" id=\"e_text_", i_input, "\" name=\"e_text_", i_input, "\" />",
							  "  <input class=\"Verdana11px\" disabled type=\"submit\" id=\"e_submit_", i_input, "\" value=\"", 
							  DonaCadena3("Enviar","Enviar", "Send"),
							  "\" style=\"display:none\" />",
							  "  <input class=\"Verdana11px\" disabled type=\"button\" id=\"e_cancel_", i_input, "\" value=\"", 
							  DonaCadena3("Cancel·lar","Cancelar", "Cancel"),
							  "\" style=\"display:none\" onclick=\"ActivaIMostraButtonEnviar(false,",i_input,");\" />",
							  "</form>",
							  "<iframe name=\"retorn_fitxers_operacio_wps_", i_input, "\" style=\"display:none\"></iframe>");
					//L'edit per escriure url's
					cdns.push("<form style=\"margin-top:3px;margin-bottom:0\" id=\"u_form_input_",i_input,"\" name=\"u_form_input_",i_input, "\">",
						      "<input class=\"Verdana11px\" type=\"radio\" id=\"u_opcio_", i_input, "\" name=\"u_opcio_", i_input, 
						      "\" value=\"url\" onClick=\"ActivaTextURL(",i_input, ");\" />",							  
							  "<label for=\"u_opcio_",i_input,"\">",DonaCadena3("URL","URL","URL"),": </label>",
							  "<input type=\"text\" id=\"u_text_",i_input,"\" disabled size=\"40\" />",
							  "</form>");					
				}
				else
				{
					cdns.push("<form style=\"margin-top:3px;margin-bottom:0\" id=\"e_form_input_",i_input,"\" name=\"e_form_input_",i_input, "\">",
							  "<input class=\"Verdana11px\" type=\"radio\"  id=\"e_opcio_", i_input, "\" name=\"e_opcio_", i_input, 
							  "\" value=\"editable\" onClick=\"ActivaTextEditable(", i_input,",",
							  capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].flags_tipus,");\" />",
							  "<input class=\"Verdana11px\" type=\"text\" size=\"50px\" name=\"e_text_", i_input, 
							  "\" id=\"e_text_",i_input, "\" disabled />",
							  "</form>");
				}
			}
			else if(capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].flags_valor&valor_predefinit)
			{
				cdns.push("<form style=\"margin-top:3px;margin-bottom:0\" id=\"p_form_input_",i_input,"\" name=\"p_form_input_",i_input, "\">",
						  "<select class=\"Verdana11px\" id=\"p_sel_input_", i_input, "\" name=\"p_sel_input_", i_input, "\">");
				for(i_valor=0; i_valor<capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].valors.length; i_valor++)
				{
					cdns.push("<option value=\"", i_valor,"\" ",
							((capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].valors[i_valor].sel) ? "selected" : ""), ">",
							DonaCadena(capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].valors[i_valor].desc), "</option>");
				}
				cdns.push("</select></form>");				
			}
			else //if(capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].flags_valor&valor_editable)
			{
				//Formulari de la part de l'input editable				
				if(capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].flags_tipus&tipus_referencia_fitxer)
				{
					NIdProces++;
					var id_proces=IdProces+"_"+NIdProces;
																
					//El selector de fitxers locals
					cdns.push("<form style=\"margin-top:3px;margin-bottom:0\" id=\"e_form_input_",i_input,
							  "\" name=\"e_form_input_",i_input, "\" action=\"",ServidorLocal,"\"",
							  "enctype=\"multipart/form-data\" method=\"post\" target=\"retorn_fitxers_operacio_wps_",i_input,
							  "\" onSubmit=\"EnviarFitxerAlServidor(",i_capa,",",i_proces_sel,",",i_input,");\" >",							  
							  "<input class=\"Verdana11px\" type=\"radio\"  id=\"e_opcio_", i_input, "\" name=\"e_opcio_", i_input, 
						  	  "\" value=\"editable\" onClick=\"ActivaTextEditable(", i_input,",",
						      capa[i_capa].proces[i_proces_sel].operacio.par_input[i_input].flags_tipus,");\" checked/>",							  
							  "<label for=\"e_opcio_",i_input,"\">",DonaCadena3("Local","Local","Local"),": </label>",
							  "<span class=\"Verdana11px\" id=\"estat_file_",i_input,"\" style=\"display:none\"></span>",
							  "<input type=\"hidden\" id=\"id_file_",i_input, "\" name=\"idfile\" value=\"",id_proces,"\" />",
							  "<input class=\"Verdana11px\" size=\"40\" type=\"file\" id=\"e_file_", i_input, "\" name=\"datafile\" ",
							  "onChange=\"ComprovaActivaIMostraButtonEnviar(true,",i_capa,",",i_proces_sel,",",i_input,");\" />",
							  "<input class=\"Verdana11px\" readonly size=\"40\" type=\"text\" id=\"e_file_user_", i_input, "\" style=\"display:none\" />",
							  "<span class=\"Verdana11px\" id=\"e_filepath_user_", i_input, "\" style=\"display:none\"></span>",
 							  "<input class=\"Verdana11px\" type=\"button\" id=\"e_sel_file_", i_input, "\" style=\"display:none\" value=\"",
							  DonaCadena3("Canviar el fitxer", "Cambiar el fichero", "Change a file"),"\" onclick=\"",
							  "TornaASeleccionarFitxer(", i_capa, ",", i_proces_sel, ",", i_input, ");\" />",
							  "<input type=\"hidden\" id=\"e_text_", i_input, "\" name=\"e_text_", i_input, "\" />",
							  "  <input class=\"Verdana11px\" type=\"submit\" id=\"e_submit_", i_input, "\" value=\"", 
							  DonaCadena3("Enviar","Enviar", "Send"),
							  "\" style=\"display:none\" />",
							  "  <input class=\"Verdana11px\" type=\"button\" id=\"e_cancel_", i_input, "\" value=\"", 
							  DonaCadena3("Cancel·lar","Cancelar", "Cancel"),
							  "\" style=\"display:none\" onclick=\"ActivaIMostraButtonEnviar(false,",i_input,");\" />",
							  "</form>",
							  "<iframe name=\"retorn_fitxers_operacio_wps_", i_input, "\" style=\"display:none\"></iframe>");
					//L'edit per escriure url's
					cdns.push("<form style=\"margin-top:3px;margin-bottom:0\" id=\"u_form_input_",i_input,"\" name=\"u_form_input_",i_input, "\">",
						      "<input class=\"Verdana11px\" type=\"radio\" id=\"u_opcio_", i_input, "\" name=\"u_opcio_", i_input, 
						      "\" value=\"url\" onClick=\"ActivaTextURL(",i_input, ");\" />",							  
							  "<label for=\"u_opcio_",i_input,"\">",DonaCadena3("URL","URL","URL"),": </label>",
							  "<input type=\"text\" id=\"u_text_",i_input,"\" disabled size=\"40\" />",
							  "</form>");					
				}
				else
				{
					cdns.push("<form style=\"margin-top:3px;margin-bottom:0\" id=\"e_form_input_",i_input,"\" name=\"e_form_input_",i_input, "\">",
							  "<input class=\"Verdana11px\" type=\"text\" size=\"50px\" name=\"e_text_", i_input, 
							  "\" id=\"e_text_",i_input, "\" disabled>",
  							  "</form>");
				}
			}
			cdns.push("<br>");
		}
		cdns.push("<br>");
	}
	if(capa[i_capa].proces[i_proces_sel].operacio.par_output)
	{
		cdns.push("<b>",DonaCadena3("Paràmetres de sortida: ","Parámetros de salida: ", "Output parameters: "), "</b>","<br><br>");
		//·$· Falta fer aquesta part
		cdns.push("<br><br>");				
	}	
	var s=cdns.join("");
	contentLayer(getLayer(this, "parametres_operacio_wps"), s);	
}
//Fi de ActualitzaParametresProces()

function FinestraExecutaProcesCapa(elem, i_capa)
{
var cdns=new Array();
var s;
var i_proces, i; 

	//Esborro el contingut de la finestra
	contentLayer(elem, null);
	if (capa[i_capa].proces && capa[i_capa].proces.length>0)
	{	
		cdns.push("<div class=\"finestraproces\" id=\"finestraproces\">",
				"<form name=\"SeleccionaProcesCapa\" id=\"SeleccionaProcesCapa\">",
			  	"<b>",
			  	DonaCadena3("Capa a processar: ","Capa a procesar: ","Layer to process: "),
			  	"</b>",DonaCadena(capa[i_capa].desc),"<br><br><hr><b>",
			  	DonaCadena3("Operació a executar: ", "Operación a ejecutar: ", "Operation to execute: "),
			  	"</b><br><br><select name=\"sel_proces\" id=\"sel_proces\" class=\"Verdana11px\"",
				"onChange=\"ActualitzaParametresProces(",i_capa,", document.SeleccionaProcesCapa.sel_proces.value);\">");	  
		for (i_proces=0; i_proces<capa[i_capa].proces.length; i_proces++)
		{
			if(capa[i_capa].proces[i_proces].operacio)
			{
				cdns.push("<option value=\"", i_proces,"\"", ((i_proces==0)? " selected":""), ">",
					DonaCadena(capa[i_capa].proces[i_proces].operacio.id_operacio.desc), "</option>");
			}
			else
			{
				alert(DonaCadena3("La capa '"+DonaCadena(capa[i_capa].desc)+"' té processos sense cap operació definida",
						  "La capa '"+DonaCadena(capa[i_capa].desc)+"' tiene procesos sin ninguna operación definida",
						  "The layer '"+DonaCadena(capa[i_capa].desc)+"' have some process without any operation defined"));
			}
		}
		cdns.push("</select></form><div name=\"parametres_operacio_wps\" id=\"parametres_operacio_wps\"></div>",
				  "<form name=\"ExecutaProcesCapa\" id=\"ExecutaProcesCapa\" onSubmit=\"return OmpleEstructGlobalIExecutaProces(",i_capa,");\"\>",
				  "<center><input TYPE=\"submit\" VALUE=\"",DonaCadena3("Executar", "Ejecutar", "Execute"),"\" /></center></form></div>");				
	}
	else
	{
		alert(DonaCadena3("La capa '"+DonaCadena(capa[i_capa].desc)+"' no té capa procés executable definit",
						  "La capa '"+DonaCadena(capa[i_capa].desc)+"' no tiene ningún proceso ejecutable definido",
						  "The layer '"+DonaCadena(capa[i_capa].desc)+"' do not have any executable proces defined"));
	}
	s=cdns.join("");
	contentLayer(elem, s);
	ActualitzaParametresProces(i_capa, document.SeleccionaProcesCapa.sel_proces.value);		
}

function IniciaFinestraExecutaProcesCapa(i_capa)
{
	if (isFinestraLayer(this, "executarProces"))
	{
		showFinestraLayer(this, "executarProces");
		var elem=getLayer(this, "executarProces_finestra");
		FinestraExecutaProcesCapa(elem, i_capa);		
	}
	else  //missatge error
	{
		alert(DonaCadena3("No s'ha definit la layer de tipus finestra 'executarProces' i per tant no es pot usar la funcionalitat d'afegir capes al navegador",
						 "No se ha definido la layer de tipo ventana 'executarProces' y en consecuencia no se puede usar la funcionalidad de añadir capas al navegador",
						 "The layer 'executarProces' don't has defined and its not possible use the funcionality add layer to browser"));						  
	}
	
}//Fi de IniciaFinestraExecutaProcesCapa()
