/* 
    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, 2008 Xavier Pons

    Aquest codi JavaScript ha estat realitzat per Joan Masó Pau 
    (joan maso at uab es) i Nuria Julià (n julia at creaf uab es)
    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
*/

IdProces=Math.random()*100000;
NIdProces=0;
var n_consultes_zero;
var n_consultes_digi_zero;
var n_capes_consultables;
var n_capes_digi_consultables;
var n_capes_ctipica=0;
var i_objdigi_consulta=-1;
var i_objdigi_anar_coord=-1;
var i_objdigi_edicio=-1;
var pop_down_no_esborra_cons=false;
var form_anar_coord;
var timeoutCreaVista=null;
var Accio=null;
var i_transaccio=0;
var transaccio=new Array();

function MostraEnllacWMS(finestra)
{
	showFinestraLayer(this, finestra);
}

function AmagaLayerMissatges()
{
		hideLayer(getLayer(this,"missatges"));
}

function AvaluaRespostaTransaccio(doc)
{
var root;
var elem;
var trans_actual;

	if(!doc) return;	
	root=doc.documentElement;
	
	if(!root) return;
	
	elem=DonamElementsNodeAPartirDelNomDelCamp(root, "http://www.opengis.net/wfs", "wfs", "totalInserted");
	if(elem==null) return ;

	if(parseInt(elem[0].childNodes[0].nodeValue)==1)
	{
		//Llegeix-ho la info, agafo l'identificador i faig un GetFeature d'aquest nou element
		elem=DonamElementsNodeAPartirDelNomDelCamp(root, "http://www.opengis.net/wfs", "wfs", "Feature");
		var i_trans=parseInt(elem[0].getAttribute('handle'));
		trans_actual=transaccio[i_trans];
		trans_actual.estat=estat_fi_exit;
		
		elem=DonamElementsNodeAPartirDelNomDelCamp(root, "http://www.opengis.net/ogc", "ogc", "FeatureId");
		var identificador=new Array();
		identificador.push(elem[0].getAttribute('fid'));		
		
		//Faig la petició GetFeature
		FesPeticioAjaxObjectesDigitalitzatsPerIdentificador(trans_actual.i_capa, identificador, false);		
		var mis=getLayer(trans_actual.win, "missatges");
		if(mis)
		{
			classLayer(mis, "mistrans");
			contentLayer(mis, "La transacció d'inserció \""+i_trans+ "\" de l'element \""+
						 	   identificador+"\" de la capa \""+CapaDigi[trans_actual.i_capa].nom+
							   "\" ha finalitzat amb èxit.") ;			
			showLayer(mis);
			setTimeout("AmagaLayerMissatges();",5000); 	
		}
		return;
	}
	else
	{
		
		elem=DonamElementsNodeAPartirDelNomDelCamp(root, "http://www.opengis.net/wfs", "wfs", "Action");
		var i_trans=parseInt(elem[0].getAttribute('locator'));
		trans_actual=transaccio[i_trans];
		trans_actual.estat=estat_fi_error;
		elem=DonamElementsNodeAPartirDelNomDelCamp(root, "http://www.opengis.net/wfs", "wfs", "Message");
		var mis=getLayer(trans_actual.win, "missatges");
		if(mis)
		{
			classLayer(mis, "mistrans");
			contentLayer(mis, "La transacció d'inserció \""+i_trans+ "\" d'un element de la capa \""+CapaDigi[trans_actual.i_capa].nom+
							   "\" NO ha estat finalitzat amb èxit."+((elem && elem[0].childNodes[0].nodeValue) ? ("\n"+elem[0].childNodes[0].nodeValue) : ""));			
			showLayer(mis);
			setTimeout("AmagaLayerMissatges();",5000); 	
		}
		return;
	}					 	
}//Fi de AvaluaRespostaTransaccio()

function OmpleBarraFinestraLayer(win,i_finestra)
{
var s="";
var cdns=new Array();
var nom=layerFinestraList[i_finestra].nom + "_barra";

	cdns.push("<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr><td class=\"titolfinestra\">",
			  DonaCadena(layerFinestraList[i_finestra].titol), "</td>");
	if(layerFinestraList[i_finestra].botons&boto_ajuda)
	   cdns.push("<td align=\"center\" valign=\"middle\" width=\"16px\"><img src=\"", 
				 (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
				 "boto_ajuda.gif\" alt=\"pop down\" onClick=\"AjudaFinestra_",
				 layerFinestraList[i_finestra].nom ,"();\"></td>");

	if(layerFinestraList[i_finestra].botons&boto_pop_down)
	   cdns.push("<td align=\"center\" valign=\"middle\" width=\"16px\"><img src=\"",
				 (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
				 "pop_down.gif\" alt=\"pop down\" onClick=\"PopDownFinestra_",
				 layerFinestraList[i_finestra].nom ,"();\"></td>");
	if(layerFinestraList[i_finestra].botons&boto_pop_up)
	   cdns.push("<td align=\"center\" valign=\"middle\" width=\"16px\"><img src=\"",
				 (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
				 "pop_up.gif\" alt=\"pop up\" onClick=\"PopUpFinestra_",
				 layerFinestraList[i_finestra].nom,"();\"></td>");
	if(layerFinestraList[i_finestra].botons&boto_tancar)
	   cdns.push("<td align=\"center\" valign=\"middle\" width=\"16px\"><img src=\"",
				 (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
				 "tanca_consulta.gif\" alt=\"",
				 DonaCadena3("tancar", "cerrar", "close") , "\" onClick=\"", 
				 (eval("window.TancaFinestra_"+layerFinestraList[i_finestra].nom+"==null") ? 
									"TancaFinestraLayer('"+layerFinestraList[i_finestra].nom+"');" : 
									"TancaFinestra_"+layerFinestraList[i_finestra].nom+"();"),"\"></td>");
	cdns.push("</tr></table>");
	s=cdns.join("");
	contentLayer(getLayer(win, nom), s);

}//Fi de OmpleBarraFinestraLayer()

function afegeixBotoABarraFinestraLayer(win, name, botons)
{
	var nom=name+"_barra";
	for(var i=0; i<layerFinestraList.length; i++)
	{
	    if(layerFinestraList[i].nom==name)
	    {
			layerFinestraList[i].botons|=botons;		
			//Omplo la layer barra amb els botons i el títol
			OmpleBarraFinestraLayer(win,i);
			return;
	    }
	}
}//Fi de afegeixBotoABarraFinestraLayer()

function DonaNomServidorCaracterFinal(s)
{
	if (s.charAt(s.length-1)=="?" || s.charAt(s.length-1)=="&")
		return s;
	if (s.indexOf("?")==-1)
		s+="?";
	else
		s+="&";
	return s;
}

function DonaNomServidorSenseCaracterFinal(s)
{
	if (s.charAt(s.length-1)=="?" || s.charAt(s.length-1)=="&")
		return s.substring(0,s.length-1);
	else
		return s;
}

function DonaAdrecaSenseBarraFinal(s)
{
	if (s.charAt(s.length-1)=="/" || s.charAt(s.length-1)=="\\")
		return s.substring(0,s.length-1);
	else
		return s;
}


function DonaVersioComAText(v)
{
    return v.Vers+"."+v.SubVers+"."+v.VariantVers;
}

function DonaVersioPerNameSpaceComAText(v)
{
    return v.Vers+"."+v.SubVers;
}

function floor_DJ(x)
{
var a=Math.floor(x);

	if (x-a>0.9999999999)
       	a+=1.0;
	return a;
}

function g_gms(graus_totals, zeros)
{
var cdns= new Array();
var graus_no_signe=Math.abs(graus_totals);
	
	if (graus_totals<0)
		cdns.push("-");
	var minuts=(graus_no_signe-floor_DJ(graus_no_signe))*60;
	var segons=(minuts-floor_DJ(minuts))*60;
	if (segons<0.00001)
		segons=0;
	if (zeros)
		cdns.push(floor_DJ(graus_no_signe),"° ",floor_DJ(minuts),"\' ",OKStrOfNe(segons,ParamCtrl.NDecimalsCoordXY),"\"");
	else
	{
		if (floor_DJ(graus_no_signe)!=0)
			cdns.push(floor_DJ(graus_no_signe),"° ");
		if (floor_DJ(minuts)!=0)
			cdns.push(floor_DJ(minuts),"\' ");
		if (segons!=0);
			cdns.push(OKStrOfNe(segons,ParamCtrl.NDecimalsCoordXY)+"\"");
	}
	return cdns.join("");
}//Fi de g_gms()

var FactorGrausARadiants=0.0174532925199432957692369076848   //M_PI/180
var FactorRadiantsAGraus=57.295779513082320876798154814105   //180/M_PI

function sign(x)
{
	if (x < 0.0)
		return -1;
	else
		return 1;
}

var darrerCRS="";

var offset_mapa_X;
var offset_mapa_Y;
var lambda_0;
var fi_0;
var fi_1;
var fi_2;
var c_tissot;

var radi_a;
var u_sobre_f;

var radi_b;
var e2;
var e4;
var e6;
var e8;
var ep2;
var M_PI_2;
var M_PI_4;

var e1;
var e1_sobre2;
var e1_sobre3;
var e1_sobre4;
var m0;
var e;
var m1;
var t1;
var m2;
var t2;
var n;
var F;
var t0;
var ro_0;
var ap;
var bp;

var A;
var B_sobre_2;
var C_sobre_4;
var D_sobre_6;

var _2_sobre_ap_bp;
var ap_1_menys_e2;
var _1_sobre_a2_b2;

var a_NUM_PI;
var a_factor_fi1;

var Ap;
var Bp;
var Cp;
var Dp;

var mapa_Y_max;

function LambertConformal_Funcio_14_15_Snyder(e2, fi)
{
var retorn;

	with(Math)
	{
		var sin_fi=sin(fi);
		retorn=(cos(fi)/sqrt(1.0-e2*sin_fi*sin_fi));
	}
	return retorn;
}

function LambertConformal_Funcio_15_9a_Snyder(e, fi)
{
var retorn;
	with(Math)
	{
		var sin_fi=sin(fi);
		if (sin_fi>-1.0+0.00001)
			retorn=sqrt(((1.0-sin_fi)/(1.0+sin_fi))*pow((1.0+e*sin_fi)/(1.0-e*sin_fi), e));
		else
			retorn=0;  //-MAXDOUBLE;
	}
	return retorn;
}

//Aquesta funció no cal cridar-la. La criden les de canvi de projecció directament si cal
function InicialitzaCRS(crs)
{
var crs_up=crs.toUpperCase();

  if (crs_up=="EPSG:32628")
  {
    offset_mapa_X=500000;
    offset_mapa_Y=0;    //hemisferi N
    lambda_0=-15*FactorGrausARadiants;  //fus 28
    fi_0=0*FactorGrausARadiants;
    c_tissot=0.9996;
  }
  else if (crs_up=="EPSG:23029" || crs_up=="EPSG:25829" || crs_up=="EPSG:32629")
  {
    offset_mapa_X=500000;
    offset_mapa_Y=0;    //hemisferi N
    lambda_0=-9*FactorGrausARadiants;  //fus 29
    fi_0=0*FactorGrausARadiants;
    c_tissot=0.9996;
  }
  else if (crs_up=="EPSG:23030" || crs_up=="EPSG:25830" || crs_up=="EPSG:32630")
  {
    offset_mapa_X=500000;
    offset_mapa_Y=0;    //hemisferi N
    lambda_0=-3*FactorGrausARadiants;  //fus 30
    fi_0=0*FactorGrausARadiants;
    c_tissot=0.9996;
  }
  else if (crs_up=="EPSG:23031" || crs_up=="EPSG:25831" || crs_up=="EPSG:32631")
  {
    offset_mapa_X=500000;
    offset_mapa_Y=0;    //hemisferi N
    lambda_0=3*FactorGrausARadiants;  //fus 31
    fi_0=0*FactorGrausARadiants;
    c_tissot=0.9996;
  }
  else if (crs_up=="EPSG:27573")
  {
    offset_mapa_X=600000;  //Zona III
    offset_mapa_Y=200000;
    lambda_0=2.33722917*FactorGrausARadiants;
    fi_0=44.10000000*FactorGrausARadiants;
    fi_1=43.19928759*FactorGrausARadiants;
    fi_2=44.99609747*FactorGrausARadiants;
  }
  else if (crs_up=="AUTO2:LCC,1,14.5,38,35,41")
  {
    offset_mapa_X=0;  
    offset_mapa_Y=0;
    lambda_0=14.5*FactorGrausARadiants;
    fi_0=38*FactorGrausARadiants;
    fi_1=35*FactorGrausARadiants;
    fi_2=41*FactorGrausARadiants;
  }
  else if (crs_up=="AUTO2:MERCATOR,1,0,41.42" || crs_up=="AUTO2:MERCATOR_WGS84,1,0,41.42")
  {
    offset_mapa_X=0;
    offset_mapa_Y=0;
    lambda_0=0.0;
    fi_1=41.416666666667*FactorGrausARadiants;
  }
  else if (crs_up=="AUTO2:MERCATOR,1,0,40.60")
  {
    offset_mapa_X=0;
    offset_mapa_Y=0;
    lambda_0=0.0;
    fi_1=40.60*FactorGrausARadiants;
  }
  else if (crs_up=="AUTO2:MERCATOR,1,0,0.0" || crs_up=="EPSG:3395" || crs_up=="EPSG:3785")
  {
    offset_mapa_X=0;
    offset_mapa_Y=0;
    lambda_0=0.0;
    fi_1=0*FactorGrausARadiants;
  }
  with(Math)
  {
    if (crs_up=="EPSG:23029" || crs_up=="EPSG:23030" || crs_up=="EPSG:23031")
    {
	radi_a=6378388.0;
    	u_sobre_f=297.0;
    }
    else
    {
	radi_a=6378137.0;
	u_sobre_f=298.257223563;
    }
    radi_b=((u_sobre_f)?((radi_a)-(radi_a)/(u_sobre_f)):radi_a);
    e2=(radi_a*radi_a - radi_b*radi_b)/(radi_a*radi_a);
    e4=e2*e2;
    e6=e4*e2;
    e8=e4*e4;
    ep2=e2/(1-e2);
    M_PI_2=Math.PI/2;

    e1=(1.0-sqrt(1.0-e2))/(1.0+sqrt(1.0-e2));
    e1_sobre2=e1*e1;
    e1_sobre3=e1_sobre2*e1;
    e1_sobre4=e1_sobre2*e1_sobre2;

    if (crs_up=="EPSG:32628" || crs_up=="EPSG:32629" || crs_up=="EPSG:32630" || crs_up=="EPSG:32631" || 
	crs_up=="EPSG:25829" || crs_up=="EPSG:25830" || crs_up=="EPSG:25831" || 
        crs_up=="EPSG:23029" || crs_up=="EPSG:23030" || crs_up=="EPSG:23031")
    {
        m0=radi_a*((1.0-e2/4.0-3.0*e4/64.0-5.0*e6/256.0)*(fi_0)-((3.0*e2/8.0+3.0*e4/32.0+45.0*e6/1024.0)*sin(2.0*fi_0)) +
    		(15.0*e4/256.0+45.0*e6/1024.0)*sin(4.0*fi_0)-((35.0*e6/3072.0)*sin(6.0*fi_0)));
	ap = radi_a*c_tissot;
	bp = radi_b*c_tissot;

	A = 1 + e2*3/4 + e2*e2*45/64 + pow(e2,3)*175/256 + pow(e2,4)*11025/16384 + pow(e2,5)*43659/65536;
	B_sobre_2 = (e2*3/4 + e2*e2*15/16 + pow(e2,3)*525/512 + pow(e2,4)*2205/2048 + pow(e2,5)*72765/65536) / 2;
	C_sobre_4 = (e2*e2*15/64 + pow(e2,3)*105/256 + pow(e2,4)*2205/4096 + pow(e2,5)*10395/16384) / 4;
	D_sobre_6 = (pow(e2,3)*35/512 + pow(e2,4)*315/2048 + pow(e2,5)*31185/131072) / 6;

	_2_sobre_ap_bp=2 / (ap+bp);
	ap_1_menys_e2=ap*(1-e2);
	_1_sobre_a2_b2=1 / (radi_a*radi_a+radi_b*radi_b);

	mapa_Y_max=(ap+bp)*Math.PI/4-1300;
    }
    else if (crs_up=="EPSG:27573" || crs_up=="AUTO2:LCC,1,14.5,38,35,41")
    {
	e=sqrt(e2);
        m1=LambertConformal_Funcio_14_15_Snyder(e2, fi_1);
        t1=LambertConformal_Funcio_15_9a_Snyder(e, fi_1);
        if (fi_1==fi_2)
            n=sin(fi_1);
        else
        {
            m2=LambertConformal_Funcio_14_15_Snyder(e2, fi_2);
            t2=LambertConformal_Funcio_15_9a_Snyder(e, fi_2);
            n=(log(m1)-log(m2))/(log(t1)-log(t2));
        }
        F=m1/(n*pow(t1,n));
        t0=LambertConformal_Funcio_15_9a_Snyder(e, fi_0);
        ro_0=radi_a*F*pow(t0, n);
    }
    else if (crs_up=="AUTO2:MERCATOR,1,0,41.42" || 
		crs_up=="AUTO2:MERCATOR_WGS84,1,0,41.42" || 
		crs_up=="AUTO2:MERCATOR,1,0,40.60" || 
		crs_up=="AUTO2:MERCATOR,1,0,0.0" ||
		crs_up=="EPSG:3395")
    {
	e=sqrt(e2);
        a_NUM_PI=radi_a*PI;
	M_PI_4=Math.PI/4;

        a_factor_fi1=radi_a*cos(fi_1)/sqrt((1-e2*sin(fi_1)*sin(fi_1)));

        var CC=7.0*e6/120.0+81.0*e8/1120.0;
        var DD=4279.0*e8/161280.0;
        Ap=(e2/2.0+5.0*e4/24.0+e6/12.0+13.0*e8/360.0) - CC;
        Bp=2.0*(7.0*e4/48.0+29.0*e6/240.0+811.0*e8/11520.0)-4.0*DD;
        Cp=4.0*CC;
        Dp=8.0*DD;
    }
    else if (crs_up=="EPSG:3785")
    {
        a_factor_fi1=radi_a*cos(fi_1);
    }
  }
}

var ll_x, ll_y;  //coordenades LongLat de sortida de les funcions de canvi de projecció.
var crs_x, crs_y;  //coordenades XY de sortida de les funcions de canvi de projecció.
var env_ll=new CreaExtent(0, 0, 0, 0);
var env_crs=new CreaExtent(0, 0, 0, 0);

function UTM_Geo(x,y)
{
    x-=offset_mapa_X;
    y-=offset_mapa_Y;

  with(Math)
  {
    var mu=(m0+y/c_tissot)/(radi_a*(1.0-e2/4.0-3.0*e4/64.0-5.0*e6/256.0));
    //fi1 és 'footpoint latitude o latitud del meridà central que té la mateixa y que el punt (lont, lat)
    var fi1=mu+(3.0*e1/2.0-27.0*e1_sobre3/32.0)*sin(2.0*mu)+(21.0*e1_sobre2/16.0-55.0*e1_sobre4/32.0)*sin(4.0*mu)+(151.0*e1_sobre3/96.0)*sin(6.0*mu)+(1097.0*e1_sobre4/512.0)*sin(8.0*mu);
    if (fi1<PI/2-0.00001 && fi1>-PI/2+0.00001)
    {
        var R1=radi_a*(1.0-e2)/pow(1.0-e2*sin(fi1)*sin(fi1), 1.5);
	var e2_sin2_lat=e2*sin(fi1)*sin(fi1);
	var N1;
	if (e2_sin2_lat+0.00001<1.0)
	    N1=radi_a/sqrt(1.0-e2_sin2_lat);
        else
    	    N1=radi_a;
	var D;
        if (N1-0.00001>0.0)
	    D=x/(N1*c_tissot);
        else
            D=x;

        var T1=tan(fi1)*tan(fi1);   //vigilar les singularitats de tan
        var C1=ep2*cos(fi1)*cos(fi1);

        ll_y=fi1-(N1*tan(fi1)/R1)*(D*D/2.0-((5.0+3.0*T1+10.0*C1-4.0*C1*C1-9.0*ep2)*D*D*D*D/24.0)+
        	(61.0+90.0*T1+298.0*C1+45.0*T1*T1-252.0*ep2-3.0*C1*C1)*D*D*D*D*D*D/720.0);

        ll_x=lambda_0+(D-(1.0+2*T1+C1)*D*D*D/6.0+(5.0-2.0*C1+28.0*T1-3.0*C1+8.0*ep2+24.0*T1*T1)*D*D*D*D*D/120.0)/cos(fi1);
    }
    else
    {
        ll_x=lambda_0;   //indeterminat però podem donar lambda_0
        if (x>0.0)
    		ll_y=PI/2;
        else
    		ll_y=-PI/2;
    }
  }
  ll_x*=FactorRadiantsAGraus;
  ll_y*=FactorRadiantsAGraus;
}

function Geo_UTM(ll_x,ll_y)
{
var N;
var I1, I2, I3, I4, I5;
var llr_x=ll_x*FactorGrausARadiants;
var llr_y=ll_y*FactorGrausARadiants;
var p=llr_x-lambda_0;
	if (llr_y<=-M_PI_2)
	{
		crs_x=offset_mapa_X;
		crs_y=-mapa_Y_max;
	}
	else if (llr_y>=M_PI_2)
	{
		crs_x=offset_mapa_X;
		crs_y=mapa_Y_max;
	}
	else
	{
	    with(Math)
            {
		N = ap / sqrt (1-e2*sin(llr_y)*sin(llr_y));

		I1 = ap_1_menys_e2*(A*llr_y-B_sobre_2*sin(2*llr_y) + C_sobre_4*sin(4*llr_y) - D_sobre_6*sin(6*llr_y));
		I2 = (N*pow(cos(llr_y),2)*tan(llr_y))/2;
		I3 = (N*pow(cos(llr_y),4)*tan(llr_y)*(5-pow(tan(llr_y),2) + 9*ep2*cos(llr_y)*cos(llr_y) + 4*ep2*ep2*pow(cos(llr_y),4)))/24;
		I4 = N*cos(llr_y);
		I5 = (N*pow(cos(llr_y),3)*(1 - pow(tan(llr_y),2) + ep2*pow(cos(llr_y), 2)))/6;

		crs_x = offset_mapa_X + p*I4 + p*p*p*I5;
		crs_y = I1+ p*p*I2+ p*p*p*p*I3;
            }
	}
	crs_y += offset_mapa_Y;
	return 0;
}


function LambertConicaConforme_Geo(x,y)
{
  x-=offset_mapa_X;
  y-=offset_mapa_Y;
  var ro0_mapaY=(ro_0 - y);
  with(Math)
  {
    var t=pow(sign(n)*sqrt(x*x+ro0_mapaY*ro0_mapaY)/(radi_a*F), 1.0/n);
    var psi=M_PI_2-2.0*atan(t);
    ll_x=atan2(x, ro0_mapaY)/n+lambda_0;
    ll_y=psi + (e2/2.0 + 5.0*e4/24.0 + e6/12.0 + 13.0*e8/360.0) * sin(2.0*psi) +
           ( 7.0*e4/48.0 + 29.0*e6/240.0 + 811.0*e8/11520.0) * sin(4.0*psi) +
           ( 7.0*e6/120.0 + 81.0*e8/1120.0) * sin(6.0*psi) +
	   (4279.0*e8/161280.0) *sin(8.0*psi);
  }
  ll_x*=FactorRadiantsAGraus;
  ll_y*=FactorRadiantsAGraus;
}

function Mercator_esferica_Geo(x,y)
{
  ll_x=lambda_0 + (x-offset_mapa_X)/a_factor_fi1;
  with(Math)
  {
	ll_y=atan(sinh((y-offset_mapa_Y)/a_factor_fi1));
  } 
  ll_x*=FactorRadiantsAGraus;
  ll_y*=FactorRadiantsAGraus;
}

function Geo_Mercator_esferica(ll_x,ll_y)
{
var llr_x=ll_x*FactorGrausARadiants;
var llr_y=ll_y*FactorGrausARadiants;

  crs_x=a_factor_fi1*(llr_x-lambda_0)+offset_mapa_X;

  with(Math)
  {
    var sin_lat=sin(llr-y);
    if (sin_lat>=0.999999)
    	crs_y=a_NUM_PI;
    else if (sin_lat<=-0.999999)
    	crs_y=-a_NUM_PI;
    else
	crs_y=a_factor_fi1/2*log((1+sin_lat)/(1-sin_lat))+offset_mapa_Y;

    if (crs_y>a_NUM_PI)
	crs_y=a*NUM_PI;
    else if (crs_y<-a*NUM_PI)
	crs_y=-a*NUM_PI;
  }    
}

function Mercator_Geo(x,y)
{
  ll_x=lambda_0 + (x-offset_mapa_X)/a_factor_fi1;
  with(Math)
  {
    var psi=M_PI_2-2.0*atan(exp(-(y-offset_mapa_Y)/a_factor_fi1));
    var cos_2_psi=cos(2.0*psi);
	ll_y=psi+sin(2.0*psi)*(Ap+cos_2_psi*(Bp+cos_2_psi*(Cp+Dp*cos_2_psi)));
  } 
  ll_x*=FactorRadiantsAGraus;
  ll_y*=FactorRadiantsAGraus;
}

function Geo_Mercator(ll_x,ll_y)
{
var llr_x=ll_x*FactorGrausARadiants;
var llr_y=ll_y*FactorGrausARadiants;

  crs_x=a_factor_fi1*(llr_x-lambda_0)+offset_mapa_X;
  with(Math)
  {
    var e_sin_lat=e*sin(llr_y);
    if (abs(llr_y-M_PI_2)<0.00001)
    	crs_y=a_NUM_PI;
    else if (llr_y+M_PI_2<0.00001)
	crs_y=a_NUM_PI;
    else if (abs(e_sin_lat+1.0)<0.00001)
    	crs_y=a_NUM_PI;
    else
    {
    	var r=tan(M_PI_4+ llr_y/2.0)*pow((1.0-e_sin_lat)/(1.0+e_sin_lat), (e/2.0));
        if (r<0.00001)
            crs_y=-a_NUM_PI;
        else
	{
            crs_y=a_factor_fi1*log(r)+offset_mapa_Y;
            if (crs_y>a_NUM_PI)
                crs_y=a_NUM_PI;
            else if (crs_y<-a_NUM_PI)
		crs_y=-a_NUM_PI;
    	}
    }
  }
}


var CantaNoImplemCoordLongLat=true;

function DonaCoordenadesLongLat(x,y,crs)
{
var crs_up;

    if (darrerCRS.toUpperCase()!=crs.toUpperCase())
    {
		InicialitzaCRS(crs);
		darrerCRS=crs;
    }
    crs_up=crs.toUpperCase();

    if (crs_up=="EPSG:32628" || crs_up=="EPSG:32629" || crs_up=="EPSG:32630" || crs_up=="EPSG:32631" || 
	crs_up=="EPSG:25829" || crs_up=="EPSG:25830" || crs_up=="EPSG:25831" || 
        crs_up=="EPSG:23029" || crs_up=="EPSG:23030" || crs_up=="EPSG:23031")
        UTM_Geo(x,y);
    else if (crs_up=="EPSG:27573" || crs_up=="AUTO2:LCC,1,14.5,38,35,41")
		LambertConicaConforme_Geo(x,y);
    else if (crs_up=="AUTO2:MERCATOR,1,0,41.42" || crs_up=="AUTO2:MERCATOR,1,0,40.60" || crs_up=="AUTO2:MERCATOR,1,0,0.0" ||
		     crs_up=="AUTO2:MERCATOR_WGS84,1,0,41.42" || crs_up=="EPSG:3395")
		Mercator_Geo(x,y);
    else if (crs_up=="EPSG:3785")
		Mercator_esferica_Geo(x,y);
    else if (crs_up=="EPSG:4326" || crs_up=="EPSG:4358" || crs_up=="CRS:84")
    {
		ll_x=x;
		ll_y=y;
    }
    else
    {
		if (CantaNoImplemCoordLongLat)
		{
			alert(DonaCadena3("Pas a longitud/latitud no implementat per aquest sistema de referència", 
				  "Paso a longitud/latitud no implementado para este sistema de referencia",
				  "Longitude/latitude conversion has not been implemented in this reference system")+" (CRS/SRS=" + crs +").");
			CantaNoImplemCoordLongLat=false;
		}
    }
}

function DonaCoordenadesCRS(ll_x,ll_y,crs)
{
var crs_up;

    if (darrerCRS.toUpperCase()!=crs.toUpperCase())
    {
		InicialitzaCRS(crs);
		darrerCRS=crs;
    }
    crs_up=crs.toUpperCase();
    if (crs_up=="EPSG:32628" || crs_up=="EPSG:32629" || crs_up=="EPSG:32630" || crs_up=="EPSG:32631" || 
		crs_up=="EPSG:25829" || crs_up=="EPSG:25830" || crs_up=="EPSG:25831" || 
        crs_up=="EPSG:23029" || crs_up=="EPSG:23030" || crs_up=="EPSG:23031")
        Geo_UTM(ll_x,ll_y);
    else if (crs_up=="EPSG:27573" || crs_up=="AUTO2:LCC,1,14.5,38,35,41")
	//Geo_LambertConicaConforme(ll_x,ll_y);
		alert(DonaCadena3("De moment no implementat per LCC", "De momento no implementado para LCC", "Not implemented yet for LCC"));
    else if (crs_up=="AUTO2:MERCATOR,1,0,41.42" || crs_up=="AUTO2:MERCATOR,1,0,40.60" || crs_up=="AUTO2:MERCATOR,1,0,0.0" ||
	     crs_up=="AUTO2:MERCATOR_WGS84,1,0,41.42" || crs_up=="EPSG:3395")
		Geo_Mercator(ll_x,ll_y);
    else if (crs_up=="EPSG:3785")
		Geo_Mercator_esferica(x,y);
    else if (crs_up=="EPSG:4326" || crs_up=="EPSG:4358" || crs_up=="CRS:84")
    {
		crs_x=ll_x;
		crs_y=ll_y;
    }
    else
		alert(DonaCadena3("Pas a coordenades mapa no implementat per aquest sistema de referència", 
			  "Paso a coordenades mapa no implementado para este sistema de referencia", 
			  "Map coordinates conversion has not been implemented in this reference system")+" (CRS/SRS=" + crs +").");
}

function DonaEnvolupantLongLat(env, crs)
{
var x,y;

    x=env.MinX;
    y=env.MinY;
    DonaCoordenadesLongLat(x,y,crs)
    env_ll.MinX=env_ll.MaxX=ll_x;
    env_ll.MinY=env_ll.MaxY=ll_y;

    x=env.MinX;
    y=env.MinY+(env.MaxY-env.MinY)/4;
    DonaCoordenadesLongLat(x,y,crs);
    if (env_ll.MinX>ll_x) env_ll.MinX=ll_x;
    else if (env_ll.MaxX<ll_x) env_ll.MaxX=ll_x;
    if (env_ll.MinY>ll_y) env_ll.MinY=ll_y;
    else if (env_ll.MaxY<ll_y) env_ll.MaxY=ll_y;

    x=env.MinX;
    y=env.MinY+(env.MaxY-env.MinY)/2;
    DonaCoordenadesLongLat(x,y,crs);
    if (env_ll.MinX>ll_x) env_ll.MinX=ll_x;
    else if (env_ll.MaxX<ll_x) env_ll.MaxX=ll_x;
    if (env_ll.MinY>ll_y) env_ll.MinY=ll_y;
    else if (env_ll.MaxY<ll_y) env_ll.MaxY=ll_y;

    x=env.MinX;
    y=env.MinY+(env.MaxY-env.MinY)*3/4;
    DonaCoordenadesLongLat(x,y,crs);
    if (env_ll.MinX>ll_x) env_ll.MinX=ll_x;
    else if (env_ll.MaxX<ll_x) env_ll.MaxX=ll_x;
    if (env_ll.MinY>ll_y) env_ll.MinY=ll_y;
    else if (env_ll.MaxY<ll_y) env_ll.MaxY=ll_y;

    x=env.MinX;
    y=env.MaxY;
    DonaCoordenadesLongLat(x,y,crs);
    if (env_ll.MinX>ll_x) env_ll.MinX=ll_x;
    else if (env_ll.MaxX<ll_x) env_ll.MaxX=ll_x;
    if (env_ll.MinY>ll_y) env_ll.MinY=ll_y;
    else if (env_ll.MaxY<ll_y) env_ll.MaxY=ll_y;

    x=env.MinX+(env.MaxX-env.MinX)/4;
    y=env.MaxY;
    DonaCoordenadesLongLat(x,y,crs);
    if (env_ll.MinX>ll_x) env_ll.MinX=ll_x;
    else if (env_ll.MaxX<ll_x) env_ll.MaxX=ll_x;
    if (env_ll.MinY>ll_y) env_ll.MinY=ll_y;
    else if (env_ll.MaxY<ll_y) env_ll.MaxY=ll_y;

    x=env.MinX+(env.MaxX-env.MinX)/2;
    y=env.MaxY;
    DonaCoordenadesLongLat(x,y,crs);
    if (env_ll.MinX>ll_x) env_ll.MinX=ll_x;
    else if (env_ll.MaxX<ll_x) env_ll.MaxX=ll_x;
    if (env_ll.MinY>ll_y) env_ll.MinY=ll_y;
    else if (env_ll.MaxY<ll_y) env_ll.MaxY=ll_y;

    x=env.MinX+(env.MaxX-env.MinX)*3/4;
    y=env.MaxY;
    DonaCoordenadesLongLat(x,y,crs);
    if (env_ll.MinX>ll_x) env_ll.MinX=ll_x;
    else if (env_ll.MaxX<ll_x) env_ll.MaxX=ll_x;
    if (env_ll.MinY>ll_y) env_ll.MinY=ll_y;
    else if (env_ll.MaxY<ll_y) env_ll.MaxY=ll_y;

    x=env.MaxX;
    y=env.MaxY;
    DonaCoordenadesLongLat(x,y,crs);
    if (env_ll.MinX>ll_x) env_ll.MinX=ll_x;
    else if (env_ll.MaxX<ll_x) env_ll.MaxX=ll_x;
    if (env_ll.MinY>ll_y) env_ll.MinY=ll_y;
    else if (env_ll.MaxY<ll_y) env_ll.MaxY=ll_y;

    x=env.MaxX;
    y=env.MinY+(env.MaxY-env.MinY)*3/4;
    DonaCoordenadesLongLat(x,y,crs);
    if (env_ll.MinX>ll_x) env_ll.MinX=ll_x;
    else if (env_ll.MaxX<ll_x) env_ll.MaxX=ll_x;
    if (env_ll.MinY>ll_y) env_ll.MinY=ll_y;
    else if (env_ll.MaxY<ll_y) env_ll.MaxY=ll_y;

    x=env.MaxX;
    y=env.MinY+(env.MaxY-env.MinY)/2;
    DonaCoordenadesLongLat(x,y,crs);
    if (env_ll.MinX>ll_x) env_ll.MinX=ll_x;
    else if (env_ll.MaxX<ll_x) env_ll.MaxX=ll_x;
    if (env_ll.MinY>ll_y) env_ll.MinY=ll_y;
    else if (env_ll.MaxY<ll_y) env_ll.MaxY=ll_y;

    x=env.MaxX;
    y=env.MinY+(env.MaxY-env.MinY)/4;
    DonaCoordenadesLongLat(x,y,crs);
    if (env_ll.MinX>ll_x) env_ll.MinX=ll_x;
    else if (env_ll.MaxX<ll_x) env_ll.MaxX=ll_x;
    if (env_ll.MinY>ll_y) env_ll.MinY=ll_y;
    else if (env_ll.MaxY<ll_y) env_ll.MaxY=ll_y;

    x=env.MaxX;
    y=env.MinY;
    DonaCoordenadesLongLat(x,y,crs);
    if (env_ll.MinX>ll_x) env_ll.MinX=ll_x;
    else if (env_ll.MaxX<ll_x) env_ll.MaxX=ll_x;
    if (env_ll.MinY>ll_y) env_ll.MinY=ll_y;
    else if (env_ll.MaxY<ll_y) env_ll.MaxY=ll_y;

    x=env.MinX+(env.MaxX-env.MinX)*3/4;
    y=env.MinY;
    DonaCoordenadesLongLat(x,y,crs);
    if (env_ll.MinX>ll_x) env_ll.MinX=ll_x;
    else if (env_ll.MaxX<ll_x) env_ll.MaxX=ll_x;
    if (env_ll.MinY>ll_y) env_ll.MinY=ll_y;
    else if (env_ll.MaxY<ll_y) env_ll.MaxY=ll_y;

    x=env.MinX+(env.MaxX-env.MinX)/2;
    y=env.MinY;
    DonaCoordenadesLongLat(x,y,crs);
    if (env_ll.MinX>ll_x) env_ll.MinX=ll_x;
    else if (env_ll.MaxX<ll_x) env_ll.MaxX=ll_x;
    if (env_ll.MinY>ll_y) env_ll.MinY=ll_y;
    else if (env_ll.MaxY<ll_y) env_ll.MaxY=ll_y;

    x=env.MinX+(env.MaxX-env.MinX)/4;
    y=env.MinY;
    DonaCoordenadesLongLat(x,y,crs);
    if (env_ll.MinX>ll_x) env_ll.MinX=ll_x;
    else if (env_ll.MaxX<ll_x) env_ll.MaxX=ll_x;
    if (env_ll.MinY>ll_y) env_ll.MinY=ll_y;
    else if (env_ll.MaxY<ll_y) env_ll.MaxY=ll_y;

    return 0;
}

function DonaEnvolupantCRS(env,crs)
{
var x,y;

    x=env.MinX;
    y=env.MinY;
    DonaCoordenadesCRS(x,y,crs);
    env_crs.MinX=env_crs.MaxX=crs_x;
    env_crs.MinY=env_crs.MaxY=crs_y;

    x=env.MinX;
    y=env.MinY+(env.MaxY-env.MinY)/4;
    DonaCoordenadesCRS(x,y,crs);
    if (env_crs.MinX>crs_x) env_crs.MinX=crs_x;
    else if (env_crs.MaxX<crs_x) env_crs.MaxX=crs_x;
    if (env_crs.MinY>crs_y) env_crs.MinY=crs_y;
    else if (env_crs.MaxY<crs_y) env_crs.MaxY=crs_y;

    x=env.MinX;
    y=env.MinY+(env.MaxY-env.MinY)/2;
    DonaCoordenadesCRS(x,y,crs);
    if (env_crs.MinX>crs_x) env_crs.MinX=crs_x;
    else if (env_crs.MaxX<crs_x) env_crs.MaxX=crs_x;
    if (env_crs.MinY>crs_y) env_crs.MinY=crs_y;
    else if (env_crs.MaxY<crs_y) env_crs.MaxY=crs_y;

    x=env.MinX;
    y=env.MinY+(env.MaxY-env.MinY)*3/4;
    DonaCoordenadesCRS(x,y,crs);
    if (env_crs.MinX>crs_x) env_crs.MinX=crs_x;
    else if (env_crs.MaxX<crs_x) env_crs.MaxX=crs_x;
    if (env_crs.MinY>crs_y) env_crs.MinY=crs_y;
    else if (env_crs.MaxY<crs_y) env_crs.MaxY=crs_y;

    x=env.MinX;
    y=env.MaxY;
    DonaCoordenadesCRS(x,y,crs);
    if (env_crs.MinX>crs_x) env_crs.MinX=crs_x;
    else if (env_crs.MaxX<crs_x) env_crs.MaxX=crs_x;
    if (env_crs.MinY>crs_y) env_crs.MinY=crs_y;
    else if (env_crs.MaxY<crs_y) env_crs.MaxY=crs_y;

    x=env.MinX+(env.MaxX-env.MinX)/4;
    y=env.MaxY;
    DonaCoordenadesCRS(x,y,crs);
    if (env_crs.MinX>crs_x) env_crs.MinX=crs_x;
    else if (env_crs.MaxX<crs_x) env_crs.MaxX=crs_x;
    if (env_crs.MinY>crs_y) env_crs.MinY=crs_y;
    else if (env_crs.MaxY<crs_y) env_crs.MaxY=crs_y;

    x=env.MinX+(env.MaxX-env.MinX)/2;
    y=env.MaxY;
    DonaCoordenadesCRS(x,y,crs);
    if (env_crs.MinX>crs_x) env_crs.MinX=crs_x;
    else if (env_crs.MaxX<crs_x) env_crs.MaxX=crs_x;
    if (env_crs.MinY>crs_y) env_crs.MinY=crs_y;
    else if (env_crs.MaxY<crs_y) env_crs.MaxY=crs_y;

    x=env.MinX+(env.MaxX-env.MinX)*3/4;
    y=env.MaxY;
    DonaCoordenadesCRS(x,y,crs);
    if (env_crs.MinX>crs_x) env_crs.MinX=crs_x;
    else if (env_crs.MaxX<crs_x) env_crs.MaxX=crs_x;
    if (env_crs.MinY>crs_y) env_crs.MinY=crs_y;
    else if (env_crs.MaxY<crs_y) env_crs.MaxY=crs_y;

    x=env.MaxX;
    y=env.MaxY;
    DonaCoordenadesCRS(x,y,crs);
    if (env_crs.MinX>crs_x) env_crs.MinX=crs_x;
    else if (env_crs.MaxX<crs_x) env_crs.MaxX=crs_x;
    if (env_crs.MinY>crs_y) env_crs.MinY=crs_y;
    else if (env_crs.MaxY<crs_y) env_crs.MaxY=crs_y;

    x=env.MaxX;
    y=env.MinY+(env.MaxY-env.MinY)*3/4;
    DonaCoordenadesCRS(x,y,crs);
    if (env_crs.MinX>crs_x) env_crs.MinX=crs_x;
    else if (env_crs.MaxX<crs_x) env_crs.MaxX=crs_x;
    if (env_crs.MinY>crs_y) env_crs.MinY=crs_y;
    else if (env_crs.MaxY<crs_y) env_crs.MaxY=crs_y;

    x=env.MaxX;
    y=env.MinY+(env.MaxY-env.MinY)/2;
    DonaCoordenadesCRS(x,y,crs);
    if (env_crs.MinX>crs_x) env_crs.MinX=crs_x;
    else if (env_crs.MaxX<crs_x) env_crs.MaxX=crs_x;
    if (env_crs.MinY>crs_y) env_crs.MinY=crs_y;
    else if (env_crs.MaxY<crs_y) env_crs.MaxY=crs_y;

    x=env.MaxX;
    y=env.MinY+(env.MaxY-env.MinY)/4;
    DonaCoordenadesCRS(x,y,crs);
    if (env_crs.MinX>crs_x) env_crs.MinX=crs_x;
    else if (env_crs.MaxX<crs_x) env_crs.MaxX=crs_x;
    if (env_crs.MinY>crs_y) env_crs.MinY=crs_y;
    else if (env_crs.MaxY<crs_y) env_crs.MaxY=crs_y;

    x=env.MaxX;
    y=env.MinY;
    DonaCoordenadesCRS(x,y,crs);
    if (env_crs.MinX>crs_x) env_crs.MinX=crs_x;
    else if (env_crs.MaxX<crs_x) env_crs.MaxX=crs_x;
    if (env_crs.MinY>crs_y) env_crs.MinY=crs_y;
    else if (env_crs.MaxY<crs_y) env_crs.MaxY=crs_y;

    x=env.MinX+(env.MaxX-env.MinX)*3/4;
    y=env.MinY;
    DonaCoordenadesCRS(x,y,crs);
    if (env_crs.MinX>crs_x) env_crs.MinX=crs_x;
    else if (env_crs.MaxX<crs_x) env_crs.MaxX=crs_x;
    if (env_crs.MinY>crs_y) env_crs.MinY=crs_y;
    else if (env_crs.MaxY<crs_y) env_crs.MaxY=crs_y;

    x=env.MinX+(env.MaxX-env.MinX)/2;
    y=env.MinY;
    DonaCoordenadesCRS(x,y,crs);
    if (env_crs.MinX>crs_x) env_crs.MinX=crs_x;
    else if (env_crs.MaxX<crs_x) env_crs.MaxX=crs_x;
    if (env_crs.MinY>crs_y) env_crs.MinY=crs_y;
    else if (env_crs.MaxY<crs_y) env_crs.MaxY=crs_y;

    x=env.MinX+(env.MaxX-env.MinX)/4;
    y=env.MinY;
    DonaCoordenadesCRS(x,y,crs);
    if (env_crs.MinX>crs_x) env_crs.MinX=crs_x;
    else if (env_crs.MaxX<crs_x) env_crs.MaxX=crs_x;
    if (env_crs.MinY>crs_y) env_crs.MinY=crs_y;
    else if (env_crs.MaxY<crs_y) env_crs.MaxY=crs_y;

    return 0;
}


function DonaUnitatsCoordenadesProj(crs)
{
var crs_up=crs.toUpperCase();

    if (crs_up=="EPSG:32628" || crs_up=="EPSG:32629" || crs_up=="EPSG:32630" || crs_up=="EPSG:32631" || 
		crs_up=="EPSG:25829" || crs_up=="EPSG:25830" || crs_up=="EPSG:25831" || 
        crs_up=="EPSG:23029" || crs_up=="EPSG:23030" || crs_up=="EPSG:23031" ||
		crs_up=="EPSG:27573" || crs_up=="AUTO2:LCC,1,14.5,38,35,41" || crs_up=="AUTO2:MERCATOR,1,0,41.42" || 
		crs_up=="AUTO2:MERCATOR,1,0,40.60" || crs_up=="AUTO2:MERCATOR,1,0,0.0" ||
		crs_up=="AUTO2:MERCATOR_WGS84,1,0,41.42" || crs_up=="EPSG:3395" || crs_up=="EPSG:3785")
        return "m";
    else if (crs_up=="EPSG:4326" || crs_up=="EPSG:4358" || crs_up=="CRS:84")
		return "°";
    else
		return "m?";
}

function DonaDescripcioCRS(crs)
{
var crs_up=crs.toUpperCase();
    if (crs_up=="EPSG:32628")
		return "UTM28N - WGS84";
    else if (crs_up=="EPSG:32629")
		return "UTM29N - WGS84";
    else if (crs_up=="EPSG:32630")
		return "UTM30N - WGS84";
    else if (crs_up=="EPSG:32631")
		return "UTM31N - WGS84";
    else if (crs_up=="EPSG:25829")
		return "UTM29N - ETRS89";
    else if (crs_up=="EPSG:25830")
		return "UTM30N - ETRS89";
    else if (crs_up=="EPSG:25831")
		return "UTM31N - ETRS89";
    else if (crs_up=="EPSG:23029")
		return "UTM29N - ED50";
    else if (crs_up=="EPSG:23030")
		return "UTM30N - ED50";
    else if (crs_up=="EPSG:23031")
		return "UTM31N - ED50";
    else if (crs_up=="EPSG:27573")
		return DonaCadena3("Lambert Cònica Conforme Zona III - NTF", "Lambert Cónica Conforme Zona III - NTF", "Lambert Conformal Conic Zone III - NTF");
    else if (crs_up=="AUTO2:LCC,1,14.5,38,35,41")
		return DonaCadena3("Lambert Cònica Conforme ICC Regió Mediterrània", "Lambert Cónica Conforme ICC Región Mediterránea", "Lambert Conformal Conic ICC Mediterranian Region");
    else if (crs_up=="AUTO2:MERCATOR,1,0,41.42")
		return DonaCadena3("Mercator paral·lel 41° 25\' - ED50", "Mercator paralelo 41°25\' - ED50", "Mercator parallel 41°25\' - ED50");
    else if (crs_up=="AUTO2:MERCATOR_WGS84,1,0,41.42")
		return DonaCadena3("Mercator paral·lel 41° 25\' - WGS84", "Mercator paralelo 41°25\' - WGS84", "Mercator parallel 41°25\' - WGS84");
    else if (crs_up=="AUTO2:MERCATOR,1,0,40.60")
		return DonaCadena3("Mercator paral·lel 40° 36\' - ED50", "Mercator paralelo 40°36\' - ED50", "Mercator parallel 40°36\' - ED50");
    else if (crs_up=="AUTO2:MERCATOR,1,0,0.0")
		return DonaCadena3("Mercator paral·lel Equador - ED50", "Mercator paralelo Ecuador - ED50", "Mercator parallel Equator - ED50");
    else if (crs_up=="EPSG:3395")
		return DonaCadena3("Mercator paral·lel Equador - WGS84", "Mercator paralelo Ecuador - WGS84", "Mercator parallel Equator - WGS84");
    else if (crs_up=="EPSG:3785")
		return DonaCadena3("Web Mercator", "Web Mercator", "Web Mercator");
    else if (crs_up=="EPSG:4326" || crs_up=="CRS:84")
		return "long/lat - WGS84";
    else if (crs_up=="EPSG:4358")
		return "long/lat - ETRS89";
    else
		return "";
}

var ParamInternCtrl=new CreaParametresInternsDeControl(new CreaExtent(424335.0, 426505.0, 4596435.0, 4597925.0),
				new Array(),
				new Array(),
				99,
				99,
				99,
				99,
				ParamCtrl.ISituacioOri,
				ParamCtrl.NivellZoomCostat,
				new Array(new CreaZoomPrevi(1, new CreaPunt2D(0,0), 0), new CreaZoomPrevi(1, new CreaPunt2D(0,0), 0),
				          new CreaZoomPrevi(1, new CreaPunt2D(0,0), 0), new CreaZoomPrevi(1, new CreaPunt2D(0,0), 0),
				          new CreaZoomPrevi(1, new CreaPunt2D(0,0), 0), new CreaZoomPrevi(1, new CreaPunt2D(0,0), 0),
				          new CreaZoomPrevi(1, new CreaPunt2D(0,0), 0), new CreaZoomPrevi(1, new CreaPunt2D(0,0), 0),
				          new CreaZoomPrevi(1, new CreaPunt2D(0,0), 0), new CreaZoomPrevi(1, new CreaPunt2D(0,0), 0)),
				0, //10 zooms previs, 0 usats
				ParamCtrl.PuntOri,
				new Array(),
				0);

var plantilla_dimpressio_intern=new Array();
function AcabaDeCrearParamInternCtrl()
{
    for (var i=0; i<ParamCtrl.ImatgeSituacio.length; i++)
    {
		//Calcul de la envolupant el·lipsoidal
		DonaEnvolupantLongLat(ParamCtrl.ImatgeSituacio[i].EnvTotal.EnvCRS, ParamCtrl.ImatgeSituacio[i].EnvTotal.CRS);
		ParamInternCtrl.EnvLLSituacio[i]=new CreaExtent(env_ll.MinX,env_ll.MaxX,env_ll.MinY,env_ll.MaxY);
    }
    for (var i=0; i<capa.length; i++)
    {
		//Càlcul de la envolupant el·lipsoidal
		if (capa[i].EnvTotal && capa[i].EnvTotal.EnvCRS)
		{
			DonaEnvolupantLongLat(capa[i].EnvTotal.EnvCRS, capa[i].EnvTotal.CRS);
			ParamInternCtrl.EnvLLCapa[i]=new CreaExtent(env_ll.MinX, env_ll.MaxX, env_ll.MinY, env_ll.MaxY);
		}
		else
			ParamInternCtrl.EnvLLCapa[i]=null;
	}

	for (var i=0; i<capa.length; i++)
	{
		if (capa[i].tipus==TipusWMS_C || capa[i].tipus==TipusWMTS_REST || capa[i].tipus==TipusWMTS_KVP || 
			capa[i].tipus==TipusWMTS_SOAP || capa[i].tipus==TipusGoogle_KVP)
		{
			ParamInternCtrl.Vista[i]=new CreaParametresVistaCapaTiled(null, 0, 0, 0, 0, 0, 0);
		}
	}

	if (ParamCtrl.flags&canvi_proj_auto)
		ParamInternCtrl.flags|=ara_canvi_proj_auto;

    for (var i=0; i<plantilla_dimpressio.length; i++)
    {
		plantilla_dimpressio_intern[plantilla_dimpressio_intern.length]=new CreaPlantillaDImpressioIntern(
					CalImprimirTitol|CalImprimirVista|CalImprimirSituacio|CalImprimirLlegenda|CalImprimirEscala,
					new CreaRectangle(0,0,0,0),
					new CreaRectangle(0,0,0,0),
					new CreaRectangle(0,0,0,0),
					new CreaRectangle(0,0,0,0),
					new CreaRectangle(0,0,0,0),
					new Array());
    }

}//Fi de AcabaDeCrearParamInternCtrl()

AcabaDeCrearParamInternCtrl();

//////////////////////////////////////////////////////////////////////////
/* funcions per a gestió de llistes */
var LlistaCadenes=new Array();
var LlistaSenzilla=new Array();
var ILlistaDeICellaLlista=new Array();
var NCellaLlista=new Array();
var ICellaLlistaBlau=new Array();
var NomEditLlavorLlista=new Array();
var NomLayerLlista=new Array();
var CTipicaCapa=new Array();

//var WindowDelEvent=parent.ctipica;

function SeleccionaEditLlavor(llavor)
{
var i_llista;
	for (i_llista=0; i_llista<NomEditLlavorLlista.length; i_llista++)
	{
		if (llavor.name==NomEditLlavorLlista[i_llista])
		    break;
	}
	if (i_llista==NomEditLlavorLlista.length)
		return;
	if (NCellaLlista[i_llista]<=1)
		llavor.select();
}

function TeclaLLavor(e)
{
//Segons codi a: http://www.ryancooper.com/resources/keycode.asp
var keycode=0;
var a, i;
var llavor;
var i_llista;

	if (this.document.getElementById)
	{
	    if (this.event)
	    {
			keycode = this.event.keyCode;
			llavor = this.event.srcElement;
        }
	    else if (e) 
	    {
			keycode = e.which;
			llavor=e.target;
	    }
	    if (llavor.nodeType == 3) // defeat Safari bug
			llavor = llavor.parentNode;
	    for (i_llista=0; i_llista<NomEditLlavorLlista.length; i_llista++)
	    {
			if (llavor.name==NomEditLlavorLlista[i_llista])
			    break;
	    }
	    if (i_llista==NomEditLlavorLlista.length)
			return;
	    if (ActualitzaLlistaMinimitzaVisu==false || NCellaLlista[i_llista]>1)
	    {
			if (keycode==37 ||  //fletxa esquerra
			    keycode==39 ||  //fletxa dreta
			    keycode==16)    //Mayuscules
				;
			else if (keycode==40)  //fletxa avall
			{
				if (ICellaLlistaBlau[i_llista]!=-1)
				{
					if (ICellaLlistaBlau[i_llista]>=NCellaLlista[i_llista]-1)
						i=0;
					else
						i=ICellaLlistaBlau[i_llista]+1;
				}
				else
					i=0;
				a=this.document.getElementById("CellaLlista_"+i_llista+"_"+i);
				EscriuLlavor(llavor, i_llista, a, i);
				vScrollLayer(getLayer(this, NomLayerLlista[i_llista]), i, NCellaLlista[i_llista]);
			}
			else if (keycode==38)  //fletxa amunt
			{
				if (ICellaLlistaBlau[i_llista]!=-1)
				{
					if (ICellaLlistaBlau[i_llista]==0)
						i=NCellaLlista[i_llista]-1;
					else
						i=ICellaLlistaBlau[i_llista]-1;
				}
				else
					i=NCellaLlista[i_llista]-1;
				a=this.document.getElementById("CellaLlista_"+i_llista+"_"+i);
				EscriuLlavor(llavor, i_llista, a, i);
				vScrollLayer(getLayer(this, NomLayerLlista[i_llista]), i, NCellaLlista[i_llista]);
			}
			else 
			{
				if (ICellaLlistaBlau[i_llista]!=-1)
				{
					//a_previ=this.document.getElementById("CellaLlista_"+i_llista+"_"+ICellaLlistaBlau[i_llista]);
					ICellaLlistaBlau[i_llista]=-1;
					//CellaATransparent(a_previ);
				}
				ActualitzaLlista(llavor, i_llista, keycode);
			}
	    }
	    else
	    {
			if (DonaCadenaSenseEspaisDavantDarrera(llavor.value)=="" && keycode==40)
				ActualitzaLlista(llavor, i_llista, keycode);
			else if (keycode==37 ||  //fletxa esquerra
			    	keycode==39 ||  //fletxa dreta
				    keycode==40 ||  //fletxa avall
		    		keycode==38 ||  //fletxa amunt
				    keycode==16) 
					;
			else
				ActualitzaLlista(llavor, i_llista, keycode);
	    }
	}
	else
		ICellaLlistaBlau[i_llista]=-1;
}

function EscriuLlavorIActualitza(nom, i_llista, i)
{
	var llavor=this.document.getElementsByName(nom)[0];
	llavor.value=LlistaCadenes[i_llista][ILlistaDeICellaLlista[i_llista][i]];
	llavor.focus();
	ActualitzaLlista(llavor, i_llista, 0);
}

function EscriuLlavor(llavor, i_llista, a, i)
{
	CellaABlau(a, i_llista, i)
	llavor.value=LlistaCadenes[i_llista][ILlistaDeICellaLlista[i_llista][i]];
	llavor.focus();
}

function CellaATransparent(a)
{
	a.className='CellaTransparent';
}

function CellaABlau(a, i_llista, i)
{
	if (ICellaLlistaBlau[i_llista]!=-1)
	{
		var a_previ;
		a_previ=this.document.getElementById("CellaLlista_"+i_llista+"_"+ICellaLlistaBlau[i_llista]);
		CellaATransparent(a_previ);
	}
	a.className='CellaBlava';
	ICellaLlistaBlau[i_llista]=i;
}

function DonaCadenaSenseEspaisDavantDarrera(llavor)
{
var llav="";
	llav=llavor;
	while (llav.substring(0,1)==" ")
		llav=llav.substring(1,llav.length);
	while (llav.substring(llav.length-1, llav.length)==" ")
		llav=llav.substring(0,llav.length-1);
	return llav;
}

var ActualitzaLlistaMinimitzaVisu=true;  //Minimitza el nombre de vegades que es mostra la llista.

function ActualitzaLlistaTimeOut(i_llista, keycode)
{
var s="";
var llavor;
var llav="";
var k, i;
var cdns=new Array();
var elem;

	llavor=eval("this.document.ctipica"+i_llista+"."+NomEditLlavorLlista[i_llista]);

	llav=DonaCadenaSenseEspaisDavantDarrera(llavor.value);
	ICellaLlistaBlau[i_llista]=-1;
	elem=getLayer(this, NomLayerLlista[i_llista]);
	if (llav=="")
	{
		if (ActualitzaLlistaMinimitzaVisu && keycode!=40)  //fletxa avall
		{
			cdns.push("<table class=\"TaulaAmbVora\" CELLSPACING=0 CELLPADDING=0></table>");
			NCellaLlista[i_llista]=0;
			hideLayer(elem);
		}
		else
		{
			cdns.push("<table class=\"TaulaAmbVora\" CELLSPACING=0 CELLPADDING=0>");
			for (i=0,NCellaLlista[i_llista]=0; i<LlistaCadenes[i_llista].length; i++,NCellaLlista[i_llista]++)
			{
				ILlistaDeICellaLlista[i_llista][NCellaLlista[i_llista]]=i;
				cdns.push("<tr><td id=\"CellaLlista_",i_llista,"_",NCellaLlista[i_llista],
					"\" onClick=\'EscriuLlavorIActualitza(\"",
					llavor.name,"\", ",i_llista,", ",NCellaLlista[i_llista],
					");\' onMouseOver=\"CellaABlau(this,",i_llista,", ",
					NCellaLlista[i_llista],");\" onMouseOut=\"CellaATransparent(this)\">",
					LlistaCadenes[i_llista][i],"</td></tr>");
			}
			cdns.push("</table>");
			showLayer(elem);
		}
	}
	else
	{
		cdns.push("<table class=\"TaulaAmbVora\" cellspacing=0 cellpadding=0>");
		NCellaLlista[i_llista]=0;
		for (i=0; i<LlistaCadenes[i_llista].length; i++)
		{
			k=LlistaCadenes[i_llista][i].toLowerCase().indexOf(llav.toLowerCase());
			if (k==0)
			{
				ILlistaDeICellaLlista[i_llista][NCellaLlista[i_llista]]=i;
				cdns.push("<tr><td id=\"CellaLlista_",i_llista,"_",NCellaLlista[i_llista],
					"\" onClick=\'EscriuLlavorIActualitza(\"",
					llavor.name,"\", ",i_llista,", ",NCellaLlista[i_llista],
					");\' onMouseOver=\"CellaABlau(this,",i_llista,", ",
					NCellaLlista[i_llista],");\" onMouseOut=\"CellaATransparent(this)\"><b>",
					(LlistaCadenes[i_llista][i].substring(0,llav.length)),"</b>",
					(LlistaCadenes[i_llista][i].substring(llav.length,LlistaCadenes[i_llista][i].length)),"<br></td></tr>");
				NCellaLlista[i_llista]++;
			}
		}
		for (i=0; i<LlistaCadenes[i_llista].length; i++)
		{
			k=LlistaCadenes[i_llista][i].toLowerCase().indexOf(llav.toLowerCase());
			if (k>0 && (LlistaCadenes[i_llista][i].substring(k-1,k)==" " || LlistaCadenes[i_llista][i].substring(k-1,k)=="\'") &&
				(k+llav.length==LlistaCadenes[i_llista][i].length || LlistaCadenes[i_llista][i].substring(k+llav.length,k+llav.length+1)==" " || 
				LlistaCadenes[i_llista][i].substring(k+llav.length,k+llav.length+1)=="\'"))
			{
				ILlistaDeICellaLlista[i_llista][NCellaLlista[i_llista]]=i;
				cdns.push("<tr><td id=\"CellaLlista_",i_llista,"_",NCellaLlista[i_llista],
					"\" onClick=\'EscriuLlavorIActualitza(\"",
					llavor.name,"\", ",i_llista,", ",NCellaLlista[i_llista],
					");\' onMouseOver=\"CellaABlau(this,",i_llista,", ",
					NCellaLlista[i_llista],");\" onMouseOut=\"CellaATransparent(this)\">",
					(LlistaCadenes[i_llista][i].substring(0,k)),"<b>",
					(LlistaCadenes[i_llista][i].substring(k,k+llav.length)),"</b>",
					(LlistaCadenes[i_llista][i].substring(k+llav.length,LlistaCadenes[i_llista][i].length)),
					"<br></td></tr>");
				NCellaLlista[i_llista]++;
			}
		}
		for (i=0; i<LlistaCadenes[i_llista].length; i++)
		{
			k=LlistaCadenes[i_llista][i].toLowerCase().indexOf(llav.toLowerCase());
			if (k>0 && (LlistaCadenes[i_llista][i].substring(k-1,k)==" " || LlistaCadenes[i_llista][i].substring(k-1,k)=="\'") &&
				k+llav.length!=LlistaCadenes[i_llista][i].length && LlistaCadenes[i_llista][i].substring(k+llav.length,k+llav.length+1)!=" " && 
				LlistaCadenes[i_llista][i].substring(k+llav.length,k+llav.length+1)!="\'")
			{
				ILlistaDeICellaLlista[i_llista][NCellaLlista[i_llista]]=i;
				cdns.push("<tr><td id=\"CellaLlista_",i_llista,"_",NCellaLlista[i_llista],"\" onClick=\'EscriuLlavorIActualitza(\"",
					llavor.name+"\", ",i_llista,", ",NCellaLlista[i_llista],");\' onMouseOver=\"CellaABlau(this,",i_llista,", ",
					NCellaLlista[i_llista],");\" onMouseOut=\"CellaATransparent(this)\">",(LlistaCadenes[i_llista][i].substring(0,k)),"<b>",
					(LlistaCadenes[i_llista][i].substring(k,k+llav.length)),"</b>",
					(LlistaCadenes[i_llista][i].substring(k+llav.length,LlistaCadenes[i_llista][i].length)),"<br></td></tr>");
				NCellaLlista[i_llista]++;
			}
		}
		for (i=0; i<LlistaCadenes[i_llista].length; i++)
		{
			k=LlistaCadenes[i_llista][i].toLowerCase().indexOf(llav.toLowerCase());
			if (k>0 && LlistaCadenes[i_llista][i].substring(k-1,k)!=" " && LlistaCadenes[i_llista][i].substring(k-1,k)!="\'")
			{
				ILlistaDeICellaLlista[i_llista][NCellaLlista[i_llista]]=i;
				cdns.push("<tr><td id=\"CellaLlista_",i_llista,"_",NCellaLlista[i_llista],"\" onClick=\'EscriuLlavorIActualitza(\"",
					llavor.name,"\", ",i_llista,", ",NCellaLlista[i_llista],");\' onMouseOver=\"CellaABlau(this,",i_llista,", ",
					NCellaLlista[i_llista],");\" onMouseOut=\"CellaATransparent(this)\">",(LlistaCadenes[i_llista][i].substring(0,k)),"<b>",
					(LlistaCadenes[i_llista][i].substring(k,k+llav.length)),"</b>",
					(LlistaCadenes[i_llista][i].substring(k+llav.length,LlistaCadenes[i_llista][i].length)),"<br></td></tr>");
				NCellaLlista[i_llista]++;
			}
		}

		var llav_senzilla=DonaCadenaSenzilla(llav);
		for (i=0; i<LlistaCadenes[i_llista].length; i++)
		{
			k=LlistaSenzilla[i_llista][i].indexOf(llav_senzilla);
			if (k==0 && 
				LlistaCadenes[i_llista][i].toLowerCase().indexOf(llav.toLowerCase())!=0)
			{
				ILlistaDeICellaLlista[i_llista][NCellaLlista[i_llista]]=i;
				cdns.push("<tr><td id=\"CellaLlista_",i_llista,"_",NCellaLlista[i_llista],"\" onClick=\'EscriuLlavorIActualitza(\"",
					llavor.name,"\", ",i_llista,", ",NCellaLlista[i_llista],");\' onMouseOver=\"CellaABlau(this,",i_llista,", ",
					NCellaLlista[i_llista],");\" onMouseOut=\"CellaATransparent(this)\"><b>",
					(LlistaCadenes[i_llista][i].substring(0,llav.length)),"</b>",
					(LlistaCadenes[i_llista][i].substring(llav.length,LlistaCadenes[i_llista][i].length)),"<br></td></tr>");
				NCellaLlista[i_llista]++;
			}
		}
		for (i=0; i<LlistaCadenes[i_llista].length; i++)
		{
			k=LlistaSenzilla[i_llista][i].indexOf(llav_senzilla);
			if (k>0 && LlistaCadenes[i_llista][i].toLowerCase().indexOf(llav.toLowerCase())<1 && 
				(LlistaCadenes[i_llista][i].substring(k-1,k)==" " || LlistaCadenes[i_llista][i].substring(k-1,k)=="\'") &&
				(k+llav.length==LlistaCadenes[i_llista][i].length || LlistaCadenes[i_llista][i].substring(k+llav.length,k+llav.length+1)==" " || 
				LlistaCadenes[i_llista][i].substring(k+llav.length,k+llav.length+1)=="\'") &&
				LlistaSenzilla[i_llista][i].substring(k,k+llav_senzilla.length)!=LlistaCadenes[i_llista][i].toLowerCase().substring(k,k+llav_senzilla.length))
			{
				ILlistaDeICellaLlista[i_llista][NCellaLlista[i_llista]]=i;
				cdns.push("<tr><td id=\"CellaLlista_",i_llista,"_",NCellaLlista[i_llista],"\" onClick=\'EscriuLlavorIActualitza(\"",
					llavor.name,"\", ",i_llista,", ",NCellaLlista[i_llista],");\' onMouseOver=\"CellaABlau(this,",i_llista,", ",
					NCellaLlista[i_llista],");\" onMouseOut=\"CellaATransparent(this)\">",(LlistaCadenes[i_llista][i].substring(0,k)),"<b>",
					(LlistaCadenes[i_llista][i].substring(k,k+llav.length)),"</b>",				
					(LlistaCadenes[i_llista][i].substring(k+llav.length,LlistaCadenes[i_llista][i].length)),"<br></td></tr>");
				NCellaLlista[i_llista]++;
			}
		}
		for (i=0; i<LlistaCadenes[i_llista].length; i++)
		{
			k=LlistaSenzilla[i_llista][i].indexOf(llav_senzilla);
			if (k>0 && LlistaCadenes[i_llista][i].toLowerCase().indexOf(llav.toLowerCase())<1 &&
				(LlistaCadenes[i_llista][i].substring(k-1,k)==" " || LlistaCadenes[i_llista][i].substring(k-1,k)=="\'") &&
				k+llav.length!=LlistaCadenes[i_llista][i].length && LlistaCadenes[i_llista][i].substring(k+llav.length,k+llav.length+1)!=" " && 
				LlistaCadenes[i_llista][i].substring(k+llav.length,k+llav.length+1)!="\'" &&
				LlistaSenzilla[i_llista][i].substring(k,k+llav_senzilla.length)!=LlistaCadenes[i_llista][i].toLowerCase().substring(k,k+llav_senzilla.length))
			{
				ILlistaDeICellaLlista[i_llista][NCellaLlista[i_llista]]=i;
				cdns.push("<tr><td id=\"CellaLlista_",i_llista,"_",NCellaLlista[i_llista],"\" onClick=\'EscriuLlavorIActualitza(\"",
					llavor.name,"\", ",i_llista,", ",NCellaLlista[i_llista],");\' onMouseOver=\"CellaABlau(this,",i_llista,", ",
					NCellaLlista[i_llista],");\" onMouseOut=\"CellaATransparent(this)\">",(LlistaCadenes[i_llista][i].substring(0,k)),"<b>",
					(LlistaCadenes[i_llista][i].substring(k,k+llav.length)),"</b>",
					(LlistaCadenes[i_llista][i].substring(k+llav.length,LlistaCadenes[i_llista][i].length)),"<br></td></tr>");
				NCellaLlista[i_llista]++;
			}
		}
		for (i=0; i<LlistaCadenes[i_llista].length; i++)
		{
			k=LlistaSenzilla[i_llista][i].indexOf(llav_senzilla);
			if (k>0 && LlistaCadenes[i_llista][i].toLowerCase().indexOf(llav.toLowerCase())<1 &&
				LlistaCadenes[i_llista][i].substring(k-1,k)!=" " && LlistaCadenes[i_llista][i].substring(k-1,k)!="\'" &&
				LlistaSenzilla[i_llista][i].substring(k,k+llav_senzilla.length)!=LlistaCadenes[i_llista][i].toLowerCase().substring(k,k+llav_senzilla.length))
			{
				ILlistaDeICellaLlista[i_llista][NCellaLlista[i_llista]]=i;
				cdns.push("<tr><td id=\"CellaLlista_",i_llista,"_",NCellaLlista[i_llista],"\" onClick=\'EscriuLlavorIActualitza(\"",
					llavor.name,"\", ",i_llista,", ",NCellaLlista[i_llista],");\' onMouseOver=\"CellaABlau(this,",i_llista,", ",
					NCellaLlista[i_llista],");\" onMouseOut=\"CellaATransparent(this)\">",(LlistaCadenes[i_llista][i].substring(0,k)),"<b>",
					(LlistaCadenes[i_llista][i].substring(k,k+llav.length)),"</b>",
					(LlistaCadenes[i_llista][i].substring(k+llav.length,LlistaCadenes[i_llista][i].length)),"<br></td></tr>");
				NCellaLlista[i_llista]++;
			}
		}
		if (ActualitzaLlistaMinimitzaVisu)
		{
			if (keycode==8 ||  //backspace
			    keycode==46)   //Suprimir
				showLayer(elem);
			else if (NCellaLlista[i_llista]==1)
			{
				llavor.value=LlistaCadenes[i_llista][ILlistaDeICellaLlista[i_llista][0]];
				hideLayer(elem);
				PortamAAmbitConsultaTipicaCercador(i_llista, ILlistaDeICellaLlista[i_llista][0]);
			}
			else if (NCellaLlista[i_llista]==0)
			{
				cdns.push("<tr><td>--",(DonaCadena3("Cap coincidència", "Ninguna coincidencia", "Any match")),"--</td></tr>");
				showLayer(elem);
			}
			else
				showLayer(elem);
		}
		cdns.push("</table>");
	}
	s=cdns.join("");
	contentLayer(elem, s); 
}//Fi de ActualitzaLlistaTimeOut()

var timeoutActualitzaLLista=null;

//Aquesta funció necessita WindowsDelEvent ple
function ActualitzaLlista(llavor, i_llista, keycode)
{
var s="";
var elem;

	if (timeoutActualitzaLLista)
	{
		clearTimeout(timeoutActualitzaLLista);
		timeoutActualitzaLLista=null;
	}
	elem=getLayer(this, NomLayerLlista[i_llista]);
	s+="<table class=\"TaulaAmbVora\" CELLSPACING=0 CELLPADDING=0><tr><td>"+
	   DonaCadena3("Actualitzant la llista, espereu", "Actualizando la lista, espere", "Updating the list, please wait")+
	   "...</td></tr></table>";
	contentLayer(elem, s);
	showLayer(elem);
	//ActualitzaLlistaTimeOut(i_llista, keycode);
	timeoutActualitzaLLista=setTimeout("ActualitzaLlistaTimeOut("+i_llista+", "+keycode+")", 50);
//Funciona amb tots excepte amb IE
//timeoutActualitzaLLista=setTimeout(ActualitzaLlistaTimeOut, 50, i_llista, keycode);
}

function DonaCadenaSenzilla(s)
{
//var LletresComplexes="àéèíóòúçÀÉÈÍÓÒÚÇïüÏÜ·ñáÑÁäãâåëêìîöôõùûÄÃÂÅËÊÌÎÖÔÕÙÛÿýÝðÐ";
//var LletresSenzilles="aeeiooucAEEIOOUCiuIU.naNAaaaaeeiiooouuAAAAEEIIOOOUUyyYdD";
var LletresComplexes="àéèíóòúçïü·áäãâåëêìîöôõùûÿýð";
var LletresSenzilles="aeeioouciu.aaaaaeeiiooouuyyd";
var s_low=s.toLowerCase();
var caracter;
var s_sortida="";
var k;

	/*Elimino el cas difícil de la ñ
	while (true)
	{
		k=s_low.indexOf("ñ");
		if (k==-1)
			break;
		else
			s_low=s_low.substring(0, k) + "ny" + s_low.substring(k+1,s_low.length);
	}*/

	for (var i=0; i<s_low.length; i++)
	{
		caracter=s_low.charAt(i);
		k=LletresComplexes.indexOf(caracter);
		if (k==-1)
			s_sortida+=caracter;
		else
			s_sortida+=LletresSenzilles.charAt(k);
	}

	/*Elimino el cas difícil de la l.l
	while (true)
	{
		k=s_sortida.indexOf("l.l");
		if (k==-1)
			break;
		else
			s_sortida=s_sortida.substring(0, k) + "l" + s_sortida.substring(k+3,s_sortida.length);
	}*/

	return s_sortida;
}


function IniciaLlista(layer_name, edit_name, i_llista)
{
	LlistaSenzilla[i_llista]=new Array();
	ILlistaDeICellaLlista[i_llista]=new Array();
	NCellaLlista[i_llista]=0;
	ICellaLlistaBlau[i_llista]=-1;
	NomEditLlavorLlista[i_llista]=edit_name;
	NomLayerLlista[i_llista]=layer_name;

	for (var i=0; i<LlistaCadenes[i_llista].length; i++)
		LlistaSenzilla[i_llista][i]=DonaCadenaSenzilla(LlistaCadenes[i_llista][i]);
}

//////////////////////////////////////////////////////////////////////////
/*Funcions de Navegador de Mapes de MiraMon.*/

function DonaCadena(a)
{
    //return eval("(a!=null && ParamCtrl.idioma && a."+ParamCtrl.idioma+"!=null)?a."+ParamCtrl.idioma+":a");
    if (a==null || ParamCtrl.idioma==null)
	return a;

    /*if (eval("a."+ParamCtrl.idioma+"!=null"))
	return eval("a."+ParamCtrl.idioma);*/

    if (a.cat && ParamCtrl.idioma=="cat")
	return a.cat;
    if (a.spa && ParamCtrl.idioma=="spa")
	return a.spa;
    if (a.eng && ParamCtrl.idioma=="eng")
	return a.eng;

    if (a.cat==null && a.spa==null && a.eng==null)  //Cas de cadena no multiidioma
	return a;
    return null;
}

function DonaCadenaConcret(a, idioma)
{
    //return eval("(a!=null && a."+idioma+"!=null)?a."+idioma+":a");
    if (idioma=="cat" && a!=null && a.cat!=null)
	return a.cat;
    if (idioma=="spa" && a!=null && a.spa!=null)
	return a.spa;
    if (idioma=="eng" && a!=null && a.eng!=null)
	return a.eng;
    return a;
}

function DonaCadena3(cat,spa,eng)
{
    if (ParamCtrl.idioma)
    {	
	if (ParamCtrl.idioma=="cat")
	    return cat;
	else if (ParamCtrl.idioma=="spa")
	    return spa;
	else if (ParamCtrl.idioma=="eng")
	    return eng;
    }
    return eng;
}

function AfegeixNomServidorARequest(servidor, request, es_ajax)
{
	if (es_ajax && parent.location.host && DonaHost(servidor).toLowerCase()!=parent.location.host.toLowerCase() && ServidorLocal)
	{
		var s_host=DonaHost(ServidorLocal);
		var pos_host=(-1!=ServidorLocal.indexOf("//")) ? ServidorLocal.indexOf("//")+2 : 0;
		if (s_host.toLowerCase()!=parent.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".
			return DonaNomServidorCaracterFinal(ServidorLocal.substring(0,pos_host)+parent.location.host+ServidorLocal.substring(pos_host+s_host.length, ServidorLocal.length)) + request + "&ServerToRequest="+DonaNomServidorSenseCaracterFinal(servidor);
		}
		else
			return DonaNomServidorCaracterFinal(ServidorLocal) + request + "&ServerToRequest="+DonaNomServidorSenseCaracterFinal(servidor);
	}
	else
	{
		return DonaNomServidorCaracterFinal(servidor) + request;
	}
}

function CanviaIdioma(s)
{
var Winx=this.window.screen.width;
//var Winy=this.window.screen.height;
	
	ParamCtrl.idioma=s;
	parent.document.title=DonaCadena(ParamCtrl.titol);
	
	CreaLlegenda();

	if (ParamCtrl.ConsultaTipica && capa_consulta_tipica_intern.length>0 && n_capes_ctipica==capa_consulta_tipica_intern.length)
	{
		IniciaConsultesTipiques();
		CreaConsultesTipiques();
	}
	CreaBarra(null);
	CreaCoordenades();


	for (var i=0; i<layerFinestraList.length; i++)
		OmpleBarraFinestraLayer(this,i); 

	for (var i=0; i<layerList.length; i++)
	{		
		if(layerList[i].contingut!=null)
			contentLayer(getLayer(this, layerList[i].nom), DonaCadena(layerList[i].contingut));
	}
	var elem=getLayer(this, "multi_consulta_finestra");
	if(isLayer(elem) && isLayerVisible(elem))
		CreaConsulta(this, 0);
	elem=getLayer(this, "anarCoord_finestra");
	if(isLayer(elem) && isLayerVisible(elem))
		OmpleFinestraAnarCoordenada();
	elem=getLayer(this, "consola_finestra");
	if(isLayer(elem) && isLayerVisible(elem))
		OmpleFinestraConsola();
	elem=getLayer(this, "inserta_finestra");
	if(isLayer(elem) && isLayerVisible(elem))
		OmpleFinestraInserta(elem);
}

function DonaIndexNivellZoom(costat)
{
	for (var i=0; i<zoom.length; i++)
	{
		if (zoom[i].costat>costat*0.9999 && zoom[i].costat<costat*1.0001)
			return i;
	}
	return 0;
}

/*Dona el costat de píxel igual o immediatament inferior al demanat o -1.
function DonaIndexNivellZoomFloor(costat)
{
    for (var i=0; i<zoom.length; i++)
    {
	if (zoom[i].costat>costat*0.9999 && zoom[i].costat<costat*1.0001)
	    return i;
    }
    var d=costat-zoom[0].costat;
    var d_min=d;
    var i_retorn=((d_min>0) ? 0 : -1);
    for (var i=1; i<zoom.length; i++)
    {
	d=costat-zoom[i].costat;
	if (d>0)
	{
	    if (d_min>0)
	    {
	        if (d<d_min)
	        {
		    d_min=d;
		    i_retorn=i;
		}
	    }
	    else
	    {
		d_min=d;
		i_retorn=i;
	    }
	}
    }
    return i_retorn;
}*/

//Dona el costat de píxel igual o immediatament superior al demanat o -1.
function DonaIndexNivellZoomCeil(costat)
{
    for (var i=0; i<zoom.length; i++)
    {
	if (zoom[i].costat>costat*0.9999 && zoom[i].costat<costat*1.0001)
	    return i;
    }
    var d=zoom[0].costat-costat;
    var d_min=d;
    var i_retorn=((d_min>0) ? 0 : -1);
    for (var i=1; i<zoom.length; i++)
    {
	d=zoom[i].costat-costat;
	if (d>0)
	{
	    if (d_min>0)
	    {
	        if (d<d_min)
	        {
		    d_min=d;
		    i_retorn=i;
		}
	    }
	    else
	    {
		d_min=d;
		i_retorn=i;
	    }
	}
    }
    return i_retorn;
}


function DonaIndexTileMatrix(i_capa, costat)
{
	for (var i=0; i<capa[i_capa].TileMatrixSet.ll.length; i++)
	{
		if (capa[i_capa].TileMatrixSet.ll[i].costat>costat*0.9999 && capa[i_capa].TileMatrixSet.ll[i].costat<costat*1.0001)
			return i;
	}
	return -1;
}


function GuardaVistaPrevia()
{
	if (ParamInternCtrl.NZoomPreviUsat==ParamInternCtrl.ZoomPrevi.length)
	{
		for (var i=1; i<ParamInternCtrl.ZoomPrevi.length; i++)
		{
			ParamInternCtrl.ZoomPrevi[i-1].costat=ParamInternCtrl.ZoomPrevi[i].costat;
			ParamInternCtrl.ZoomPrevi[i-1].PuntOri.x=ParamInternCtrl.ZoomPrevi[i].PuntOri.x;
			ParamInternCtrl.ZoomPrevi[i-1].PuntOri.y=ParamInternCtrl.ZoomPrevi[i].PuntOri.y;
			ParamInternCtrl.ZoomPrevi[i-1].ISituacio=ParamInternCtrl.ZoomPrevi[i].ISituacio;
		}
		ParamInternCtrl.NZoomPreviUsat--;
	}
	ParamInternCtrl.ZoomPrevi[ParamInternCtrl.NZoomPreviUsat].costat=ParamInternCtrl.CostatZoomActual;
	ParamInternCtrl.ZoomPrevi[ParamInternCtrl.NZoomPreviUsat].PuntOri.x=ParamInternCtrl.PuntOri.x;
	ParamInternCtrl.ZoomPrevi[ParamInternCtrl.NZoomPreviUsat].PuntOri.y=ParamInternCtrl.PuntOri.y;
	ParamInternCtrl.ZoomPrevi[ParamInternCtrl.NZoomPreviUsat].ISituacio=ParamInternCtrl.ISituacio;
	ParamInternCtrl.NZoomPreviUsat++;
}

//Gràcies al polimorfisme, aquest funció serveix per Capa's i CapaDigi's
function EsCapaDinsRangDEscalesVisibles(c)
{
	if (c.CostatMinim<=ParamInternCtrl.CostatZoomActual && 
		c.CostatMaxim>=ParamInternCtrl.CostatZoomActual)
	{
		return true;
}
	return false;
}

function RevisaEstatsCapes()
{
	//De moment només revisa que en un grup la capa activa no estigui oculta.
	//Si està oculta i una altre capa del grup és visible, aquesta queda activada.
	if (ParamCtrl.FlagsLlegenda&amaga_segons_escala || ParamCtrl.FlagsLlegenda&gris_segons_escala)
	{
		for (var i=0; i<capa.length; i++)
		{
			if (capa[i].VisibleALaLlegenda==no)
				continue;
			if ((!EsCapaDinsRangDEscalesVisibles(capa[i]) || !EsCapaDinsAmbit(i) || !EsCapaDisponibleEnElCRSActual(capa[i])) && 
			    (capa[i].visible==si || capa[i].visible==semitransparent) && capa[i].grup!=null && capa[i].grup!="")
			{
				for (var j=0; j<capa.length; j++)
				{
					if (j==i || capa[j].grup==null || capa[j].grup!=capa[i].grup)
						continue;
					if (EsCapaDinsRangDEscalesVisibles(capa[j]) && EsCapaDinsAmbit(j) && EsCapaDisponibleEnElCRSActual(capa[j]) && 
					    capa[j].visible==ara_no)
					{
						capa[j].visible=capa[i].visible;
						capa[i].visible=ara_no;
					}
				}
			}
		}
	}
}

function RecuperaVistaPrevia()
{
	if (ParamInternCtrl.NZoomPreviUsat)
	{
		ParamInternCtrl.NZoomPreviUsat--;
		if (ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS.toLowerCase()!=ParamCtrl.ImatgeSituacio[ParamInternCtrl.ZoomPrevi[ParamInternCtrl.NZoomPreviUsat].ISituacio].EnvTotal.CRS.toLowerCase())
			CanviaCRS(ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS, ParamCtrl.ImatgeSituacio[ParamInternCtrl.ZoomPrevi[ParamInternCtrl.NZoomPreviUsat].ISituacio].EnvTotal.CRS);
		ParamInternCtrl.ISituacio=ParamInternCtrl.ZoomPrevi[ParamInternCtrl.NZoomPreviUsat].ISituacio;
		if(ParamCtrl.FuncioCanviProjeccio)
			eval(ParamCtrl.FuncioCanviProjeccio);
		ParamInternCtrl.PuntOri.x=ParamInternCtrl.ZoomPrevi[ParamInternCtrl.NZoomPreviUsat].PuntOri.x;
		ParamInternCtrl.PuntOri.y=ParamInternCtrl.ZoomPrevi[ParamInternCtrl.NZoomPreviUsat].PuntOri.y;
		if (ParamInternCtrl.CostatZoomActual!=ParamInternCtrl.ZoomPrevi[ParamInternCtrl.NZoomPreviUsat].costat)
		{
			ParamInternCtrl.CostatZoomActual=ParamInternCtrl.ZoomPrevi[ParamInternCtrl.NZoomPreviUsat].costat;
			RevisaEstatsCapes();
			CreaLlegenda();
		}
		if (this.document.zoom.nivell)
			this.document.zoom.nivell.selectedIndex = DonaIndexNivellZoom(ParamInternCtrl.CostatZoomActual);
		if (ParamCtrl.ConsultaTipica)
			PosaLlistaValorsConsultesTipiquesAlPrincipi(-1);
		RepintaMapesIVistes();
	}
	else
	{
		alert(DonaCadena3("No hi ha cap vista prèvia a recuperar.", "No hay ninguna vista previa a recuperar.", "There is no previous view to be shown."));
	}
}

function ShaObertPopUp(wnd)
{
	if (wnd==null)
	{
	    alert(DonaCadena3("Aquest navegador té les finestres emergents bloquejades. Canvia la configuració del teu navegador.\nEn algunes versions d'Internet Explorer, només cal fer un clic sobre la faixa groga superior.", 
		"Este navegador tiene las ventanas emergentes bloqueadas. Modifique la configuración de su navegador.\nEn algunas versiones de Internet Explorer, un clic sobre la banda amarilla superior es suficiente.", 
		"Sorry, this browser has pop-up windows locked. Please change browser configuration.\nIn some Internet Explorer versions only a click on top yellow band will fix it."));
	    return false;
	}
	return true;
}

var ParametresWindow=null;
function ObreFinestraParametres()
{
    if (ParametresWindow==null || ParametresWindow.closed)
    {
        ParametresWindow=window.open("param.htm","FinestraParam",'toolbar=no,status=yes,scrollbars=no,location=no,menubar=no,directories=no,resizable=yes,width=430,height=400');
		ShaObertPopUp(ParametresWindow);
    }
    else
        ParametresWindow.focus();
}

var ncolVistaImprimir;
var nfilVistaImprimir;
var envImprimir=new CreaExtent(0.0, 0.0, 0.0, 0.0);

function CalculaNColNFilVistaImprimir(ncol,nfil)
{
	var factor_mapa=(ParamInternCtrl.EnvActual.MaxY-ParamInternCtrl.EnvActual.MinY)/(ParamInternCtrl.EnvActual.MaxX-ParamInternCtrl.EnvActual.MinX);
	var factor_paper=nfil/ncol;
	if (factor_mapa>factor_paper)
	{
	    nfilVistaImprimir=nfil;
	    ncolVistaImprimir=floor_DJ(nfil/factor_mapa);
	}
	else
	{
	    ncolVistaImprimir=ncol;
	    nfilVistaImprimir=floor_DJ(ncol*factor_mapa);
	}
	var costat;
	if (!(plantilla_dimpressio_intern[IPlantillaDImpressio].CalImprimir&RespectarResolucioVistaImprimir))
	{
	    for (var i=0; i<capa.length; i++)
	    {
		if (capa[i].visible!=no && capa[i].visible!=ara_no && EsCapaVisibleAAquestNivellDeZoom(i) &&
		    capa[i].tipus!=TipusWMS)
		{
		    //Hi ha 1 capa (o més) en WMTS. En aquest cas, es fixa un nivell de zoom superior al ambit que es vol demanar.
		    costat=(ParamInternCtrl.EnvActual.MaxX-ParamInternCtrl.EnvActual.MinX)/ncolVistaImprimir;
		    //Buscar el costar de pixel que cumplim:
		    var i_zoom=DonaIndexNivellZoomCeil(costat);
		    if (i_zoom==-1)
		    {
			i=capa.length;  //No ha ha cap costat que em serveixi.
		    }
		    else
		    {
		        //Ara amb el nou costat de píxel cal redefinir envolupant per excés donat que no la puc conservar totalment.
			costat=zoom[i_zoom].costat;
		    }
		    break;
		}
	    }
	    if (i==capa.length)
	    {
		envImprimir.MinX=ParamInternCtrl.EnvActual.MinX;
		envImprimir.MinY=ParamInternCtrl.EnvActual.MinY;
		envImprimir.MaxX=ParamInternCtrl.EnvActual.MaxX;
		envImprimir.MaxY=ParamInternCtrl.EnvActual.MaxY;
	        return;
	    }
	}
	else
	    costat=ParamInternCtrl.CostatZoomActual;

	envImprimir.MinX=(ParamInternCtrl.EnvActual.MaxX+ParamInternCtrl.EnvActual.MinX)/2-ncolVistaImprimir/2*costat;
	envImprimir.MinY=(ParamInternCtrl.EnvActual.MaxY+ParamInternCtrl.EnvActual.MinY)/2-nfilVistaImprimir/2*costat;
	envImprimir.MaxX=envImprimir.MinX+ncolVistaImprimir*costat;
	envImprimir.MaxY=envImprimir.MinY+nfilVistaImprimir*costat;
}

function DonaEnvIcona(env_out, punt, icona)
{
	env_out.MinX=punt.x-icona.i*ParamInternCtrl.CostatZoomActual;
	env_out.MaxX=punt.x+(icona.ncol-icona.i)*ParamInternCtrl.CostatZoomActual;
	env_out.MinY=punt.y+(icona.j-icona.nfil)*ParamInternCtrl.CostatZoomActual;
	env_out.MaxY=punt.y+icona.j*ParamInternCtrl.CostatZoomActual;
}

function DonaTextMatriusCapesTiledImprimirSiCal(ncolVistaImprimir, nfilVistaImprimir)
{
	for (var i=capa.length-1; i>=0; i--)
	{
	    if (capa[i].visible!=no && EsCapaVisibleAAquestNivellDeZoom(i))
	    {
			if (capa[i].tipus!=TipusWMS)
			{
				contentLayer(getLayer(winImprimir, "l_raster_print"+i), DonaTextMatriuCapaTiledImprimir(i, ncolVistaImprimir, nfilVistaImprimir, envImprimir));
			}
	    }
	}
}

function PintaObjecteCapaDigiImpressio(i_capa, i_objecte)
{
var punt;  
var icona=CapaDigi[i_capa].estil[CapaDigi[i_capa].i_estil].simbol[CapaDigi[i_capa].objecte[i_objecte].i_simbol].icona;
var env_icona=new CreaExtent(0,0,0,0);

	if(!CapaDigi[i_capa].CRS  || CapaDigi[i_capa].CRS.toUpperCase()==ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS.toUpperCase())
		punt=CapaDigi[i_capa].objecte[i_objecte].punt[0];			        
	else
		punt=CapaDigi[i_capa].objecte[i_objecte].puntCRSactual[0];
	DonaEnvIcona(env_icona, punt, icona);
	
	if (envImprimir.MinX < env_icona.MinX && envImprimir.MaxX > env_icona.MaxX &&
		envImprimir.MinY < env_icona.MinY && envImprimir.MaxY > env_icona.MaxY)
	{
		return (textHTMLLayer("l_obj_digi_print"+i_capa+"_"+i_objecte, 
				 (punt.x-envImprimir.MinX)/(envImprimir.MaxX-envImprimir.MinX)*ncolVistaImprimir-icona.i, 
				 (envImprimir.MaxY-punt.y)/(envImprimir.MaxY-envImprimir.MinY)*nfilVistaImprimir-icona.j+
				 ((ParamCtrl.CoordExtermes) ? 	AltTextCoordenada : 0),
				 icona.ncol, icona.nfil, null, false, true, null,
				 "<img name=\"i_obj_digi_print"+i_capa+"_"+i_objecte+"\" src=\""+
				 (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "") +
				 icona.icona+"\" width=" + icona.ncol + " height=" + icona.nfil + ">"));
	}
	return "";
}//Fi de PintaObjecteCapaDigiImpressio()

var winImprimir=null;  //Necessari pels setTimeout();
function CreaVistaFullImprimir(form)
{
	winImprimir=form;
    var elem=getLayer(form, "vista")
    var contingut;
    if (isLayer(elem))
    {
    	var cdns=new Array();
        cdns.push("<table border=0 cellspacing=0 cellpadding=0>");
		if (ParamCtrl.CoordExtermes)
		{
			cdns.push("  <tr>");
			if (ParamCtrl.CoordExtermes&longlat_g || ParamCtrl.CoordExtermes&longlat_gms)
				DonaCoordenadesLongLat(envImprimir.MinX,envImprimir.MaxY,ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS);
			cdns.push("    <td align=left><font face=arial size=1>");
			if (ParamCtrl.CoordExtermes&proj)
			cdns.push("(" , (OKStrOfNe(envImprimir.MinX,ParamCtrl.NDecimalsCoordXY)) , "," ,
				  (OKStrOfNe(envImprimir.MaxY,ParamCtrl.NDecimalsCoordXY)) , ")");
			else if (ParamCtrl.CoordExtermes&longlat_g)
				cdns.push("(" , (OKStrOfNe(ll_x,ParamCtrl.NDecimalsCoordXY*4)) , "," ,
				  (OKStrOfNe(ll_y,ParamCtrl.NDecimalsCoordXY*4)) , ")");
			else //if (ParamCtrl.CoordExtermes&longlat_gms)
				cdns.push("(" , (g_gms(ll_x, true)) , "," , (g_gms(ll_y, true)) , ")");
			cdns.push("</td>");
			if (ParamCtrl.CoordExtermes&longlat_g || ParamCtrl.CoordExtermes&longlat_gms)
				DonaCoordenadesLongLat(envImprimir.MaxX,envImprimir.MaxY,ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS);
			cdns.push("    <td align=right><font face=arial size=1>");
			if (ParamCtrl.CoordExtermes&proj)
				cdns.push("(" , (OKStrOfNe(envImprimir.MaxX,ParamCtrl.NDecimalsCoordXY)) , "," ,
				(OKStrOfNe(envImprimir.MaxY,ParamCtrl.NDecimalsCoordXY)) ,")");
			else if (ParamCtrl.CoordExtermes&longlat_g)
				cdns.push("(" , (OKStrOfNe(ll_x,ParamCtrl.NDecimalsCoordXY*4)) , "," ,
				(OKStrOfNe(ll_y,ParamCtrl.NDecimalsCoordXY*4)) , ")");
			else //if (ParamCtrl.CoordExtermes&longlat_gms)
				cdns.push("(" , (g_gms(ll_x, true)), "," , (g_gms(ll_y, true)) , ")");
			cdns.push("</td><td><img src=",
					  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
					  "1tran.gif height=",AltTextCoordenada," width=\"1\"></td></tr>");
		}
		cdns.push("<tr><td colspan=3><img src=",
				  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
				  (DonaFitxerColor(ParamCtrl.ColorFonsVista))," width=",ncolVistaImprimir," height=",nfilVistaImprimir,"></td></tr>");
		if (ParamCtrl.CoordExtermes)
		{
			cdns.push("  <tr>");
			if (ParamCtrl.CoordExtermes&longlat_g || ParamCtrl.CoordExtermes&longlat_gms)
				DonaCoordenadesLongLat(envImprimir.MinX,envImprimir.MinY,ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS);
			cdns.push("    <td align=left><font face=arial size=1>");
			if (ParamCtrl.CoordExtermes&proj)
				cdns.push("(" , (OKStrOfNe(envImprimir.MinX,ParamCtrl.NDecimalsCoordXY)) , "," ,
				(OKStrOfNe(envImprimir.MinY,ParamCtrl.NDecimalsCoordXY)) , ")");
			else if (ParamCtrl.CoordExtermes&longlat_g)
				cdns.push("(" , (OKStrOfNe(ll_x,ParamCtrl.NDecimalsCoordXY*4)) , "," ,
				(OKStrOfNe(ll_y,ParamCtrl.NDecimalsCoordXY*4)) , ")");
			else //if (ParamCtrl.CoordExtermes&longlat_gms)
				cdns.push("(" , (g_gms(ll_x, true)) , "," , (g_gms(ll_y, true)) , ")");
			cdns.push("</td>");
			if (ParamCtrl.CoordExtermes&longlat_g || ParamCtrl.CoordExtermes&longlat_gms)
				DonaCoordenadesLongLat(envImprimir.MaxX,envImprimir.MinY,ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS);
			cdns.push("    <td align=right><font face=arial size=1>");
			if (ParamCtrl.CoordExtermes&proj)
				cdns.push("(" , (OKStrOfNe(envImprimir.MaxX,ParamCtrl.NDecimalsCoordXY)) , "," ,
				(OKStrOfNe(envImprimir.MinY,ParamCtrl.NDecimalsCoordXY)) , ")");
			else if (ParamCtrl.CoordExtermes&longlat_g)
				cdns.push("(" , (OKStrOfNe(ll_x,ParamCtrl.NDecimalsCoordXY*4)) , "," ,
				(OKStrOfNe(ll_y,ParamCtrl.NDecimalsCoordXY*4)) , ")");
			else //if (ParamCtrl.CoordExtermes&longlat_gms)
				cdns.push("(" , (g_gms(ll_x, true)) , "," , (g_gms(ll_y, true)) , ")");
			cdns.push("</td><td><img src=",
					  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
					  "1tran.gif height=",AltTextCoordenada," width=\"1\"></td></tr>");
		}
		cdns.push("</table>");
		//Les capes
		for (var i=capa.length-1; i>=0; i--)
		{
			if (capa[i].visible!=no && EsCapaVisibleAAquestNivellDeZoom(i))
			{
				if (capa[i].tipus==TipusWMS)
					contingut="<img name=\"i_raster_print"+i+"\" src=\""+
					DonaRequestGetMap(i, null, true, ncolVistaImprimir, nfilVistaImprimir, envImprimir, -1)+"\">";
				else
					contingut="";
				cdns.push(textHTMLLayer("l_raster_print"+i,0,(ParamCtrl.CoordExtermes) ? AltTextCoordenada : 0,
															  ncolVistaImprimir,nfilVistaImprimir,null,false,true,null, contingut));
			}
		}
		//Els objectes digitalitzats		
		if(CapaDigi)
		{
			for (var i=CapaDigi.length-1; i>=0; i--)
			{       
				if (i!=i_objdigi_anar_coord && i!=i_objdigi_consulta && i!=i_objdigi_edicio && CapaDigi[i].visible!=no &&  
					EsObjDigiVisibleAAquestNivellDeZoom(CapaDigi[i]) &&	CapaDigi[i].estil && CapaDigi[i].estil.length)
				{
					if(CapaDigi[i].objecte)
					{
						for( var j=0; j<CapaDigi[i].objecte.length; j++)//De moment tots els objectes són de tipus punt					
							cdns.push(PintaObjecteCapaDigiImpressio(i, j));
					}
					if(CapaDigi[i].servidor)
						DemanaTilesDeCapaDigitalitzadaSiCal(i,ParamInternCtrl.EnvActual);			    
				 }
			}
			if(i_objdigi_consulta!=-1)
			{
				if (CapaDigi[i_objdigi_consulta].visible!=no &&  EsObjDigiVisibleAAquestNivellDeZoom(CapaDigi[i_objdigi_consulta]))
				{
					if(CapaDigi[i_objdigi_consulta].objecte)
						cdns.push(PintaObjecteCapaDigiImpressio(i_objdigi_consulta, 0));
				}
			}
			if(i_objdigi_anar_coord!=-1)
			{
				if (CapaDigi[i_objdigi_anar_coord].visible!=no &&  EsObjDigiVisibleAAquestNivellDeZoom(CapaDigi[i_objdigi_anar_coord]))
				{
					if(CapaDigi[i_objdigi_anar_coord].objecte)
						cdns.push(PintaObjecteCapaDigiImpressio(i_objdigi_anar_coord, 0));
				}
			}
			if(i_objdigi_edicio!=-1)
			{
				if (CapaDigi[i_objdigi_edicio].visible!=no &&  EsObjDigiVisibleAAquestNivellDeZoom(CapaDigi[i_objdigi_edicio]))
				{
					if(CapaDigi[i_objdigi_edicio].objecte)
						cdns.push(PintaObjecteCapaDigiImpressio(i_objdigi_edicio, 0));
				}
			}
		}
		contentLayer(elem, cdns.join(""));
		setTimeout("DonaTextMatriusCapesTiledImprimirSiCal("+ncolVistaImprimir+","+nfilVistaImprimir+");", 75);
    }
}//Fi de CreaVistaFullImprimir()


function DonaCadenaHTMLDibuixEscala(env)
{
var cdns=new Array();

	var escala=DonaNumeroArrodonit125((env.MaxX-env.MinX)*0.4);
	cdns.push("<font face=arial size=1><img src=",
			  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
			  "1tran.gif width=1 height=3 border=0><br><img src=",
			  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
			  "colors/c000000.gif width=", escala/ParamInternCtrl.CostatZoomActual ,
		  " height=2 border=0><br>", escala ," ", DonaUnitatsCoordenadesProj(ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS));
	if (DonaUnitatsCoordenadesProj(ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS)=="°")
		cdns.push(" (aprox. " , (DonaDenominadorDeLEscalaArrodonit(escala*111319.5*Math.cos((env.MaxY+env.MinY)/2*FactorGrausARadiants))) , " m " , 
			(DonaCadena3("a lat.","a lat.","at lat.")) , " " , (OKStrOfNe((env.MaxY+env.MinY)/2,1)) , "°)");
	else if (ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS.toUpperCase()=="AUTO2:MERCATOR,1,0,41.42")
		cdns.push(" (" , (DonaCadena3("a lat.","a lat.","at lat.")) , " 41° 25\')");
	else if (ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS.toUpperCase()=="AUTO2:MERCATOR,1,0,40.60")
		cdns.push(" (" , (DonaCadena3("a lat.","a lat.","at lat.")) , " 40° 36\')");
	else if (ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS.toUpperCase()=="AUTO2:MERCATOR,1,0,0.0" || ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS.toUpperCase()=="EPSG:3785")
		cdns.push(" (" , (DonaCadena3("a lat.","a lat.","at lat.")) , " 0° 0\')");
	cdns.push("</font>");
	return cdns.join("");
}

function CanviaCRSDeImatgeSituacio(i)
{
	if (i==-1)
		ParamInternCtrl.flags|=ara_canvi_proj_auto;
	else
	{
		ParamInternCtrl.flags&=~ara_canvi_proj_auto;
		CanviaCRS(ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS, ParamCtrl.ImatgeSituacio[i].EnvTotal.CRS);
		ParamInternCtrl.ISituacio=i;
		if(ParamCtrl.FuncioCanviProjeccio)
			eval(ParamCtrl.FuncioCanviProjeccio);
	}
	RepintaMapesIVistes();
}



function DonaCadenaHTMLProjeccio()
{
var cdns=new Array();
	if (ParamCtrl.flags&desplegable_proj && ParamCtrl.ImatgeSituacio.length>1)
	{
		cdns.push("<form name=FormulProjeccio><select CLASS=text_petit name=\"imatge\" onChange=\"CanviaCRSDeImatgeSituacio(parseInt(document.FormulProjeccio.imatge.value));\">");
		if (ParamCtrl.flags&canvi_proj_auto)
			cdns.push("<OPTION VALUE=\"-1\"",((ParamInternCtrl.flags&ara_canvi_proj_auto) ? " SELECTED" : "") ,">", 
				DonaDescripcioCRS(ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS)," (",
				(DonaCadena3("automàtic", "automático", "automatic")), ")</OPTION>");
		for (var i=0; i<ParamCtrl.ImatgeSituacio.length; i++)
		    cdns.push("<OPTION VALUE=\"",i,"\"",((!(ParamInternCtrl.flags&ara_canvi_proj_auto) && i==ParamInternCtrl.ISituacio) ? " SELECTED" : ""),">", 
				DonaDescripcioCRS(ParamCtrl.ImatgeSituacio[i].EnvTotal.CRS) , "</OPTION>");
		cdns.push("</select></form>");
	}
	else
		cdns.push("<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=2> &nbsp;",
			DonaDescripcioCRS(ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS),"</font>");	
	return cdns.join("");
}

function CreaProjeccio()
{
    var elem=getLayer(this, "projeccio");    
	if (isLayer(elem))
		contentLayer(elem, DonaCadenaHTMLProjeccio());
}

function DonaCadenaHTMLEscala(env)
{
var cdns=new Array();

	cdns.push("<STYLE TYPE=\"text/css\">.text_petit { font-size: xx-small;}</STYLE><form name=FormulEscala><table border=0 cellspacing=0 cellpadding=0><tr><td align=middle>", DonaCadenaHTMLDibuixEscala(env) , "</td></td></tr></table></form>");
	return cdns.join("");
}

function DonaCadenaHTMLEscalaImprimir(env)
{
	return "<table border=0 cellspacing=0 cellpadding=0><tr><td align=middle>" + DonaCadenaHTMLDibuixEscala(env) + "</td><td><font face=arial size=2> &nbsp;"+
		DonaDescripcioCRS(ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS)+"</font></td></tr></table>"
}

function CreaEscalaFullImprimir(win)
{
    var elem=getLayer(win, "escala");
    if (isLayer(elem))
	contentLayer(elem, DonaCadenaHTMLEscalaImprimir(envImprimir));
}

function CreaSituacioFullImprimir(win, esq, sup, ample, alt)
{
var factor_imatge=ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].Alt/ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].Ample;
var factor_paper=alt/ample;
    var elem=getLayer(win, "situacio");
    if (isLayer(elem))
    {
	if (factor_imatge>factor_paper)
	    ample=floor_DJ(alt/factor_imatge);
	else
	    alt=floor_DJ(ample*factor_imatge);

	OmpleMidesRectangleSituacio(ample,alt,envImprimir);
	contentLayer(elem, 
			"<img src=\"" + (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "") +
			ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].nom + "\" width="+ample+" height="+alt+" border=0>"+
			"<br><img src="+
			(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "") +
			"1tran.gif height=\"15\" width=\"1\"><br>"+
			textHTMLLayer("l_rect", esq+minx_rec,
					sup+alt-maxy_rec,
					maxx_rec-minx_rec,
					maxy_rec-miny_rec,
					null, false, true, null,
					DonaCadenaHTMLMarcSituacio(maxx_rec-minx_rec, maxy_rec-miny_rec)));
    }
}//Fi de CreaSituacioFullImprimir()

var minx_rec=0;
var maxx_rec=0;
var miny_rec=0;
var maxy_rec=0;

function OmpleMidesRectangleSituacio(ncol,nfil, env)
{
	minx_rec=Math.max(0,Math.floor((env.MinX-ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MinX)*ncol/(ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MaxX-ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MinX)));
	maxx_rec=Math.min(ncol,Math.floor((env.MaxX-ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MinX)*ncol/(ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MaxX-ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MinX)+1));
	miny_rec=Math.max(0,Math.floor((env.MinY-ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MinY)*nfil/(ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MaxY-ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MinY)));
	maxy_rec=Math.min(nfil,Math.floor((env.MaxY-ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MinY)*nfil/(ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MaxY-ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MinY)+1));
}

var TriaFullWindow=null;
function ObreTriaFullImprimir()
{
    if (TriaFullWindow==null || TriaFullWindow.closed)
    {
        TriaFullWindow=window.open("print.htm","FinestraPrint",'toolbar=no,status=yes,scrollbars=no,location=no,menubar=no,directories=no,resizable=yes,width=400,height=600,left=0,top=0');
		ShaObertPopUp(TriaFullWindow);
    }
    else
        TriaFullWindow.focus();
}

var AjudaWindow=null;
function ObreFinestraAjuda()
{
    if (AjudaWindow==null || AjudaWindow.closed)
    {
        AjudaWindow=window.open(DonaCadena3("ajuda/cat/ajuda.htm", "ajuda/spa/ajuda.htm", "ajuda/eng/ajuda.htm"),"FinestraAjuda",'toolbar=no,status=no,scrollbars=yes,location=no,menubar=yes,directories=no,resizable=yes,width=780,height=580');
		ShaObertPopUp(AjudaWindow);
    }
    else
        AjudaWindow.focus();
}


function TornaPlanaPrincipal()
{
    parent.location.href=DonaCadena(ParamCtrl.PlanaPrincipal);
}

function InstalaLectorMapes()
{
    var instalaWindow=window.open(DonaCadena3("http://www.creaf.uab.es/miramon/mmr/cat/exe/Inst_MMR.EXE", "http://www.creaf.uab.es/miramon/mmr/esp/exe/Inst_MMR.EXE", "http://www.creaf.uab.es/miramon/mmr/usa/exe/Inst_MMR.EXE"));
    ShaObertPopUp(instalaWindow);
}

function SeparaNumerosDe3En3(s, separador)
{
var mida=s.length/3;
var j;

    for (i=0; i<mida; i++)
    {
        j=s.length-i*(3+separador.length)-3;
        s=s.substring(0,j)+separador+s.substring(j,s.length);
    }
    return s;
}

function EscriuEscalaAproximada(i, crs)
{
var e=zoom[i].costat*1000/MidaDePixelPantalla;
var crs_up=crs.toUpperCase();

    if (crs_up=="EPSG:4326" || crs_up=="EPSG:4358" || crs_up=="CRS:84")
	e*=111319.5;
    return DonaDenominadorDeLEscalaArrodonit(e);
}

function EscriuCostatIUnitatsZoom(i, crs)
{
var crs_up=crs.toUpperCase(); 

    if (crs_up=="EPSG:4326" || crs_up=="EPSG:4358" || crs_up=="CRS:84")
	return g_gms(zoom[i].costat, false);
    else
	return zoom[i].costat+DonaUnitatsCoordenadesProj(crs);
}

function EscriuDescripcioNivellZoom(i, crs)
{
var cdns=new Array();
var parentesis=false;
var s=null;

    if (ParamCtrl.TipusLlistatNivellZoom&z_fraccio)
    {
	s="1"+((i==zoom.length-1) ? "" : "/" + (Math.floor(zoom[i].costat/zoom[zoom.length-1].costat*1000))/1000);
	cdns.push(s);
        parentesis=true;
    }
    if (ParamCtrl.TipusLlistatNivellZoom&z_mida_pixel)
    {
        if (parentesis)
	    cdns.push(" (");
        cdns.push((EscriuCostatIUnitatsZoom(i, crs)));
        if (parentesis)
        {
	    cdns.push(")");
            parentesis=false;
        }
	else
	    parentesis=true;
    }
    if (ParamCtrl.TipusLlistatNivellZoom&z_escala_aprox)
    {
        if (parentesis)
	    cdns.push(" (");
		else if (s && s.length)
	    cdns.push(" ");
        cdns.push("1:", (SeparaNumerosDe3En3(""+EscriuEscalaAproximada(i, crs), " ")));
        if (parentesis)
	    cdns.push(")");
    }
    return cdns.join("");
}

function VerificaICorregeixPuntOri()
{
var d_max;
	if (ParamInternCtrl.PuntOri.x<ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MinX+ParamInternCtrl.CostatZoomActual+ParamCtrl.ncol*ParamInternCtrl.CostatZoomActual/2)
		ParamInternCtrl.PuntOri.x=ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MinX+ParamInternCtrl.CostatZoomActual+ParamCtrl.ncol*ParamInternCtrl.CostatZoomActual/2;
	d_max=ParamInternCtrl.PuntOri.x+ParamCtrl.ncol*ParamInternCtrl.CostatZoomActual/2;
	if (d_max>ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MaxX)
		ParamInternCtrl.PuntOri.x=ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MaxX-ParamCtrl.ncol*ParamInternCtrl.CostatZoomActual/2;

	if (ParamInternCtrl.PuntOri.y<ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MinY+ParamInternCtrl.CostatZoomActual+ParamCtrl.nfil*ParamInternCtrl.CostatZoomActual/2)
		ParamInternCtrl.PuntOri.y=ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MinY+ParamInternCtrl.CostatZoomActual+ParamCtrl.nfil*ParamInternCtrl.CostatZoomActual/2;
	d_max=ParamInternCtrl.PuntOri.y+ParamCtrl.nfil*ParamInternCtrl.CostatZoomActual/2;
	if (d_max>ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MaxY)
		ParamInternCtrl.PuntOri.y=ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MaxY-ParamCtrl.nfil*ParamInternCtrl.CostatZoomActual/2;
}

function MouLaVista(dx,dy)
{
    if (ParamCtrl.ConsultaTipica)
	PosaLlistaValorsConsultesTipiquesAlPrincipi(-1);
    GuardaVistaPrevia();
    ParamInternCtrl.PuntOri.x+=dx;
    ParamInternCtrl.PuntOri.y+=dy;	
    VerificaICorregeixPuntOri();  
    RepintaMapesIVistes();
}

/*Mou la vista un finestre sencera en x, y especificant -1, 0 o 1 segons el sentit desitjat:
     sx: -1 per esquerra, 0 per res, 1 per dreta.
     sy: -1 per aball,    0 per res, 1 per adalt.
  El moviment no salta una finetra sencera exactament sino que té en compte el paràmetre psalt 
  (percentatge de salt). Crida RepintaMapesIVistes() al final*/
function MouLaVistaSalt(sx,sy)
{
	MouLaVista(ParamCtrl.ncol*ParamInternCtrl.CostatZoomActual*ParamCtrl.psalt/100*sx,
		   ParamCtrl.nfil*ParamInternCtrl.CostatZoomActual*ParamCtrl.psalt/100*sy);
}

/*Mou la vista per centrar-la a la posició x,y en coordenades mapa. Crida RepintaMapesIVistes()
  al final. Aquesta funció NO guarda la vista.*/
function CentraLaVista(x,y)
{
    ParamInternCtrl.PuntOri.x=x;
    ParamInternCtrl.PuntOri.y=y;
    ParamInternCtrl.EnvActual.MinX=ParamInternCtrl.PuntOri.x-(ParamCtrl.ncol)*ParamInternCtrl.CostatZoomActual/2;
    //ParamInternCtrl.EnvActual.MaxX=ParamInternCtrl.PuntOri.x+(ParamCtrl.ncol)*ParamInternCtrl.CostatZoomActual/2;
    ParamInternCtrl.EnvActual.MaxX=ParamInternCtrl.EnvActual.MinX+(ParamCtrl.ncol)*ParamInternCtrl.CostatZoomActual;
    ParamInternCtrl.EnvActual.MinY=ParamInternCtrl.PuntOri.y-(ParamCtrl.nfil)*ParamInternCtrl.CostatZoomActual/2;
    //ParamInternCtrl.EnvActual.MaxY=ParamInternCtrl.PuntOri.y+(ParamCtrl.nfil)*ParamInternCtrl.CostatZoomActual/2;
    ParamInternCtrl.EnvActual.MaxY=ParamInternCtrl.EnvActual.MinY+(ParamCtrl.nfil)*ParamInternCtrl.CostatZoomActual;
}

function ClickSobreSituacio(event_de_click)
{
	PortamAPunt(DonaCoordXDeCoordSobreSituacio(event_de_click.clientX), DonaCoordYDeCoordSobreSituacio(event_de_click.clientY));
}

function DonaCoordSobreVistaDeCoordX(x)
{
	return (x-ParamInternCtrl.EnvActual.MinX)/(ParamInternCtrl.EnvActual.MaxX-ParamInternCtrl.EnvActual.MinX)*(ParamCtrl.ncol)-((this.document.body.scrollLeft) ? this.document.body.scrollLeft : 0)+OrigenEsquerraVista;
}

function DonaCoordSobreVistaDeCoordY(y)
{
	return (ParamInternCtrl.EnvActual.MaxY-y)/(ParamInternCtrl.EnvActual.MaxY-ParamInternCtrl.EnvActual.MinY)*(ParamCtrl.nfil)-((this.document.body.scrollTop) ? this.document.body.scrollTop : 0)+OrigenSuperiorVista;
}

function DonaCoordXDeCoordSobreVista(x)
{
	return ParamInternCtrl.EnvActual.MinX+(ParamInternCtrl.EnvActual.MaxX-ParamInternCtrl.EnvActual.MinX)/(ParamCtrl.ncol)*(((this.document.body.scrollLeft) ? this.document.body.scrollLeft : 0)+x-OrigenEsquerraVista);
}

function DonaCoordYDeCoordSobreVista(y)
{
	return ParamInternCtrl.EnvActual.MaxY-(ParamInternCtrl.EnvActual.MaxY-ParamInternCtrl.EnvActual.MinY)/(ParamCtrl.nfil)*(((this.document.body.scrollTop) ? this.document.body.scrollTop : 0)+y-OrigenSuperiorVista);
}

function DonaCoordXDeCoordSobreSituacio(x)
{
	return ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MinX+(ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MaxX-ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MinX)/(ParamInternCtrl.AmpleSituacio-1)*(((this.document.body.scrollLeft) ? this.document.body.scrollLeft : 0)+x-OrigenEsqSituacio);
}
function DonaCoordYDeCoordSobreSituacio(y)
{
	return ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MaxY-(ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MaxY-ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MinY)/(ParamInternCtrl.AltSituacio-1)*(((this.document.body.scrollTop) ? this.document.body.scrollTop : 0)+y-OrigenSupSituacio);
}

//consulta per localització
function EsCapaConsultable(i)
{
	return capa[i].consultable==si && EsCapaDinsAmbit(i) && EsCapaDisponibleEnElCRSActual(capa[i]) &&
			    (!(ParamCtrl.flags&consultable_segons_escala) || EsCapaDinsRangDEscalesVisibles(capa[i]));
}

function EsObjDigiConsultable(i,j)
{
	//Quan no té atributs només retorno fals si és una capa estàtica, perquè sinó pot voler dir que haig de sol·licitar els atributs
	if(!CapaDigi[i].objecte || (!CapaDigi[i].servidor  && !CapaDigi[i].objecte[j].atributs))
		return false;		
	if(CapaDigi[i].estil==null || !CapaDigi[i].estil.length || CapaDigi[i].estil[CapaDigi[i].i_estil].simbol==null)
	{
		return CapaDigi[i].consultable==si;
	}
	else
	{
		var env_icona=new CreaExtent(0,0,0,0);
		var punt;
		if(!CapaDigi[i].CRS  || CapaDigi[i].CRS.toUpperCase()==ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS.toUpperCase())
			punt=CapaDigi[i].objecte[j].punt[0];			        
		else
			punt=CapaDigi[i].objecte[j].puntCRSactual[0];
			
		DonaEnvIcona(env_icona, punt, CapaDigi[i].estil[CapaDigi[i].i_estil].simbol[CapaDigi[i].objecte[j].i_simbol].icona);
		return CapaDigi[i].consultable==si && 
				PuntConsultat.x > env_icona.MinX &&
				PuntConsultat.x < env_icona.MaxX &&
				PuntConsultat.y > env_icona.MinY &&
				PuntConsultat.y < env_icona.MaxY;
	}
}
//1.- XML

var RespostaConsultaXML=new Array();
var ajax=new Array();

//Valors de l'estat de la consulta
var EstatAjaxXMLInit=0x01;
var EstatXMLOmplert=0x02;
var EstatXMLTrobatsZero=0x04;
var EstatErrorXMLNoNodes=0x08;
var EstatErrorXMLTipusDesconegut=0x10;

function CreaRespostaConsultaXML(capa, i_capa, win, nom_layer)
{
	this.capa=capa;
	this.i_capa=i_capa;
	//this.punt=new CreaPunt2D(x, y);
	this.win=win;
	this.nom_layer=nom_layer;
	this.estat=EstatAjaxXMLInit;  
	this.Atribut=new Array();
	this.text="";
}//Fi de CreaRespostaConsultaXML()

function DonamRespostaConsultaXMLComAText(root)
{
	return root.text;
}//Fi de DonamRespostaConsultaXMLComAText()

function CanviaRepresentacioCaractersProhibitsXMLaCaractersText(cadena)
{
	cadena=cadena.replace(/&amp;/ig, "&");
	cadena=cadena.replace(/&quot;/ig, "\"");
	cadena=cadena.replace(/&apos;/ig, "\'");
	cadena=cadena.replace(/&lt;/ig, "<");
	cadena=cadena.replace(/&gt;/ig, ">");
	return cadena;
}
function OmpleRespostaConsultaXML(doc, consulta)
{
var root;
var text_sortida;
var tag, tag2;
var i, j, z;
var nom, valor, unitats, separador;
var n_fills_NODATA;
var esNODATA, esLink, esImatge;

	if(!doc)
	{
		consulta.estat=EstatErrorXMLNoNodes;
		return 1;
	}
	root=doc.documentElement;	
	if(root)
	{			
		var arrel;
		if(root.tagName=="soap:Envelope")
		{
			//NJ
			arrel=root.getElementsByTagName('FeatureInfoResponse')[0];
			if(arrel==null) 
			{
				consulta.estat=EstatErrorXMLTipusDesconegut;
				return 1;
			}
		}
		else if(root.tagName=="FeatureInfoResponse")
		{
			arrel=root;
		}
		else
		{
			consulta.estat=EstatErrorXMLTipusDesconegut;
			return 1;
		}
		if(arrel.hasChildNodes())
		{
			var i_capa_validar=-1;
			if(Accio && Accio.accio&accio_validacio && Accio.capes)
			{
				for(i=0; i<Accio.capes.length; i++)
				{
					if(Accio.capes[i]==consulta.capa.nom)
					{
						i_capa_validar=i;
						break;
					}
				}
			}				
			for(i=0; i<arrel.childNodes.length; i++)
			{				
				tag=arrel.childNodes[i];
				if(tag.tagName!="FIELDS")
					continue;			
				for(j=0; j<tag.attributes.length; j++)
				{
					if(i_capa_validar!=-1 && tag.attributes[j].nodeName==Accio.camps[i_capa_validar])
					{
						Accio.valors[i_capa_validar]=tag.attributes[j].nodeValue;							
					}
					consulta.Atribut[consulta.Atribut.length]=new CreaAtribut(tag.attributes[j].nodeName,
												 tag.attributes[j].nodeName, 
												 tag.attributes[j].nodeValue, 													 
												 null,null,
												 false, false);
				}
				for(j=0; j<tag.childNodes.length; j++)
				{					
					if(tag.childNodes[j].nodeName!="FIELD")
						continue;
			
					nom=null; descripcio=null; valor=null; unitats=null; 
					esNODATA=false;	separador=null; esLink=false;
					esImatge=false;
					
					tag2=tag.childNodes[j];	
					for (z=0; z<tag2.attributes.length; z++)
					{
						if(tag2.attributes[z].nodeName=="value")
							valor=tag2.attributes[z].nodeValue;
						else if(tag2.attributes[z].nodeName=="name")
							nom=tag2.attributes[z].nodeValue;
						if(tag2.attributes[z].nodeName=="title")
							descripcio=tag2.attributes[z].nodeValue;
						else if(tag2.attributes[z].nodeName=="units")
							unitats=tag2.attributes[z].nodeValue;
						else if(tag2.attributes[z].nodeName=="is_NODATA")
						{
							if(tag2.attributes[z].nodeValue=="yes")
							{
								esNODATA=true;
								n_fills_NODATA++;
							}
						}
						else if(tag2.attributes[z].nodeName=="separator")
						{
							separador=tag2.attributes[z].nodeValue;
							separador=CanviaRepresentacioCaractersProhibitsXMLaCaractersText(separador);
						}
						else if(tag2.attributes[z].nodeName=="is_link")
						{
							if(tag2.attributes[z].nodeValue=="yes")
								esLink=true;
						}
						else if(tag2.attributes[z].nodeName=="is_image")
						{
							if(tag2.attributes[z].nodeValue=="yes")
								esImatge=true;
						}
					}
					if(valor)
					{
						consulta.Atribut[consulta.Atribut.length]=new CreaAtribut(nom, descripcio, valor, unitats, esNODATA, separador,esLink,esImatge);
						if(i_capa_validar!=-1 && nom==Accio.camps[i_capa_validar])
							Accio.valors[i_capa_validar]=valor;
					}
				}

			}
			//Haig de calcular si tots els atributs són NODATA i si és aixì
			//consulta.estat=EstatXMLTrobatsZero;
			n_fills_NODATA=0;
			for(i=0; i<consulta.Atribut.length; i++)
			{
				if(consulta.Atribut[i].esNODATA==true)
					n_fills_NODATA++;
			}
			if(n_fills_NODATA==consulta.Atribut.length)
				consulta.estat=EstatXMLTrobatsZero;
			else						
				consulta.estat=EstatXMLOmplert;
		}
		else
			consulta.estat=EstatXMLTrobatsZero;
		return 0;
	}
	else
	{
		consulta.estat=EstatErrorXMLNoNodes;
		return 1;
	}
}//Fi de OmpleRespostaConsultaXML()

		
function MostraConsultaComHTML(consulta)
{
	if(consulta)
	{		
		var cdns=new Array();
		var elem=getLayer(consulta.win, consulta.nom_layer);		
		cdns.push("<span class='TitolRepostaConsulta'>", 
			(DonaCadena(capa[consulta.i_capa].DescLlegenda) ? DonaCadena(capa[consulta.i_capa].DescLlegenda): capa[consulta.i_capa].nom ), 
			(capa[consulta.i_capa].animable&multitime? " "+DonaDataBreuComAText(consulta.i_capa, -1) : ""), 
			"</span><hr size=\"2\">");
			
		if(consulta.estat==EstatXMLOmplert)
		{
			if(consulta.Atribut.length>0)
			{
				var i_capa_validar=-1;
				if(Accio && Accio.accio&accio_validacio && Accio.capes)
				{
					for(var i=0; i<Accio.capes.length; i++)
					{
						if(Accio.capes[i]==consulta.capa.nom)
						{
							i_capa_validar=i;
							break;
						}
					}
				}
				for(var i=0; i<consulta.Atribut.length; i++)
				{
					/*if(consulta.Atribut[i].separador)
						cdns.push(consulta.Atribut[i].separador);								
					Crec que és millor possar-jo dins del camp de la consulta*/
					if(i_capa_validar!=-1 && consulta.Atribut[i].nom==Accio.camps[i_capa_validar])
					{
						cdns.push("<span class='CampRespostaConsultaValidacio'>",
							(consulta.Atribut[i].separador)? consulta.Atribut[i].separador : "",
							(consulta.Atribut[i].descripcio ? consulta.Atribut[i].descripcio : consulta.Atribut[i].nom));
															
						if(consulta.Atribut[i].unitats)
							cdns.push("(" , consulta.Atribut[i].unitats, ")");
						cdns.push(": </span><span class='ValorRespostaConsultaValidacio'>");
					}
					else
					{					
						cdns.push("<span class='CampRespostaConsulta'>",
							(consulta.Atribut[i].separador)? consulta.Atribut[i].separador : "",
							(consulta.Atribut[i].descripcio ? consulta.Atribut[i].descripcio : consulta.Atribut[i].nom));
															
						if(consulta.Atribut[i].unitats)
							cdns.push("(" , consulta.Atribut[i].unitats, ")");
						cdns.push(": </span><span class='ValorRespostaConsulta'>");
					}

					if(consulta.Atribut[i].esImatge)
					{
						if(consulta.Atribut[i].esLink)
							cdns.push("<a href='",consulta.Atribut[i].valor,"' target='_blank'><img src='" ,
								consulta.Atribut[i].valor ,"' border='0' align='top' width='220'></a></span><br>");
						else
							cdns.push("<img src='",	consulta.Atribut[i].valor,"' border='0' align='bottom' width='220'></span><br>");
					}
					else if(consulta.Atribut[i].esLink)
						cdns.push("<a href='",consulta.Atribut[i].valor,"' target='_blank'>",consulta.Atribut[i].valor,"</a></span><br>");
					else
						cdns.push(consulta.Atribut[i].valor ,"</span><br>");
				}
				var text_resposta=cdns.join("");
				contentLayer(elem, text_resposta);
			}
			else
				removeLayer(elem);
		}
		else
			contentLayer(elem, consulta.text);
		return 0;
	}
	else
		return 1;
}//Fi de MostraConsultaComHTML()

function HiHaCapesConsultablesNoActives()
{
	for (i=0; i<capa.length; i++)
	{
		if(capa[i].consultable==ara_no)
			return true;
	}
	return false;
}

function OmpleRespostaConsultaXMLiEscriuEnHTML(doc, consulta)
{
	if (consulta.capa.FormatConsulta=="text/xml")
	{
		OmpleRespostaConsultaXML(doc, consulta);

		if (consulta.estat==EstatXMLTrobatsZero)
		{
			n_consultes_zero++;
			removeLayer(getLayer(consulta.win, consulta.nom_layer));
		}
		else 
			MostraConsultaComHTML(consulta);
	}
	else
	{
		contentLayer(getLayer(consulta.win, consulta.nom_layer), 
		"<span class='TitolRepostaConsulta'>"+ (DonaCadena(capa[consulta.i_capa].DescLlegenda) ? DonaCadena(capa[consulta.i_capa].DescLlegenda): capa[consulta.i_capa].nom )+ (capa[consulta.i_capa].animable&multitime? " "+DonaDataBreuComAText(consulta.i_capa, -1) : "")+ 
		"</span><hr size=\"2\">" + "<span class='ValorRespostaConsulta'>" + consulta.text + "</span>");
	}

	if(n_consultes_zero==n_capes_consultables && n_consultes_digi_zero==n_capes_digi_consultables)
	{
	  	// Totes les capes tenien 0 objectes trobats --> S'han destruit totes les layers
   	  	if(ParamCtrl.TipusConsulta==consul_incrus_de_cop)
			s=getcontentFinestraLayer(consulta.win, "multi_consulta", s);
	  	else //Consulta en finestra
	  		s=getContentLayer(getLayer(consulta.win, "multi_consulta"), s);
	 	s+="<center><div class=\"layerresposta\">" +
	 	   DonaCadena3("No hi ha dades pel punt consultat", "No hay datos para el punto consultado", "There are not data for requested point")+
		   (HiHaCapesConsultablesNoActives() ? DonaCadena3(" i les capes activades", " y las capas activadas", " and activated layers") : "" )+
	  	   "</div></center>";
	  	if(ParamCtrl.TipusConsulta==consul_incrus_de_cop)
	  		contentFinestraLayer(consulta.win, "multi_consulta", s);	
	  	else 
	  		contentLayer(getLayer(consulta.win, "multi_consulta"), s);	
	}
}//Fi de OmpleRespostaConsultaXMLiEscriuEnHTML()

function FesPeticioAjaxConsulta()
{
	n_consultes_zero=0;
	n_capes_consultables=0;
	for (var i=0; i<capa.length; i++)
	{
	    if (EsCapaConsultable(i))
		n_capes_consultables++;
	}

	for (var i=0; i<capa.length; i++)
	{
	    if (EsCapaConsultable(i))
	    {
			if(capa[i].tipus==TipusWMTS_SOAP)
				FesRequestGetFeatureInfoSOAP(i);
			else
			{
				ajax[i]=new Ajax();			
				ajax[i].doGet(DonaRequestGetFeatureInfo(i, true), OmpleRespostaConsultaXMLiEscriuEnHTML, "text/xml", RespostaConsultaXML[i]);
			}
	    }
	}
}

function PopDownFinestra_multi_consulta()
{
	pop_down_no_esborra_cons=true;
	ParamCtrl.TipusConsulta=consul_incrus_de_cop;
	afegeixBotoABarraFinestraLayer(this, "multi_consulta", boto_pop_up);
 	showFinestraLayer(this, "multi_consulta");
	setTimeout("CreaConsulta(this, 0);",30); 	
}

function PopUpFinestra_multi_consulta()
{
	hideFinestraLayer(this, "multi_consulta");
	ParamCtrl.TipusConsulta=consul_finestra_de_cop;
	if (ConsultaWindow==null || ConsultaWindow.closed)
	{
				
		ConsultaWindow=window.open(ParamCtrl.PlantillaConsulta.src,"FinestraConsulta",'toolbar=no,status=no,scrollbars=no,location=no,menubar=no,directories=no,resizable=yes,width='+ParamCtrl.PlantillaConsulta.ample+',height='+ParamCtrl.PlantillaConsulta.alt);
		ShaObertPopUp(ConsultaWindow);
	}
	else
	{
		CreaConsulta(ConsultaWindow, 0);
		ConsultaWindow.focus();
	}

}//Fi de PopUpFinestra_multi_consulta()

function TancaFinestraLayer(finestra)
{
	hideFinestraLayer(this, finestra);
}

function TancaFinestraEmergent_multi_consulta()
{
	if(pop_down_no_esborra_cons)
	{
		pop_down_no_esborra_cons=false;
		return;
	}
	if (i_objdigi_consulta!=-1)
	{
		CapaDigi[i_objdigi_consulta].visible=no;
		CreaVista();
	}
}//Fi de TancaFinestra_multi_consulta()

function TancaFinestra_multi_consulta()
{
	hideFinestraLayer(this, "multi_consulta");

	if (i_objdigi_consulta!=-1)
	{
		CapaDigi[i_objdigi_consulta].visible=ara_no;
		if(isLayer(this, "l_obj_digi"+i_objdigi_consulta+"_"+0))
			removeLayer(getLayer(this, "l_obj_digi"+i_objdigi_consulta+"_"+0));
		//hideLayer(getLayer(this, "l_capa_digi"+i_objdigi_consulta));
	}
}//Fi de TancaFinestra_multi_consulta()

function MostraConsultaCapaDigitalitzadaComHTML(i_capa_digi, i_obj_digi)
{
var cdns=new Array();

	if(CapaDigi[i_capa_digi].objecte!=null && CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs!=null && CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs.length>0)
	{		
		cdns.push("<span class='TitolRepostaConsulta'>",
			(DonaCadena(CapaDigi[i_capa_digi].DescLlegenda) ? 
				DonaCadena(CapaDigi[i_capa_digi].DescLlegenda) : 
				(CapaDigi[i_capa_digi].desc ? CapaDigi[i_capa_digi].desc :  CapaDigi[i_capa_digi].nom)),
			"</span><hr size=\"2\">");
		for(var i=0; i<CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs.length; i++)
		{
			if(CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].mostrar==false)
				continue;
			if(CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].separador)
				text_resposta+=CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].separador;
						
			cdns.push("<span class='CampRespostaConsulta'>" ,
				(CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].descripcio ?
						CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].descripcio:
						CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].nom ));
							
			if(CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].unitats)
				cdns.push("(" , CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].unitats, ")");
			cdns.push(": </span><span class='ValorRespostaConsulta'>");
			if(CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].valor!=null)
			{
				if(CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].esImatge)
				{
					if(CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].esLink)
					{
						cdns.push("<a href='",
							CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].valor ,
							"' target='_blank'><img src='" ,
							CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].valor ,
							"' border='0' align='bottom'></a></span><br>");
					}					
					else
					{
						cdns.push("<img src='" ,
							CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].valor ,
							"' border='0' align='bottom'></span><br>");
					}												
				}
				else if(CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].esLink)
				{
					cdns.push("<a href='"+
							CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].valor ,
							"' target='_blank'>",
							CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].valor , 
							"</a></span><br>");
				}
				else
				{
					cdns.push(CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].valor ,
								"</span><br>");
				}
			}
			else
			{
				cdns.push("</span><br>");
			}
		}
		return cdns.join("");
	}
	else
		return null;
}//Fi de function MostraConsultaCapaDigitalitzadaComHTML()

function ValidacioFinalitzada(doc)
{
	alert(DonaCadena3("Validació finalitzada. Pots tancar el navegador.", 
			  "Validación finalizada. Puedes cerrar el navegador.",
			  "Finished validation. You can close the browser."));
	return;
}
function FesPeticioAjaxValidacio(s)
{
	var resp_valida_ajax=new Ajax();
	resp_valida_ajax.doGet(s, ValidacioFinalitzada, "text/plain", null); 
}

function EnviarRespostaAccioValidacio(despatxada)
{
var cdns=new Array();
	
	if(Accio.servidor)
	{
		cdns.push(DonaNomServidorSenseCaracterFinal(Accio.servidor), "?comanda=GuardaResultatValidacio&", 
			 (Accio.id_trans ? ("IdTrans="+Accio.id_trans+ "&"): ""));
		 if(Accio.coord)
			 cdns.push("X=",Accio.coord.x,"&Y=",Accio.coord.y);
		 cdns.push("&EstatComanda=", (despatxada ? "Despatxada" : "Cancellada"));
		//For per tots el valors si cal
		if(despatxada && Accio.valors)
		{
			for(var i=0; i<Accio.valors.length;i++)
				cdns.push("&SelecObj",i,"=",Accio.valors[i]);
		}
		var s=cdns.join("");

		//envio la reposta
		setTimeout("FesPeticioAjaxValidacio(\""+s+"\");",30);
		
		//Tanco la finestra de consulta si és una finestra emergent
		if(ParamCtrl.TipusConsulta==consul_finestra_de_cop && ConsultaWindow && ConsultaWindow.closed==false)
			setTimeout("ConsultaWindow.close();",300); 	
		else if(ParamCtrl.TipusConsulta==consul_incrus_de_cop)
			hideFinestraLayer(this, "multi_consulta");
	}
		
}//Fi de EnviarRespostaAccioValidacio()


function IniciaFinestraConsulta(win)
{
var cdns=new Array();

	/*L'us del següent setTimeOut de 300 mseg i del setTimeOut de 30mseg que hi ha dins de PopDownFinestra_multi_consulta()
	  es necessari en Netscape per evitar 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status] (i potser també en els
	  altres navegadors). Això està explicat a: http://www.captain.at/howto-ajax-parent-opener-window-close-error.php*/
	if(ParamCtrl.TipusConsulta==consul_finestra_de_cop && isFinestraLayer(this, "multi_consulta"))
		cdns.push("<img src=\"",
				  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
				  "pop_down.gif\" alt=\"pop down\" onClick=\"opener.PopDownFinestra_multi_consulta();setTimeout('this.close()', 300);\" align=\"right\">");

	cdns.push("<center>",
		(Accio && Accio.accio&accio_validacio) ?  
		    ("<div align=\"left\" class=\"TextValidacio\">" +
		     DonaCadena3("S'ha seleccionat la següent coordenada:","Se ha seleccionado la siguiente coordenada:","The following coordinate has been selected:") +
		     "</div>") : "",
		"<div align=\"center\" id=\"LayerPuntConsulta\" class=\"layerpuntconsultat\">",
		"<b>", DonaCadena3("Punt", "Punto", "Point"),"</b>",
		 (DonaValorDeCoordActual(PuntConsultat.x,PuntConsultat.y,true,false)), "</div>");
		 
	if(Accio && Accio.accio&accio_validacio) 
	{
	   //Actualitzo el punt consultat	   
	   Accio.coord.x=PuntConsultat.x;
	   Accio.coord.y=PuntConsultat.y;
	   	   
	   cdns.push("<div align=\"left\" class=\"TextValidacio\"><ul><li>",
		     DonaCadena3("Si és correcte, ja la pot validar.", "Si es correcta, ya la puede validar.", "If it is correct, already can validate it."),
		     "<br>",  DonaCadena3("Es tancarà la finestra de navegació i tornarà al formulari.", 
		     			 "Se cerrará la ventana de navegación y volverá al formulario.",
					 "Browser window will be closed and will return to form."),
		     "<br><br><li>", DonaCadena3("Si és incorrecte, torni a clicar sobre la vista.", 
		     			 "Si es incorrecta, vuelva a cliquear sobre la vista.",
					 "If it is incorrect, it clicks on the view again."),
		     "</ul><form name=\"Validar\"><input type=\"button\" value=\"",
		     DonaCadena3("Validar Coordenada\"", "Validar Coordenada\"", "Validated Coordinate\""),
		     (ParamCtrl.TipusConsulta==consul_incrus_de_cop ?
			     " onClick=\"EnviarRespostaAccioValidacio(true);\"> <input type=\"button\" value=\"" :
			     " onClick=\"opener.EnviarRespostaAccioValidacio(true);\"> <input type=\"button\" value=\""), 
		     DonaCadena3("Cancel·lar\"","Cancelar\"", "Cancel\""), 
     		     (ParamCtrl.TipusConsulta==consul_incrus_de_cop ?
			     " onClick=\"EnviarRespostaAccioValidacio(false);\"></form></div>" :
			     " onClick=\"opener.EnviarRespostaAccioValidacio(false);\"></form></div>"));
	}
	n_consultes_digi_zero=n_capes_digi_consultables=0;

	if(CapaDigi)
	{
		RespostaConsultaObjDigiXML=new Array();
		for (var i=0; i<CapaDigi.length; i++)
		{		
			if(!CapaDigi[i].objecte)
				continue;
			for(var j=0; j<CapaDigi[i].objecte.length; j++)
			{
				if (EsObjDigiConsultable(i,j))
				{
					if(!CapaDigi[i].objecte.atributs)
					{
						cdns.push("<div align=\"left\" id=\"LayerObjDigiConsulta",i,"_",j,"\" class=\"layerresposta\">",
						   "<span class='TitolRepostaConsulta'>",
						   (DonaCadena(CapaDigi[i].DescLlegenda)?
						   	DonaCadena(CapaDigi[i].DescLlegenda) : (CapaDigi[i].desc ? CapaDigi[i].desc :  CapaDigi[i].nom)),
						   "</span><br>",(DonaCadena3("Esperant dades...", "Esperando datos...", "Waiting for data...")),"</div>");
					   
						RespostaConsultaObjDigiXML[RespostaConsultaObjDigiXML.length]=new CreaRespostaConsultaObjDigiXML(CapaDigi, i, j, win,
																 "LayerObjDigiConsulta"+i+"_"+j);
					}					
					else
						cdns.push("<div align=\"left\" id=\"LayerObjDigiConsulta",i,"_",j,"\" class=\"layerresposta\">",
						(MostraConsultaCapaDigitalitzadaComHTML(i,j)),"</div>");
				}
			}
		}
	}
	for (var i=0; i<capa.length; i++)
	{
		if (EsCapaConsultable(i))
		{			
			cdns.push("<div align=\"left\" id=\"LayerConsulta",i,"\" class=\"layerresposta\"><b>",
				(DonaCadena(capa[i].DescLlegenda) ? DonaCadena(capa[i].DescLlegenda): capa[i].nom),
				(capa[i].animable&multitime? " "+DonaDataBreuComAText(i, -1) : ""),
				"</b><br>",(DonaCadena3("Esperant dades...", "Esperando datos...", "Waiting for data...")),"</div>");
			RespostaConsultaXML[i]=new CreaRespostaConsultaXML(capa[i], i, win,"LayerConsulta"+i);
		}
	}
	cdns.push("</center>");
	var s=cdns.join("");
	if(ParamCtrl.TipusConsulta==consul_incrus_de_cop)
	{	    
	    contentFinestraLayer(win, "multi_consulta", s);	
	    if(ConsultaWindow && ConsultaWindow.closed==false)
			ConsultaWindow.close();
	}
	else //if(ParamCtrl.TipusConsulta==consul_finestra_de_cop)	
	    contentLayer(getLayer(win, "multi_consulta"), s);
	FesPeticioAjaxConsulta();
	FesPeticioAjaxConsultaObjDigi();	
}

//2.- Tradicional
function CreaPuntConsultat(win)  //Escriu la coordenada del punt consultat.
{
    if (win)
    {
		with (win)
		{ 
			document.open();
			document.write("<html><body"+
				((parent.tools) ? " BGCOLOR=\"" + ParamCtrl.ColorFonsPlana + "\"" : "") +
	    	           " TOPMARGIN=\"0\" LEFTMARGIN=\"2\" MARGINWIDTH=\"2\" MARGINHEIGHT=\"2\">"+
			//"Punt consultat", "Punto consultado", "Queried point"
    	           "<PRE>"+this.DonaCadena3("Punt", "Punto", "Point") +": ("+
				   this.OKStrOfNe(this.PuntConsultat.x,this.ParamCtrl.NDecimalsCoordXY)+
				   ", "+
				   this.OKStrOfNe(this.PuntConsultat.y,this.ParamCtrl.NDecimalsCoordXY)+
				   ")</PRE>"+
				   "</html>");
			document.close();
		}
    }
}

function CreaBotonsConsulta(win, anterior, posterior)
{
    if (win)
    {
		with (win)
		{ 
			var cdns=new Array();
			document.open();
			
			cdns.push("<html><body bgcolor=",
							   ((parent.tools) ? "\"" + ParamCtrl.ColorFonsPlana + "\"" : "\"#D4D0C8\"") ,
							   " text=\"#000000\" BOTTOMMARGIN=\"0\" TOPMARGIN=\"0\" LEFTMARGIN=\"2\" MARGINWIDTH=\"2\" MARGINHEIGHT=\"2\">",
							   "<form METHOD=\"POST\"",
				   ((!parent.tools) ? " onSubmit=\"return parent.consult1.TancaCaixaConsulta();\"" : "") ,
							   "><center>");
			if (anterior)
				cdns.push("<input TYPE=\"button\" VALUE=\"",
					(this.DonaCadena3("Anterior capa", "Anterior capa", "Previous layer")),
					"\" onClick=\"((parent.tools)?CreaConsulta(parent, -1):parent.opener.CreaConsulta(parent, -1));\">");
			if (posterior)
				cdns.push("<input TYPE=\"button\" VALUE=\"",
					(this.DonaCadena3("Següent capa", "Siguiente capa", "Next layer")),
					"\" onClick=\"((parent.tools)?CreaConsulta(parent, 1):parent.opener.CreaConsulta(parent, 1));\">");
			if (!parent.tools)
				cdns.push("&nbsp;&nbsp;&nbsp;<input TYPE=\"submit\" VALUE=\"",
				(this.DonaCadena3("Tancar", "Cerrar", "Close")),"\">");
			cdns.push("</center></form></body></html>");
			var s=cdns.join("");
			document.write(s);
			document.close();
		}
    }
}

function CreaTitolConsulta(win, i_capa)  //Escriu el títol de la capa consultada
{
	if (win)
	{
	   with (win)
	   { 
			document.open();
			document.write("<html><body"+
					   ((parent.tools) ? " BGCOLOR=\"" + ParamCtrl.ColorFonsPlana + "\"" : "") +
							  " TOPMARGIN=\"0\" LEFTMARGIN=\"2\" MARGINWIDTH=\"2\" MARGINHEIGHT=\"2\"><pre><b>"+
					(DonaCadena(capa[i_capa].DescLlegenda) ? DonaCadena(capa[i_capa].DescLlegenda): capa[i_capa].nom ) +
					   "</b><hr><pre></BODY></html>");
			document.close();
		}
    }
}

function RedibuixaConsultaCapa(win, i_capa)
{
	win.location.href=DonaRequestGetFeatureInfo(i_capa, false);
}

function DonamTextAtributsConsultaCapaDigitalitzadaComHTML(i_capa_digi, i_obj_digi)
{

	if(!CapaDigi[i_capa_digi].objecte || !CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs)
		return "";
	var cdns=new Array();
	for(var i=0; i<CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs.length; i++)
	{
		if(CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].mostrar==false)
			continue;
		if(CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].separador)
			cdns.push(CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].separador);
					
		cdns.push("<b>",(CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].descripcio ?
					 	CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].descripcio:
						CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].nom ));
						
		if(CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].unitats)
			cdns.push("(" , CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].unitats, ")");
		cdns.push(": </b>");
		if(CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].esImatge)
		{
			if(CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].esLink)
			{
				cdns.push("<a href='",
					CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].valor ,
					"' target='_blank'><img src='" ,
					CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].valor ,
					"' border='0' align='bottom'></a>");
			}					
			else
			{
				cdns.push("<img src='" ,
					CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].valor ,
					"' border='0' align='bottom'>");
			}												
		}
		else if(CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].esLink)
		{
			cdns.push("<a href='",
					CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].valor,
					"' target='_blank'>",
					CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].valor,
					"</a>");
		}
		else
		{
			cdns.push(CapaDigi[i_capa_digi].objecte[i_obj_digi].atributs[i].valor);
		}
		cdns.push("<br>");
	}
	return cdns.join("");
}

function RedibuixaConsultaObjDigi(win)
{
var punt;

	if(!CapaDigi[IElemActual].CRS  || CapaDigi[IElemActual].CRS.toUpperCase()==ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS.toUpperCase())
		punt=CapaDigi[IElemActual].objecte[ISubElem].punt[0];			        
	else
		punt=CapaDigi[IElemActual].objecte[ISubElem].puntCRSactual[0];

	win.document.open();
	win.document.write("<html><body BOTTOMMARGIN=\"0\" TOPMARGIN=\"0\" LEFTMARGIN=\"2\" MARGINWIDTH=\"2\" MARGINHEIGHT=\"2\"><PRE><b>"+
			DonaCadena(CapaDigi[IElemActual].desc)+"</b><br>"+
			DonaCadena3("Punt", "Punto", "Point") +": ("+
			OKStrOfNe(punt.x,ParamCtrl.NDecimalsCoordXY)+
			", "+
			OKStrOfNe(punt.y,ParamCtrl.NDecimalsCoordXY)+
			")<br>"+
			DonamTextAtributsConsultaCapaDigitalitzadaComHTML(IElemActual, ISubElem)+
			"</PRE></html>");
	win.document.close();
}

var IElemActual=0;
var ISubElem=0;
function DonaElementConsultaSeguent(increment)
{
var n_elem=capa.length;
var i_elem2=IElemActual;

	if(CapaDigi)
		n_elem+=CapaDigi.length;
	if ((i_elem2<0 && increment<0) || (i_elem2>=n_elem && increment>0))
		return i_elem2;

	for (i_elem2+=increment; i_elem2<n_elem && i_elem2>=0; i_elem2+=increment)
	{
		if (CapaDigi && i_elem2<CapaDigi.length && CapaDigi[i_elem2].objecte)  // és un objecte digitalitzat
		{
			for(var i_obj=0; i_obj<CapaDigi[i_elem2].objecte.length; i_obj++)
			{
				if (EsObjDigiConsultable(i_elem2, i_obj))
				{
					ISubElem=i_obj;
					return i_elem2;
				}
			}
		}
		else  // és una capa
		{
			if(CapaDigi)
			i=i_elem2-CapaDigi.length;
			else
				i=i_elem2;
			if (EsCapaConsultable(i))
				break;
		}
	}
	return i_elem2;
}

function CreaConsulta(win, increment)
{
var n_elem=capa.length;

	if(CapaDigi)
		n_elem+=CapaDigi.length;
	
	if (ParamCtrl.TipusConsulta==consul_finestra_de_cop ||ParamCtrl.TipusConsulta==consul_incrus_de_cop)
	/*Això no cal que ho torni a comprovar ja ho he fet a ConsultaSobreVista
	  (win==this || ParamCtrl.PlantillaConsulta))
	  i he modificat el TipusConsulta si calia */
	{
		IniciaFinestraConsulta(win);
		return;
	}

	if ((IElemActual<0 && increment<0) || (IElemActual>=n_elem && increment>0))
		return;

	if (increment==0)  //Estem al principi.
	{
		if (!parent.tools)
			document.title=DonaCadena3("Consulta", "Consulta", "Query") + "; " + DonaCadena(ParamCtrl.titol);
		CreaPuntConsultat(win.consulta_punt);
		IElemActual=-1;
		increment=1;
	}
	IElemActual=DonaElementConsultaSeguent(increment);
	if (IElemActual<n_elem && IElemActual>=0)
	{
		if (CapaDigi && IElemActual<CapaDigi.length)
			win.consulta_info.location.href="consult_obj_digi.htm";
		else
		{
			CreaTitolConsulta(win.consulta_titol, IElemActual-CapaDigi.length);
			RedibuixaConsultaCapa(win.consulta_info, IElemActual-CapaDigi.length);
		}
	}
	else
	    win.consulta_info.location.href=DonaCadena3("noconsul.htm", "noconsul_spa.htm", "noconsul_eng.htm");

	var anterior=true;
	var posterior=true;
	if (0>IElemActual || 0>DonaElementConsultaSeguent(-1))
		anterior=false;
	if (n_elem<=IElemActual || n_elem<=DonaElementConsultaSeguent(1))
		posterior=false;		
	/*Això no es pot fer a un plana que no has creat tu. 07/07/2005 
	if (parent.tools)
		win.consulta_info.document.body.bgColor=ParamCtrl.ColorFonsPlana;
	*/
	CreaBotonsConsulta(win.consulta_botons, anterior, posterior);
}

var ConsultaWindow=null;
var i_capa_consulta=0;
var PuntConsultatIJ=new CreaPunt2D( 0.0, 0.0);  //en coordenades píxel
var PuntConsultat=new CreaPunt2D( 0.0, 0.0);

function EditarPunts(event_de_click)
{
	
//	PuntConsultatIJ.x=((this.document.body.scrollLeft) ? this.document.body.scrollLeft : 0) + event_de_click.clientX-OrigenEsquerraVista;
//	PuntConsultatIJ.y=((this.document.body.scrollTop) ? this.document.body.scrollTop : 0) + event_de_click.clientY-OrigenSuperiorVista;
//	alert(event_de_click.clientY + " : " + PuntConsultatIJ.y);
	PuntConsultat.x=DonaCoordXDeCoordSobreVista(event_de_click.clientX);
	PuntConsultat.y=DonaCoordYDeCoordSobreVista(event_de_click.clientY);
	
	if (ParamCtrl.IconaEdicio)
	{
		if (i_objdigi_edicio==-1)
	    {
			i_objdigi_edicio=CapaDigi.length;
			CapaDigi[i_objdigi_edicio]=new CreaObjecteDigitalitzat(null, null, null, null, null,
					"S", 
					0,0,0,
					new Array(new CreaFeature(0, null, 0, new Array(new CreaPunt2D(PuntConsultat.x, PuntConsultat.y)), null, false)), 
					new Array(new CreaEstilCapaDigi(null, //nom
													null, //descripció
													null,  //descripció prèvia als items de la llegenda
													new Array (new CreaItemVis(0, ParamCtrl.IconaEdicio)),
													null, //Icona seleccionat
													null, //icones llegenda
													1, //nombre de columnes a la llegenda
													null)),
					0,
					1, 
					zoom[zoom.length-1].costat, 
					zoom[0].costat, 
					null, 
					null,
					no,
					no, 
					no, 
					no,
					no,
					null);
		
	    }
	    else
	    {
			CapaDigi[i_objdigi_edicio].objecte[0].punt[0].x=PuntConsultat.x;
			CapaDigi[i_objdigi_edicio].objecte[0].punt[0].y=PuntConsultat.y;		
	    }	    
	    CapaDigi[i_objdigi_edicio].objecte[0].seleccionat=false;	
		CapaDigi[i_objdigi_edicio].visible=si;
	    
	    CreaVista();
	}
	if(ParamCtrl.TipusBarraBotons&boto_inserta && ParamCtrl.FuncioIconaEdicio)
		eval(ParamCtrl.FuncioIconaEdicio);		
	else if(iCapaEditable!=-1 && CapaDigi[iCapaEditable].FuncioEdicio)
		eval(CapaDigi[iCapaEditable].FuncioEdicio);		
	
}//Fi de EditarPunts()



function ConsultaSobreVista(event_de_click)
{
	PuntConsultatIJ.x=((this.document.body.scrollLeft) ? this.document.body.scrollLeft : 0) + event_de_click.clientX-OrigenEsquerraVista;
	PuntConsultatIJ.y=((this.document.body.scrollTop) ? this.document.body.scrollTop : 0) + event_de_click.clientY-OrigenSuperiorVista;
	PuntConsultat.x=DonaCoordXDeCoordSobreVista(event_de_click.clientX);
	PuntConsultat.y=DonaCoordYDeCoordSobreVista(event_de_click.clientY);
	
	if (ParamCtrl.IconaConsulta || IconaValidacio)
	{
	    var cal_crear;
	    if (i_objdigi_consulta==-1)
	    {
			i_objdigi_consulta=CapaDigi.length;
			CapaDigi[i_objdigi_consulta]=new CreaObjecteDigitalitzat(null, null, null, null, null,
					"S", 
					0,0,0,
					new Array(new CreaFeature(0, null, 0, new Array(new CreaPunt2D(PuntConsultat.x, PuntConsultat.y)), null, false)), 
					new Array(new CreaEstilCapaDigi(null, //nom
													null, //descripció
													null,  //descripció prèvia als items de la llegenda
													new Array (new CreaItemVis(0, ParamCtrl.IconaConsulta)),
													new Array (new CreaItemVis(0, IconaValidacio)), //Icona seleccionat
													null, //icones llegenda
													1, //nombre de columnes a la llegenda
													null)),
					0,
					1, 

					zoom[zoom.length-1].costat, 
					zoom[0].costat, 
					null, 
					null, 
					no, 
					no, 
					no, 
					no,
					no,
					null);
			cal_crear=true;
	    }
	    else
	    {
			CapaDigi[i_objdigi_consulta].objecte[0].punt[0].x=PuntConsultat.x;
			CapaDigi[i_objdigi_consulta].objecte[0].punt[0].y=PuntConsultat.y;		
			CapaDigi[i_objdigi_consulta].visible=ara_no;
			cal_crear=false;
	    }	    

	    if(Accio && Accio.accio&accio_validacio && IconaValidacio)
	    { 
		    CapaDigi[i_objdigi_consulta].objecte[0].seleccionat=true;	
			CapaDigi[i_objdigi_consulta].visible=si;
	    }
	    else if (ParamCtrl.IconaConsulta)
	    { 
	    	CapaDigi[i_objdigi_consulta].objecte[0].seleccionat=false;	
			CapaDigi[i_objdigi_consulta].visible=si;
	    }
	    if (cal_crear)
	    {
			insertContentLayer(getLayer(this, "z_rectangle"), "beforeBegin", CreaCapaDigiLayer(i_objdigi_consulta));
			var zindex_temp=getzIndexLayer(getLayer(this, "l_capa_digi"+i_objdigi_consulta));
			setzIndexLayer(getLayer(this, "l_capa_digi"+i_objdigi_consulta), getzIndexLayer(getLayer(this, "tel_trans")));
			setzIndexLayer(getLayer(this, "tel_trans"), zindex_temp);
        }
	    else
	    {
			contentLayer(getLayer(this, "l_capa_digi"+i_objdigi_consulta), DonaCadenaHTMLCapaDigi(i_objdigi_consulta));
	    }
	}

	if (ParamCtrl.TipusConsulta==consul_incrus_de_cop && isFinestraLayer(this, "multi_consulta")) //consulta incrustada en una layer del estil finestra
	{
		if(ParamCtrl.PlantillaConsulta)
   		     afegeixBotoABarraFinestraLayer(this, "multi_consulta", boto_pop_up);
		showFinestraLayer(this, "multi_consulta");
		CreaConsulta(this, 0);	
	}
	else if (parent.consulta_info)  //Consulta incrustada en un frame
		CreaConsulta(parent, 0);
	else  //Cas normal, s'obre una finestre a part, multiconsulta o normal
	{
		if (ConsultaWindow==null || ConsultaWindow.closed)
		{						
			if (ParamCtrl.TipusConsulta==consul_finestra_de_cop && ParamCtrl.PlantillaConsulta)
			{
				ConsultaWindow=window.open(ParamCtrl.PlantillaConsulta.src,"FinestraConsulta",'toolbar=no,status=no,scrollbars=no,location=no,menubar=no,directories=no,resizable=yes,width='+ParamCtrl.PlantillaConsulta.ample+',height='+ParamCtrl.PlantillaConsulta.alt);
			}
			else
			{
				ConsultaWindow=window.open("consulta.htm","FinestraConsulta",'toolbar=no,status=no,scrollbars=no,location=no,menubar=no,directories=no,resizable=yes,width=500,height=500');
				ParamCtrl.TipusConsulta=consul_finestra_seguent_capa;
			}
			ShaObertPopUp(ConsultaWindow);
		}
		else
		{
			CreaConsulta(ConsultaWindow, 0);
			ConsultaWindow.focus();
		}
	}
}

//Anar a coordenada
function FormAnarCoord(proj, x, y, m)
{
	this.proj=proj;
	this.x=x;
	this.y=y;
	this.m_voltant=m;
}//Fi de FormAnarCoord()

function OmpleFinestraAnarCoordenada()
{
var cdns=new Array();
    cdns.push("<form name=\"AnarCoord\"><table class=\"Verdana11px\" width=\"100%\"><tr><td align=\"center\"><input name=\"proj\" type=\"radio\" value=\"0\" id=\"proj_anarcoord\"",
	(form_anar_coord.proj ? "checked" : "") ,
	" onClicK=\"CanviaEtiquetes(0);\"><label for=\"proj_anarcoord\" >",
	(DonaCadena3("Proj", "Proy", "Proj")),
	"</label>  <input name=\"proj\" type=\"radio\" value=\"1\" id=\"longlat_anarcoord\"",
	(form_anar_coord.proj ? "" : "checked"), 
	" onClicK=\"CanviaEtiquetes(1);\"><label for=\"longlat_anarcoord\" >Long/Lat</label></td></tr><tr><td align=\"right\"><label id=\"X_anarcoord\" for=\"coordX_anarcoord\">X: </label><input class=\"Verdana11px\" id=\"coordX_anarcoord\" name=\"coordX\" type=\"text\" size=\"10\" value=\"",form_anar_coord.x,"\"><label id=\"Y_anarcoord\" for=\"coordY_anarcoord\"> Y: </label><input class=\"Verdana11px\" id=\"coordY_anarcoord\" name=\"coordY\" type=\"text\" size=\"10\" value=\"",form_anar_coord.y,"\"></td></tr><tr><td align=\"right\"><label for=\"mVoltant_anarcoord\">",
	(DonaCadena3("Zona al voltant (m):", "Zona alrededor (m):", "Round zone (m):")),
	" </label><input class=\"Verdana11px\" id=\"mVoltant_anarcoord\" name=\"mVoltant\" type=\"text\" size=\"10\" value=\"",form_anar_coord.m_voltant,"\"></td></tr><tr><td align=\"center\"><input class=\"Verdana11px\" type=\"button\" name=\"Acceptar\" value=\"",
	(DonaCadena3("Anar-hi", "Ir", "Go to")),
	"\" onClick=\"AnarACoordenada(form);\"> <input class=\"Verdana11px\" type=\"button\" name=\"Tancar\" value=\"",
	(DonaCadena3("Tancar", "Cerrar", "Close")),
	"\" onClick=\"TancaFinestra_anarCoord();\"></td></tr></table></form>");
	var s=cdns.join("");
	contentFinestraLayer(this, "anarCoord", s); 
}//Fi de OmpleFinestraAnarCoordenada()

function MostraFinestraAnarCoordenada()
{
	OmpleFinestraAnarCoordenada();
	if (i_objdigi_anar_coord!=-1)
	{
		CapaDigi[i_objdigi_anar_coord].visible=no;
		CreaVista();
	}
	showFinestraLayer(this, "anarCoord");
	setzIndexFinestraLayer(this, "anarCoord",(layerList.length-1));
}//Fi de MostraFinestraAnarCoordenada()

function TancaFinestra_anarCoord()
{
	hideFinestraLayer(this, "anarCoord");
	if (i_objdigi_anar_coord!=-1)
	{
	   CapaDigi[i_objdigi_anar_coord].visible=no;
	   CreaVista();
	}
}//Fi de TancaFinestra_anarCoord()

var TipusEventGetMap=1;
var TipusEventGetFeatureInfo=2;
var TipusEventGetFeature=3;
var TipusEventGetCoverage=4;
var TipusEventDonaProjeccioConsultaTipica=5;
var TipusEventWMTSTile=6;
var TipusEventWMTSTileSOAP=7;

function CreaEventConsola(titol, desc, tipus)
{
	this.titol=titol;
	this.desc=desc; 
	this.tipus=tipus;
	this.data=new Date();  //La data actual
}

var EventConsola=new Array();

function CreaIOmpleEventConsola(titol, desc, tipus)
{
	elem=getLayer(this, "consola_finestra");
	if(isLayer(elem))
	{
		EventConsola[EventConsola.length]=new CreaEventConsola(titol, desc, tipus);
		if (isLayerVisible(elem))
			OmpleFinestraConsola();
	}
}

function MostraFinestraConsola()
{
	if (!isFinestraLayer(this, "consola"))
	{
		alert(DonaCadena3("No has creat cap finestra de nom \"consola\" al index.htm. No puc mostrar la consola.", 
			  "No ha creado ninguna ventana de nombre \"consola\" en index.htm. No puedo mostrar la consola.",
			  "You have not created any layer of type \"Finestra\" with \"consola\" name in index.htm. I can not show you the console."));
		return;
	}
	showFinestraLayer(this, "consola");
	OmpleFinestraConsola();
	setzIndexFinestraLayer(this, "consola",(layerList.length-1));
}

function MostraFinestraInserta()
{
	if (!isFinestraLayer(this, "inserta"))
	{
		alert(DonaCadena3("No has creat cap finestra de nom \"inserta\" al index.htm. No puc mostrar la finestra.", 
			  "No ha creado ninguna ventana de nombre \"inserta\" en index.htm. No puedo mostrar la ventana.",
			  "You have not created any layer of type \"Finestra\" with \"inserta\" name in index.htm. I can not show you the window."));
		return;
	}
	showFinestraLayer(this, "inserta");
	elem=getLayer(this, "inserta_finestra");
	OmpleFinestraInserta(elem);
	setzIndexFinestraLayer(this, "inserta",(layerList.length-1));
}
function EsborraTotIOmpleEventConsola()
{
	while (EventConsola.length)
	{
		delete EventConsola[EventConsola.length-1];
		EventConsola.pop();
	}
	if (isLayerVisible(elem))
		OmpleFinestraConsola();
}

function OmpleFinestraConsola()
{
var cdns=new Array();
var temp;
    cdns.push("<center><table border=0 width=95%><tr><td><font size=1><a href=\"javascript:void(0);\" onClick=\"EsborraTotIOmpleEventConsola();\">", DonaCadena3("Esborra tot", "Borrar todo", "Delete all"),"</a><br>");
    for (var i=0; i<EventConsola.length; i++)
    {
		if(EventConsola[i].tipus==TipusEventWMTSTileSOAP)
		{
			temp=EventConsola[i].desc;
			temp=temp.replace(/</g, "&lt;");
			temp=temp.replace(/>/g, "&gt;");
			temp=temp.replace(/\n/g, "<br>");		
			cdns.push("<b>", EventConsola[i].titol, "</b> (", DonaDataISO8601ComAText(EventConsola[i].data), ")<br>",
			  "<i>",temp,"</i><p>");
		}
		else
	        cdns.push("<b>", EventConsola[i].titol, "</b> (", DonaDataISO8601ComAText(EventConsola[i].data), ")<br>",
			  "<i>", EventConsola[i].desc, "</i><p>");
    }
    cdns.push("</font></td></tr></table>");
    var s=cdns.join("");

    contentFinestraLayer(this, "consola", s);
}

/*function TancaFinestra_consola()
{
	hideFinestraLayer(this, "consola");
}//Fi de TancaFinestra_anarCoord()*/

function DonaEnllacAAquestNavegador()
{
var cdns=new Array();
var cal_coma;

	var i=parent.location.href.indexOf("?");

	if (i==-1)	
		cdns.push(parent.location.href);
	else
		cdns.push(parent.location.href.substring(0, i));

	cdns.push("?BBOX=", ParamInternCtrl.EnvActual.MinX, ",", ParamInternCtrl.EnvActual.MinY, ",", ParamInternCtrl.EnvActual.MaxX, ",", ParamInternCtrl.EnvActual.MaxY, 
			"&LAYERS=");

	cal_coma=false;
	for (var i=0; i<capa.length; i++)
	{
		if (capa[i].visible==si || capa[i].visible==semitransparent)
		{
			if (cal_coma)
				cdns.push(",", capa[i].nom);
			else
			{
				cdns.push(capa[i].nom);
				cal_coma=true;
			}
		}
	}

	//Estils
	for (var i=0; i<capa.length; i++)
	{
		if ((capa[i].visible==si || capa[i].visible==semitransparent) && 
			(((capa[i].estil && capa[i].estil.length>1) || capa[i].visible==semitransparent)))
		{
			cdns.push("&STYLES=");
			cal_coma=false;
			for (var i=0; i<capa.length; i++)
			{
				if (capa[i].visible==si || capa[i].visible==semitransparent)
				{
					if (cal_coma)
						cdns.push(",");
					else
						cal_coma=true;
					if (capa[i].estil && capa[i].estil.length>1)
					{
						cdns.push(capa[i].estil[i].nom);
						if (capa[i].visible==semitransparent)
							cdns.push(":SEMITRANSPARENT");
					}
					else if (capa[i].visible==semitransparent)
						cdns.push("SEMITRANSPARENT");
				}
			}
			break;
		}
	}

	cdns.push("&QUERY_LAYERS="); 
	cal_coma=false;
	for (var i=0; i<capa.length; i++)
	{
		if (capa[i].consultable==si)
		{
			if (cal_coma)
				cdns.push(",", capa[i].nom);
			else
			{
				cdns.push(capa[i].nom);
				cal_coma=true;
			}
		}
	}
	if (ParamCtrl.idiomes.length>1)
		cdns.push("&LANGUAGE=", ParamCtrl.idioma);
	if (ParamCtrl.ImatgeSituacio.length>1)
		cdns.push("&CRS=", ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS);
	return cdns.join("");
}

function MostraFinestraEnllac()
{
	showFinestraLayer(this, "enllac");
	OmpleFinestraEnllac();
	setzIndexFinestraLayer(this, "enllac", (layerList.length-1));
}
function MostraFinestraEnllacWMS()
{
	showFinestraLayer(this, "enllacWMS");
	OmpleFinestraEnllacWMS();
	setzIndexFinestraLayer(this, "enllacWMS", (layerList.length-1));
}

function DonaDescripcioTipusServidor(tipus)
{
    if (tipus==TipusWMS)
		return "WMS";
    if (tipus==TipusWMS_C)
		return "WMS-C";
    if (tipus==TipusWMTS_REST)
		return "WMTS RESTful";
    if (tipus==TipusWMTS_KVP)
		return "WMTS KVP";
    if (tipus==TipusWMTS_SOAP)
		return "WMTS SOAP";
    if (tipus==TipusGoogle_KVP)
		return "Google KVP";
    if (tipus==TipusWFS)
		return "WFS";
    return "";
}

function DonaEnllacCapacitatsServidorDeCapa(i_capa)
{
var cdns=new Array();

	if(capa[i_capa].tipus==TipusWMTS_SOAP)
	{
		cdns.push("<a href=\"javascript:void(0);\" onClick=\"FesPeticioCapacitatsPost(\'", 
				DonaNomServidorSenseCaracterFinal(capa[i_capa].servidor),"\', \'",DonaVersioComAText(capa[i_capa].versio),"\', ",
				capa[i_capa].tipus, ");\">",capa[i_capa].servidor, " (", 
				DonaDescripcioTipusServidor(capa[i_capa].tipus), ")", "</a><br>");
	}
	else
	{
		cdns.push("<a href=\"", DonaRequestServiceMetadata(capa[i_capa].servidor, 
				DonaVersioComAText(capa[i_capa].versio), capa[i_capa].tipus), "\" target=\"_blank\">", 
				capa[i_capa].servidor, " (", DonaDescripcioTipusServidor(capa[i_capa].tipus), ")","</a><br>");
	}
	return cdns.join("");
}

/*Només enumero el servidor local si s'usa o si el nombre da capes és 0. Tinc en compte
els servidors WFS.*/
function OmpleFinestraEnllacWMS()
{
var elem=getLayer(this, "enllacWMS_finestra");
    
    if(isLayer(elem) && isLayerVisible(elem))
    {
		var serv_l=null;
		var serv_temp;	
		var cdns=new Array();
		var cdns2=new Array();  //Array per excriure
		var i, i_capa;
		var tipus_acumulat;
		
		for (i_capa=0; i_capa<capa.length; i_capa++)
			cdns.push(capa[i_capa].servidor);
		
		for (i_capa=0; i_capa<CapaDigi.length; i_capa++)
		{
			if (CapaDigi[i_capa].servidor)
				cdns.push(CapaDigi[i_capa].servidor);
		}

		cdns2.push("<center><table border=0 width=95%><tr><td><font size=1>");
		if(cdns.length>0)
		{		    
			cdns.sort();
			if (ServidorLocal)
			{
				for (i=0; i<cdns.length; i++)
				{
					if (ServidorLocal==cdns[i])
					{
						//Necessito saber el tipus.
						tipus_acumulat=0;
						for (i_capa=0; i_capa<capa.length; i_capa++)
						{
							if (cdns[i]==capa[i_capa].servidor)
							{
								if (tipus_acumulat&capa[i_capa].tipus)
									continue;
								if (tipus_acumulat==0)
								{
									cdns2.push(DonaCadena3("Servidor Principal d'aquest navegador",
												"Servidor Principal de este navegador", 
												"Main Sever of this browser"),":<br>");
								}				
								tipus_acumulat|=capa[i_capa].tipus;
								cdns2.push(DonaEnllacCapacitatsServidorDeCapa(i_capa));
							}
						}
						for (i_capa=0; i_capa<CapaDigi.length; i_capa++)
						{
							if (CapaDigi[i_capa].servidor && cdns[i]==CapaDigi[i_capa].servidor)
							{
								if (tipus_acumulat&CapaDigi[i_capa].tipus)
									continue;
								tipus_acumulat|=CapaDigi[i_capa].tipus;
								cdns2.push("<a href=\"", DonaRequestServiceMetadata(CapaDigi[i_capa].servidor, 
											DonaVersioComAText(CapaDigi[i_capa].versio), TipusWFS), "\" target=\"_blank\">", 
										   CapaDigi[i_capa].servidor, " (", DonaDescripcioTipusServidor(TipusWFS), ")","</a><br>");
							}
						}
						cdns2.push("<P>", DonaCadena3("Altres servidors usats", "Otros servidores usados", "Others servers used"), ":<br>");
							break;
					}
				}
		    }
			for (i=0; i<cdns.length; i++)
			{
				if ((!ServidorLocal || ServidorLocal.toLowerCase()!=cdns[i].toLowerCase()) && (i==0 || cdns[i-1].toLowerCase()!=cdns[i].toLowerCase()))
				{
					tipus_acumulat=0;
					for (i_capa=0; i_capa<capa.length; i_capa++)
					{
						if (cdns[i]==capa[i_capa].servidor)
						{
							if (tipus_acumulat&capa[i_capa].tipus)
								continue;
							tipus_acumulat|=capa[i_capa].tipus;
							cdns2.push(DonaEnllacCapacitatsServidorDeCapa(i_capa));
						}
					}
					for (i_capa=0; i_capa<CapaDigi.length; i_capa++)
					{
						if (CapaDigi[i_capa].servidor && cdns[i].toLowerCase()==CapaDigi[i_capa].servidor.toLowerCase())
						{
							if (tipus_acumulat&CapaDigi[i_capa].tipus)
								continue;
							tipus_acumulat|=CapaDigi[i_capa].tipus;
							cdns2.push("<a href=\"", DonaRequestServiceMetadata(CapaDigi[i_capa].servidor, 
										DonaVersioComAText(CapaDigi[i_capa].versio), TipusWFS), "\" target=\"_blank\">", 
									   CapaDigi[i_capa].servidor, " (", DonaDescripcioTipusServidor(TipusWFS), ")","</a><br>");
						}
					}
				}
			}
		}
		else
		{
			//No hi ha capes
			if(ServidorLocal && VersioServidorLocal && TipusServidorLocal)
			{
				cdns2.push(DonaCadena3("Servidor Principal d'aquest navegador",
						"Servidor Principal de este navegador", 
						"Main Sever of this browser"),":<br><a href=\"",
					DonaRequestServiceMetadata(ServidorLocal, VersioServidorLocal, TipusServidorLocal), "\" target=\"_blank\">", 
					ServidorLocal, " (", DonaDescripcioTipusServidor(TipusServidorLocal), ")","</a><br>");
			}
			else
			{
				cdns2.push(DonaCadena3("No s'han pogut determinar les adreçes dels servidors usats en aquest navegador.",
						   "No se han podido determinar las direcciones de los servidores usados en este navegador.",
						   "It could not determine the servers URL used in this browser."));
			}
		}
		cdns2.push("</font></td></tr></table>");
		contentFinestraLayer(this, "enllacWMS", cdns2.join(""));
	}
}//Fi de OmpleFinestraEnllacWMS()

function OmpleFinestraEnllac()
{
    var elem=getLayer(this, "enllac_finestra");
    if(isLayer(elem) && isLayerVisible(elem))
    {
		var cdns=new Array();
		cdns.push("<center><table border=0 width=95%><tr><td><font size=1>", 
					DonaEnllacAAquestNavegador(),
					"</font></td></tr></table>");
		contentFinestraLayer(this, "enllac", cdns.join(""));
    }
}

function EsPuntDinsAmbitNavegacio(punt)
{
	return EsPuntDinsEnvolupant(punt, ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS);
}//Fi de EsPuntDinsAmbitNavegacio()

function EsPuntDinsEnvolupant(punt, env)
{
	if (punt.x>env.MaxX ||
	    punt.x<env.MinX ||
	    punt.y>env.MaxY ||
	    punt.y<env.MinY)
		return false;	

	return true;
}//Fi de EsPuntDinsEnvolupant()

var PuntCoord=new CreaPunt2D( 0.0, 0.0);

function AnarACoordenada(form)
{
var d;	

	PuntCoord.x=parseFloat(form.coordX.value);
	PuntCoord.y=parseFloat(form.coordY.value);

	if(isNaN(PuntCoord.x) || isNaN(PuntCoord.y))
	{
  	   alert(DonaCadena3("Format de les coordenades erroni:\n S'ha d'indicar un valor numèric.", 
		"Formato de las coordenadas erróneo:\n Se debe indicar un valor numérico.", 
		"Coordinate format is incorrectly:\ It Must indicate a numeric value."));
	   return;	  
	}	

	form_anar_coord.x=PuntCoord.x;
	form_anar_coord.y=PuntCoord.y;

	//Ho transformo si cal de long/lat a les coordenades de la projecció
	if(form.proj[1].checked)
	{
   	   DonaCoordenadesCRS(PuntCoord.x,PuntCoord.y,ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS);
	   PuntCoord.x=crs_x;
	   PuntCoord.y=crs_y;
	   form_anar_coord.proj=false;
	}
	else
	   form_anar_coord.proj=true;

	if(!EsPuntDinsAmbitNavegacio(PuntCoord))
	{
  	   alert(DonaCadena3("El punt sol·licitat està fora de l'àmbit de navegació", "El punto solicitado está fuera del ámbito de navegación", "The requested point is outside browser envelope"));
	   return;
	}

	//Dibuixo la icona per mostrar el punt consultat
	if (ParamCtrl.IconaAnarCoord)
	{
	    if (i_objdigi_anar_coord==-1)
	    {
			i_objdigi_anar_coord=CapaDigi.length;
			CapaDigi[i_objdigi_anar_coord]=new CreaObjecteDigitalitzat(null, //servidor
					null, //versió
					null, //nom capa
					null, //descripció
					null,  //sistema de referència
					"S",   //tipus d'objecte

					0,0,0,
					new Array(new CreaFeature(0, null, 0, new Array(new CreaPunt2D(PuntCoord.x, PuntCoord.y)), null, false)), 
					new Array(new CreaEstilCapaDigi(null, //nom
								null, //descripció
								null,  //descripció prèvia als items de la llegenda
								new Array (new CreaItemVis(0, ParamCtrl.IconaAnarCoord)),
								null, //icona seleccionat
								null, //icones llegenda
								1, //nombre de columnes a la llegenda
								null)),
					0,
					1,
					zoom[zoom.length-1].costat, 
					zoom[0].costat, 
					null, 
					null, 
					no,
					no, 
					si, 
					no, 
					no,
					null);
	    }
	    else
	    {
			CapaDigi[i_objdigi_anar_coord].objecte[0].punt[0].x=PuntCoord.x;
			CapaDigi[i_objdigi_anar_coord].objecte[0].punt[0].y=PuntCoord.y;
			CapaDigi[i_objdigi_anar_coord].visible=si;
	    }
	    CreaVista();
	}
	
	d=parseFloat(form.mVoltant.value);
	if(isNaN(d))
	    d=0;
	form_anar_coord.proj=d;

	if(d>0)
	{
	   var env=DonaEnvDeXYAmpleAlt(PuntCoord.x, PuntCoord.y, d, d);   
    	   //env=AjustaAmbitAAmbitNavegacio(env);
	   PortamAAmbit(env);	
	}
	else
	{
	   PortamAPunt(PuntCoord.x,PuntCoord.y);	
	}
}//Fi de AnarACoordenada() 

function CanviaEtiquetes(sel)
{
	if(sel == 0)
	{
		this.document.getElementById('X_anarcoord').innerHTML = "X: ";
		this.document.getElementById('Y_anarcoord').innerHTML = "Y: ";
	}
	else
	{
		this.document.getElementById('X_anarcoord').innerHTML = "Lon: ";
		this.document.getElementById('Y_anarcoord').innerHTML = "Lat: ";
	}
}//Fi de CanviaEtiquetes()


//Fer un click sobre la vista.

var AmbitZoomRectangle=new CreaExtent(0, 0, 0, 0);
var ZRec_1PuntClient=new CreaPunt2D(0, 0);
var HiHaHagutMoviment=false;
var HiHaHagutPrimerClick=false;

function ClickSobreVista(event_de_click)
{
	if (ParamCtrl.EstatClickSobreVista==estat_click_conloc)
		ConsultaSobreVista(event_de_click);
	else if (ParamCtrl.EstatClickSobreVista==estat_click_editar_punts)
		EditarPunts(event_de_click);
	else if (ParamCtrl.EstatClickSobreVista==estat_click_moumig)
	{
		PortamAPunt(DonaCoordXDeCoordSobreVista(event_de_click.clientX), DonaCoordYDeCoordSobreVista(event_de_click.clientY));
	}
	else if (ParamCtrl.EstatClickSobreVista==estat_click_pan_1)
	{
		AmbitZoomRectangle.MinX=DonaCoordXDeCoordSobreVista(event_de_click.clientX);
		AmbitZoomRectangle.MinY=DonaCoordYDeCoordSobreVista(event_de_click.clientY);
		ZRec_1PuntClient.x=event_de_click.clientX;
		ZRec_1PuntClient.y=event_de_click.clientY;
		ParamCtrl.EstatClickSobreVista=estat_click_pan_2;
	}
	else if (ParamCtrl.EstatClickSobreVista==estat_click_pan_2)
	{
		if (!HiHaHagutMoviment)
			return;
		//Calculo el moviment que s'ha de produir i el faig.
		MouLaVista(AmbitZoomRectangle.MinX-DonaCoordXDeCoordSobreVista(event_de_click.clientX),
		AmbitZoomRectangle.MinY-DonaCoordYDeCoordSobreVista(event_de_click.clientY));
		ParamCtrl.EstatClickSobreVista=estat_click_pan_1;
	}
	else if (ParamCtrl.EstatClickSobreVista==estat_click_zrec_1)
	{
		AmbitZoomRectangle.MinX=DonaCoordXDeCoordSobreVista(event_de_click.clientX);
		AmbitZoomRectangle.MinY=DonaCoordYDeCoordSobreVista(event_de_click.clientY);
		ZRec_1PuntClient.x=event_de_click.clientX;
		ZRec_1PuntClient.y=event_de_click.clientY;
	
		moveLayer2(getLayer(this, "z_rectangle"), 
				 ((this.document.body.scrollLeft) ? this.document.body.scrollLeft : 0)+ event_de_click.clientX-OrigenEsquerraVista+MargeEsquerraVista, 
				 ((this.document.body.scrollTop) ? this.document.body.scrollTop : 0)+ event_de_click.clientY-OrigenSuperiorVista+MargeSuperiorVista, 
				 ((this.document.body.scrollLeft) ? this.document.body.scrollLeft : 0)+ event_de_click.clientX-OrigenEsquerraVista+MargeEsquerraVista, 
				 ((this.document.body.scrollTop) ? this.document.body.scrollTop : 0)+event_de_click.clientY-OrigenSuperiorVista+MargeSuperiorVista);
		showLayer(getLayer(this, "z_rectangle"));
		ParamCtrl.EstatClickSobreVista=estat_click_zrec_2;
	}
	else //if (ParamCtrl.EstatClickSobreVista==estat_click_zrec_2)
	{
		if (!HiHaHagutMoviment)
			return;
		if (AmbitZoomRectangle.MinX<DonaCoordXDeCoordSobreVista(event_de_click.clientX))
			AmbitZoomRectangle.MaxX=DonaCoordXDeCoordSobreVista(event_de_click.clientX);
		else
		{
			AmbitZoomRectangle.MaxX=AmbitZoomRectangle.MinX;
			AmbitZoomRectangle.MinX=DonaCoordXDeCoordSobreVista(event_de_click.clientX);
		}
		if (AmbitZoomRectangle.MinY<DonaCoordYDeCoordSobreVista(event_de_click.clientY))
			AmbitZoomRectangle.MaxY=DonaCoordYDeCoordSobreVista(event_de_click.clientY);
		else
		{
			AmbitZoomRectangle.MaxY=AmbitZoomRectangle.MinY;
			AmbitZoomRectangle.MinY=DonaCoordYDeCoordSobreVista(event_de_click.clientY);
		}
		hideLayer(getLayer(this, "z_rectangle"));
		if (ParamCtrl.ConsultaTipica)
			PosaLlistaValorsConsultesTipiquesAlPrincipi(-1);
		PortamAAmbit(AmbitZoomRectangle);
		ParamCtrl.EstatClickSobreVista=estat_click_zrec_1;
	}
	HiHaHagutPrimerClick=false;
}

function CanviaEstatClickSobreVista(estat)
{
	hideLayer(getLayer(this, "z_rectangle"));
	ParamCtrl.EstatClickSobreVista=estat;
}

function DonaValorDeCoordActual(x,y,negreta,input)
{
var cdns=new Array();
	if (ParamCtrl.CoordActual&proj)
	{
		cdns.push((negreta ? "<b>" : ""),
				  (input ? " X: " : " X,Y: "),
			      (negreta ? "</b>" : ""),				   
				  (input ? "<input type=\"text\" name=\"coord_e_x\" class=\"input_coord\" value=\"" : ""),
			      OKStrOfNe(x,ParamCtrl.NDecimalsCoordXY),
				  (input ? ( negreta ? "\" readonly>/><b>Y:</b> <input type=\"text\" name=\"coord_e_y\" class=\"input_coord\" value=\"" :
							"\" readonly/>Y:<input type=\"text\" name=\"coord_e_y\" class=\"input_coord\" value=\"" ) : ", "),
				  OKStrOfNe(y,ParamCtrl.NDecimalsCoordXY),
				  (input ? "\" readonly>" : ""));	
	}
	if (ParamCtrl.CoordActual&longlat_g)
	{
		DonaCoordenadesLongLat(x,y,ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS);
		cdns.push((negreta ? "<b>" : ""),
				  (input ? " Long: " : " Long,Lat: "),
			      (negreta ? "</b>" : ""),				   
				  (input ? "<input type=\"text\" name=\"coord_e_x\" class=\"input_coord\" value=\"" : ""),
			      OKStrOfNe(ll_x,ParamCtrl.NDecimalsCoordXY+4),
				  (input ? ( negreta ? "\" readonly/><b>Lat:</b> <input type=\"text\" name=\"coord_e_y\" class=\"input_coord\" value=\"" :
							"\" readonly/>Lat: <input type=\"text\" name=\"coord_e_y\" class=\"input_coord\" value=\"" ) : ", "),
				  OKStrOfNe(ll_y,ParamCtrl.NDecimalsCoordXY+4),
				  (input ? "\" readonly/>" : ""));
	}
	if (ParamCtrl.CoordActual&longlat_gms)
	{
		DonaCoordenadesLongLat(x,y,ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS);
		cdns.push((negreta ? "<b>" : ""),
				  (input ? " Long:" : " Long,Lat: "),
			      (negreta ? "</b>" : ""),				   
				  (input ? "<input type=\"text\" name=\"coord_e_x\" class=\"input_coord\" value=\"" : ""),
			      g_gms(ll_x, true),
				  (input ? ( negreta ? "\" readonly/><b>Lat:</b> <input type=\"text\" name=\"coord_e_y\" class=\"input_coord\" value=\"" :
							"\" readonly/>Lat: <input type=\"text\" name=\"coord_e_y\" class=\"input_coord\" value=\"" ) : ", "),
				  g_gms(ll_y, true),
				  (input ? "\" readonly/>" : ""));
	}
	return cdns.join("");
}

function MostraValorDeCoordActual(x,y)
{
    if (this.document.form_coord && this.document.form_coord.info_coord)
		this.document.form_coord.info_coord.value=DonaValorDeCoordActual(x,y,false, false);
}

function IniciClickSobreVista(event_de_click)
{
/* http://unixpapa.com/js/mouse.html*/

	//this.document.form_coord.info_coord.value="IniciClickSobreVista"; //·$·

	if (ParamCtrl.flags&zoom_un_sol_clic)
	{
	    HiHaHagutPrimerClick=true;
	    if (ParamCtrl.EstatClickSobreVista!=estat_click_pan_2 && ParamCtrl.EstatClickSobreVista!=estat_click_zrec_2)
		    HiHaHagutMoviment=false;
	    if (ParamCtrl.EstatClickSobreVista==estat_click_pan_1 || ParamCtrl.EstatClickSobreVista==estat_click_zrec_1)
	    {
			if (event_de_click.which == null)
			{
				if (event_de_click.button==1)
					ClickSobreVista(event_de_click);
			}
			else
			{
				if (event_de_click.which==1)
					ClickSobreVista(event_de_click);
			}
		}
	}
}

var NPanVista=0;

function PanVista(cx, cy, cx_ori, cy_ori)
{
var w,xm,xc,h,ym,yc;
var elem;
var i_pan_vista;

	xm=MargeEsquerraVista+1+cx-cx_ori;
	//alert(OrigenEsquerraVista+ " " +cx +"  " +cx_ori);
	if (cx_ori>cx)
	{
		w=ParamCtrl.ncol-cx_ori+cx;
		xc=cx_ori-cx;
	}
	else
	{
		w=ParamCtrl.ncol-cx+cx_ori;
		xc=0;
	}

	ym=MargeSuperiorVista+1+cy-cy_ori;
	if (cy_ori>cy)
	{
		h=ParamCtrl.nfil-cy_ori+cy;
		yc=cy_ori-cy;
	}
	else
	{
		h=ParamCtrl.nfil-cy+cy_ori;
		yc=0;
	}

	NPanVista++;
	i_pan_vista=NPanVista;

	for (var i=0; i<capa.length; i++)
	{
		if (i_pan_vista!=NPanVista)
			return;
		if (EsCapaVisibleAAquestNivellDeZoom(i))
		{
			elem=getLayer(this, "l_raster"+i);
			if ((capa[i].tipus==TipusWMS_C || capa[i].tipus==TipusWMTS_REST || capa[i].tipus==TipusWMTS_KVP 
				|| capa[i].tipus==TipusWMTS_SOAP || capa[i].tipus==TipusGoogle_KVP) && ParamInternCtrl.Vista[i].TileMatrix)
			{
				moveLayer(elem, xm-ParamInternCtrl.Vista[i].dx, ym-ParamInternCtrl.Vista[i].dy, ParamCtrl.ncol, ParamCtrl.nfil);
				clipLayer(elem, xc+ParamInternCtrl.Vista[i].dx, yc+ParamInternCtrl.Vista[i].dy, w, h);
			}
			else
			{
				moveLayer(elem, xm, ym, ParamCtrl.ncol, ParamCtrl.nfil);
				clipLayer(elem, xc, yc, w, h);
			}
		}
	}

	if (CapaDigi.length)
	{
	    for (var i=CapaDigi.length-1; i>=0; i--)
	    {
			if (CapaDigi[i].visible!=no &&  EsObjDigiVisibleAAquestNivellDeZoom(CapaDigi[i]))
			{
				if (!CapaDigi[i].objecte)
					continue;
				elem=getLayer(this, "l_capa_digi"+i);
				moveLayer(elem, xm, ym, ParamCtrl.ncol, ParamCtrl.nfil);
				clipLayer(elem, xc, yc, w, h);
			}
	    }
	}
}

function MovimentSobreVista(event_de_moure)
{
	var x=DonaCoordXDeCoordSobreVista(event_de_moure.clientX);
	var y=DonaCoordYDeCoordSobreVista(event_de_moure.clientY);
	MostraValorDeCoordActual(x,y);
	if (ParamCtrl.flags&zoom_un_sol_clic && HiHaHagutPrimerClick &&
	    ParamCtrl.EstatClickSobreVista!=estat_click_zrec_1 && ParamCtrl.EstatClickSobreVista!=estat_click_zrec_2 &&
	    ParamCtrl.EstatClickSobreVista!=estat_click_pan_1 && ParamCtrl.EstatClickSobreVista!=estat_click_pan_2 && 
		ParamCtrl.EstatClickSobreVista!=estat_click_editar_punts)
	{		
		ParamCtrl.EstatClickSobreVista=estat_click_zrec_1;
		CreaBarra(null);
		ClickSobreVista(event_de_moure);
	}

	if (ParamCtrl.EstatClickSobreVista==estat_click_zrec_2)
	{
		moveLayer2(getLayer(this, "z_rectangle"), 
				 ((this.document.body.scrollLeft) ? this.document.body.scrollLeft : 0)+ ZRec_1PuntClient.x-OrigenEsquerraVista+MargeEsquerraVista, 
				 ((this.document.body.scrollTop) ? this.document.body.scrollTop : 0)+ ZRec_1PuntClient.y-OrigenSuperiorVista+MargeSuperiorVista, 
				 ((this.document.body.scrollLeft) ? this.document.body.scrollLeft : 0)+ event_de_moure.clientX-OrigenEsquerraVista+MargeEsquerraVista, 
				 ((this.document.body.scrollTop) ? this.document.body.scrollTop : 0)+event_de_moure.clientY-OrigenSuperiorVista+MargeSuperiorVista);
		HiHaHagutMoviment=true;
	}
	else if (ParamCtrl.EstatClickSobreVista==estat_click_pan_2)
	{
		PanVista(event_de_moure.clientX, event_de_moure.clientY, ZRec_1PuntClient.x, ZRec_1PuntClient.y);
		HiHaHagutMoviment=true;
	}
}

function CreaCoordenades()
{
var elem=getLayer(this, "coord");
	if (isLayer(elem))
	{
		var cdns=new Array();
		cdns.push("<FORM NAME=\"form_coord\" onSubmit=\"return false;\">\n<center>\n<span class=\"text_coord\">",
			   (ParamCtrl.TitolCoord ? DonaCadena(ParamCtrl.TitolCoord) : "Coord: "),
			   "</span><input CLASS=text_petit type=\"text\" name=\"info_coord\" size=\"35\" READONLY>\n</center>\n</font>\n</form>");
		s=cdns.join("");
		contentLayer(elem, s);
	}
}

function MovimentSobreSituacio(event_de_moure)
{
	var x=DonaCoordXDeCoordSobreSituacio(event_de_moure.clientX);
	var y=DonaCoordYDeCoordSobreSituacio(event_de_moure.clientY);
	MostraValorDeCoordActual(x,y);
}

function PortamAVistaGeneral()
{
	if (ParamCtrl.ConsultaTipica)
		PosaLlistaValorsConsultesTipiquesAlPrincipi(-1);
	GuardaVistaPrevia();
	CanviaAVistaGeneral();
}

function TransformaEnvolupant(env, crs_ori, crs_dest)
{
	DonaEnvolupantLongLat(env, crs_ori);
	DonaEnvolupantCRS(env, crs_dest);
}

function TransformaCoordenadesPunt(punt, crs_ori, crs_dest)
{
	DonaCoordenadesLongLat(punt.x, punt.y,crs_ori);
	DonaCoordenadesCRS(ll_x, ll_y, crs_dest);
	punt.x=crs_x;
	punt.y=crs_y;
}

function CanviaCRSITransformaCoordenadesCapaDigi(crs_ori, crs_dest)
{
	for(var i=0; i<CapaDigi.length; i++)
	{
		if(CapaDigi[i].CRS &&
		   CapaDigi[i].CRS.toUpperCase()!=crs_dest.toUpperCase() && CapaDigi[i].objecte)
		{
			for(var j=0; j<CapaDigi[i].objecte.length; j++)
			{
				CapaDigi[i].objecte[j].puntCRSactual=new Array();
				CapaDigi[i].objecte[j].puntCRSactual[0]=new CreaPunt2D(CapaDigi[i].objecte[j].punt[0].x, CapaDigi[i].objecte[j].punt[0].y);
				TransformaCoordenadesPunt(CapaDigi[i].objecte[j].puntCRSactual[0], crs_ori, crs_dest);
			}
		}
	}
}

function TransformaCoordenadesCapaDigiVolatils(crs_ori, crs_dest)
{
	if(i_objdigi_consulta!=-1)
		TransformaCoordenadesPunt(CapaDigi[i_objdigi_consulta].objecte[0].punt[0], crs_ori, crs_dest);
	if(i_objdigi_anar_coord!=-1)
		TransformaCoordenadesPunt(CapaDigi[i_objdigi_anar_coord].objecte[0].punt[0], crs_ori, crs_dest);
	if(i_objdigi_edicio!=-1)
	{
		TransformaCoordenadesPunt(CapaDigi[i_objdigi_edicio].objecte[0].punt[0], crs_ori, crs_dest);
		if(ParamCtrl.TipusBarraBotons&boto_inserta && ParamCtrl.EstatClickSobreVista==estat_click_editar_punts)
			eval(ParamCtrl.FuncioIconaEdicio);		
	}
}

function CanviaCRS(crs_ori, crs_dest)
{
var factor=1;
var i;

	TransformaCoordenadesPunt(ParamInternCtrl.PuntOri, crs_ori, crs_dest);
	TransformaCoordenadesPunt(PuntConsultat, crs_ori, crs_dest);
	
	//He de transformar les coordenades dels objectes digitalitzats a memòria
	TransformaCoordenadesCapaDigiVolatils(crs_ori, crs_dest);
	
	//i també de les CapesDigitalitzades
	CanviaCRSITransformaCoordenadesCapaDigi(crs_ori, crs_dest);

	if (DonaUnitatsCoordenadesProj(crs_ori)=="m" && DonaUnitatsCoordenadesProj(crs_dest)=="°")
	{
		factor=1/120000; // Aquí no apliquem 111319.5 perquè volem obtenir un costat de zoom arrodonit.
		ParamCtrl.NDecimalsCoordXY+=4;
	}
	else if (DonaUnitatsCoordenadesProj(crs_ori)=="°" && DonaUnitatsCoordenadesProj(crs_dest)=="m")
	{
		factor=120000; // Aquí no apliquem 111319.5 perquè volem obtenir un costat de zoom arrodonit.
		ParamCtrl.NDecimalsCoordXY-=4;
		if (ParamCtrl.NDecimalsCoordXY<0)
		    ParamCtrl.NDecimalsCoordXY=0;	
	}
	if (factor!=1)
	{
		for (i=0; i<zoom.length; i++)
		{
			zoom[i].costat=ArrodoneixSiSoroll(zoom[i].costat*=factor);
		}
		for (i=0; i<capa.length; i++)	
		{
			capa[i].CostatMinim=ArrodoneixSiSoroll(capa[i].CostatMinim*=factor);
			capa[i].CostatMaxim=ArrodoneixSiSoroll(capa[i].CostatMaxim*=factor);
		}
		for (i=0; i<CapaDigi.length; i++)	
		{
			CapaDigi[i].CostatMinim=ArrodoneixSiSoroll(CapaDigi[i].CostatMinim*=factor);
			CapaDigi[i].CostatMaxim=ArrodoneixSiSoroll(CapaDigi[i].CostatMaxim*=factor);
		}
		ParamInternCtrl.CostatZoomActual=ArrodoneixSiSoroll(ParamInternCtrl.CostatZoomActual*=factor);
		CreaBarra(crs_dest);
	}
	ActualitzaEnvParametresDeControl();	
}

//No crida GuardaVistaPrevia()
function CanviaAVistaGeneral()
{
var i_max;
	//busco la vista de més extensió
	i_max=0;
	for (var i=1; i<ParamCtrl.ImatgeSituacio.length; i++)
	{
		if ((ParamInternCtrl.EnvLLSituacio[i_max].MaxX-ParamInternCtrl.EnvLLSituacio[i_max].MinX)+
			(ParamInternCtrl.EnvLLSituacio[i_max].MaxY-ParamInternCtrl.EnvLLSituacio[i_max].MinY)<
		    (ParamInternCtrl.EnvLLSituacio[i].MaxX-ParamInternCtrl.EnvLLSituacio[i].MinX)+
			(ParamInternCtrl.EnvLLSituacio[i].MaxY-ParamInternCtrl.EnvLLSituacio[i].MinY))
				i_max=i;
	}
	/*if (i_max!=ParamInternCtrl.ISituacio)
	{
		if (ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS!=ParamCtrl.ImatgeSituacio[i_max].EnvTotal.CRS)
			CanviaCRS(ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS, ParamCtrl.ImatgeSituacio[i_max].EnvTotal.CRS);
		ParamInternCtrl.ISituacio=i_max;
	}*/
    CentraLaVista((ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MaxX+ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MinX)/2,																												 
    	(ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MaxY+ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.EnvCRS.MinY)/2);
    if (ParamInternCtrl.CostatZoomActual!=zoom[0].costat)
	    CanviaNivellDeZoom(0);
    else
		RepintaMapesIVistes();
}

function PortamANivellDeZoom(nivell)
{
	if (ParamCtrl.ConsultaTipica)
		PosaLlistaValorsConsultesTipiquesAlPrincipi(-1);
	GuardaVistaPrevia();
	return CanviaNivellDeZoom(nivell);
}

//No crida GuardaVistaPrevia()
function CanviaNivellDeZoom(nivell)
{
	if (nivell<0)
	{
		alert(DonaCadena3("No hi ha zoom inferior a mostrar.", "No hay zoom inferior a mostrar.", "There is no more zoom out to be shown."));
		nivell=0;
		CanviaAVistaGeneral();
	}
	else if (nivell>=zoom.length)
	{
		alert(DonaCadena3("No hi ha zoom superior a mostrar.", "No hay zoom superior a mostrar.", "There is no more zoom in to be shown."));
		nivell=zoom.length-1;
	}
	if (ParamCtrl.flags&zoom_continu || nivell!=DonaIndexNivellZoom(ParamInternCtrl.CostatZoomActual))  //Evito canviar de nivell al nivell actual.
	{
		ParamInternCtrl.CostatZoomActual=zoom[nivell].costat;
		RevisaEstatsCapes();
		CreaLlegenda();
		if (this.document.zoom.nivell)
			this.document.zoom.nivell.selectedIndex = nivell;
		CentraLaVista((ParamInternCtrl.EnvActual.MaxX+ParamInternCtrl.EnvActual.MinX)/2,(ParamInternCtrl.EnvActual.MaxY+ParamInternCtrl.EnvActual.MinY)/2);
		RepintaMapesIVistes();
	}
	return false;  //evitar el submit del formulari
}

var MMZWindow=null;
function ObtenirMMZ()
{
	if (MMZWindow==null || MMZWindow.closed)
	{
	    MMZWindow=window.open("mmz.htm","FinestraMMZ",'toolbar=no,status=no,scrollbars=no,location=no,menubar=no,directories=no,resizable=yes,width=500,height=320');
            ShaObertPopUp(MMZWindow);
	}
	else
	{
	    MMZWindow.focus();
	    MMZWindow.mmz1.RedibuixaMMZ();    
	}
}


var WCSWindow=null;
var i_capa_wcs;
function ObreFinestraWCS(i)
{
    i_capa_wcs=i;
    if (WCSWindow==null || WCSWindow.closed)
    {
        WCSWindow=window.open("wcs.htm","FinestraWCS",'toolbar=no,status=no,scrollbars=no,location=no,menubar=no,directories=no,resizable=yes,width=500,height=550');
        ShaObertPopUp(WCSWindow);
    }
    else
    {
        WCSWindow.focus();
	WCSWindow.wcs1.DibuixaOpcionsWCS();    
    }	
}

var VideoWindow=null;
function ObreFinestraVideo()
{
    if (VideoWindow==null || VideoWindow.closed)
    {
        var s="toolbar=no,status=no,scrollbars=no,location=no,menubar=no,directories=no,resizable=yes,width=" + (ParamCtrl.ncol+142) + ",height=" + (ParamCtrl.nfil+138);
		VideoWindow=window.open("video.htm","FinestraVideo",s);
	        ShaObertPopUp(VideoWindow);
    }
    else
    {
        VideoWindow.focus();
	VideoWindow.VideoTools.DibuixaOpcionsVideo();    
    }	
}

function CalculaMidesSituacio()
{
var factor, factor_y;
var w,h,e,s;

	ParamInternCtrl.MargeEsqSituacio=ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].MargeEsq;
	ParamInternCtrl.AmpleSituacio=ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].Ample;
	ParamInternCtrl.MargeSupSituacio=ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].MargeSup;
	ParamInternCtrl.AltSituacio=ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].Alt;
	OrigenEsqSituacio=ParamInternCtrl.MargeEsqSituacio;
	OrigenSupSituacio=ParamInternCtrl.MargeSupSituacio;

	if (ParamCtrl.AmpleAltSituacioAuto)
	{
		var elem=getLayer(this, "situacio");
if (isLayer(elem))
		{
			getRectLayer(elem);
			w=RectGetRectLayer.ample;
			h=RectGetRectLayer.alt;
			e=RectGetRectLayer.esq;
			s=RectGetRectLayer.sup;
		}
		else
			return;

		factor=w/(ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].MargeEsq*2+ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].Ample);
		factor_y=h/(ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].MargeSup*2+ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].Alt);
		if (factor_y<factor)
			factor=factor_y;
		factor*=0.97
		ParamInternCtrl.MargeEsqSituacio=ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].MargeEsq*factor;
		ParamInternCtrl.AmpleSituacio=ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].Ample*factor;
		ParamInternCtrl.MargeSupSituacio=ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].MargeSup*factor;
		ParamInternCtrl.AltSituacio=ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].Alt*factor;
		OrigenEsqSituacio=ParamInternCtrl.MargeEsqSituacio+e;
		OrigenSupSituacio=ParamInternCtrl.MargeSupSituacio+s;
	}
}

function DonaCadenaHTMLMarcSituacio(ample, alt)
{
    return "<table border=0 cellspacing=0 cellpadding=0><tr><td colspan=3><img src=" +
		(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "") +
    	DonaFitxerColor(ParamCtrl.ColorQuadratSituacio) + " height=1 width="+ample+
	"></td></tr><tr><td><img src=" + (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "") +
	DonaFitxerColor(ParamCtrl.ColorQuadratSituacio) + " height="+(alt-2)+
	" width=1></td><td><img src="+
	(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "") +
	"1tran.gif height=1 width="+(ample-2)+
	"></td><td><img src=" + (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "") +
	DonaFitxerColor(ParamCtrl.ColorQuadratSituacio) + " height="+(alt-2)+
	" width=1></td></tr><tr><td colspan=3><img src=" + 
	(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+
	DonaFitxerColor(ParamCtrl.ColorQuadratSituacio) + " height=1 width="+ample+"></td></table>";
}

function CreaSituacio()
{
	CalculaMidesSituacio();		
	OmpleMidesRectangleSituacio(ParamInternCtrl.AmpleSituacio, ParamInternCtrl.AltSituacio, ParamInternCtrl.EnvActual);
	var elem=getLayer(this, "situacio");
if (isLayer(elem))
	{
		var s=textHTMLLayer("l_situa", ParamInternCtrl.MargeEsqSituacio, ParamInternCtrl.MargeSupSituacio, ParamInternCtrl.AmpleSituacio, ParamInternCtrl.AltSituacio, null, false, true, null, "<img name=\"i_situa\" src=\"" + (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "") + 																																																															ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].nom + "\" width="+ParamInternCtrl.AmpleSituacio+" height="+ParamInternCtrl.AltSituacio+" border=0>") +"\n"+
		  textHTMLLayer("l_rect", ParamInternCtrl.MargeEsqSituacio+minx_rec, ParamInternCtrl.MargeSupSituacio+ParamInternCtrl.AltSituacio-maxy_rec, maxx_rec-minx_rec, maxy_rec-miny_rec, null, false, true, null, DonaCadenaHTMLMarcSituacio(maxx_rec-minx_rec, maxy_rec-miny_rec))+ "\n"+
		  textHTMLLayer("l_situa_actiu", ParamInternCtrl.MargeEsqSituacio, ParamInternCtrl.MargeSupSituacio, ParamInternCtrl.AmpleSituacio, ParamInternCtrl.AltSituacio, null, false, true, null, "<a href=\"javascript:void(0);\" onClick=\"ClickSobreSituacio(event);\" onmousemove=\"MovimentSobreSituacio(event);\"><img src=\""+																																																										  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "") + "1tran.gif\" width="+ParamInternCtrl.AmpleSituacio+" height="+ParamInternCtrl.AltSituacio+" border=0></a>")+"\n";
		contentLayer(elem, s);
	}
}

function CadenaBotoPolsable(nom, fitxer, text_groc, funcio)
{
	return "<img align=absmiddle src=\"" + (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "") + fitxer + ".gif\" name=\"" + nom + "\" border=\"0\" alt=\"" + text_groc + "\" title=\"" + text_groc + "\" onClick=\"" + nom + ".src=\'" + (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "") + fitxer + ".gif\';" + funcio + "\" onmousedown=\"" + nom + ".src='" + (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "") + fitxer + "p.gif'; return true;\" onMouseOver=\"if (" + nom + ".alt) window.status=" + nom + ".alt; return true;\" onMouseOut=\"" + nom + ".src=\'" + (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "") + fitxer + ".gif\';if (" + nom + ".alt) window.status=\'\'; return true;\">";
}

//Els arguments són parelles de 'nom_img', 'nom_fitxer_img'...
function CanviaPolsatEnBotonsAlternatius()
{
	for (var i=0; i<CanviaPolsatEnBotonsAlternatius.arguments.length; i+=2)
		eval("this.document." + CanviaPolsatEnBotonsAlternatius.arguments[i] + ".src=" + "\"" + 
	(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "") + CanviaPolsatEnBotonsAlternatius.arguments[i+1] + "\"");
	return true;
}

//Els arguments són: l'index del botó premut al inici + trios de 'nom_img', 'text_groc', 'funcio'...
function CadenaBotonsAlternatius(boto_p)
{
var i,j,k,l;
var cdns=new Array();
	for (j=0,i=1; i<CadenaBotonsAlternatius.arguments.length; i+=3, j++)
	{
		cdns.push("<IMG align=absmiddle name=\"" , CadenaBotonsAlternatius.arguments[i] , "\" SRC=\"" , 
	 (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""),
			CadenaBotonsAlternatius.arguments[i] , 
			((boto_p==j) ? "p" : "") , 
			".gif\" alt=\"" , CadenaBotonsAlternatius.arguments[i+1] , 
			"\" title=\"" , CadenaBotonsAlternatius.arguments[i+1] ,
			"\" onClick=\"CanviaPolsatEnBotonsAlternatius(");

		for (k=1,l=0; k<CadenaBotonsAlternatius.arguments.length; k+=3, l++)
		{
	                if (k!=1)
				cdns.push(",");
			cdns.push("\'" , CadenaBotonsAlternatius.arguments[k] , "\',\'" , CadenaBotonsAlternatius.arguments[k] , ((j==l) ? "p" : "") , ".gif\'");
		}
		cdns.push(");" , CadenaBotonsAlternatius.arguments[i+2] , "\" onMouseOver=\"if (" , CadenaBotonsAlternatius.arguments[i] , ".alt) window.status=" , CadenaBotonsAlternatius.arguments[i] , ".alt; return true;\" onMouseOut=\"if (" , CadenaBotonsAlternatius.arguments[i] , ".alt) window.status=''; return true;\">");	
	}
	return cdns.join("");
}

function CreaBarra(crs)
{
var boto_p;
var s;
var i, j;
var cdns=new Array();

	if (ParamCtrl.TipusBarraBotons==nomes_descarrega)
	{
		cdns.push("<FORM NAME=\"zoom\" METHOD=\"GET\" onSubmit=\"return ObtenirMMZ();\">");
		ParamCtrl.EstatClickSobreVista=estat_click_moumig;
		cdns.push("<CENTER>",
		   (CadenaBotoPolsable("getmmz_text", "getmmz_text", DonaCadena3("descarregar", "descargar", "download"), "ObtenirMMZ();")),
		   "&nbsp;&nbsp;&nbsp;",
		   (CadenaBotoPolsable("ajuda", "ajuda", DonaCadena3("ajuda interactiva", "ayuda interactiva", "interactive help"), "ObreFinestraAjuda();")),
		   "</CENTER>");
	}
	else // Barra completa
	{
		cdns.push("<FORM NAME=\"zoom\" METHOD=\"GET\" onSubmit=\"return PortamANivellDeZoom(document.zoom.nivell.value)\">\n");
		if (ParamCtrl.TipusBarraBotons&boto_mes)
		   	cdns.push((CadenaBotoPolsable("zoom_in", "zoom_in", DonaCadena3("acostar", "acercar", "zoom in"), 	
				"PortamANivellDeZoom(DonaIndexNivellZoom(ParamInternCtrl.CostatZoomActual)+1);")));
		if (ParamCtrl.TipusBarraBotons&boto_menys)
			cdns.push((CadenaBotoPolsable("zoomout", "zoomout", DonaCadena3("allunyar", "alejar", "zoom out"), 
				"PortamANivellDeZoom(DonaIndexNivellZoom(ParamInternCtrl.CostatZoomActual)-1);")));
		if (ParamCtrl.TipusBarraBotons&boto_anar_coord)
			cdns.push((CadenaBotoPolsable("zoomcoord", "zoomcoord", DonaCadena3("anar a coordenada", "ir a coordenada", "go to coordinate"), 
				"MostraFinestraAnarCoordenada()")));
		if (ParamCtrl.TipusBarraBotons&boto_back)
			cdns.push((CadenaBotoPolsable("zoom_bk", "zoom_bk", DonaCadena3("vista prèvia", "vista previa", "previous view"), 
				"RecuperaVistaPrevia();")));
		if (ParamCtrl.TipusBarraBotons&boto_vgeneral)
			cdns.push((CadenaBotoPolsable("zoomall", "zoomall", DonaCadena3("vista general", "vista general", "general view"), 
				"PortamAVistaGeneral();")));

		if(Accio==null || (Accio && ~Accio.accio&accio_validacio))
		{
			for (i=0; i<capa.length; i++)
			{
				if (capa[i].consultable!=no)
				    break;
			}
		}
		else
			i=0;
		for (j=0; j<CapaDigi.length; j++)
		{
			if(CapaDigi[j].editable!=no)
				break;
		}
		if (ParamCtrl.TipusBarraBotons&botons_alternatius)
		{
		    if (ParamCtrl.TipusBarraBotons&boto_moumig)
		    {
				if (i<capa.length && (ParamCtrl.TipusBarraBotons&boto_inserta || j<CapaDigi.length))  //alguna capa és consultable i alguna és editable
				{
					if (ParamCtrl.EstatClickSobreVista==estat_click_pan_1 || ParamCtrl.EstatClickSobreVista==estat_click_pan_2)
						boto_p=0;
					if (ParamCtrl.EstatClickSobreVista==estat_click_moumig)
						boto_p=1;
					else if (ParamCtrl.EstatClickSobreVista==estat_click_zrec_1 || ParamCtrl.EstatClickSobreVista==estat_click_zrec_2)
						boto_p=2;
					else if(ParamCtrl.EstatClickSobreVista==estat_click_editar_punts)
						boto_p=4;
					else
						boto_p=3;
					cdns.push((CadenaBotonsAlternatius(boto_p, "pan", DonaCadena3("mou vista", "mueve vista", "pan view"), 
							"CanviaEstatClickSobreVista(estat_click_pan_1);", 
						"moumig", DonaCadena3("centra on faci clic", "centra donde haga clic", "center where click"), 
							"CanviaEstatClickSobreVista(estat_click_moumig);",
						"zoomfin", DonaCadena3("zoom de finestra", "zoom de ventana", "window zoom"), 
							"CanviaEstatClickSobreVista(estat_click_zrec_1);",
						(Accio && Accio.accio&accio_validacio) ? "conval" : "conloc", 
						(Accio && Accio.accio&accio_validacio) ? DonaCadena3("validació", "validación", "validate") : DonaCadena3("consulta", "consulta", "query"), 
							"CanviaEstatClickSobreVista(estat_click_conloc);",
							"inserta", DonaCadena3("editar un nou punt", "editar un nuevo punto", "edit a new point"),
							"CanviaEstatClickSobreVista(estat_click_editar_punts);")),"\n");
				}
				else if (i<capa.length)  //alguna capa és consultable
				{
					if (ParamCtrl.EstatClickSobreVista==estat_click_editar_punts)
						ParamCtrl.EstatClickSobreVista=estat_click_conloc;
					if (ParamCtrl.EstatClickSobreVista==estat_click_pan_1 || ParamCtrl.EstatClickSobreVista==estat_click_pan_2)
						boto_p=0;
					else if (ParamCtrl.EstatClickSobreVista==estat_click_moumig)
						boto_p=1;
					else if (ParamCtrl.EstatClickSobreVista==estat_click_zrec_1 || ParamCtrl.EstatClickSobreVista==estat_click_zrec_2)
						boto_p=2;
					else
						boto_p=3;							
	
					cdns.push((CadenaBotonsAlternatius(boto_p, "pan", DonaCadena3("mou vista", "mueve vista", "pan view"), 
							"CanviaEstatClickSobreVista(estat_click_pan_1);", 
							"moumig", DonaCadena3("centra on faci clic", "centra donde haga clic", "center where click"), 
							"CanviaEstatClickSobreVista(estat_click_moumig);",
							"zoomfin", DonaCadena3("zoom de finestra", "zoom de ventana", "window zoom"), 
							"CanviaEstatClickSobreVista(estat_click_zrec_1);",
							(Accio && Accio.accio&accio_validacio) ? "conval" : "conloc", 
							(Accio && Accio.accio&accio_validacio) ? DonaCadena3("validació", "validación", "validate") : DonaCadena3("consulta", "consulta", "query"), 
							"CanviaEstatClickSobreVista(estat_click_conloc);")),"\n");
				}
				else if (ParamCtrl.TipusBarraBotons&boto_inserta || j<CapaDigi.length)  //alguna capa és editable
				{
					if (ParamCtrl.EstatClickSobreVista==estat_click_conloc)
						ParamCtrl.EstatClickSobreVista=estat_click_zrec_1;
					if (ParamCtrl.EstatClickSobreVista==estat_click_pan_1 || ParamCtrl.EstatClickSobreVista==estat_click_pan_2)
						boto_p=0;
					else if (ParamCtrl.EstatClickSobreVista==estat_click_moumig)
						boto_p=1;
					else if (ParamCtrl.EstatClickSobreVista==estat_click_editar_punts)
						boto_p=3;
					else 
						boto_p=2;
					
					cdns.push((CadenaBotonsAlternatius(boto_p, "pan", DonaCadena3("mou vista", "mueve vista", "pan view"), 
									"CanviaEstatClickSobreVista(estat_click_pan_1);", 
							"moumig", DonaCadena3("centra on faci clic", "centra donde haga clic", "center where click"), 
								"CanviaEstatClickSobreVista(estat_click_moumig);", 
							"zoomfin", DonaCadena3("zoom de finestra", "zoom de ventana", "window zoom"), 
								"CanviaEstatClickSobreVista(estat_click_zrec_1);",
								"inserta", DonaCadena3("editar un nou punt", "editar un nuevo punto", "edit a new point"),
								"CanviaEstatClickSobreVista(estat_click_editar_punts);")),"\n");
				}
				else
				{
					if (ParamCtrl.EstatClickSobreVista==estat_click_conloc || ParamCtrl.EstatClickSobreVista==estat_click_editar_punts)
						ParamCtrl.EstatClickSobreVista=estat_click_zrec_1;
					if (ParamCtrl.EstatClickSobreVista==estat_click_pan_1 || ParamCtrl.EstatClickSobreVista==estat_click_pan_2)
						boto_p=0;
					else if (ParamCtrl.EstatClickSobreVista==estat_click_moumig)
						boto_p=1;
					else 
						boto_p=2;
						
					cdns.push((CadenaBotonsAlternatius(boto_p, "pan", DonaCadena3("mou vista", "mueve vista", "pan view"), 
									"CanviaEstatClickSobreVista(estat_click_pan_1);", 
								"moumig", DonaCadena3("centra on faci clic", "centra donde haga clic", "center where click"), 
								"CanviaEstatClickSobreVista(estat_click_moumig);", 
								"zoomfin", DonaCadena3("zoom de finestra", "zoom de ventana", "window zoom"), 
								"CanviaEstatClickSobreVista(estat_click_zrec_1);")),"\n");
				}
		    }
		    else
	    	{
				if (i<capa.length && (ParamCtrl.TipusBarraBotons&boto_inserta || j<CapaDigi.length))
				{
					if (ParamCtrl.EstatClickSobreVista==estat_click_moumig)
						ParamCtrl.EstatClickSobreVista=estat_click_pan_1;
					if (ParamCtrl.EstatClickSobreVista==estat_click_pan_1 || ParamCtrl.EstatClickSobreVista==estat_click_pan_2)
						boto_p=0;
					else if (ParamCtrl.EstatClickSobreVista==estat_click_zrec_1 || ParamCtrl.EstatClickSobreVista==estat_click_zrec_2)
						boto_p=1;
					else if(ParamCtrl.EstatClickSobreVista==estat_click_editar_punts)
						boto_p=3;
					else
						boto_p=2;
					cdns.push((CadenaBotonsAlternatius(boto_p, "pan", DonaCadena3("mou vista", "mueve vista", "pan view"), 
							"CanviaEstatClickSobreVista(estat_click_pan_1);",
						"zoomfin", DonaCadena3("zoom de finestra", "zoom de ventana", "window zoom"), 
							"CanviaEstatClickSobreVista(estat_click_zrec_1);",
						(Accio && Accio.accio&accio_validacio) ? "conval" : "conloc", 
						(Accio && Accio.accio&accio_validacio) ? DonaCadena3("validació", "validación", "validate") : 
											DonaCadena3("consulta", "consulta", "query"), 
							"CanviaEstatClickSobreVista(estat_click_conloc);",
							"inserta", DonaCadena3("editar un nou punt", "editar un nuevo punto", "edit a new point"),
								"CanviaEstatClickSobreVista(estat_click_editar_punts);")),"\n");
				}
				else if (i<capa.length)
				{
					if (ParamCtrl.EstatClickSobreVista==estat_click_moumig)
						ParamCtrl.EstatClickSobreVista=estat_click_pan_1;
					else if (ParamCtrl.EstatClickSobreVista==estat_click_editar_punts)
						ParamCtrl.EstatClickSobreVista=estat_click_conloc;
					if (ParamCtrl.EstatClickSobreVista==estat_click_pan_1 || ParamCtrl.EstatClickSobreVista==estat_click_pan_2)
						boto_p=0;
					else if (ParamCtrl.EstatClickSobreVista==estat_click_zrec_1 || ParamCtrl.EstatClickSobreVista==estat_click_zrec_2)
						boto_p=1;
					else
						boto_p=2;
					cdns.push((CadenaBotonsAlternatius(boto_p, "pan", DonaCadena3("mou vista", "mueve vista", "pan view"), 
						"CanviaEstatClickSobreVista(estat_click_pan_1);",
						"zoomfin", DonaCadena3("zoom de finestra", "zoom de ventana", "window zoom"), 
						"CanviaEstatClickSobreVista(estat_click_zrec_1);",
						(Accio && Accio.accio&accio_validacio) ? "conval" : "conloc", 
						(Accio && Accio.accio&accio_validacio) ? DonaCadena3("validació", "validación", "validate") : 
											DonaCadena3("consulta", "consulta", "query"), 
						"CanviaEstatClickSobreVista(estat_click_conloc);")),"\n");
				}
				else if(ParamCtrl.TipusBarraBotons&boto_inserta || j<CapaDigi.length)
				{
					if (ParamCtrl.EstatClickSobreVista==estat_click_conloc)
						ParamCtrl.EstatClickSobreVista=estat_click_zrec_1;
					else if (ParamCtrl.EstatClickSobreVista==estat_click_moumig)
						ParamCtrl.EstatClickSobreVista=estat_click_pan_1;
					if (ParamCtrl.EstatClickSobreVista==estat_click_pan_1 || ParamCtrl.EstatClickSobreVista==estat_click_pan_2)
						boto_p=0;
					else if(ParamCtrl.EstatClickSobreVista==estat_click_editar_punts)
						boto_p=2;
					else
						boto_p=1;
					cdns.push((CadenaBotonsAlternatius(boto_p, "pan", DonaCadena3("mou vista", "mueve vista", "pan view"), 
								"CanviaEstatClickSobreVista(estat_click_pan_1);",
							"zoomfin", DonaCadena3("zoom de finestra", "zoom de ventana", "window zoom"), 
								"CanviaEstatClickSobreVista(estat_click_zrec_1);",
								"inserta", DonaCadena3("editar un nou punt", "editar un nuevo punto", "edit a new point"),
								"CanviaEstatClickSobreVista(estat_click_editar_punts);")),"\n");
				}
				else
				{
					if (ParamCtrl.EstatClickSobreVista==estat_click_conloc || ParamCtrl.EstatClickSobreVista==estat_click_editar_punts)
						ParamCtrl.EstatClickSobreVista=estat_click_zrec_1;
					else if (ParamCtrl.EstatClickSobreVista==estat_click_moumig)
						ParamCtrl.EstatClickSobreVista=estat_click_pan_1;
					if (ParamCtrl.EstatClickSobreVista==estat_click_pan_1 || ParamCtrl.EstatClickSobreVista==estat_click_pan_2)
						boto_p=0;
					else
						boto_p=1;
					cdns.push((CadenaBotonsAlternatius(boto_p, "pan", DonaCadena3("mou vista", "mueve vista", "pan view"), 
							"CanviaEstatClickSobreVista(estat_click_pan_1);",
							"zoomfin", DonaCadena3("zoom de finestra", "zoom de ventana", "window zoom"), 
							"CanviaEstatClickSobreVista(estat_click_zrec_1);")),"\n");
				}
			}
		}

		if (ParamCtrl.TipusLlistatNivellZoom!=z_no_llista)
		{
			cdns.push("&nbsp;<span class=\"titol_zoom\">",
			   (ParamCtrl.TitolLlistatNivellZoom ? 
					DonaCadena(ParamCtrl.TitolLlistatNivellZoom) : 
					"Zoom:"),
			   "</span>",
			   "<select CLASS=text_petit name=\"nivell\" onChange=\"PortamANivellDeZoom(parseInt(document.zoom.nivell.value));\">\n");

			for (var i=0; i<zoom.length; i++)
			{
			    cdns.push("<OPTION VALUE=\"",i,"\"",
			    	((i==DonaIndexNivellZoom(ParamInternCtrl.CostatZoomActual)) ? " SELECTED" : "") ,">",
				(EscriuDescripcioNivellZoom(i, crs ? crs : ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS) ), "</OPTION>\n");
			}
			cdns.push("</select>\n");
		}
		for (i=0; i<capa.length; i++)
		{
		 	if (capa[i].descarregable!=no)
			{
			    //this.document.write("&nbsp;");
				cdns.push((CadenaBotoPolsable("getmmz", "getmmz", DonaCadena3("descarregar", "descargar", "download"), "ObtenirMMZ();")),"\n");
				break;
			}
		}
		for (i=0; i<capa.length; i++)
		{
		 	if (capa[i].animable&si || capa[i].animable&ara_no)
			{
				cdns.push((CadenaBotoPolsable("video", "video", DonaCadena3("mostrar animació", "mostrar animación", "show animation"), 
					"ObreFinestraVideo();")),"\n");
				break;
			}
		}

		if (ParamCtrl.TipusBarraBotons&boto_caixa_param)
			cdns.push((CadenaBotoPolsable("param", "param", DonaCadena3("opcions", "opciones", "options"), "ObreFinestraParametres();")));
		if (ParamCtrl.TipusBarraBotons&boto_consola)
			cdns.push((CadenaBotoPolsable("consola", "consola", DonaCadena3("consola", "consola", "console"), "MostraFinestraConsola();")));
		if (ParamCtrl.TipusBarraBotons&boto_enllac)
			cdns.push((CadenaBotoPolsable("enllac", "enllac", DonaCadena3("enllaç al mapa", "enlace al mapa", "link to map"), "MostraFinestraEnllac();")));
		if (ParamCtrl.TipusBarraBotons&boto_enllacWMS)
			cdns.push((CadenaBotoPolsable("enllacWMS", "enllacWMS", DonaCadena3("enllaços als servidors", "enlaces a los servidores", "links to the servers"), "MostraFinestraEnllacWMS();")));
			

		cdns.push("\n");

		if (ParamCtrl.TipusBarraBotons&boto_print)
			cdns.push((CadenaBotoPolsable("print", "print", DonaCadena3("imprimir", "imprimir", "print"), "ObreTriaFullImprimir();")));
		if (ParamCtrl.TipusBarraBotons&boto_plana_principal)
			cdns.push((CadenaBotoPolsable("home", "home", DonaCadena3("plana inicial", "página inicial", "home page"), "TornaPlanaPrincipal();")));
		if (ParamCtrl.TipusBarraBotons&boto_installar_mmz)
			cdns.push((CadenaBotoPolsable("instmmr", "instmmr", 
				DonaCadena3("instal·lar el Lector de Mapes de MiraMon", "instalar el Lector de Mapas de MiraMon", "install MiraMon Map Reader"), 
				"InstalaLectorMapes();")));
		if (ParamCtrl.TipusBarraBotons&boto_ajuda)
			cdns.push((CadenaBotoPolsable("ajuda", "ajuda", DonaCadena3("ajuda interactiva", "ayuda interactiva", "interactive help"), 
				"ObreFinestraAjuda();")));
		if (ParamCtrl.TipusBarraBotons&boto_idiomes && ParamCtrl.idiomes.length>1)
		{
			var nom_idioma_alt=new CadenaMultiIdioma("Català", "Español", "English");
			//var boto_per_defecte=(ParamCtrl.idioma=="cat")?0:((ParamCtrl.idioma=="spa")?1:2);
			var boto_per_defecte;
			for (boto_per_defecte=0; boto_per_defecte<ParamCtrl.idiomes.length; boto_per_defecte++)
			{
				if (ParamCtrl.idiomes[boto_per_defecte]==ParamCtrl.idioma)
					break;
			}
			if (boto_per_defecte==ParamCtrl.idiomes.length)
				boto_per_defecte=0;
			if (ParamCtrl.idiomes.length==2)
				cdns.push((CadenaBotonsAlternatius(boto_per_defecte, 
					"idioma_"+ParamCtrl.idiomes[0], DonaCadenaConcret(nom_idioma_alt, ParamCtrl.idiomes[0]), "CanviaIdioma(\'"+ParamCtrl.idiomes[0]+"\');", 
					"idioma_"+ParamCtrl.idiomes[1], DonaCadenaConcret(nom_idioma_alt, ParamCtrl.idiomes[1]), "CanviaIdioma(\'"+ParamCtrl.idiomes[1]+"\');")),"\n");
			else //if (ParamCtrl.idiomes.length==3)
				cdns.push((CadenaBotonsAlternatius(boto_per_defecte, 
					"idioma_"+ParamCtrl.idiomes[0], DonaCadenaConcret(nom_idioma_alt, ParamCtrl.idiomes[0]), "CanviaIdioma(\'"+ParamCtrl.idiomes[0]+"\');", 
					"idioma_"+ParamCtrl.idiomes[1], DonaCadenaConcret(nom_idioma_alt, ParamCtrl.idiomes[1]), "CanviaIdioma(\'"+ParamCtrl.idiomes[1]+"\');", 
					"idioma_"+ParamCtrl.idiomes[2], DonaCadenaConcret(nom_idioma_alt, ParamCtrl.idiomes[2]), "CanviaIdioma(\'"+ParamCtrl.idiomes[2]+"\');"))+"\n");
		}
	}
	cdns.push("</FORM>\n");
	s=cdns.join("");
	var elem=getLayer(this, "barra");
	if (isLayer(elem))
	{
		contentLayer(elem, s);
		if (this.document.zoom.nivell)
			this.document.zoom.nivell.focus();
	}
}//Fi de CreaBarra()

function EsCapaDinsAmbit(i)
{
var c=capa[i];
	if (c.EnvTotal==null || c.EnvTotal.EnvCRS==null)
		return true;
	if (ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS==c.EnvTotal.CRS)
	{
		if (ParamInternCtrl.EnvActual.MaxX<c.EnvTotal.EnvCRS.MinX ||
		    ParamInternCtrl.EnvActual.MinX>c.EnvTotal.EnvCRS.MaxX ||
		    ParamInternCtrl.EnvActual.MaxY<c.EnvTotal.EnvCRS.MinY ||
		    ParamInternCtrl.EnvActual.MinY>c.EnvTotal.EnvCRS.MaxY)
			return false;
	}
	else if (ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS.toUpperCase()=="EPSG:4326" || 
		 ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS.toUpperCase()=="EPSG:4358" ||
		 ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS.toUpperCase()=="CRS:84")
	{
		if (ParamInternCtrl.EnvActual.MaxX<ParamInternCtrl.EnvLLCapa[i].MinX ||
		    ParamInternCtrl.EnvActual.MinX>ParamInternCtrl.EnvLLCapa[i].MaxX ||
		    ParamInternCtrl.EnvActual.MaxY<ParamInternCtrl.EnvLLCapa[i].MinY ||
		    ParamInternCtrl.EnvActual.MinY>ParamInternCtrl.EnvLLCapa[i].MaxY)
			return false;
	}
	else
	{
		//Paso l'envolupant actual a lat/long i comparo.
		DonaEnvolupantLongLat(ParamInternCtrl.EnvActual, ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS);
		if (env_ll.MinX<ParamInternCtrl.EnvLLCapa[i].MinX || 
		    env_ll.MaxX>ParamInternCtrl.EnvLLCapa[i].MaxX || 
		    env_ll.MinY<ParamInternCtrl.EnvLLCapa[i].MinY || 
		    env_ll.MaxY>ParamInternCtrl.EnvLLCapa[i].MaxY)
			return false;
	}
	return true;
}

function EsCapaDisponibleEnElCRSActual(c)
{
	if (c.CRS)
	{
		for (var i=0; i<c.CRS.length; i++)
		{
			if (c.CRS[i]==ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS)
				return true;
		}
		return false;
	}
	else
		return true;
}

var FitxerMetadadesWindow=null;
function ObreFinestraFitxerMetadades(i_capa, i_estil)
{
    if (FitxerMetadadesWindow==null || FitxerMetadadesWindow.closed)
    {
        FitxerMetadadesWindow=window.open(DonaNomFitxerMetadades(i_capa, i_estil),"FitxerMetadades",'toolbar=no,status=no,scrollbars=yes,location=no,menubar=no,directories=no,resizable=yes,width=700,height=600');
	ShaObertPopUp(FitxerMetadadesWindow);
    }
    else
    {
		FitxerMetadadesWindow.location.href=DonaNomFitxerMetadades(i_capa, i_estil);
        FitxerMetadadesWindow.focus();
    }
}

function DonaNomFitxerMetadades(i_capa, i_estil)
{
	if (i_estil==-1)
		return CanviaVariablesDeCadena(DonaCadena(capa[i_capa].metadades), i_capa);
	else
		return CanviaVariablesDeCadena(DonaCadena(capa[i_capa].estil[i_estil].metadades), i_capa);
}

var llegenda_amb_control_capes=0x01;
var llegenda_amb_capes_no_visibles=0x02;

function DonaCadenaHTMLLlegenda(aspecte, flag)
{
var salt_entre_columnes;
var cdns=new Array();

    if (flag&llegenda_amb_control_capes)
    {
		cdns.push("<form name=form_llegenda>");
		var alguna_desplegable=1;
		var alguna_visible=1;
		var alguna_consultable=1;
		var alguna_descarregable=1;
		var alguna_getcoverage=1;
				
		if (!(ParamCtrl.FlagsLlegenda&icones_inactives_grises))
		{
			alguna_visible=0;
			alguna_consultable=0;
			alguna_descarregable=0;
			alguna_getcoverage=0;
			for (var i=0; i<capa.length; i++)
			{
				if (((ParamCtrl.FlagsLlegenda&amaga_segons_escala) && !EsCapaDinsRangDEscalesVisibles(capa[i])) ||
					((ParamCtrl.FlagsLlegenda&amaga_si_fora_ambit) && !EsCapaDinsAmbit(i)) ||
					 !EsCapaDisponibleEnElCRSActual(capa[i]) ||
					capa[i].VisibleALaLlegenda==no)
					continue;
				if (capa[i].visible!=no)
					alguna_visible=1;
				if (capa[i].consultable!=no)
					alguna_consultable=1;
				if (capa[i].descarregable!=no)
					alguna_descarregable=1;
				if (capa[i].FormatCoverage!=null)
					alguna_getcoverage=1;
			}
			for (var i=0; i<CapaDigi.length; i++)
			{
				if (((ParamCtrl.FlagsLlegenda&amaga_segons_escala) && !EsCapaDinsRangDEscalesVisibles(CapaDigi[i])) ||
					CapaDigi[i].VisibleALaLlegenda==no)
					continue;
				if (CapaDigi[i].visible!=no)
					alguna_visible=1;
				if (CapaDigi[i].consultable!=no)
					alguna_consultable=1;
			}
		}
    }
    else
    {
		alguna_desplegable=0;
		alguna_visible=0;
		alguna_consultable=0;
		alguna_descarregable=0;
		alguna_getcoverage=0;
    }

    var i_sel;
	//Inici de taula i regle d'un píxel
	cdns.push((aspecte.CapcaleraLlegenda?DonaCadena(aspecte.CapcaleraLlegenda):""),
			"<TABLE border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr>");
	if (alguna_desplegable)
		cdns.push("<td><img src=\"", (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), "1tran.gif\" width=\"7\" height=\"1\"></td>");
	if (alguna_visible)
		cdns.push("<td><img src=\"",(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), "1tran.gif\" width=\"10\" height=\"1\"></td>");
	if (alguna_consultable)
		cdns.push("<td><img src=\"",(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), "1tran.gif\" width=\"16\" height=\"1\"></td>");
	if (alguna_descarregable)
		cdns.push("<td><img src=\"",(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), "1tran.gif\" width=\"18\" height=\"1\"></td>");
	if (alguna_getcoverage)
		cdns.push("<td><img src=\"",(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), "1tran.gif\" width=\"20\" height=\"1\"></td>");
	cdns.push("<td><img src=\"",(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), "1tran.gif\" width=\"25\" height=\"1\"></td><td><img src=\"",(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), "1tran.gif\" width=\"300\" height=\"1\"></td></tr>");

	//Objectes digitalitzats
	for (var i=0; i<CapaDigi.length; i++)
	{
	    if (CapaDigi[i].separa!=null)
	    {
	        if (ParamCtrl.FlagsLlegenda&amaga_separa_no_capa &&
	               (((ParamCtrl.FlagsLlegenda&amaga_segons_escala) && !EsCapaDinsRangDEscalesVisibles(CapaDigi[i])) ||
		        CapaDigi[i].VisibleALaLlegenda==no ||
		        (CapaDigi[i].visible!=si && !(flag&llegenda_amb_capes_no_visibles))))
	        {
 		    //Busco si hi ha alguna capa visible fins al pròxim separador
				for (var i2=i+1; i2<CapaDigi.length; i2++)
				{
					if (CapaDigi[i2].separa!=null)
						break;
					if (((ParamCtrl.FlagsLlegenda&amaga_segons_escala) && !EsCapaDinsRangDEscalesVisibles(CapaDigi[i2])) ||
						CapaDigi[i2].VisibleALaLlegenda==no ||
						(CapaDigi[i2].visible!=si && !(flag&llegenda_amb_capes_no_visibles)))
						continue;
					cdns.push("<tr><td colspan=",
							(2+alguna_desplegable+alguna_visible+alguna_consultable+alguna_descarregable+alguna_getcoverage),
							" valign=\"middle\">",aspecte.PreviSepara , DonaCadena(CapaDigi[i].separa) , aspecte.PostSepara , "</td></tr>");
					break;
				}
			}
			else
	    	{
				cdns.push("<tr><td colspan=",
					(2+alguna_desplegable+alguna_visible+alguna_consultable+alguna_descarregable+alguna_getcoverage),
				" valign=\"middle\">", aspecte.PreviSepara , DonaCadena(CapaDigi[i].separa) , aspecte.PostSepara , "</td></tr>");
			}
	    }

	    if (((ParamCtrl.FlagsLlegenda&amaga_segons_escala) && !EsCapaDinsRangDEscalesVisibles(CapaDigi[i])) ||
		 CapaDigi[i].VisibleALaLlegenda==no ||
			 (CapaDigi[i].visible!=si && CapaDigi[i].visible!=semitransparent && !(flag&llegenda_amb_capes_no_visibles)))
			continue;

	    i_sel=i;
   	    if (flag&llegenda_amb_control_capes)
	    {
			cdns.push("<tr><td valign=\"middle\">");		
    		//Icones de + o -:
			if (CapaDigi[i_sel].estil && CapaDigi[i_sel].estil.length>0 &&
				(CapaDigi[i_sel].visible!=no && CapaDigi[i_sel].visible!=ara_no) &&
				(!(ParamCtrl.FlagsLlegenda&gris_segons_escala) || EsCapaDinsRangDEscalesVisibles(CapaDigi[i_sel])) &&
				CapaDigi[i_sel].estil[CapaDigi[i_sel].i_estil].ItemLleg && CapaDigi[i_sel].estil[CapaDigi[i_sel].i_estil].ItemLleg.length>1)
			{
				cdns.push("<img src=\"", (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""));
				if (CapaDigi[i_sel].LlegDesplegada==si)
					cdns.push("menys.gif\" alt=\"",
						(DonaCadena3("plega llegenda", "recoge leyenda", "fold legend up")),
						"\" title=\"",
						(DonaCadena3("plega llegenda", "recoge leyenda", "fold legend up")));
				else 
					cdns.push("mes.gif\" alt=\"",
						(DonaCadena3("desplega llegenda", "expande leyenda", "unfold legend")),
					"\" title=\"",
					(DonaCadena3("desplega llegenda", "expande leyenda", "unfold legend")));

				cdns.push("\" align=middle name=\"m_obj_digi",i_sel,"\" border=\"0\" onClick='CanviaEstatObjDigi(",
					i_sel,", \"lleg_desplegada\");' onMouseOver=\"if (m_obj_digi",i_sel,".alt) window.status=m_obj_digi",
					i_sel,".alt; return true;\" onMouseOut=\"if (m_obj_digi",i_sel,".alt) window.status=\'\'; return true;\">");
			}
			else
				cdns.push("<img src=\"", (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), "menysg.gif\" alt=\"\" align=middle>");
			cdns.push("</td>");		
		//Icones d'estats:
		//Icones visible:
		if (CapaDigi[i_sel].visible==no)
		{
		    if (alguna_visible)
		    {
			if (ParamCtrl.FlagsLlegenda&icones_inactives_grises)
				cdns.push("<td valign=\"middle\"><img src=\"", (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), "ara_no_visibleg.gif\" align=middle></td>");
			else
    			cdns.push("<td valign=\"middle\"><img src=\"", (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), "1tran.gif\" width=\"5\" height=\"1\"></td>");
		    }
		}
		else if ((ParamCtrl.FlagsLlegenda&gris_segons_escala) && !EsCapaDinsRangDEscalesVisibles(CapaDigi[i_sel])) 
		{
			if (CapaDigi[i_sel].visible==ara_no)
				cdns.push("<td valign=\"middle\"><img src=\"", (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), "ara_no_visibleg.gif\" align=middle></td>");
			else
				cdns.push("<td valign=\"middle\"><img src=\"", (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), "visibleg.gif\" align=middle></td>");
		}
		else
		{
		    cdns.push("<td valign=\"middle\">");
		    if (CapaDigi[i_sel].visible==si)
					cdns.push("<img src=\"", (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), "visible.gif\" alt=\"visible\" title=\"visible\"");
		    else
					cdns.push("<img src=\"", (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), "ara_no_visible.gif\" alt=\"no visible\" title=\"no visible\"");
				cdns.push(" align=middle name=\"v_obj_digi",i_sel,"\" border=\"0\" onClick='CanviaEstatObjDigi(",
					i_sel,", \"visible\");' onMouseOver=\"if (v_obj_digi",i_sel,".alt) window.status=v_obj_digi",
				i_sel,".alt; return true;\" onMouseOut=\"if (v_obj_digi",i_sel,".alt) window.status=\'\'; return true;\"></td>");
		}
		//Icones consultable:
		if (CapaDigi[i_sel].consultable==no)
		{
	   		if (alguna_consultable)
			{
			    if (ParamCtrl.FlagsLlegenda&icones_inactives_grises)
				cdns.push("<td valign=\"middle\"><img src=\"", (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), "ara_no_consultableg.gif\" align=middle></td>");
			    else
				cdns.push("<td valign=\"middle\"><img src=\"", (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), "1tran.gif\" width=\"1\" height=\"1\"></td>");
			}
		}
		else if ((ParamCtrl.FlagsLlegenda&gris_segons_escala) && !EsCapaDinsRangDEscalesVisibles(CapaDigi[i_sel]))
		{
			if (CapaDigi[i_sel].consultable==ara_no)
				cdns.push("<td valign=\"middle\"><img src=\"", (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), "ara_no_consultableg.gif\" align=middle></td>");
			else
				cdns.push("<td valign=\"middle\"><img src=\"", (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), "consultableg.gif\" align=middle></td>");
		}
		else
			cdns.push("<td valign=\"middle\"><img src=",
				((CapaDigi[i_sel].consultable==si) ? 
					("\""+(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+
						"consultable.gif\" alt=\""+DonaCadena3("consultable", "consultable", "queryable")+
						"\" title=\""+DonaCadena3("consultable", "consultable", "queryable")+"\"") : 
					("\""+(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+
						"ara_no_consultable.gif\" alt=\""+DonaCadena3("no consultable", "no consultable", "no queryable")+
						"\" title=\""+DonaCadena3("no consultable", "no consultable", "no queryable")+"\" align=middle")),
					" name=\"c_obj_digi",i_sel,"\" border=\"0\" onClick='CanviaEstatObjDigi(",i_sel,
				", \"consultable\");' onMouseOver=\"if (c_obj_digi",i_sel,".alt) window.status=c_obj_digi",i_sel,
				".alt; return true;\" onMouseOut=\"if (c_obj_digi",i_sel,".alt) window.status=\'\'; return true;\"></td>");
		//Icones descarregable:
	   	if (alguna_descarregable)
		    cdns.push("<td valign=\"middle\"><img src=\"",(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), "1tran.gif\" width=\"1\" height=\"1\"></td>");
		//Botó de GetCovergage:
	   	if (alguna_getcoverage)
		    cdns.push("<td valign=\"middle\"><img src=\"", (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), "1tran.gif\" width=\"1\" height=\"1\"></td>");
	    }
	    //Icona o color general per tota la capa en el cas de símbol únic
	    if (CapaDigi[i_sel].estil && CapaDigi[i_sel].estil.length>0 && CapaDigi[i_sel].estil[CapaDigi[i_sel].i_estil].ItemLleg && 
			CapaDigi[i_sel].estil[CapaDigi[i_sel].i_estil].ItemLleg.length==1 &&
   		   (!(ParamCtrl.FlagsLlegenda&gris_segons_escala) || EsCapaDinsRangDEscalesVisibles(CapaDigi[i_sel])))

	    {
		cdns.push("<td valign=\"middle\">");
		if (CapaDigi[i_sel].TipusObj=="S")
				cdns.push("<img src=\"",(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
						CapaDigi[i_sel].estil[CapaDigi[i_sel].i_estil].ItemLleg[0].color,"\">");
		else if (CapaDigi[i_sel].TipusObj=="L" || CapaDigi[i_sel].TipusObj=="P")
			cdns.push("<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><img src=\"" ,
				   (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
					DonaFitxerColor(CapaDigi[i_sel].estil[CapaDigi[i_sel].i_estil].ItemLleg[0].color), "\" width=\"18\" height=\"",
				((CapaDigi[i_sel].TipusObj=="P") ? 10 : 2),"\"></td></tr></table>");
		cdns.push("</td><td valign=\"middle\" nowrap>");
	     }
	     else
		cdns.push("<td colspan=2 valign=\"middle\" nowrap>");

	     //Nom de capa			
	     if (flag&llegenda_amb_control_capes && DonaCadena(CapaDigi[i_sel].metadades))
			cdns.push("<a href=\"javascript:void(0);\" onClick=\"ObreFinestraFitxerMetadades(", i_sel ,",-1);\">");
	     if (ParamCtrl.FlagsLlegenda&gris_segons_escala && !EsCapaDinsRangDEscalesVisibles(CapaDigi[i_sel]))
	     	cdns.push(aspecte.PreviDescLlegendaGris , DonaCadena(CapaDigi[i_sel].DescLlegenda) , aspecte.PostDescLlegendaGris);
	     else

	     cdns.push(aspecte.PreviDescLlegenda , DonaCadena(CapaDigi[i_sel].DescLlegenda) , aspecte.PostDescLlegenda);
	     if (flag&llegenda_amb_control_capes && DonaCadena(CapaDigi[i_sel].metadades))
		cdns.push("</a>");
	     cdns.push("</td></tr>");
		 if (CapaDigi[i_sel].estil && CapaDigi[i_sel].estil.length && 
			 CapaDigi[i_sel].visible!=no && CapaDigi[i_sel].visible!=ara_no &&
	     	 (!(ParamCtrl.FlagsLlegenda&gris_segons_escala) || EsCapaDinsRangDEscalesVisibles(CapaDigi[i_sel])))
		 {					
			
			//Radials d'estil si cal	
			if (CapaDigi[i_sel].estil.length>1 && CapaDigi[i_sel].visible!=ara_no)
			{
				if (CapaDigi[i_sel].NColEstil==0)
				{
					alert(DonaCadena3("La capa digitalitzada "+DonaCadena(CapaDigi[i_sel].desc)+" indica incorrectament 0 columnes de la llista d'estils però té "+
						  CapaDigi[i_sel].estil.length+" estils descrits. No es dibuixaran.",
						  "La capa digitalitzada"+DonaCadena(CapaDigi[i_sel].desc)+" indica incorrectamente 0 columnas de la lista de estilos pero tiene "+ 
						  CapaDigi[i_sel].estil.length+" estilos descritos. No se dibujaran.", 
						  "Digitized layer "+DonaCadena(CapaDigi[i_sel].desc)+" has been incorrectly set to 0 columns in the styles list but has "+
						  CapaDigi[i_sel].estil.length + " described styles. They will not be shown in the legend."));
				}
				else
				{
					cdns.push("<tr>");
				    if (flag&llegenda_amb_control_capes)
				    {
						cdns.push("<td valign=\"middle\" colspan=2><img src=",
								  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), "1tran.gif></td>",
							  "<td valign=\"middle\" colspan=" ,
							  (alguna_desplegable+alguna_visible+alguna_consultable+alguna_descarregable+alguna_getcoverage) ,
							  "><TABLE border=\"0\" cellspacing=\"0\" cellpadding=\"0\">");
						salt_entre_columnes=Math.floor(CapaDigi[i_sel].estil.length/CapaDigi[i_sel].NColEstil)+
										((CapaDigi[i_sel].estil.length%CapaDigi[i_sel].NColEstil!=0) ? 1 : 0);
						for (var j=0; j<salt_entre_columnes; j++)
						{
							cdns.push("<tr><td valign=\"middle\"><img src=\"",
									  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
									  "1tran.gif\" width=\"4\" height=\"1\"></td>");
							for (var k=0; k<CapaDigi[i_sel].NColEstil; k++)
							{
								var l=j+k*salt_entre_columnes;
								if (l<CapaDigi[i_sel].estil.length)
								{
									cdns.push("<td valign=\"middle\">",
										"<img src=\"",
										(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
										"1tran.gif\" width=\"4\" height=\"1\"><img align=middle name=\"e_obj_digi",
										i_sel,"_",l,"\"  border=\"0\" onClick='CanviaEstilCapaDigi(",i_sel,", ",l,");' src=\"",
										(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""));
									if (l==CapaDigi[i_sel].i_estil)
										cdns.push("radio.gif");
									else
										cdns.push("ara_no_radio.gif");
									cdns.push("\"></td>",
										"<td valign=\"middle\"><img src=\"",
										(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
										"1tran.gif\" width=\"2\" height=\"1\"></td>",
										"<td valign=\"middle\">");
									if (DonaCadena(CapaDigi[i_sel].estil[l].metadades))
										cdns.push("<a href=\"javascript:void(0);\" onClick=\"ObreFinestraFitxerMetadades(",
											i_sel,",",l,");\">");
									cdns.push(aspecte.PreviDescEstil , DonaCadena(CapaDigi[i_sel].estil[l].desc) , aspecte.PostDescEstil);
									if (DonaCadena(CapaDigi[i_sel].estil[l].metadades))
										cdns.push("</a>");
									cdns.push("</td>");
								}
								else
									cdns.push("<td colspan=3 valign=\"middle\">",aspecte.PreviDescEstil,"&nbsp;",aspecte.PostDescEstil,"</td>");
							}
							cdns.push("</tr>");
						}
						cdns.push("</TABLE></td>");
				    }
				    else
				    {
						cdns.push("<td valign=\"middle\" colspan=3>" ,
							aspecte.PreviDescEstil, (DonaCadena(CapaDigi[i_sel].estil[capa[i_sel].i_estil].desc)),
							aspecte.PostDescEstil, "</td>");
				    }
				    cdns.push("</tr>");
				}				
			}
			//Llegenda si hi ha més d'un item	
			if (CapaDigi[i_sel].estil[CapaDigi[i_sel].i_estil].ItemLleg && CapaDigi[i_sel].estil[CapaDigi[i_sel].i_estil].ItemLleg.length>1 && 
				(!(flag&llegenda_amb_control_capes) || CapaDigi[i_sel].LlegDesplegada==si))
			{

				if (CapaDigi[i_sel].estil[CapaDigi[i_sel].i_estil].ncol==0)
				{
					alert(DonaCadena3("La capa digitalitzada " + DonaCadena(CapaDigi[i_sel].desc) + " indica incorrectament 0 columnes dels items de la llegenda però té " + CapaDigi[i_sel].estil[CapaDigi[i_sel].i_estil].ItemLleg.length + " elements descrits. No es dibuixaran.", "La capa digitalizada " + DonaCadena(CapaDigi[i_sel].desc) + " indica incorrectamente 0 columnas en los items de la leyenda pero tiene " + CapaDigi[i_sel].estil[CapaDigi[i_sel].i_estil].ItemLleg.length + " elementos descritos. No es dibujaran.", "Digitized Layer " + DonaCadena(CapaDigi[i_sel].desc) + " has been incorrectly set to 0 columns on the legend items but it has " + CapaDigi[i_sel].estil[CapaDigi[i_sel].i_estil].ItemLleg.length + " described elements. They will not be shown on the legend."));
				}
				else
				{
					salt_entre_columnes=Math.floor(CapaDigi[i_sel].estil[CapaDigi[i_sel].i_estil].ItemLleg.length/CapaDigi[i_sel].estil[CapaDigi[i_sel].i_estil].ncol)+((CapaDigi[i_sel].estil[CapaDigi[i_sel].i_estil].ItemLleg.length%CapaDigi[i_sel].estil[CapaDigi[i_sel].i_estil].ncol!=0) ? 1 : 0);
					if (CapaDigi[i_sel].estil[CapaDigi[i_sel].i_estil].DescItems)
						cdns.push("<tr><td colspan=",
							(2+alguna_desplegable+alguna_visible+alguna_consultable+alguna_descarregable+alguna_getcoverage),
							">",aspecte.PreviDescItems,DonaCadena(CapaDigi[i_sel].estil[CapaDigi[i_sel].i_estil].DescItems),
							aspecte.PostDescItems,"</td></tr>");
					cdns.push("<tr><td colspan=",
						(2+alguna_desplegable+alguna_visible+alguna_consultable+alguna_descarregable+alguna_getcoverage),
						"><TABLE border=\"0\" cellspacing=\"0\" cellpadding=\"0\">");
					for (var j=0; j<salt_entre_columnes; j++)
					{
						cdns.push("<tr><td valign=\"middle\"><img src=\"",
								  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
								  "1tran.gif\" width=\"4\" height=\"1\"></td>");
						for (var k=0; k<CapaDigi[i_sel].estil[CapaDigi[i_sel].i_estil].ncol; k++)
						{
							var l=j+k*salt_entre_columnes;
							if (l<CapaDigi[i_sel].estil[CapaDigi[i_sel].i_estil].ItemLleg.length)
							{
								cdns.push("<td valign=\"middle\">");
								if (CapaDigi[i_sel].TipusObj=="S")
									cdns.push("<img src=\"",
											  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
											  CapaDigi[i_sel].estil[CapaDigi[i_sel].i_estil].ItemLleg[l].color,"\">");
								else if (CapaDigi[i_sel].TipusObj=="L" || CapaDigi[i_sel].TipusObj=="P")
									cdns.push("<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><img src=\"",
											  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
										DonaFitxerColor(CapaDigi[i_sel].estil[CapaDigi[i_sel].i_estil].ItemLleg[l].color),
										"\" width=\"10\" height=\"",
										((CapaDigi[i_sel].TipusObj=="P") ? 6 : 2),
										"\"></td></tr></table>");
								cdns.push("</td>",
									"<td valign=\"middle\"><img src=\"",
									(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
									"1tran.gif\" width=\"2\" height=\"1\"></td>",
									"<td valign=\"middle\">",aspecte.PreviDescColor,
									(DonaCadena(CapaDigi[i_sel].estil[CapaDigi[i_sel].i_estil].ItemLleg[l].DescColor)==null ? 
										"" : DonaCadena(CapaDigi[i_sel].estil[CapaDigi[i_sel].i_estil].ItemLleg[l].DescColor)) ,
									aspecte.PostDescColor,"</td>");
							}
							else
								cdns.push("<td colspan=3 valign=\"middle\">",aspecte.PreviDescColor,"&nbsp;",aspecte.PostDescColor,"</td>");
						}
						cdns.push("</tr>");
					}
					cdns.push("</TABLE></td></tr>");
				}
				
			 }		 		 
	     }	     
	}
	//Capes
	for (var i=0; i<capa.length; i++)
	{
 	    if (capa[i].separa!=null)
	    {
	        if (ParamCtrl.FlagsLlegenda&amaga_separa_no_capa &&
	               (((ParamCtrl.FlagsLlegenda&amaga_segons_escala) && !EsCapaDinsRangDEscalesVisibles(capa[i])) ||
  		     ((ParamCtrl.FlagsLlegenda&amaga_si_fora_ambit) && !EsCapaDinsAmbit(i)) ||
			!EsCapaDisponibleEnElCRSActual(capa[i]) ||
		    capa[i].VisibleALaLlegenda==no ||
			    (capa[i].visible!=si && capa[i].visible!=semitransparent && !(flag&llegenda_amb_capes_no_visibles))))
	        {
 		    //Busco si hi ha alguna capa visible fins al pròxim separador
		    for (var i2=i+1; i2<capa.length; i2++)
		    {
		        if (capa[i2].separa)
			    break;
	                if (((ParamCtrl.FlagsLlegenda&amaga_segons_escala) && !EsCapaDinsRangDEscalesVisibles(capa[i2])) ||
			    ((ParamCtrl.FlagsLlegenda&amaga_si_fora_ambit) && !EsCapaDinsAmbit(i2)) ||
				!EsCapaDisponibleEnElCRSActual(capa[i2]) ||
				capa[i2].VisibleALaLlegenda==no ||
				( capa[i2].visible!=si && capa[i2].visible!=semitransparent && !(flag&llegenda_amb_capes_no_visibles)) )
			    continue;
			cdns.push("<tr><td colspan=",
				(2+alguna_desplegable+alguna_visible+alguna_consultable+alguna_descarregable+alguna_getcoverage),
				" valign=\"middle\">",aspecte.PreviSepara , DonaCadena(capa[i].separa) , aspecte.PostSepara , "</td></tr>");
			break;
		    }
		}
		else
	    	{
		    cdns.push("<tr><td colspan=",
		    	(2+alguna_desplegable+alguna_visible+alguna_consultable+alguna_descarregable+alguna_getcoverage),
			" valign=\"middle\">",aspecte.PreviSepara , DonaCadena(capa[i].separa) , aspecte.PostSepara , "</td></tr>");
	    	}
	    }

	    if (((ParamCtrl.FlagsLlegenda&amaga_segons_escala) && !EsCapaDinsRangDEscalesVisibles(capa[i])) ||
		 ((ParamCtrl.FlagsLlegenda&amaga_si_fora_ambit) && !EsCapaDinsAmbit(i)) ||
		 !EsCapaDisponibleEnElCRSActual(capa[i]) ||
		 capa[i].VisibleALaLlegenda==no ||
		 ( capa[i].visible!=si && capa[i].visible!=semitransparent && !(flag&llegenda_amb_capes_no_visibles)) )
			continue;

	    i_sel=i;
    	    if (flag&llegenda_amb_control_capes)
	    {
		cdns.push("<tr><td valign=\"middle\">");
		
		//Icones de + o -:
			if (capa[i_sel].estil && capa[i_sel].estil.length>0 && 
				(!capa[i_sel].grup || !(ParamCtrl.FlagsLlegenda&grups_com_a_radials) || (capa[i_sel].visible!=no && capa[i_sel].visible!=ara_no)) &&
				(!(ParamCtrl.FlagsLlegenda&gris_segons_escala) || EsCapaDinsRangDEscalesVisibles(capa[i_sel])) &&
				(!(ParamCtrl.FlagsLlegenda&gris_si_fora_ambit) || EsCapaDinsAmbit(i_sel)) &&
				capa[i_sel].estil[capa[i_sel].i_estil].ItemLleg && capa[i_sel].estil[capa[i_sel].i_estil].ItemLleg.length>1)
			{
				if (capa[i_sel].LlegDesplegada==si)
					cdns.push("<img src=\"",
							  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
							  "menys.gif\" alt=\"",
						(DonaCadena3("plega llegenda", "recoge leyenda", "fold legend up")),
						"\" title=\"",
						(DonaCadena3("plega llegenda", "recoge leyenda", "fold legend up")),
						"\"");
				else 
					cdns.push("<img src=\"",
							  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
							  "mes.gif\" alt=\"",
						(DonaCadena3("desplega llegenda", "expande leyenda", "unfold legend")),
					"\" title=\"",
					(DonaCadena3("desplega llegenda", "expande leyenda", "unfold legend")),
					"\"");
				cdns.push(" align=middle name=\"m_raster",i_sel,"\" border=\"0\" onClick='CanviaEstatCapa(",
					i_sel,", \"lleg_desplegada\");' onMouseOver=\"if (m_raster",i_sel,".alt) window.status=m_raster",
					i_sel,".alt; return true;\" onMouseOut=\"if (m_raster",i_sel,".alt) window.status=\'\'; return true;\">");
			}
			else
				cdns.push("<img src=\"",
						  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
						  "menysg.gif\" alt=\"\" align=middle>");
			cdns.push("</td>");
			//Icones d'estats:
			//Icones visible:
			if (capa[i_sel].visible==no)
			{
				if (alguna_visible)
				{
					if (ParamCtrl.FlagsLlegenda&icones_inactives_grises)
					{
						if (capa[i_sel].grup!=null && capa[i_sel].grup!="")
							cdns.push("<td valign=\"middle\"><img src=\"",
									  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
									  "ara_no_radiog.gif\" align=middle></td>");
						else
							cdns.push("<td valign=\"middle\"><img src=\"",
									  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
									  "ara_no_visibleg.gif\" align=middle></td>");
					}
					else
						cdns.push("<td valign=\"middle\"><img src=\"",
								  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
								  "1tran.gif\" width=\"5\" height=\"1\"></td>");
				}
			}
			else if (((ParamCtrl.FlagsLlegenda&gris_segons_escala) && !EsCapaDinsRangDEscalesVisibles(capa[i_sel])) ||
				 ((ParamCtrl.FlagsLlegenda&gris_si_fora_ambit) && !EsCapaDinsAmbit(i_sel)))
			{
				if (capa[i_sel].grup!=null && capa[i_sel].grup!="")
				{
					if (capa[i_sel].visible==ara_no)
					cdns.push("<td valign=\"middle\"><img src=\"",
							  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
							  "ara_no_radiog.gif\" align=middle></td>");
					else
					cdns.push("<td valign=\"middle\"><img src=\"",
							  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
							  "radiog.gif\" align=middle></td>");
				}
				else
				{
					if (capa[i_sel].visible==ara_no)
						cdns.push("<td valign=\"middle\"><img src=\"",
								  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
								  "ara_no_visibleg.gif\" align=middle></td>");
					else
						cdns.push("<td valign=\"middle\"><img src=\"",
								  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
								  "visibleg.gif\" align=middle></td>");
				}
			}
			else
			{
					//"<input type=\"checkbox\" name=\"raster"+i_sel+"\""+ ((capa[i_sel].visible==si) ? " checked" : "") +" onClick=\"ControlCapes(document.llegenda)\">"+
				cdns.push("<td valign=\"middle\">");
				if (capa[i_sel].grup && ParamCtrl.FlagsLlegenda&grups_com_a_radials)
				{
					if (capa[i_sel].visible==si)
						cdns.push("<img src=\"",
								  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
								  "radio.gif\" alt=\"visible\" title=\"visible\"");  //No cal DonaCadena();
					else if (capa[i_sel].visible==semitransparent)
						cdns.push("<img src=\"",
								  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
								  "semi_radio.gif\" alt=\"",
							(DonaCadena3("semitransparent", "semitransparente", "semitransparent")),
						"\" title=\"", (DonaCadena3("semitransparent", "semitransparente", "semitransparent")),"\"");
					else
						cdns.push("<img src=\"",
								  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
								  "ara_no_radio.gif\" alt=\"no visible\" title=\"no visible\"");  //No cal DonaCadena();
					}
				else
				{
					if (capa[i_sel].visible==si)
						cdns.push("<img src=\"",
								  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
								  "visible.gif\" alt=\"visible\" title=\"visible\"");  //No cal DonaCadena();
					else if (capa[i_sel].visible==semitransparent)
						cdns.push("<img src=\"",
								  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
								  "semitransparent.gif\" alt=\"",(DonaCadena3("semitransparent", "semitransparente", "semitransparent")),
						"\" title=\"",(DonaCadena3("semitransparent", "semitransparente", "semitransparent")),"\"");
					else
						cdns.push("<img src=\"",
								  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
								  "ara_no_visible.gif\" alt=\"no visible\" title=\"no visible\""); //No cal DonaCadena();
				}
					cdns.push(" align=middle name=\"v_raster",i_sel,"\" border=\"0\" onClick='CanviaEstatCapa(",
					i_sel,", \"visible\");' onMouseOver=\"if (v_raster",i_sel,".alt) window.status=v_raster",
					i_sel,".alt; return true;\" onMouseOut=\"if (v_raster",i_sel,".alt) window.status=\'\'; return true;\"></td>");
			}
	//Icones consultable:
		if (capa[i_sel].consultable==no)
		{
	   		if (alguna_consultable)
			{
			    if (ParamCtrl.FlagsLlegenda&icones_inactives_grises)
				cdns.push("<td valign=\"middle\"><img src=\"",
						  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
						  "ara_no_consultableg.gif\" align=middle></td>");
			    else
				cdns.push("<td valign=\"middle\"><img src=\"",
						  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
						  "1tran.gif\" width=\"1\" height=\"1\"></td>");
			}
		}
		else if (((ParamCtrl.FlagsLlegenda&gris_segons_escala) && !EsCapaDinsRangDEscalesVisibles(capa[i_sel])) ||
		 	 ((ParamCtrl.FlagsLlegenda&gris_si_fora_ambit) && !EsCapaDinsAmbit(i_sel)))
		{
			if (capa[i_sel].consultable==ara_no)
				cdns.push("<td valign=\"middle\"><img src=\"",
						  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
						  "ara_no_consultableg.gif\" align=middle></td>");
			else
				cdns.push("<td valign=\"middle\"><img src=\"",
						  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
						  "consultableg.gif\" align=middle></td>");
		}
		else
			cdns.push("<td valign=\"middle\"><img src=",
				((capa[i_sel].consultable==si) ? 
					((AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "") +
					"\"consultable.gif\" alt=\""+DonaCadena3("consultable", "consultable", "queryable")+
					"\" title=\""+DonaCadena3("consultable", "consultable", "queryable")+ "\"") : 
					((AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "") +
					"\"ara_no_consultable.gif\" alt=\""+DonaCadena3("no consultable", "no consultable", "no queryable")+
					"\" title=\""+DonaCadena3("no consultable", "no consultable", "no queryable")+ "\" align=middle")),
						" name=\"c_raster",i_sel,"\" border=\"0\" onClick='CanviaEstatCapa(",
					i_sel,", \"consultable\");' onMouseOver=\"if (c_raster",i_sel,".alt) window.status=c_raster",
					i_sel,".alt; return true;\" onMouseOut=\"if (c_raster",i_sel,".alt) window.status=\'\'; return true;\"></td>");
		//Icones descarregable:
		if (capa[i_sel].descarregable==no)
		{
		   	if (alguna_descarregable)
			{
			    if (ParamCtrl.FlagsLlegenda&icones_inactives_grises)
				cdns.push("<td valign=\"middle\"><img src=\"",
						  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
						  "ara_no_descarregableg.gif\" align=middle></td>");
			    else
				cdns.push("<td valign=\"middle\"><img src=\"",
						  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
						  "1tran.gif\" width=\"1\" height=\"1\"></td>");
			}
		}
		else if (((ParamCtrl.FlagsLlegenda&gris_segons_escala) && !EsCapaDinsRangDEscalesVisibles(capa[i_sel])) ||
		 	 ((ParamCtrl.FlagsLlegenda&gris_si_fora_ambit) && !EsCapaDinsAmbit(i_sel)))
		{
			if (capa[i_sel].descarregable==ara_no)
				cdns.push("<td valign=\"middle\"><img src=\"",
						  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
						  "ara_no_descarregableg.gif\" align=middle></td>");
			else
				cdns.push("<td valign=\"middle\"><img src=\"",
						  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
						  "descarregableg.gif\" align=middle></td>");
		}
		else
			cdns.push("<td valign=\"middle\"><img src=",
					((capa[i_sel].descarregable==si) ? 
								(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+
								"\"descarregable.gif\" alt=\""+DonaCadena3("descarregable", "descargable", "downloadable")+"\"" : 
								(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+
								"\"ara_no_descarregable.gif\" alt=\""+DonaCadena3("no descarregable", "no descargable", "no downloadable")+"\" align=middle"),
						" name=\"z_raster",i_sel,"\" border=\"0\" onClick='CanviaEstatCapa(",i_sel,
					", \"descarregable\");' onMouseOver=\"if (z_raster",i_sel,".alt) window.status=z_raster",i_sel,
					".alt; return true;\" onMouseOut=\"if (z_raster",i_sel,".alt) window.status=\'\'; return true;\"></td>");
	    }
		//Botó de GetCovergage:
		if (capa[i_sel].FormatCoverage==null)
		{
		   	if (alguna_getcoverage)
			    cdns.push("<td valign=\"middle\"><img src=\"",
						  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
						  "1tran.gif\" width=\"1\" height=\"1\"></td>");
		}
		else
			cdns.push("<td valign=\"middle\">",
			(CadenaBotoPolsable("getcov"+i_sel, "getcov", DonaCadena3("descarregar", "descargar", "download"), "ObreFinestraWCS("+i_sel+")")),
			"</td>");

		//Icona o color general per tota la capa en cas de simbol únic.
		if (capa[i_sel].estil && capa[i_sel].estil.length && capa[i_sel].estil[capa[i_sel].i_estil].ItemLleg && 
			capa[i_sel].estil[capa[i_sel].i_estil].ItemLleg.length==1 &&
			(!(ParamCtrl.FlagsLlegenda&gris_segons_escala) || EsCapaDinsRangDEscalesVisibles(capa[i_sel])) &&
		        (!(ParamCtrl.FlagsLlegenda&gris_si_fora_ambit) || EsCapaDinsAmbit(i_sel)))
		{
			cdns.push("<td valign=\"middle\">");
			if (capa[i_sel].estil[capa[i_sel].i_estil].TipusObj=="S")
				cdns.push("<img src=\"" , 
						  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
						  capa[i_sel].estil[capa[i_sel].i_estil].ItemLleg[0].color , "\">");
			else if (capa[i_sel].estil[capa[i_sel].i_estil].TipusObj=="L" || (capa[i_sel].estil[capa[i_sel].i_estil].TipusObj=="P"))
				cdns.push("<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><img src=\"" , 
						  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
					DonaFitxerColor(capa[i_sel].estil[capa[i_sel].i_estil].ItemLleg[0].color) , 
					"\" width=\"18\" height=\"",
					((capa[i_sel].estil[capa[i_sel].i_estil].TipusObj=="P") ? 10 : 2),
					"\"></td></tr></table>");
			cdns.push("</td><td valign=\"middle\" nowrap>");
		}
		else
			cdns.push("<td colspan=2 valign=\"middle\" nowrap>");

		//Nom de capa			
		if (flag&llegenda_amb_control_capes && DonaCadena(capa[i_sel].metadades))
			cdns.push("<a href=\"javascript:void(0);\" onClick=\"ObreFinestraFitxerMetadades(", i_sel ,",-1);\">");
		if (((ParamCtrl.FlagsLlegenda&gris_segons_escala) && !EsCapaDinsRangDEscalesVisibles(capa[i_sel])) ||
		    ((ParamCtrl.FlagsLlegenda&gris_si_fora_ambit) && !EsCapaDinsAmbit(i_sel)))
			cdns.push(aspecte.PreviDescLlegendaGris, DonaCadena(capa[i_sel].DescLlegenda), aspecte.PostDescLlegendaGris);
		else
			cdns.push(aspecte.PreviDescLlegenda , DonaCadena(capa[i_sel].DescLlegenda) , aspecte.PostDescLlegenda);
		if (flag&llegenda_amb_control_capes && DonaCadena(capa[i_sel].metadades))
			cdns.push("</a>");
		cdns.push("</td></tr>");

		//Control del temps si cal
		if (capa[i_sel].animable&multitime && capa[i_sel].visible!=no && capa[i_sel].visible!=ara_no &&
			(!(ParamCtrl.FlagsLlegenda&gris_segons_escala) || EsCapaDinsRangDEscalesVisibles(capa[i_sel])) &&
		        (!(ParamCtrl.FlagsLlegenda&gris_si_fora_ambit) || EsCapaDinsAmbit(i_sel)))
		{
			if (flag&llegenda_amb_control_capes)
		    	{
				cdns.push("<tr><td valign=\"middle\" colspan=2><img src=",
						  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
						  "1tran.gif></td>",
				   "<td valign=\"middle\" colspan=" ,
				   (alguna_desplegable+alguna_visible+alguna_consultable+alguna_descarregable+alguna_getcoverage) ,
					   "><select CLASS=text_petit name=\"data_capa_",i_sel,"\" onChange=\"CanviaDataDeCapaMultitime(",
				   i_sel,", parseInt(document.form_llegenda.data_capa_",i_sel,".value));\">\n");
				for (var i_data=0; i_data<capa[i_sel].data.length; i_data++)
				    cdns.push("<OPTION VALUE=\"",i_data,"\"",
				    	((i_data==capa[i_sel].i_data) ? " SELECTED" : "") ,
					">" , (DonaDataBreuComAText(i_sel,i_data)) , "</OPTION>\n");
				cdns.push("</select></td></tr>");
			}
			else
			{
				cdns.push("<td valign=\"middle\" colspan=3>",aspecte.PreviDescEstil,(DonaDataBreuComAText(i_sel,capa[i_sel].i_data)),
				 	aspecte.PostDescEstil , "</td>");
			}
		}
		if (capa[i_sel].estil && capa[i_sel].estil.length && 
			(!capa[i_sel].grup || !(ParamCtrl.FlagsLlegenda&grups_com_a_radials) || (capa[i_sel].visible!=no && capa[i_sel].visible!=ara_no &&
			(!(ParamCtrl.FlagsLlegenda&gris_segons_escala) || EsCapaDinsRangDEscalesVisibles(capa[i_sel])) &&
		        (!(ParamCtrl.FlagsLlegenda&gris_si_fora_ambit) || EsCapaDinsAmbit(i_sel))
			)))
		{
			//Radials d'estil si cal	
			if (capa[i_sel].estil.length>1 && capa[i_sel].visible!=ara_no)
			{
				if (capa[i_sel].NColEstil==0)
				{
					alert(DonaCadena3("La capa " + DonaCadena(capa[i_sel].desc) + " indica incorrectament 0 columnes de la llista d'estils però té " + capa[i_sel].estil.length + " estils descrits. No es dibuixaran.", "La capa " + DonaCadena(capa[i_sel].desc) + " indica incorrectamente 0 columnas de la lista de estilos pero tiene " + capa[i_sel].estil.length + " estilos descritos. No se dibujaran.", "Layer " + DonaCadena(capa[i_sel].desc) + " has been incorrectly set to 0 columns in the styles list but has " + capa[i_sel].estil.length + " described styles. They will not be shown in the legend."));
				}
				else
				{
				    cdns.push("<tr>");
				    if (flag&llegenda_amb_control_capes)
				    {
						cdns.push("<td valign=\"middle\" colspan=2><img src=",
								  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
								  "1tran.gif></td>",
							  "<td valign=\"middle\" colspan=" ,
							  (alguna_desplegable+alguna_visible+alguna_consultable+alguna_descarregable+alguna_getcoverage) ,
							  "><TABLE border=\"0\" cellspacing=\"0\" cellpadding=\"0\">");
						salt_entre_columnes=Math.floor(capa[i_sel].estil.length/capa[i_sel].NColEstil)+((capa[i_sel].estil.length%capa[i_sel].NColEstil!=0) ? 1 : 0);
						for (var j=0; j<salt_entre_columnes; j++)
						{
							cdns.push("<tr><td valign=\"middle\"><img src=\"",
									  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
									  "1tran.gif\" width=\"4\" height=\"1\"></td>");
							for (var k=0; k<capa[i_sel].NColEstil; k++)
							{
								var l=j+k*salt_entre_columnes;
								if (l<capa[i_sel].estil.length)
								{
									cdns.push("<td valign=\"middle\">",
										"<img src=\"",
										(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
										"1tran.gif\" width=\"4\" height=\"1\"><img align=middle name=\"e_raster",
										i_sel,"_",l,"\"  border=\"0\" onClick='CanviaEstilCapa(",i_sel,", ",l,");' src=\"",
										(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""));
									if (l==capa[i_sel].i_estil)
										cdns.push("radio.gif");
									else
										cdns.push("ara_no_radio.gif");
									cdns.push("\"></td>",
										"<td valign=\"middle\"><img src=\"",
										(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
										"1tran.gif\" width=\"2\" height=\"1\"></td>",
										"<td valign=\"middle\">");
									if (DonaCadena(capa[i_sel].estil[l].metadades))
										cdns.push("<a href=\"javascript:void(0);\" onClick=\"ObreFinestraFitxerMetadades(",
											i_sel,",",l,");\">");
									cdns.push(aspecte.PreviDescEstil , DonaCadena(capa[i_sel].estil[l].desc) , aspecte.PostDescEstil);
									if (DonaCadena(capa[i_sel].estil[l].metadades))
										cdns.push("</a>");
									cdns.push("</td>");
								}
								else
									cdns.push("<td colspan=3 valign=\"middle\">",aspecte.PreviDescEstil,"&nbsp;",aspecte.PostDescEstil,"</td>");
							}
							cdns.push("</tr>");
						}
						cdns.push("</TABLE></td>");
				    }
				    else
				    {
						cdns.push("<td valign=\"middle\" colspan=3>" ,
							aspecte.PreviDescEstil, (DonaCadena(capa[i_sel].estil[capa[i_sel].i_estil].desc)),
							aspecte.PostDescEstil, "</td>");
				    }
				    cdns.push("</tr>");
				}				
			}
		
			//Llegenda si hi ha més d'un item	
			if (capa[i_sel].estil[capa[i_sel].i_estil].ItemLleg && capa[i_sel].estil[capa[i_sel].i_estil].ItemLleg.length>1 && (!(flag&llegenda_amb_control_capes) || capa[i_sel].LlegDesplegada==si))
			{
				if (capa[i_sel].estil[capa[i_sel].i_estil].ncol==0)
				{
					alert(DonaCadena3("La capa " + DonaCadena(capa[i_sel].desc) + " indica incorrectament 0 columnes dels items de la llegenda però té " + capa[i_sel].estil[capa[i_sel].i_estil].ItemLleg.length + " elements descrits. No es dibuixaran.", "La capa " + DonaCadena(capa[i_sel].desc) + " indica incorrectamente 0 columnas en los items de la leyenda pero tiene " + capa[i_sel].estil[capa[i_sel].i_estil].ItemLleg.length + " elementos descritos. No es dibujaran.", "Layer " + DonaCadena(capa[i_sel].desc) + " has been incorrectly set to 0 columns on the legend items but it has " + capa[i_sel].estil[capa[i_sel].i_estil].ItemLleg.length + " described elements. They will not be shown on the legend."));
				}
				else
				{
					salt_entre_columnes=Math.floor(capa[i_sel].estil[capa[i_sel].i_estil].ItemLleg.length/capa[i_sel].estil[capa[i_sel].i_estil].ncol)+((capa[i_sel].estil[capa[i_sel].i_estil].ItemLleg.length%capa[i_sel].estil[capa[i_sel].i_estil].ncol!=0) ? 1 : 0);
					if (capa[i_sel].estil[capa[i_sel].i_estil].DescItems)
						cdns.push("<tr><td colspan=",
							(2+alguna_desplegable+alguna_visible+alguna_consultable+alguna_descarregable+alguna_getcoverage),
							">",aspecte.PreviDescItems,DonaCadena(capa[i_sel].estil[capa[i_sel].i_estil].DescItems),
							aspecte.PostDescItems,"</td></tr>");
					cdns.push("<tr><td colspan=",
						(2+alguna_desplegable+alguna_visible+alguna_consultable+alguna_descarregable+alguna_getcoverage),
						"><TABLE border=\"0\" cellspacing=\"0\" cellpadding=\"0\">");
					for (var j=0; j<salt_entre_columnes; j++)
					{
						cdns.push("<tr><td valign=\"middle\"><img src=\"",
								  (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
								  "1tran.gif\" width=\"4\" height=\"1\"></td>");
						for (var k=0; k<capa[i_sel].estil[capa[i_sel].i_estil].ncol; k++)
						{
							var l=j+k*salt_entre_columnes;
							if (l<capa[i_sel].estil[capa[i_sel].i_estil].ItemLleg.length)
							{
								cdns.push("<td valign=\"middle\">");
								if (capa[i_sel].estil[capa[i_sel].i_estil].TipusObj=="S")
									cdns.push("<img src=\"",(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
												capa[i_sel].estil[capa[i_sel].i_estil].ItemLleg[l].color,"\">");
								else if (capa[i_sel].estil[capa[i_sel].i_estil].TipusObj=="L" || capa[i_sel].estil[capa[i_sel].i_estil].TipusObj=="P")
									cdns.push("<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><img src=\"",
										(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
										DonaFitxerColor(capa[i_sel].estil[capa[i_sel].i_estil].ItemLleg[l].color),
										"\" width=\"10\" height=\"",
										((capa[i_sel].estil[capa[i_sel].i_estil].TipusObj=="P") ? 6 : 2),
										"\"></td></tr></table>");
								cdns.push("</td>",
									"<td valign=\"middle\"><img src=\"",
									(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
									"1tran.gif\" width=\"2\" height=\"1\"></td>",
									"<td valign=\"middle\">",aspecte.PreviDescColor,
									(DonaCadena(capa[i_sel].estil[capa[i_sel].i_estil].ItemLleg[l].DescColor)==null ? 
										"" : DonaCadena(capa[i_sel].estil[capa[i_sel].i_estil].ItemLleg[l].DescColor)) ,
									aspecte.PostDescColor,"</td>");
							}
							else
								cdns.push("<td colspan=3 valign=\"middle\">",aspecte.PreviDescColor,"&nbsp;",aspecte.PostDescColor,"</td>");
						}
						cdns.push("</tr>");
					}
					cdns.push("</TABLE></td></tr>");
				}
			}
		}
		//i=i_fi_grup;
	}
	cdns.push("</TABLE>",
		(aspecte.PeuLlegenda ? 
			(DonaCadena(aspecte.PeuLlegenda)!="" ? "<br>" + DonaCadena(aspecte.PeuLlegenda) : "") 
			: ""));
    if (flag&llegenda_amb_control_capes)
	cdns.push("</form>");
    return cdns.join("");
}//Fi de DonaCadenaHTMLLlegenda()



var scroll_llegenda_previ=new CreaPunt2D(0,0);

function CreaLlegenda()
{
var salt_entre_columnes;

	var s=DonaCadenaHTMLLlegenda(ParamCtrl.AspecteLlegenda, llegenda_amb_control_capes|llegenda_amb_capes_no_visibles);
	var elem=getLayer(this, "llegenda");
if (isLayer(elem))
	{
		
		contentLayer(elem, s);
		showLayer(elem);
		//·$·Queda pendent el tema de la recuperaciò d'scrolls.
	}
}

function EsCapaVisibleAAquestNivellDeZoom(i)
{
	/*Els nivells de zoom estan invertits.*/
	var c=capa[i];
	if ((c.visible==si || c.visible==semitransparent) &&
	    EsCapaDinsRangDEscalesVisibles(c) && EsCapaDinsAmbit(i) && EsCapaDisponibleEnElCRSActual(c))
		return true;
	return false;
}

function EsObjDigiVisibleAAquestNivellDeZoom(c)
{
	/*Els nivells de zoom estan invertits.*/
	if ((c.visible==si || c.visible==semitransparent) &&
	    EsCapaDinsRangDEscalesVisibles(c))
		return true;
	return false;
}

function DonaDataComAText(i_capa, i_data)
{
var cdns=new Array;
var data_a_usar;

if (capa[i_capa].FlagsData&mostra_any ||capa[i_capa].FlagsData&mostra_mes || capa[i_capa].FlagsData&mostra_dia ||
		capa[i_capa].FlagsData&mostra_hora || capa[i_capa].FlagsData&mostra_minut || capa[i_capa].FlagsData&mostra_segon)
		data_a_usar=capa[i_capa].data[((i_data==null || i_data==-1) ? capa[i_capa].i_data : i_data)];
	
	if (capa[i_capa].FlagsData&mostra_desc_llegenda)
	    	cdns.push(DonaCadena(capa[i_capa].DescLlegenda)," ");
	if (capa[i_capa].FlagsData&mostra_dia)
	        cdns.push(data_a_usar.getDate() , " ");
	if (capa[i_capa].FlagsData&mostra_mes)
	{
		if (capa[i_capa].FlagsData&mostra_dia)
		        cdns.push(DonaCadena(PrepMesDeLAny[data_a_usar.getMonth()]));
		else
		    	cdns.push(DonaCadena(MesDeLAny[data_a_usar.getMonth()]));
	}
	if (capa[i_capa].FlagsData&mostra_any)
	{
		if (capa[i_capa].FlagsData&mostra_mes)
		    cdns.push((DonaCadena3(" de ", " de ", " ")));
		cdns.push((data_a_usar.getFullYear ? data_a_usar.getFullYear() : takeYear(data_a_usar)));
        }
	return cdns.join("");
}

function DonaDataBreuComAText(i_capa, i_data)
{
var data_a_usar;
var cdns=new Array;

	if (capa[i_capa].FlagsData&mostra_desc_llegenda)
	{
	    cdns.push(DonaCadena(capa[i_capa].DescLlegenda));
	    if (capa[i_capa].FlagsData&(mostra_any|mostra_mes|mostra_dia|mostra_hora|mostra_minut|mostra_segon))
		        cdns.push(",");
	}	
//	if (capa[i_capa].FlagsData&(mostra_any|mostra_mes|mostra_dia|mostra_hora|mostra_minut|mostra_segon))
	if (capa[i_capa].FlagsData&mostra_any ||capa[i_capa].FlagsData&mostra_mes || capa[i_capa].FlagsData&mostra_dia ||
		capa[i_capa].FlagsData&mostra_hora || capa[i_capa].FlagsData&mostra_minut || capa[i_capa].FlagsData&mostra_segon)
		data_a_usar=capa[i_capa].data[((i_data==null || i_data==-1) ? capa[i_capa].i_data : i_data)];

	if (capa[i_capa].FlagsData&mostra_dia)

	{
		if (data_a_usar.getDate()<10)
		    cdns.push("0");
		cdns.push(data_a_usar.getDate());
	}
	if (capa[i_capa].FlagsData&mostra_mes)
	{
	    if (capa[i_capa].FlagsData&mostra_dia)
	        cdns.push("/");
	    if (data_a_usar.getMonth()<9)
		cdns.push("0");
	    cdns.push(data_a_usar.getMonth()+1);
	}
	if (capa[i_capa].FlagsData&mostra_any)
	{
	    if (capa[i_capa].FlagsData&mostra_mes)
		cdns.push("/");
	    cdns.push(data_a_usar.getFullYear ? data_a_usar.getFullYear() : takeYear(data_a_usar));
        }
	if (capa[i_capa].FlagsData&(mostra_hora|mostra_minut|mostra_segon))
	{
	    if (capa[i_capa].FlagsData&(mostra_any|mostra_mes|mostra_dia))
		cdns.push(" ");
	}
	if (capa[i_capa].FlagsData&mostra_hora)
	{
	    if (data_a_usar.getHours()<10)
		cdns.push("0");
	    cdns.push(data_a_usar.getHours());
        }
	if (capa[i_capa].FlagsData&mostra_minut)
	{
	    if (capa[i_capa].FlagsData&mostra_hora)
		cdns.push(":");
	    if (data_a_usar.getMinutes()<10)
		cdns.push("0");
	    cdns.push(data_a_usar.getMinutes());
        }
	if (capa[i_capa].FlagsData&mostra_segon)
	{
	    if (capa[i_capa].FlagsData&mostra_minut)
		cdns.push(":");
	    if (data_a_usar.getSeconds()<10)
		cdns.push("0");
	    cdns.push(data_a_usar.getSeconds());
        }
	return cdns.join("");
}

function DonaDataCompacteComAText(data)
{
var cdns=new Array;

	if(data)
	{
	    cdns.push((data.getFullYear ? data.getFullYear() : takeYear(data)));
	    if(data.getMonth()<9)
			cdns.push("0");
	    cdns.push((data.getMonth()+1));
	    if(data.getDate()<10)
			cdns.push("0");
	    cdns.push((data.getDate()));

	    //Vol dir que hi ha temps, perquè en la creació sinó es diu hora, l'estructura s¡omple com 00:00:00.
	    if(data.getHours()!=0 || data.getMinutes()!=0 || data.getSeconds()!=0) 
	    {
			if(data.getHours()<10)
				cdns.push("0");
			cdns.push((data.getHours()));
			if(data.getMinutes()<10)
				cdns.push("0");
			cdns.push((data.getMinutes()));
			if(data.getSeconds()<10)
				cdns.push("0");
			cdns.push((data.getSeconds()));
	    }
	}
	return cdns.join("");
}//fi de DonaDataCompacteComAText()

function DonaDataISO8601ComAText(data)
{
var cdns=new Array;

	if(data)
	{
	    cdns.push((data.getFullYear ? data.getFullYear() : takeYear(data)) , "-");
	    if(data.getMonth()<9)
		cdns.push("0");
	    cdns.push((data.getMonth()+1) , "-");
	    if(data.getDate()<10)
		cdns.push("0");
	    cdns.push((data.getDate()));

	    //Vol dir que hi ha temps, perquè en la creació sinó es diu hora, l'estructura s¡omple com 00:00:00.
	    if(data.getHours()!=0 || data.getMinutes()!=0 || data.getSeconds()!=0) 
	    {
			cdns.push("T");
			if(data.getHours()<10)
				cdns.push("0");
			cdns.push((data.getHours()), ":");
			if(data.getMinutes()<10)
				cdns.push("0");
			cdns.push((data.getMinutes()) , ":" );
			if(data.getSeconds()<10)
				cdns.push("0");
			cdns.push((data.getSeconds()) , "Z");
	    }
	}
	return cdns.join("");
}//fi de DonaDataISO8601ComAText()

//Aquest funció, de moment, només canvia la variable %TIME%
function CanviaVariablesDeCadena(s, i_capa)
{
var i;

	if (capa[i_capa].animable&multitime && capa[i_capa].data)
	{
		while(true)
		{	
			i=s.indexOf("%TIME%");
			if (i==-1)
				break;
			s=s.substring(0,i)+DonaDataCompacteComAText(capa[i_capa].data[capa[i_capa].i_data])+s.substring(i+6,s.length);
		}
	}
	return s;
}

function CanviaDataDeCapaMultitime(i_capa, i_data)
{
	capa[i_capa].i_data=i_data;
	OmpleVistaCapa(i_capa);
}


function CreaGetTileWMTS_SOAP(i_capa, i_tile_matrix, j, i)
{
	this.i_capa=i_capa;
	this.i_tile_matrix=i_tile_matrix;
	this.j=j;
	this.i=i;
	this.text="";
}

function AvaluaRespostaGetTileWMTS_SOAP(doc, dades_request)
{
var root;
var elem, elem_fill;
var binary_content="";
var format="";
var ns;

	if(!doc || !dades_request) return;	
	root=doc.documentElement;
	if(!root) return;
	
	//Agafo l'element BinaryPayload
	ns="http://www.opengis.net/wmts/"+DonaVersioPerNameSpaceComAText(capa[dades_request.i_capa].versio);	
	elem=DonamElementsNodeAPartirDelNomDelCamp(root, ns, "wmts", "BinaryPayload");
	if(!elem || elem.length<1)
	{
		ns="http://www.opengis.net/wmts/"+DonaVersioComAText(capa[dades_request.i_capa].versio);	
		elem=DonamElementsNodeAPartirDelNomDelCamp(root, ns, "wmts", "BinaryPayload");
		if(!elem || elem.length<1)
		{
			alert(DonaCadena3("No trobo BinaryPayload a la resposta GetTile en SOAP", 
							  "No encuentro BinaryPayload la respuesta GetTile en SOAP", 
							  "BinaryPayload cannot be found on GetTile SOAP answer")+": \n"+dades_request.text);
			return;  //Si no existeix l'element BinaryPayload es podria mirar si hi ha l'element Fault i 
					   //llegir i mostrar l'excepció, però això de moment no es fa mira en cap dels casos, ni en el GetMap		
		}
	}
	for(var i=0; i<elem[0].childNodes.length; i++)
	{				
		var tag=elem[0].childNodes[i];
		if(tag.tagName=="wmts:Format" || tag.tagName=="Format")
		   format=tag.childNodes[0].nodeValue;
		else if(tag.tagName=="wmts:BinaryContent" || tag.tagName=="BinaryContent" || tag.tagName=="wmts:PayloadContent" || tag.tagName=="PayloadContent")
			binary_content=tag.childNodes[0].nodeValue;
	}
	if(format=="")
	{
		alert(DonaCadena3("No trobo Format a la resposta GetTile en SOAP", 
						  "No encuentro Format en la respuesta GetTile en SOAP", 
						  "Format cannot be found on GetTile SOAP answer")+": \n"+dades_request.text);
		return;  
	}
	else if (binary_content=="")
	{
		alert(DonaCadena3("No trobo BinaryContent ni PayloadContent a la resposta GetTile en SOAP", 
						  "No encuentro BinaryContent ni PayloadContent en la respuesta GetTile en SOAP", 
						  "BinaryPayload and PayloadContent cannot be found on GetTile SOAP answer")+": \n"+dades_request.text );
		return;  //Si no existeix l'element BinaryPayload es podria mirar si hi ha l'element Fault i 
					   //llegir i mostrar l'excepció, però això de moment no es fa mira en cap dels casos, ni en el GetMap		
	}
	
	/* No ho faig servir perquè no sé perquè però em diu que el binary_content no té cap fill
	//Obtinc el format
	elem_fill=DonamElementsNodeAPartirDelNomDelCamp(elem[0], ns, "wmts", "Format");
	if(elem_fill && elem_fill.length>0 && elem_fill[0].hasChildNodes())
	   format=elem_fill[0].childNodes[0].nodeValue;
	else 
		return;

	//Obtinc el binary_content que és la imatge sol·licitada en codificació amb base 63
	elem_fill=DonamElementsNodeAPartirDelNomDelCamp(elem[0],ns,"wmts","BinaryContent");
	if(!elem_fill || elem.length<1)
		elem_fill=DonamElementsNodeAPartirDelNomDelCamp(elem[0], ns, "wmts", "PayloadContent");
	if(elem_fill && elem_fill.length>0 && elem_fill[0].hasChildNodes())
	   binary_content=elem_fill[0].childNodes[0].nodeValue;
	else
	{
		alert(DonaCadena3("No trobo BinaryContent ni PayloadContent a la resposta GetTile en SOAP", 
						  "No encuentro BinaryContent ni PayloadContent en la respuesta GetTile en SOAP", 
						  "BinaryPayload and PayloadContent cannot be found on GetTile SOAP answer"));
		return;  //Si no existeix l'element BinaryPayload es podria mirar si hi ha l'element Fault i 
					   //llegir i mostrar l'excepció, però això de moment no es fa mira en cap dels casos, ni en el GetMap		
	}*/


	//alert(binary_content);

	binary_content=binary_content.replace(/\n/g,"");
	binary_content=binary_content.replace(/\r/g,"");
	setTimeout("this.document.i_raster"+ dades_request.i_capa +"_"+dades_request.j+"_"+dades_request.i +".src=\"data:"+format +";base64,"+ binary_content+"\"", 75);

}//Fi de AvaluaRespostaGetTileWMTS_SOAP()

var RespostaGetTileWMTS_SOAP=new Array();
var ajaxGetTileWMTS_SOAP=new Array();

function FesPeticioAjaxGetTileWMTS_SOAP(i_capa, estil, i_tile_matrix, j, i, i_data)
{
var cdns=new Array();
var cdns_temp=new Array();
var s;
var servidor_temp;

	RespostaGetTileWMTS_SOAP[RespostaGetTileWMTS_SOAP.length]=new CreaGetTileWMTS_SOAP(i_capa, i_tile_matrix, j, i);
	//Creo la petició de GetTile en SOAP
	cdns.push("<?xml version=\"1.0\"?>\n",
			  "<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\">",
			  "<soap:Body>",
			  "<GetTile xmlns=\"http://www.opengis.net/wmts/", DonaVersioPerNameSpaceComAText(capa[i_capa].versio),"\" ",
						"xmlns:ows=\"http://www.opengis.net/ows/1.1\" ",
						"xsi:schemaLocation=\"http://www.opengis.net/wmts/",DonaVersioPerNameSpaceComAText(capa[i_capa].versio),
						" http://www.miramon.uab.es/ogc/schemas/wmts/", 
						DonaVersioComAText(capa[i_capa].versio), "/wmtsGetTile_request.xsd\" ", 
						"service=\"WMTS\" version=\"",DonaVersioComAText(capa[i_capa].versio),"\">\n",
							"<Layer>",capa[i_capa].nom, "</Layer>\n");						  
	if (capa[i_capa].estil && capa[i_capa].estil.length)
	{
		cdns.push(			  "<Style>");
		if (estil==null)
		{
			if (capa[i_capa].estil[capa[i_capa].i_estil].nom)
				cdns.push(capa[i_capa].estil[capa[i_capa].i_estil].nom);
		}
		else
			cdns.push(estil);
		cdns.push(			  "</Style>\n");
	}		
	cdns.push(			  "<Format>", capa[i_capa].FormatImatge,"</Format>\n");
	if (capa[i_capa].animable&multitime)
	{
			cdns.push(			"<DimensionNameValue name=\"TIME\">",
					  			DonaDataISO8601ComAText(capa[i_capa].data[(i_data==-1) ? capa[i_capa].i_data : i_data]),
								"</DimensionNameValue>\n");
	}
	cdns.push(			"<TileMatrixSet>",capa[i_capa].TileMatrixSet.nom,"</TileMatrixSet>\n",
						"<TileMatrix>",capa[i_capa].TileMatrixSet.ll[i_tile_matrix].Identifier,"</TileMatrix>\n",
						"<TileRow>",j,"</TileRow>\n",
						"<TileCol>",i,"</TileCol>\n",
					"</GetTile>\n");
	//ServerToRequest
	if (parent.location.host && DonaHost(capa[i_capa].servidor).toLowerCase()!=parent.location.host.toLowerCase() && ServidorLocal)
	{
		var s_host=DonaHost(ServidorLocal);
		var pos_host=(-1!=ServidorLocal.indexOf("//")) ? ServidorLocal.indexOf("//")+2 : 0;
		if (s_host.toLowerCase()!=parent.location.host.toLowerCase())
			servidor_temp=DonaNomServidorCaracterFinal(ServidorLocal.substring(0,pos_host)+
							parent.location.host+ServidorLocal.substring(pos_host+s_host.length, ServidorLocal.length));
		else
			servidor_temp=ServidorLocal;
		cdns.push(		"<ServerToRequest>",DonaNomServidorSenseCaracterFinal(capa[i_capa].servidor),"</ServerToRequest>\n");
	}
	else
		servidor_temp=DonaNomServidorSenseCaracterFinal(capa[i_capa].servidor);
	
	cdns.push(			"</soap:Body>\n",
				"</soap:Envelope>\n");	
	s=cdns.join("");
	CreaIOmpleEventConsola("WMTS-SOAP, tiled layer "+i_capa, servidor_temp+"\n\n"+s, TipusEventWMTSTileSOAP);
	ajaxGetTileWMTS_SOAP[ajaxGetTileWMTS_SOAP.length]=new Ajax();
	ajaxGetTileWMTS_SOAP[ajaxGetTileWMTS_SOAP.length-1].doPost(servidor_temp, 
							"text/xml", s, 
							AvaluaRespostaGetTileWMTS_SOAP, "text/xml", 
							RespostaGetTileWMTS_SOAP[RespostaGetTileWMTS_SOAP.length-1]);
}//Fi de FesPeticioAjaxGetTileWMTS_SOAP()

function DonaRequestGetMapTiled(i_capa, estil, pot_semitrans, ncol, nfil, i_tile_matrix, j, i, i_data)
{
	var env_tile=new CreaExtent(0,0,0,0);
	var tile_matrix=capa[i_capa].TileMatrixSet.ll[i_tile_matrix];

	env_tile.MinX=tile_matrix.TopLeftPoint.x+tile_matrix.costat*tile_matrix.TileWidth*i;
	env_tile.MaxX=env_tile.MinX+tile_matrix.costat*tile_matrix.TileWidth;
	env_tile.MaxY=tile_matrix.TopLeftPoint.y-tile_matrix.costat*tile_matrix.TileHeight*j;
	env_tile.MinY=env_tile.MaxY-tile_matrix.costat*tile_matrix.TileHeight;
	return DonaRequestGetMap(i_capa, estil, pot_semitrans, ncol, nfil, env_tile, i_data);
}

function DonaNomImatgeTiled(i_capa, i_tile_matrix, j, i, estil, pot_semitrans, i_data)
{
var cdns= new Array();

	if (capa[i_capa].tipus==TipusWMTS_REST)
	{
		//{WMTSBaseURL}/{layer}/{style}/{firstDimension}/{...}/{lastDimension}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.{format_extension}
		
		cdns.push(capa[i_capa].servidor, (capa[i_capa].servidor.charAt(capa[i_capa].servidor.length-1)=="/") ? "": "/", capa[i_capa].nom, "/");

		if (capa[i_capa].estil && capa[i_capa].estil.length)
		{
			if (estil==null)
			{
				if (capa[i_capa].estil[capa[i_capa].i_estil].nom)
		 			cdns.push(capa[i_capa].estil[capa[i_capa].i_estil].nom, "/");
			}
			else
 				cdns.push(estil, "/");
		}
		if (capa[i_capa].animable&multitime)
			cdns.push(DonaDataISO8601ComAText(capa[i_capa].data[(i_data==-1) ? capa[i_capa].i_data : i_data]), "/");

		cdns.push(capa[i_capa].TileMatrixSet.nom, "/", capa[i_capa].TileMatrixSet.ll[i_tile_matrix].Identifier, "/", j, "/", i, (capa[i_capa].FormatImatge.charAt(0)==".") ? "" : ".", capa[i_capa].FormatImatge);
		var s=cdns.join("");
		CreaIOmpleEventConsola("WMTS-REST, tiled layer "+i_capa, s, TipusEventWMTSTile);
		return s;
	}
	else if (capa[i_capa].tipus==TipusWMTS_KVP)
	{
		//Encara per revisar pq WMTS va diferent que el WMS.
		cdns.push("SERVICE=WMTS&VERSION=", DonaVersioComAText(capa[i_capa].versio), "&REQUEST=GetTile&TileMatrixSet=" , capa[i_capa].TileMatrixSet.nom ,
			 "&TileMatrix=" , capa[i_capa].TileMatrixSet.ll[i_tile_matrix].Identifier , "&TileRow=" , j , "&TileCol=" , i ,
			 "&LAYER=" , capa[i_capa].nom , "&FORMAT=" , capa[i_capa].FormatImatge ,
			 "&STYLE=");

		if (capa[i_capa].estil && capa[i_capa].estil.length)
		{
			if (estil==null)
			{
				if (capa[i_capa].estil[capa[i_capa].i_estil].nom)
		 			cdns.push(capa[i_capa].estil[capa[i_capa].i_estil].nom);
			}
			else
 				cdns.push(estil);
		}
		if (capa[i_capa].animable&multitime)
			cdns.push("&TIME=",
				(DonaDataISO8601ComAText(capa[i_capa].data[(i_data==-1) ? capa[i_capa].i_data : i_data])));
		var s=AfegeixNomServidorARequest(capa[i_capa].servidor, cdns.join(""), ParamCtrl.flags&usa_sempre_meu_servidor ? true : false);
		CreaIOmpleEventConsola("WMTS-KVP, layer "+i_capa, s, TipusEventWMTSTile);
		return s;
	}
	if (capa[i_capa].tipus==TipusGoogle_KVP)
	{
		//http://khm.google.com/maptilecompress/hl=en&s=Gal&t=3&q=25&x=0&y=0&z=0
		//{WMTSBaseURL}&t={layer}&q={quality_style}&z={TileMatrix}&y={TileRow}&x={TileCol}
		
		cdns.push(capa[i_capa].servidor, (capa[i_capa].servidor.charAt(capa[i_capa].servidor.length-1)=="&") ? "": "&", "t=", capa[i_capa].nom, "&");

		if (capa[i_capa].estil && capa[i_capa].estil.length)
		{
			if (estil==null)
			{
				if (capa[i_capa].estil[capa[i_capa].i_estil].nom)
		 			cdns.push("q=", capa[i_capa].estil[capa[i_capa].i_estil].nom, "&");
			}
			else
 				cdns.push("q=", estil, "&");
		}
		cdns.push("z=", capa[i_capa].TileMatrixSet.ll[i_tile_matrix].Identifier, "&y=", j, "&x=", i);
		var s=cdns.join("");
		CreaIOmpleEventConsola("Google-KVP, tiled layer "+i_capa, s, TipusEventWMTSTile);
		return s;
	}
	else //wms-c
	{
		var tile_matrix=capa[i_capa].TileMatrixSet.ll[i_tile_matrix];
		return DonaRequestGetMapTiled(i_capa, estil, pot_semitrans, tile_matrix.TileWidth, tile_matrix.TileHeight, i_tile_matrix, j, i, i_data);
	}
}

ajaxGetCapabilities_POST=new Array();
RespostaGetCapabilities_POST=new Array();

function CreaRespostaGetCapabilities_POST(servidor)
{
	this.text="";
	this.servidor=servidor;
}

function AvaluaRespostaGetCapabilitiesPost(doc, dades_request)
{
	if(dades_request && dades_request.text)
	{
		var FinestraGetCapaPost;
		FinestraGetCapaPost=window.open();
		FinestraGetCapaPost.document.open();
//		FinestraGetCapaPost.document.open('content-type: text/xml');
//		FinestraGetCapaPost.document.open('text/xml');		
		FinestraGetCapaPost.document.write("<title>"+dades_request.servidor+"<title>");
		FinestraGetCapaPost.document.write("<xmp>"+dades_request.text+"</xmp>");
		FinestraGetCapaPost.document.close();		
	}
	return;
}

function DonaGetCapabilitesSOAP(servidor, versio, tipus)
{
var cdns=new Array();

	cdns.push("<?xml version=\"1.0\" encoding=\"UTF-8\"?>",
			  "<soap:Envelope xmlns:soap=\"http://www.w3.org/2001/12/soap-envelope\">",
			  "<soap:Body>",
			  "<GetCapabilities service=\"");
	if(tipus==TipusWMTS_SOAP)
		cdns.push("WMTS");		
	cdns.push("\" xmlns=\"http://www.opengis.net/ows/1.1\">",
			  "<AcceptVersions>",
			  "<Version>",versio,"</Version>",
			  "</AcceptVersions>",
			  "<AcceptFormats>",
			  "<OutputFormat>text/xml</OutputFormat>",
			  "</AcceptFormats>",
			  "</GetCapabilities>");
	if(servidor!=null)
		cdns.push("<ServerToRequest>", servidor, "</ServerToRequest>");			  
	cdns.push("</soap:Body>",
			  "</soap:Envelope>");
	var s=cdns.join("");
	return s;
}

function FesPeticioCapacitatsPost(servidor, versio, tipus)
{
var servidor_temp;

	ajaxGetCapabilities_POST[ajaxGetCapabilities_POST.length]=new Ajax();
	RespostaGetCapabilities_POST[RespostaGetCapabilities_POST.length]=new CreaRespostaGetCapabilities_POST(servidor);
	
	if (parent.location.host && DonaHost(servidor).toLowerCase()!=parent.location.host.toLowerCase() && ServidorLocal)
	{
		var s_host=DonaHost(ServidorLocal);
		var pos_host=(-1!=ServidorLocal.indexOf("//")) ? ServidorLocal.indexOf("//")+2 : 0;
		if (s_host.toLowerCase()!=parent.location.host.toLowerCase())
			servidor_temp=DonaNomServidorCaracterFinal(ServidorLocal.substring(0,pos_host)+
							parent.location.host+ServidorLocal.substring(pos_host+s_host.length, ServidorLocal.length));
		else
			servidor_temp=ServidorLocal;
	}
	else
		servidor_temp=null;

	ajaxGetCapabilities_POST[ajaxGetCapabilities_POST.length-1].doPost((servidor_temp ? servidor_temp : servidor), "text/xml", 
																	DonaGetCapabilitesSOAP((servidor_temp ? servidor: null), versio, tipus), 															
																	AvaluaRespostaGetCapabilitiesPost, "text/xml", 
																	RespostaGetCapabilities_POST[RespostaGetCapabilities_POST.length-1]);
}

function DonaRequestServiceMetadata(servidor, versio, tipus)
{
	if (tipus==TipusWMS || tipus==TipusWMS_C)
		return AfegeixNomServidorARequest(servidor, "REQUEST=GetCapabilities&VERSION="+versio+ "&SERVICE=WMS", ParamCtrl.flags&usa_sempre_meu_servidor ? true : false);
	if (tipus==TipusWMTS_KVP)
		return AfegeixNomServidorARequest(servidor, "REQUEST=GetCapabilities&VERSION=1.0.0&SERVICE=WMTS", ParamCtrl.flags&usa_sempre_meu_servidor ? true : false);
	if (tipus==TipusWMTS_REST)
		return servidor + ((servidor.charAt(servidor.length-1)=="/") ? "": "/") + "1.0.0/WMTSCapabilities.xml";
	if (tipus==TipusWMTS_SOAP)
		return "";
}

//estil és el nom de l'estil o null.
function DonaRequestGetMap(i, estil, pot_semitrans, ncol, nfil, env, i_data)
{
var cdns= new Array();
	cdns.push("VERSION=", DonaVersioComAText(capa[i].versio), "&REQUEST=GetMap&SRS=" , ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS ,
		 "&BBOX=" , env.MinX , "," , env.MinY , "," , env.MaxX , "," , env.MaxY , "&WIDTH=" , ncol , "&HEIGHT=" , nfil ,
		 "&LAYERS=" , capa[i].nom , "&FORMAT=" , capa[i].FormatImatge ,
		  ((capa[i].FormatImatge=="image/jpeg") ? "" : "&TRANSPARENT=" + ((capa[i].transparencia!=opac)? "TRUE" : "FALSE")),
		 "&STYLES=");

	if (capa[i].estil && capa[i].estil.length)
	{
		if (estil==null)
		{
			if (capa[i].estil[capa[i].i_estil].nom)
			{
	 			cdns.push(capa[i].estil[capa[i].i_estil].nom);
				if (pot_semitrans && capa[i].FormatImatge!="image/jpeg" && capa[i].visible==semitransparent)
					cdns.push(":SEMITRANSPARENT");
			}
			else if (pot_semitrans && capa[i].FormatImatge!="image/jpeg" && capa[i].visible==semitransparent)
				cdns.push("SEMITRANSPARENT");
		}
		else
		{
 			cdns.push(estil);
			if (pot_semitrans && capa[i].FormatImatge!="image/jpeg" && capa[i].visible==semitransparent)
				cdns.push(":SEMITRANSPARENT");
		}
	}
	else if (pot_semitrans && capa[i].FormatImatge!="image/jpeg" && capa[i].visible==semitransparent)
			cdns.push("SEMITRANSPARENT");
	if (capa[i].animable&multitime)
		cdns.push("&TIME=",
			(DonaDataISO8601ComAText(capa[i].data[(i_data==-1) ? capa[i].i_data : i_data])));
	var s=AfegeixNomServidorARequest(capa[i].servidor, cdns.join(""), ParamCtrl.flags&usa_sempre_meu_servidor ? true : false);
	CreaIOmpleEventConsola("GetMap, layer "+i, s, TipusEventGetMap);
	return s;
}

function FesRequestGetFeatureInfoSOAP(i_capa)
{
var cdns=new Array();
var cdns_temp=new Array();
var s;
var servidor_temp;

	var i_tile_matrix=OmpleMatriuVistaCapaTiled(i_capa);	
	if(i_tile_matrix==-1) return;
	//Determino el tile afectat i les coordenades d'aquest tile.
	var tile_col = floor_DJ((PuntConsultatIJ.x+ParamInternCtrl.Vista[i_capa].dx)/ParamInternCtrl.Vista[i_capa].TileMatrix.TileWidth);
	var tile_row = floor_DJ((PuntConsultatIJ.y+ParamInternCtrl.Vista[i_capa].dy)/ParamInternCtrl.Vista[i_capa].TileMatrix.TileHeight);
	var i=PuntConsultatIJ.x+ParamInternCtrl.Vista[i_capa].dx - tile_col*ParamInternCtrl.Vista[i_capa].TileMatrix.TileWidth;
	var j=PuntConsultatIJ.y+ParamInternCtrl.Vista[i_capa].dy - tile_row*ParamInternCtrl.Vista[i_capa].TileMatrix.TileHeight;
	tile_col+=ParamInternCtrl.Vista[i_capa].ITileMin;
	tile_row+=ParamInternCtrl.Vista[i_capa].JTileMin;

	//Creo la petició de GetTile en SOAP
	cdns.push("<?xml version=\"1.0\"?>\n",
			  "<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\">\n",
			  "<soap:Body>\n",
			  "<GetFeatureInfo service=\"WMTS\" version=\"", DonaVersioComAText(capa[i_capa].versio),"\"",
			  " xmlns=\"http://www.opengis.net/wmts/", DonaVersioPerNameSpaceComAText(capa[i_capa].versio),"\">\n",
			  "<GetTile xmlns=\"http://www.opengis.net/wmts/", DonaVersioPerNameSpaceComAText(capa[i_capa].versio),"\" ",
						"xmlns:ows=\"http://www.opengis.net/ows/1.1\" ",
						"xsi:schemaLocation=\"http://www.opengis.net/wmts/",DonaVersioPerNameSpaceComAText(capa[i_capa].versio),
						" http://www.miramon.uab.es/ogc/schemas/wmts/", 
						DonaVersioComAText(capa[i_capa].versio), "/wmtsGetTile_request.xsd\" ", 
						"service=\"WMTS\" version=\"",DonaVersioComAText(capa[i_capa].versio),"\">\n",
							"<Layer>",capa[i_capa].nom, "</Layer>\n");						  
	if (capa[i_capa].estil && capa[i_capa].estil.length>0)
	{
		cdns.push(			  "<Style>");
		if (capa[i_capa].estil[capa[i_capa].i_estil].nom)
			cdns.push(capa[i_capa].estil[capa[i_capa].i_estil].nom);
		cdns.push(			  "</Style>\n");
	}		
	cdns.push(			  "<Format>", capa[i_capa].FormatImatge,"</Format>\n");
	if (capa[i_capa].animable&multitime)
	{
			cdns.push(			"<DimensionNameValue name=\"TIME\">",
					  			DonaDataISO8601ComAText(capa[i_capa].data[(i_data==-1) ? capa[i_capa].i_data : i_data]),
								"</DimensionNameValue>\n");
	}
	cdns.push(			"<TileMatrixSet>",capa[i_capa].TileMatrixSet.nom,"</TileMatrixSet>\n",
						"<TileMatrix>",capa[i_capa].TileMatrixSet.ll[i_tile_matrix].Identifier,"</TileMatrix>\n",
						"<TileRow>",tile_row,"</TileRow>\n",
						"<TileCol>",tile_col,"</TileCol>\n",
					"</GetTile>\n",
					"<J>",j,"</J>\n",
					"<I>",i,"</I>\n",
					"<InfoFormat>",capa[i_capa].FormatConsulta,"</InfoFormat>\n",
					"</GetFeatureInfo>\n");
	//ServerToRequest
	if (parent.location.host && DonaHost(capa[i_capa].servidor).toLowerCase()!=parent.location.host.toLowerCase() && ServidorLocal)
	{
		var s_host=DonaHost(ServidorLocal);
		var pos_host=(-1!=ServidorLocal.indexOf("//")) ? ServidorLocal.indexOf("//")+2 : 0;
		if (s_host.toLowerCase()!=parent.location.host.toLowerCase())
			servidor_temp=DonaNomServidorCaracterFinal(ServidorLocal.substring(0,pos_host)+
							parent.location.host+ServidorLocal.substring(pos_host+s_host.length, ServidorLocal.length));
		else
			servidor_temp=ServidorLocal;
		cdns.push(		"<ServerToRequest>",DonaNomServidorSenseCaracterFinal(capa[i_capa].servidor),"</ServerToRequest>\n");
	}
	else
		servidor_temp=DonaNomServidorSenseCaracterFinal(capa[i_capa].servidor);
	
	cdns.push(			"</soap:Body>\n",
				"</soap:Envelope>\n");	
	s=cdns.join("");
	CreaIOmpleEventConsola("GetFeatureInfo WMTS-SOAP, tiled layer "+i_capa, servidor_temp+"\n\n"+s, TipusEventWMTSTileSOAP);
	ajax[i_capa]=new Ajax();			
	ajax[i_capa].doPost(servidor_temp, 'text/xml', s, OmpleRespostaConsultaXMLiEscriuEnHTML, 'text/xml', RespostaConsultaXML[i_capa]);

}//Fi de FesPeticioAjaxGetTileWMTS_SOAP()

function DonaRequestGetFeatureInfo(i_capa, es_ajax)
{
var cdns= new Array();
var s;

	if (capa[i_capa].tipus==TipusWMTS_REST)
	{
		alert(DonaCadena3("De moment no implementat per RESTful", "De momento no implementado para RESTful", "Not implemented yet for RESTful"));
	}
	if (capa[i_capa].tipus==TipusGoogle_KVP)
	{
		alert(DonaCadena3("No és possible en Google KVP", "No es posible en Google KVP", "It is not possible on Google KVP"));
	}
	else if (capa[i_capa].tipus==TipusWMTS_KVP)
	{
		var i_tile_matrix=OmpleMatriuVistaCapaTiled(i_capa);	
		if(i_tile_matrix==-1) return;
		//Determino el tile afectat i les coordenades d'aquest tile.
		var tile_col = floor_DJ((PuntConsultatIJ.x+ParamInternCtrl.Vista[i_capa].dx)/ParamInternCtrl.Vista[i_capa].TileMatrix.TileWidth);
		var tile_row = floor_DJ((PuntConsultatIJ.y+ParamInternCtrl.Vista[i_capa].dy)/ParamInternCtrl.Vista[i_capa].TileMatrix.TileHeight);
		//var tile_col = floor_DJ((PuntConsultat.x - ParamInternCtrl.Vista[i_capa].TileMatrix.TopLeftPoint.x) / (ParamInternCtrl.Vista[i_capa].TileMatrix.costat*ParamInternCtrl.Vista[i_capa].TileMatrix.TileWidth));
		//var tile_row = floor_DJ((ParamInternCtrl.Vista[i_capa].TileMatrix.TopLeftPoint.y - PuntConsultat.x) / (ParamInternCtrl.Vista[i_capa].TileMatrix.costat*ParamInternCtrl.Vista[i_capa].TileMatrix.TileHeight));
		var i=PuntConsultatIJ.x+ParamInternCtrl.Vista[i_capa].dx - tile_col*ParamInternCtrl.Vista[i_capa].TileMatrix.TileWidth;
		var j=PuntConsultatIJ.y+ParamInternCtrl.Vista[i_capa].dy - tile_row*ParamInternCtrl.Vista[i_capa].TileMatrix.TileHeight;
		/*alert("i:" + i + " j:" + j + " PuntConsultatIJ.x:" + PuntConsultatIJ.x + " PuntConsultatIJ.y:" + PuntConsultatIJ.y +
			" dx:" + ParamInternCtrl.Vista[i_capa].dx + " dy:" + ParamInternCtrl.Vista[i_capa].dy + 
			" tile_col:" + tile_col + " tile_row:" + tile_row +
			" TileWidth:" + ParamInternCtrl.Vista[i_capa].TileMatrix.TileWidth + " TileHeight:" + ParamInternCtrl.Vista[i_capa].TileMatrix.TileHeight +
			" PuntConsultat.x:" + PuntConsultat.x + " PuntConsultat.y:" + PuntConsultat.y +
			" ITileMin:" + ParamInternCtrl.Vista[i_capa].ITileMin +" JTileMin:" + ParamInternCtrl.Vista[i_capa].JTileMin);
		*/
		tile_col+=ParamInternCtrl.Vista[i_capa].ITileMin;
		tile_row+=ParamInternCtrl.Vista[i_capa].JTileMin;
		cdns.push("SERVICE=WMTS&VERSION=", DonaVersioComAText(capa[i_capa].versio), "&REQUEST=GetFeatureInfo&TileMatrixSet=" , capa[i_capa].TileMatrixSet.nom ,
			 "&TileMatrix=" , ParamInternCtrl.Vista[i_capa].TileMatrix.Identifier , "&TileRow=" , tile_row , "&TileCol=" , tile_col ,
			 "&LAYER=" , capa[i_capa].nom ,
		   	 "&INFOFORMAT=" , capa[i_capa].FormatConsulta ,
			 "&I=" , i , "&J=" , j);

		if (capa[i_capa].animable&multitime)
			cdns.push("&TIME=",DonaDataISO8601ComAText(capa[i_capa].data[capa[i_capa].i_data]));
		s=AfegeixNomServidorARequest(capa[i_capa].servidor, cdns.join(""), ParamCtrl.flags&usa_sempre_meu_servidor ? true : es_ajax);
		CreaIOmpleEventConsola("GetFeatureInfo WMTS-KVP, tiled layer "+i_capa, s, TipusEventGetFeatureInfo);
	}
	else 
	{
		//En la versió 1.3.0 cal posar I i J en lloc de X i Y.
		cdns.push("VERSION=", DonaVersioComAText(capa[i_capa].versio), "&REQUEST=GetFeatureInfo&SRS=" , ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS , 
		   "&BBOX=" , ParamInternCtrl.EnvActual.MinX , "," , ParamInternCtrl.EnvActual.MinY , "," , 
		   ParamInternCtrl.EnvActual.MaxX , ","  , ParamInternCtrl.EnvActual.MaxY , 
		   "&WIDTH=" , ParamCtrl.ncol , "&HEIGHT=" , ParamCtrl.nfil , "&LAYERS=" , capa[i_capa].nom ,
		   "&QUERY_LAYERS=" , capa[i_capa].nom , "&INFO_FORMAT=" , capa[i_capa].FormatConsulta ,
		   "&X=" , PuntConsultatIJ.x , "&Y=" , PuntConsultatIJ.y);

		if (capa[i_capa].animable&multitime)
			cdns.push("&TIME=",DonaDataISO8601ComAText(capa[i_capa].data[capa[i_capa].i_data]));

		s=AfegeixNomServidorARequest(capa[i_capa].servidor, cdns.join(""), ParamCtrl.flags&usa_sempre_meu_servidor ? true : es_ajax);
		CreaIOmpleEventConsola("GetFeatureInfo layer "+i_capa, s, TipusEventGetFeatureInfo);
	}
	return s;
}

//Per demanar el punts dels objectes degitalitzats amb tots els atributs o no
var ConsultaCapaDigi=new Array();
var ajax_capa_digi=new Array();

function CreaConsultaCapaDigi(i_capa_digi, i_tile, seleccionar)
{
	this.i_capa_digi=i_capa_digi;
	this.i_tile=i_tile;
	this.seleccionar=seleccionar;
}//Fi de CreaConsultaCapaDigi()

//Fer sol·licitar la informació dels atributs d'un punt determinat
var RespostaConsultaObjDigiXML;

function CreaRespostaConsultaObjDigiXML(capa_digi, i_capa, i_obj, win, nom_layer)
{
	this.capa_digi=capa_digi;
	this.i_capa=i_capa;
	this.i_obj=i_obj;
	this.win=win;
}

function DonamElementsNodeAPartirDelNomDelCamp(pare, nom_ns, id_ns, nom_tag)
{
	try
	{						
		return pare.getElementsByTagNameNS(nom_ns, nom_tag); //Motzilla
	}
	catch(ex)
	{						
		try
	{						
		return pare.getElementsByTagName(id_ns+":"+nom_tag); //IE only
		}
		catch(ex)
		{						
			return pare.getElementsByTagName(nom_tag); //sense namespace
		}		
	}
}

function OrdenacioObjCapaDigi(x,y) {
	//Ascendent per identificador i descendent per data
	if ( x.identificador <  y.identificador ) return -1; 
	if ( x.identificador > y.identificador ) return 1; 
	if ( x.data > y.data) return -1;
	if ( x.data < y.data) return 1;
	return 0; 
}
function OmpleAtributsObjecteCapaDigi(objecte_xml, objecte_digi)
{
var i_atribut;
var tag, tag2;
var mostrar;

	tag=DonamElementsNodeAPartirDelNomDelCamp(objecte_xml, "http://miramon.uab.es/ogc/schemas/atribut", "mmatrib", "Atribut");
	objecte_digi.atributs=new Array();
	for(var i=0; i<tag.length; i++)			
	{
		i_atribut=objecte_digi.atributs.length;
		objecte_digi.atributs[i_atribut]=new CreaAtributObjecteDigi(null, null, null, null, null, false, false, false);
		//Primer miro si l'atribut és consultable
		mostrar=tag[i].getAttribute('mostrar');
		if(mostrar=="false")
			objecte_digi.atributs[i_atribut].mostrar=false;
		else
			objecte_digi.atributs[i_atribut].mostrar=true;
		//descripció
		tag2=DonamElementsNodeAPartirDelNomDelCamp(tag[i], "http://miramon.uab.es/ogc/schemas/atribut", "mmatrib", "descripcio");
		if(tag2.length>0 && tag2[0].hasChildNodes())
		   objecte_digi.atributs[i_atribut].descripcio=tag2[0].childNodes[0].nodeValue;
		//nom
		tag2=DonamElementsNodeAPartirDelNomDelCamp(tag[i], "http://miramon.uab.es/ogc/schemas/atribut", "mmatrib", "nom");
		if(tag2.length>0 && tag2[0].hasChildNodes())
		   objecte_digi.atributs[i_atribut].nom=tag2[0].childNodes[0].nodeValue;
		//valor
		tag2=DonamElementsNodeAPartirDelNomDelCamp(tag[i], "http://miramon.uab.es/ogc/schemas/atribut", "mmatrib", "valor");
		if(tag2.length>0 && tag2[0].hasChildNodes())
		   objecte_digi.atributs[i_atribut].valor=tag2[0].childNodes[0].nodeValue;
		//unitats
		tag2=DonamElementsNodeAPartirDelNomDelCamp(tag[i], "http://miramon.uab.es/ogc/schemas/atribut", "mmatrib", "unitats");				
		if(tag2.length>0 && tag2[0].hasChildNodes())
		   objecte_digi.atributs[i_atribut].unitats=tag2[0].childNodes[0].nodeValue;
		//separador
		tag2=DonamElementsNodeAPartirDelNomDelCamp(tag[i], "http://miramon.uab.es/ogc/schemas/atribut", "mmatrib", "separador");												
		if(tag2.length>0 && tag2[0].hasChildNodes())				
		{				
		   objecte_digi.atributs[i_atribut].separador=tag2[0].childNodes[0].nodeValue;
		   objecte_digi.atributs[i_atribut].separador=CanviaRepresentacioCaractersProhibitsXMLaCaractersText(objecte_digi.atributs[i_atribut].separador);		   
		}
		//es link
		tag2=DonamElementsNodeAPartirDelNomDelCamp(tag[i], "http://miramon.uab.es/ogc/schemas/atribut", "mmatrib", "esLink");				
		if(tag2.length>0 && tag2[0].hasChildNodes() && tag2[0].childNodes[0].nodeValue=="true")
		   objecte_digi.atributs[i_atribut].descripcio=true;
		//es imatge
		tag2=DonamElementsNodeAPartirDelNomDelCamp(tag[i], "http://miramon.uab.es/ogc/schemas/atribut", "mmatrib", "esImatge");				
		if(tag2.length>0 && tag2[0].hasChildNodes() && tag2[0].childNodes[0].nodeValue=="true")
		   objecte_digi.atributs[i_atribut].descripcio=true;

	}
}//Fi de OmpleAtributsObjecteCapaDigi()

function OmpleCapaDigiAmbPropietatsObjecteDigitalitzat(doc, consulta)
{
var root;

	if(!doc) 
	{	 
	    removeLayer(getLayer(consulta.win, "LayerObjDigiConsulta"+consulta.i_capa+"_"+consulta.i_obj));
		n_consultes_digi_zero++;
	    return;	
	}
	root=doc.documentElement;	
	
	if(!root)
	{
	    removeLayer(getLayer(consulta.win, "LayerObjDigiConsulta"+consulta.i_capa+"_"+consulta.i_obj));
		n_consultes_digi_zero++;
	    return;	
	}

	var objectes=root.getElementsByTagName(CapaDigi[consulta.i_capa].nom);
	
	if(objectes && objectes.length>0)
	{
		for(var i_obj=0; i_obj<objectes.length; i_obj++)
		{
			//Agafo l'identificador del punt i miro si coincideix amb el de l'objecte que estic buscant
			valor=objectes[i_obj].getAttribute('gml:id');
			if(CapaDigi[consulta.i_capa].objecte[consulta.i_obj].identificador==valor)
				OmpleAtributsObjecteCapaDigi(objectes[i_obj], CapaDigi[consulta.i_capa].objecte[consulta.i_obj]);
		}
	}

	if (CapaDigi[consulta.i_capa].objecte==null || CapaDigi[consulta.i_capa].objecte[consulta.i_obj].atributs==null)
	{
		removeLayer(getLayer(consulta.win, "LayerObjDigiConsulta"+consulta.i_capa+"_"+consulta.i_obj));
		n_consultes_digi_zero++;
	}
	else 
	{
		var text_resposta=MostraConsultaCapaDigitalitzadaComHTML(consulta.i_capa, consulta.i_obj)
		if(!text_resposta || text_resposta=="")
		{			
			removeLayer(getLayer(consulta.win, "LayerObjDigiConsulta"+consulta.i_capa+"_"+consulta.i_obj));
			n_consultes_digi_zero++;
		}
		else		
		{
			contentLayer(getLayer(consulta.win, "LayerObjDigiConsulta"+consulta.i_capa+"_"+consulta.i_obj), text_resposta);
		}
	}


	
	for(var i_obj=0; i_obj<objectes.length; i_obj++)
	{
		//Agafo l'identificador del punt i miro si coincideix amb el de l'objecte que estic buscant
		valor=objectes[i_obj].getAttribute('gml:id');
		if(CapaDigi[consulta.i_capa].objecte[consulta.i_obj].identificador==valor)
			OmpleAtributsObjecteCapaDigi(objectes[i_obj], CapaDigi[consulta.i_capa].objecte[consulta.i_obj]);
	}
	if (CapaDigi[consulta.i_capa].objecte[consulta.i_obj].atributs==null)
	{
		removeLayer(getLayer(consulta.win, "LayerObjDigiConsulta"+consulta.i_capa+"_"+consulta.i_obj));
		n_consultes_digi_zero++;
	}
	else 
	{
		var text_resposta=MostraConsultaCapaDigitalitzadaComHTML(consulta.i_capa, consulta.i_obj)
		if(!text_resposta || text_resposta=="")
		{
			removeLayer(getLayer(consulta.win, "LayerObjDigiConsulta"+consulta.i_capa+"_"+consulta.i_obj));
			n_consultes_digi_zero++;
		}
		else		
		{
		contentLayer(getLayer(consulta.win, "LayerObjDigiConsulta"+consulta.i_capa+"_"+consulta.i_obj), text_resposta);
		}
	}

}// Fi de OmpleCapaDigiAmbPropietatsObjecteDigitalitzat()

function OmpleCapaDigiAmbObjectesDigitalitzats(doc, consulta)
{
var root;
var i_obj_capa;
var tag;
//var tag2, i_atribut, i;
var valor;
var cal_crear_vista=false;
var cal_transformar;
var punt;
var index_atribut=-1;
var objectes;

	//Agafo tots els nodes que tenen per nom el nom de la capa, cada un d'ells serà un punt	
	if(!doc) return;
	root=doc.documentElement;
	if(!root)return;
	
	if(CapaDigi[consulta.i_capa_digi].namespace==null)
	{
		var ns;
		var atributs=root.attributes;
		if(atributs)
			ns=atributs.getNamedItem("xmlns");
		if(ns)
			CapaDigi[consulta.i_capa_digi].namespace=ns.value;
	}
	objectes=root.getElementsByTagName(CapaDigi[consulta.i_capa_digi].nom);
	if(objectes && objectes.length>0)
	{
		if(CapaDigi[consulta.i_capa_digi].objecte==null)
			CapaDigi[consulta.i_capa_digi].objecte=new Array();
		for(var i_obj=0; i_obj<objectes.length; i_obj++)
		{
			//Agafo l'identificador del punt i creo l'objecte dins de la Capa
			valor=objectes[i_obj].getAttribute('gml:id');
			i_obj_capa=CapaDigi[consulta.i_capa_digi].objecte.length;			
			CapaDigi[consulta.i_capa_digi].objecte[i_obj_capa]=new CreaFeature(valor, new Date(), 0, new Array(), new Array(), (consulta.seleccionar? true : false));			
			
			if(objectes[i_obj].hasChildNodes)
			{
				//Agafo la posició dels objectes
				tag=DonamElementsNodeAPartirDelNomDelCamp(objectes[i_obj], "http://www.opengis.net/gml", "gml", "pos");			
				if(tag.length>0)
				{
					cal_crear_vista=true;
					cal_transformar=false;
					valor=tag[0].childNodes[0].nodeValue;
					var coord=valor.split(" ");
					CapaDigi[consulta.i_capa_digi].objecte[i_obj_capa].punt[0]=new CreaPunt2D(parseFloat(coord[0]),
														  parseFloat(coord[1]));
					if(CapaDigi[consulta.i_capa_digi].CRS  && 
					   CapaDigi[consulta.i_capa_digi].CRS.toUpperCase()!=ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS.toUpperCase())
					{
						CapaDigi[consulta.i_capa_digi].objecte[i_obj_capa].puntCRSactual=new Array();
						CapaDigi[consulta.i_capa_digi].objecte[i_obj_capa].puntCRSactual[0]=new CreaPunt2D(
											CapaDigi[consulta.i_capa_digi].objecte[i_obj_capa].punt[0].x,CapaDigi[consulta.i_capa_digi].objecte[i_obj_capa].punt[0].y); 						TransformaCoordenadesPunt(CapaDigi[consulta.i_capa_digi].objecte[i_obj_capa].puntCRSactual[0], 
											CapaDigi[consulta.i_capa_digi].CRS, ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS);
						cal_transformar=true;
					}					
					if(consulta.seleccionar==true)
					{
						//Actualitzar EnvSelec, que sempre està en el sistema de coordenades actual
						if(EnvSelec==null)
						{							
							if(cal_transfomar)
								punt=CapaDigi[consulta.i_capa_digi].objecte[i_obj_capa].puntCRSactual[0];
							else
								punt=CapaDigi[consulta.i_capa_digi].objecte[i_obj_capa].punt[0];
							EnvSelec=new CreaExtent(punt.x, punt.x, punt.y, punt.y);							
						}
						else
						{
							if(cal_transfomar)
								punt=CapaDigi[consulta.i_capa_digi].objecte[i_obj_capa].puntCRSactual[0];
							else
								punt=CapaDigi[consulta.i_capa_digi].objecte[i_obj_capa].punt[0];
								
							if(punt.x<EnvSelec.MinX)
								EnvSelec.MinX=punt.x;
							if(punt.x>EnvSelec.MaxX)
								EnvSelec.MaxX=punt.x;
							if(punt.y<EnvSelec.MinY)
								EnvSelec.MinY=punt.y;
							if(punt.y>EnvSelec.MaxY)
								EnvSelec.MaxY=punt.y;
						}
					}
				}
				//ara els atributs
				OmpleAtributsObjecteCapaDigi(objectes[i_obj], CapaDigi[consulta.i_capa_digi].objecte[i_obj_capa]);
				//ara el i_simbol
				if(index_atribut==-1 &&
				   CapaDigi[consulta.i_capa_digi].estil && CapaDigi[consulta.i_capa_digi].estil.length && 
				   CapaDigi[consulta.i_capa_digi].estil[CapaDigi[consulta.i_capa_digi].i_estil].NomCamp!=null &&
				   CapaDigi[consulta.i_capa_digi].estil[CapaDigi[consulta.i_capa_digi].i_estil].simbol &&
				   CapaDigi[consulta.i_capa_digi].objecte[i_obj_capa].atributs &&
				   CapaDigi[consulta.i_capa_digi].objecte[i_obj_capa].atributs.length)
				{
					var i;
					for(i=0; i<CapaDigi[consulta.i_capa_digi].objecte[i_obj_capa].atributs.length; i++)
					{
						if(CapaDigi[consulta.i_capa_digi].objecte[i_obj_capa].atributs[i].nom.toUpperCase()==CapaDigi[consulta.i_capa_digi].estil[CapaDigi[consulta.i_capa_digi].i_estil].NomCamp.toUpperCase())
						{
							index_atribut=i;
							break;
						}			
					}
				}
				if(index_atribut!=-1)
				{
					var i;
					for(i=0; i<CapaDigi[consulta.i_capa_digi].estil[CapaDigi[consulta.i_capa_digi].i_estil].simbol.length; i++)
					{
						if(CapaDigi[consulta.i_capa_digi].objecte[i_obj_capa].atributs[index_atribut].valor==
						   CapaDigi[consulta.i_capa_digi].estil[CapaDigi[consulta.i_capa_digi].i_estil].simbol[i].i_camp)
							CapaDigi[consulta.i_capa_digi].objecte[i_obj_capa].i_simbol=i;
					}
				}				
			}		
		}
		if(CapaDigi[consulta.i_capa_digi].objecte && CapaDigi[consulta.i_capa_digi].objecte.length==0)
			CapaDigi[consulta.i_capa_digi].objecte=null;
		
		if(CapaDigi[consulta.i_capa_digi].objecte!=null)
		{
			CapaDigi[consulta.i_capa_digi].objecte.sort(OrdenacioObjCapaDigi);
			var anterior=CapaDigi[consulta.i_capa_digi].objecte[0].identificador;
			var i=1;
			while(i<CapaDigi[consulta.i_capa_digi].objecte.length)
			{
				if(anterior==CapaDigi[consulta.i_capa_digi].objecte[i].identificador)
				{
					CapaDigi[consulta.i_capa_digi].objecte.splice(i,1);
				}
				else
				{
					anterior=CapaDigi[consulta.i_capa_digi].objecte[i].identificador;
					i++;
				}
			}
		}
	}
	if(consulta.i_tile!=-1)		
		CapaDigi[consulta.i_capa_digi].tiles_solicitats[consulta.i_tile]=tile_rebut;
	if(consulta.seleccionar==false && cal_crear_vista)
	    CreaVista();
}//Fi de OmpleCapaDigiAmbObjectesDigitalitzats()

function DonaRequestDescribeFeatureTypeInterna(i, simple)
{
var cdns=new Array();
var c_afegir="";

	cdns.push("VERSION=",DonaVersioComAText(CapaDigi[i_capa].versio),"&amp;SERVICE=WFS&amp;REQUEST=DescribeFeatureType&amp;OUTPUTFORMAT=",
			  (simple ? "text/xml;subtype=gml/3.1.1/profiles/gmlsf/1.0.0/0" : "text/xml;subtype=gml/3.1.1/profiles/miramon/1.0.0/attributes") ,
			  "&amp;SRSNAME=",CapaDigi[i].CRS ,"&amp;TYPENAME=" ,CapaDigi[i].nom);
	var s=AfegeixNomServidorARequest(CapaDigi[i].servidor, cdns.join(""), true);
	return s;
}//Fi de DonaRequestDescribeFeatureType()
function DonaRequestGetFeature(i,env, cadena_objectes, completa)
{
var cdns=new Array();
var c_afegir="";

	cdns.push("VERSION=",DonaVersioComAText(CapaDigi[i].versio),"&SERVICE=WFS&REQUEST=GetFeature&OUTPUTFORMAT=text/xml;subtype=gml/3.1.1/profiles/miramon/1.0.0/attributes&ATRIBUTFORMAT=complex&SRSNAME=" , 
	          CapaDigi[i].CRS ,"&TYPENAME=" ,CapaDigi[i].nom);
	if(env)  //Està en el mateix sistema de referència que la CapaDigi
	{
		cdns.push("&BBOX=" , env.MinX , "," , env.MinY , "," , env.MaxX , "," , env.MaxY);
		if(completa==false)
		{
			if(CapaDigi[i].estil && CapaDigi[i].estil.length && CapaDigi[i].estil[CapaDigi[i].i_estil].NomCamp!=null)
				cdns.push("&PROPERTYNAME=" , CapaDigi[i].nom , "/gml:position,", CapaDigi[i].nom , "/", CapaDigi[i].estil[CapaDigi[i].i_estil].NomCamp);		
			else
		          cdns.push("&PROPERTYNAME=" , CapaDigi[i].nom , "/gml:position");
		}
	}
	else if(cadena_objectes)
	{
		cdns.push("&FEATUREID=",cadena_objectes.join(","));
		if(completa==false)
		{
			cdns.push("&PROPERTYNAME=");
			if(CapaDigi[i].estil && CapaDigi[i].estil.length && CapaDigi[i].estil[CapaDigi[i].i_estil].NomCamp!=null)
				c_afegir=","+CapaDigi[i].nom+"/"+CapaDigi[i].estil[CapaDigi[i].i_estil].NomCamp;
			else
				c_afegir="";
			for(var i_obj=0; i_obj<cadena_objectes.length; i_obj++)
			{
				cdns.push("(", CapaDigi[i].nom , "/gml:position", c_afegir, ")");
			}
		}
	}
	var s=AfegeixNomServidorARequest(CapaDigi[i].servidor, cdns.join(""), true);
	CreaIOmpleEventConsola("GetFeature layer "+i, s, TipusEventGetFeature);
	return s;
}//Fi de DonaRequestGetFeature()

function FesPeticioAjaxObjectesDigitalitzatsPerEnvolupant(i_capa_digi, env, seleccionar)
{
var i_consulta=ajax_capa_digi.length;
	ajax_capa_digi[i_consulta]=new Ajax();
	ConsultaCapaDigi[i_consulta]=new CreaConsultaCapaDigi(i_capa_digi, -1, seleccionar);
	//env està en el CRS de la CapaDigi
	ajax_capa_digi[i_consulta].doGet(DonaRequestGetFeature(i_capa_digi, env, null, false), OmpleCapaDigiAmbObjectesDigitalitzats, "text/xml", ConsultaCapaDigi[i_consulta]);
}//Fi de FesPeticioAjaxObjectesDigitalitzatsPerEnvolupant()

function FesPeticioAjaxObjectesDigitalitzatsPerIdentificador(i_capa_digi, cadena_objectes, seleccionar)
{
var i_consulta=ajax_capa_digi.length;
	ajax_capa_digi[i_consulta]=new Ajax();
	ConsultaCapaDigi[i_consulta]=new CreaConsultaCapaDigi(i_capa_digi, -1, seleccionar);
	ajax_capa_digi[i_consulta].doGet(DonaRequestGetFeature(i_capa_digi, null, cadena_objectes, false), OmpleCapaDigiAmbObjectesDigitalitzats, "text/xml", ConsultaCapaDigi[i_consulta]);
}//Fi de FesPeticioAjaxObjectesDigitalitzatsPerIdentificador()

function FesPeticioAjaxObjectesDigitalitzats(i_capa_digi, i_tile, env_sol, seleccionar)
{
var i_consulta=ajax_capa_digi.length;
	ajax_capa_digi[i_consulta]=new Ajax();
	ConsultaCapaDigi[i_consulta]=new CreaConsultaCapaDigi(i_capa_digi, i_tile, seleccionar);
	CapaDigi[i_capa_digi].tiles_solicitats[i_tile]=tile_solicitat;	
	//env_sol està ja en el CRS de la CapaDigi
	ajax_capa_digi[i_consulta].doGet(DonaRequestGetFeature(i_capa_digi, env_sol, null, false), OmpleCapaDigiAmbObjectesDigitalitzats, "text/xml", ConsultaCapaDigi[i_consulta]);
}//Fi de FesPeticioAjaxObjectesDigitalitzats()

function FesPeticioAjaxConsultaObjDigi()
{
var env_icona=new CreaExtent(0,0,0,0);
	ajax_consulta_capa_digi=new Array(CreaRespostaConsultaObjDigiXML.length);
	n_consultes_digi_zero=0;
	n_capes_digi_consultables=0;
	var punt;
	var cal_transformar;
	for (var i=0; i<RespostaConsultaObjDigiXML.length; i++)
		n_capes_digi_consultables++;
	
	for (var i=0; i<RespostaConsultaObjDigiXML.length; i++)
	{
		ajax_consulta_capa_digi[i]=new Ajax();		
		cal_transformar=false;
		if(!CapaDigi[RespostaConsultaObjDigiXML[i].i_capa].CRS  || 
			CapaDigi[RespostaConsultaObjDigiXML[i].i_capa].CRS.toUpperCase()==ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS.toUpperCase())
			punt=CapaDigi[RespostaConsultaObjDigiXML[i].i_capa].objecte[RespostaConsultaObjDigiXML[i].i_obj].punt[0];			        
		else
		{
			punt=CapaDigi[RespostaConsultaObjDigiXML[i].i_capa].objecte[RespostaConsultaObjDigiXML[i].i_obj].puntCRSactual[0];
			cal_transformar=true;
		}
			
		DonaEnvIcona(env_icona, punt, 
			     CapaDigi[RespostaConsultaObjDigiXML[i].i_capa].estil[CapaDigi[RespostaConsultaObjDigiXML[i].i_capa].i_estil].simbol[CapaDigi[RespostaConsultaObjDigiXML[i].i_capa].objecte[RespostaConsultaObjDigiXML[i].i_obj].i_simbol].icona);
		
		if(cal_transformar)
		{
			//Transformo l'envolupant al sistema de referència de la capa
			TransformaEnvolupant(env_icona, ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS, CapaDigi[RespostaConsultaObjDigiXML[i].i_capa].CRS);
		}
		ajax_consulta_capa_digi[i].doGet(DonaRequestGetFeature(RespostaConsultaObjDigiXML[i].i_capa, env_icona, null, true), 
						OmpleCapaDigiAmbPropietatsObjecteDigitalitzat, 
						"text/xml", RespostaConsultaObjDigiXML[i]);
	}
}//Fi de FesPeticioAjaxConsultaObjDigi()


function DemanaTilesDeCapaDigitalitzadaSiCal(i_capa, env)
{
var env_total;
var env_temp;
var incr_x=0, incr_y=0, i_tile=0;

	//env en el sistema de referència actual --> La divisió en tiles és en funció del CRS indicat a CapaDigi[i_capa].i_situacio
	if(ParamInternCtrl.ISituacio==CapaDigi[i_capa].i_situacio)
		env_total=new CreaExtent(env.MinX, env.MaxX, env.MinY, env.MaxY);
	else
	{
		TransformaEnvolupant(env, ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS, 
								  ParamCtrl.ImatgeSituacio[CapaDigi[i_capa].i_situacio].EnvTotal.CRS);
		env_total=new CreaExtent(env_crs.MinX, env_crs.MaxX, env_crs.MinY, env_crs.MaxY);		
	}
	if(env_total.MinX<ParamCtrl.ImatgeSituacio[CapaDigi[i_capa].i_situacio].EnvTotal.EnvCRS.MinX)
		env_total.MinX=ParamCtrl.ImatgeSituacio[CapaDigi[i_capa].i_situacio].EnvTotal.EnvCRS.MinX;
	if(env_total.MaxX>ParamCtrl.ImatgeSituacio[CapaDigi[i_capa].i_situacio].EnvTotal.EnvCRS.MaxX)
		env_total.MaxX=ParamCtrl.ImatgeSituacio[CapaDigi[i_capa].i_situacio].EnvTotal.EnvCRS.MaxX;
	if(env_total.MinY<ParamCtrl.ImatgeSituacio[CapaDigi[i_capa].i_situacio].EnvTotal.EnvCRS.MinY)
		env_total.MinY=ParamCtrl.ImatgeSituacio[CapaDigi[i_capa].i_situacio].EnvTotal.EnvCRS.MinY;
	if(env_total.MaxY>ParamCtrl.ImatgeSituacio[CapaDigi[i_capa].i_situacio].EnvTotal.EnvCRS.MaxY)
		env_total.MaxY=ParamCtrl.ImatgeSituacio[CapaDigi[i_capa].i_situacio].EnvTotal.EnvCRS.MaxY;		
	//Ara haig de fer els talls en funció de i_situacio indicat en CapaDigi i en la mida indicada i mirar si tinc els talls o no i sol·licitar-los
	incr_x=(ParamCtrl.ImatgeSituacio[CapaDigi[i_capa].i_situacio].EnvTotal.EnvCRS.MaxX-ParamCtrl.ImatgeSituacio[CapaDigi[i_capa].i_situacio].EnvTotal.EnvCRS.MinX)/CapaDigi[i_capa].n_cols_tiles;
	incr_y=(ParamCtrl.ImatgeSituacio[CapaDigi[i_capa].i_situacio].EnvTotal.EnvCRS.MaxY-ParamCtrl.ImatgeSituacio[CapaDigi[i_capa].i_situacio].EnvTotal.EnvCRS.MinY)/CapaDigi[i_capa].n_files_tiles;
	
	env_temp=new CreaExtent(env_total.MinX, env_total.MaxX, env_total.MinY, env_total.MaxY);
	for(var i_col=0; i_col<CapaDigi[i_capa].n_cols_tiles; i_col++)
	{
		if(((ParamCtrl.ImatgeSituacio[CapaDigi[i_capa].i_situacio].EnvTotal.EnvCRS.MinX+(i_col*incr_x))<=env_temp.MinX )&& 
		   ((ParamCtrl.ImatgeSituacio[CapaDigi[i_capa].i_situacio].EnvTotal.EnvCRS.MinX+((i_col+1)*incr_x))>=env_temp.MinX))
		{
			for(var j_fil=0; j_fil<CapaDigi[i_capa].n_files_tiles; j_fil++)
			{
				i_tile=((j_fil)*CapaDigi[i_capa].n_cols_tiles)+i_col;
				if((ParamCtrl.ImatgeSituacio[CapaDigi[i_capa].i_situacio].EnvTotal.EnvCRS.MinY+(j_fil*incr_y))<=env_temp.MinY && 
				   (ParamCtrl.ImatgeSituacio[CapaDigi[i_capa].i_situacio].EnvTotal.EnvCRS.MinY+((j_fil+1)*incr_y))>=env_temp.MinY)
				{
					if(CapaDigi[i_capa].tiles_solicitats[i_tile]==tile_no_solicitat)
					{
						var env_sol=new CreaExtent((ParamCtrl.ImatgeSituacio[CapaDigi[i_capa].i_situacio].EnvTotal.EnvCRS.MinX+(i_col*incr_x)), 
									   (ParamCtrl.ImatgeSituacio[CapaDigi[i_capa].i_situacio].EnvTotal.EnvCRS.MinX+((i_col+1)*incr_x)), 
									   (ParamCtrl.ImatgeSituacio[CapaDigi[i_capa].i_situacio].EnvTotal.EnvCRS.MinY+(j_fil*incr_y)),
									   (ParamCtrl.ImatgeSituacio[CapaDigi[i_capa].i_situacio].EnvTotal.EnvCRS.MinY+((j_fil+1)*incr_y)));								   
									   
						TransformaEnvolupant(env, ParamCtrl.ImatgeSituacio[PCapaDigi[i_capa].i_situacio].EnvTotal.CRS, 
								  CapaDigi[i_capa].CRS);
						FesPeticioAjaxObjectesDigitalitzats(i_capa, i_tile, env_sol, false);					
					}
				}			
				env_temp.MinY=(ParamCtrl.ImatgeSituacio[CapaDigi[i_capa].i_situacio].EnvTotal.EnvCRS.MinY+((j_fil+1)*incr_y));
				if(env_temp.MaxY<=env_temp.MinY)
					break;					
			}			
		}
		env_temp.MinX=(ParamCtrl.ImatgeSituacio[CapaDigi[i_capa].i_situacio].EnvTotal.EnvCRS.MinX+((i_col+1)*incr_x));
		if(env_temp.MaxX<=env_temp.MinX)
			break;					
		env_temp.MinY=env_total.MinY;
	}
}//Fi de DemanaTilesDeCapaDigitalitzadaSiCalIMostraObjectesQueCalguin()

var EnvSelec=null;

function SeleccionaObjsCapaDigiPerEnvolupant(id_capa, minx, maxx, miny, maxy, afegir)
{
var env=new CreaExtent(minx, maxx, miny, maxy);

	if(afegir==false)
		EsborraSeleccio();
		
	//Busco l'index de capa
	var i_capa=-1;
	if(CapaDigi && CapaDigi.length>0)
	{
		for(var i=0; i<CapaDigi.length; i++)
			if(CapaDigi[i].nom==id_capa)
				i_capa=i;
	}
	if(i_capa==-1)
	{
		alert(DonaCadena3("No es poden seleccionar els objectes sol·licitats perquè la capa no existeix.", 
				  "No se pueden seleccionar los objetos solicitados porquè la capa no existe.",
				  "Cannot select request objecte because the layer doesn't exist."));
		return;
	}
	if(CapaDigi[i_capa].CRS.toUpperCase()!=ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS.toUpperCase())
		TransformaEnvolupant(env, ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS, CapaDigi[i_capa].CRS);
	FesPeticioAjaxObjectesDigitalitzatsPerEnvolupant(i_capa, env, true);
}//Fi de SeleccionaObjsCapaDigiPerEnvolupant()

function SeleccionaObjsCapaDigiPerIdentificador(id_capa, id_obj, afegir)
{
var i_capa;
var punt;

	if(afegir==false)
		EsborraSeleccio();
		
	//Busco l'index de capa
	var i_capa=-1;
	if(CapaDigi && CapaDigi.length>0)
	{
		for(var i=0; i<CapaDigi.length; i++)
			if(CapaDigi[i].nom==id_capa)
				i_capa=i;
	}
	if(i_capa==-1)
	{
		alert(DonaCadena3("No es poden seleccionar els objectes sol·licitats perquè la capa no existeix.", 
				  "No se pueden seleccionar los objetos solicitados porquè la capa no existe.",
				  "Cannot select request objecte because the layer doesn't exist."));
		return;
	}
	//Marco els objectes i els demano si cal
	var cadena_objectes=new Array();
	if(CapaDigi[i_capa].objecte && CapaDigi[i_capa].objecte.length>0)
	{
		for(var j=0; j<id_obj.length; j++)
		{
			for(var i=0; i<CapaDigi[i_capa].objecte.length; i++)
			{
				if(id_obj[j]==CapaDigi[i_capa].objecte[i].identificador)
				{
					CapaDigi[i_capa].objecte[i].seleccionat=true;
					
					//Actualitzar EnvSelec, que sempre està en el sistema de coordenades actual
					if(EnvSelec==null)
					{							
						if(CapaDigi[i_capa].CRS  && 
					   		CapaDigi[i_capa].CRS.toUpperCase()!=ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS.toUpperCase())						
							punt=CapaDigi[i_capa].objecte[i].puntCRSactual[0];
						else
							punt=CapaDigi[i_capa].objecte[i].punt[0];
						EnvSelec=new CreaExtent(punt.x, punt.x, punt.y, punt.y);							
					}
					else
					{
						if(CapaDigi[i_capa].CRS  && 
					   		CapaDigi[i_capa].CRS.toUpperCase()!=ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS.toUpperCase())						
							punt=CapaDigi[i_capa].objecte[i].puntCRSactual[0];
						else
							punt=CapaDigi[i_capa].objecte[i].punt[0];
							
						if(punt.x<EnvSelec.MinX)
							EnvSelec.MinX=punt.x;
						if(punt.x>EnvSelec.MaxX)
							EnvSelec.MaxX=punt.x;
						if(punt.y<EnvSelec.MinY)
							EnvSelec.MinY=punt.y;
						if(punt.y>EnvSelec.MaxY)
							EnvSelec.MaxY=punt.y;
					}
					break;
				}
			}
			if(i==CapaDigi[i_capa].objecte.length) //No trobat
				cadena_objectes[cadena_objectes.length]=id_obj[j];
		}
	}
	else
	{
		//Els demano tots
		for(var j=0; j<id_obj.length; j++)
			cadena_objectes[cadena_objectes.length]=id_obj[j];
	}
	//Faig la petició dels objectes no trobats
	if(cadena_objectes.length>0)
		FesPeticioAjaxObjectesDigitalitzatsPerIdentificador(i_capa, cadena_objectes, true);
}//Fi de SeleccionaObjsCapaDigiPerIdentificador()


function EsborraSeleccio()
{
	if (CapaDigi && CapaDigi.length>0)
	{
		for (var i=0; i<CapaDigi.length; i++)
		{
			if(CapaDigi[i].objecte && CapaDigi[i].objecte.length>0)
			{
				for (var j=0;j<CapaDigi[i].objecte.length; j++)
					CapaDigi[i].objecte[j].seleccionat=false;
			}
		}			
	}
	EnvSelec=null;	
}//Fi de EsborraSeleccio()

function PortamASeleccio()
{	
	if(EnvSelec)
		PortamAAmbit(EnvSelec);
}//Fi de PortamASeleccio()


function OmpleVistaCapa(i)
{
	if (capa[i].tipus==TipusWMS)
		eval("CanviaImatgeCapa(this.document.i_raster"+i+","+i+")");
	else
		CreaMatriuCapaTiled(i);
}

//estil és el nom de l'estil o null.
function DonaNomImatge(i_capa, estil, pot_semitrans, i_data)
{
	return DonaRequestGetMap(i_capa, estil, pot_semitrans, ParamCtrl.ncol, ParamCtrl.nfil, ParamInternCtrl.EnvActual, i_data);
}

function CanviaImatgeCapa(imatge, i_capa)
{
	imatge.src=DonaNomImatge(i_capa, null, true, -1);
}

/* No puc fer servir aquestas funció donat que els PNG's progressius no es tornen a mostrar només fent un showLayer. Els torno a demanar sempre.
function CanviaImatgeCapaSiCal(imatge, i_capa)
{
	//Aquí no faig servir DonaCadena3() expressament. Si es canvia l'idioma mentre es mostre un "espereu.gif", aquest no és canviat pel nou idioma. De fet, això es podria fer durant el canvi d'idioma però és un detall massa insignificant.
	if (capa[i_capa].transparencia==semitransparent ||
		imatge.src.indexOf("espereu.gif")!=-1 || imatge.src.indexOf("espereu_spa.gif")!=-1 || imatge.src.indexOf("espereu_eng.gif")!=-1)
	{
		OmpleVistaCapa(i_capa);
	}
}*/

function CanviaEstatVisibleCapa(icon_capa, i)
{
	if (icon_capa.src.substring(icon_capa.src.lastIndexOf("/")+1, icon_capa.src.length)=="ara_no_visible.gif" ||
	    icon_capa.src.substring(icon_capa.src.lastIndexOf("/")+1, icon_capa.src.length)=="ara_no_radio.gif")
	{
		//pas a visible
		if (capa[i].grup)
		{
			for (var i_capa=0; i_capa<capa.length; i_capa++)
			{
			    if (i_capa==i)
				    continue;
				if (capa[i].grup==capa[i_capa].grup && (capa[i_capa].visible==si || capa[i_capa].visible==semitransparent) &&
				    EsCapaVisibleAAquestNivellDeZoom(i_capa))
				{
				   if (!(ParamCtrl.FlagsLlegenda&grups_com_a_radials))
				   {
					   if (!confirm(DonaCadena3("No és possible mostrar dues capes del mateix grup.\nLa capa \"" + DonaCadena(capa[i_capa].desc) + "\", que també format part del grup \"" + capa [i_capa].grup + "\", serà desmarcada.", "No es posible mostrar dos capas del mismo grupo.\nLa capa \"" + DonaCadena(capa[i_capa].desc) + "\", que tambien forma parte del grupo \"" + capa [i_capa].grup + "\", será desmarcada.", "It is not possible to show two layers from the same group.\nLayer \"" + DonaCadena(capa[i_capa].desc) + "\", that also is member to the group \"" + capa [i_capa].grup + "\", will be deselected.")))
						   return;
				   }
				   if (capa[i_capa].transparencia==semitransparent)
				   {
				       capa[i_capa].visible=semitransparent;  //Així forço que passi a no visible
				       if (ParamCtrl.FlagsLlegenda&grups_com_a_radials)
					   	eval("this.document.v_raster"+i_capa+".src=\""+(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+"semi_radio.gif\"");
				   }
				   eval("CanviaEstatVisibleCapa(this.document.v_raster"+i_capa+","+i_capa+")");
				   break;
				}
			}
		}
		capa[i].visible=si;
		if (EsCapaVisibleAAquestNivellDeZoom(i))
		{
			OmpleVistaCapa(i);
			showLayer(getLayer(this, "l_raster"+i));
		}
		if (capa[i].grup && (ParamCtrl.FlagsLlegenda&grups_com_a_radials))
		    icon_capa.src=(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+"radio.gif";
		else
		    icon_capa.src=(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+"visible.gif";
		if (icon_capa.alt)
			icon_capa.alt="visible"; //no cal DonaCadena3();
	}	
	else if (icon_capa.src.substring(icon_capa.src.lastIndexOf("/")+1, icon_capa.src.length)=="semitransparent.gif" || 
		 icon_capa.src.substring(icon_capa.src.lastIndexOf("/")+1, icon_capa.src.length)=="semi_radio.gif"||
	         capa[i].transparencia!=semitransparent)
	{	
		//pas a no visible
		capa[i].visible=ara_no;
		hideLayer(getLayer(this, "l_raster"+i));
		if (capa[i].grup && (ParamCtrl.FlagsLlegenda&grups_com_a_radials))
		    icon_capa.src=(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+"ara_no_radio.gif";
		else
		    icon_capa.src=(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+"ara_no_visible.gif";
		if (icon_capa.alt)
			icon_capa.alt="no visible";  //no cal DonaCadena3();
	}	
	else
	{
		//pas a semitransparent
		capa[i].visible=semitransparent;
		if (EsCapaVisibleAAquestNivellDeZoom(i))
		{
			OmpleVistaCapa(i);
			showLayer(getLayer(this, "l_raster"+i));
		}
	        if (capa[i].grup && (ParamCtrl.FlagsLlegenda&grups_com_a_radials))
		    icon_capa.src=(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+"semi_radio.gif";
		else
 		    icon_capa.src=(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+"semitransparent.gif";
		if (icon_capa.alt)
			icon_capa.alt=DonaCadena3("semitransparent", "semitransparente", "semitransparent");
	}
}

function CanviaEstatConsultableCapa(icon_capa, i)
{
	if (icon_capa.src.substring(icon_capa.src.lastIndexOf("/")+1, icon_capa.src.length)=="ara_no_consultable.gif")
	{
		capa[i].consultable=si;
		icon_capa.src=(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+"consultable.gif";
		if (icon_capa.alt)
			icon_capa.alt=DonaCadena3("consultable", "consultable", "queryable");
	}
	else 
	{
		capa[i].consultable=ara_no;
		icon_capa.src=(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+"ara_no_consultable.gif";
		if (icon_capa.alt)
			icon_capa.alt=DonaCadena3("no consultable", "no consultable", "no queryable");
	}
}

function CanviaEstatDescarregableCapa(icon_capa, i)
{
	if (icon_capa.src.substring(icon_capa.src.lastIndexOf("/")+1, icon_capa.src.length)=="ara_no_descarregable.gif")
	{
	    if (capa[i].grup)
	    {
		for (var i_capa=0; i_capa<capa.length; i_capa++)
		{
		    if (i_capa==i)
			    continue;
			if (capa[i].grup==capa[i_capa].grup && capa[i_capa].descarregable==si)
			{
		   	   if (!confirm(DonaCadena3("No és possible descarregar dues capes del mateix grup.\nLa capa \"" + DonaCadena(capa[i_capa].desc) + "\", que també format part del grup \"" + capa [i_capa].grup + "\", serà desmarcada.", "No es posible descargar dos capas del mismo grupo.\nLa capa \"" + DonaCadena(capa[i_capa].desc) + "\", que tambien forma parte del grupo \"" + capa [i_capa].grup + "\", será desmarcada.", "It is not possible to download two layers from the same group.\nLayer \"" + DonaCadena(capa[i_capa].desc) + "\", that also is member to the group \"" + capa [i_capa].grup + "\", will be deselected.")))
				   return;
			   eval("CanviaEstatDescarregableCapa(this.document.z_raster"+i_capa+","+i_capa+")");
			   break;
			}
		}
	    }
	    capa[i].descarregable=si;
	    icon_capa.src=(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+"descarregable.gif";
	    if (icon_capa.alt)
		icon_capa.alt=DonaCadena3("descarregable", "descargable", "downloadable");
	}
	else 
	{
	    capa[i].descarregable=ara_no;
	    icon_capa.src=(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+"ara_no_descarregable.gif";
	    if (icon_capa.alt)
		icon_capa.alt=DonaCadena3("no descarregable", "no descargable", "no downloadable");;
	}
}

function CanviaEstatLlegendaDesplegadaCapa(icon_capa, i)
{
	if (icon_capa.src.substring((icon_capa.src.lastIndexOf("/")+1), icon_capa.src.length)=="menys.gif")
		capa[i].LlegDesplegada=no;
	else 
		capa[i].LlegDesplegada=si;

	CreaLlegenda();
}

function CanviaEstatCapa(i, estat)
{
	if (estat=="visible")
	{
		eval("CanviaEstatVisibleCapa(this.document.v_raster"+i+","+i+")");
		if ((capa[i].estil && capa[i].estil.length>1) || 
			(capa[i].grup && ParamCtrl.FlagsLlegenda&grups_com_a_radials) ||
			capa[i].animable&multitime)
			CreaLlegenda();
	}
	else if (estat=="consultable")
		eval("CanviaEstatConsultableCapa(this.document.c_raster"+i+","+i+")");
	else if (estat=="descarregable")
		eval("CanviaEstatDescarregableCapa(this.document.z_raster"+i+","+i+")");
	else if (estat=="lleg_desplegada")
		eval("CanviaEstatLlegendaDesplegadaCapa(this.document.m_raster"+i+","+i+")");
	else
		alert(DonaCadena3("Estat no reconegut.", "Estado no reconocido.", "Unknown state."));
}

function CanviaEstatVisibleObjDigi(icon_capa, i)
{
var elem;
	if (icon_capa.src.substring(icon_capa.src.lastIndexOf("/")+1, icon_capa.src.length)=="ara_no_visible.gif")
	{
		CapaDigi[i].visible=si;
		icon_capa.src=(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+"visible.gif";
		if (EsObjDigiVisibleAAquestNivellDeZoom(CapaDigi[i]) && CapaDigi[i].objecte)
		{
			for (var j=CapaDigi[i].objecte.length-1; j>=0; j--)
			{
				elem=getLayer(this, "l_obj_digi"+i+"_"+j);
				if(elem)
					showLayer(elem); 
			}
		}
		if (icon_capa.alt)
			icon_capa.alt="visible"; //no cal DonaCadena3();
	}
	else 
	{
		CapaDigi[i].visible=ara_no;
		icon_capa.src=(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+"ara_no_visible.gif";
		if(CapaDigi[i].objecte)
		{
			for (var j=CapaDigi[i].objecte.length-1; j>=0; j--)
			{
				elem=getLayer(this, "l_obj_digi"+i+"_"+j);
				if(elem)
					hideLayer(elem); 
			}
			//	hideLayerIfIsLayer(this, "l_obj_digi"+i+"_"+j);
		}
		if (icon_capa.alt)
			icon_capa.alt="no visible"; //no cal DonaCadena3();
	}
}

function CanviaEstatConsultableObjDigi(icon_capa, i)
{
	if (icon_capa.src.substring(icon_capa.src.lastIndexOf("/")+1, icon_capa.src.length)=="ara_no_consultable.gif")
	{
		CapaDigi[i].consultable=si;
		icon_capa.src=(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+"consultable.gif";
		if (icon_capa.alt)
			icon_capa.alt=DonaCadena3("consultable", "consultable", "queryable");
	}
	else 
	{
		CapaDigi[i].consultable=ara_no;
		icon_capa.src=(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+"ara_no_consultable.gif";
		if (icon_capa.alt)
			icon_capa.alt=DonaCadena3("no consultable", "no consultable", "no queryable");
	}
}
function CanviaEstatLlegendaDesplegadaObjDigi(icon_capa, i)
{
	if (icon_capa.src.substring((icon_capa.src.lastIndexOf("/")+1), icon_capa.src.length)=="menys.gif")
		CapaDigi[i].LlegDesplegada=no;
	else 
		CapaDigi[i].LlegDesplegada=si;

	CreaLlegenda();
}

function CanviaEstatObjDigi(i, estat)
{
	if (estat=="visible")
	{
		eval("CanviaEstatVisibleObjDigi(this.document.v_obj_digi"+i+","+i+")");
		if (CapaDigi[i].estil && CapaDigi[i].estil.length>1)
			CreaLlegenda();
	}

	else if (estat=="consultable")
		eval("CanviaEstatConsultableObjDigi(this.document.c_obj_digi"+i+","+i+")");
	else if (estat=="lleg_desplegada")
		eval("CanviaEstatLlegendaDesplegadaObjDigi(this.document.m_obj_digi"+i+","+i+")");
	else
		alert(DonaCadena3("Estat no reconegut.", "Estado no reconocido.", "Unknown state."));
}


function CanviaEstatLlegendaRadioEstil(icon_capa, marcat)
{
	if (marcat)
		icon_capa.src=(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+"radio.gif";
	else
		icon_capa.src=(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+"ara_no_radio.gif";	
}

function CanviaEstilCapa(i_capa, i_estil)
{
var redibuixar_llegenda=false;
	if (capa[i_capa].i_estil==i_estil)
	    return;
	for (var i=0; i<capa[i_capa].estil.length; i++)
	{
	    if (i==i_estil)
			eval("CanviaEstatLlegendaRadioEstil(this.document.e_raster"+i_capa+"_"+i+", true)");
	    else
			eval("CanviaEstatLlegendaRadioEstil(this.document.e_raster"+i_capa+"_"+i+", false)");
	    if (!redibuixar_llegenda && capa[i_capa].LlegDesplegada==si && capa[i_capa].estil[i].ItemLleg && capa[i_capa].estil[i].ItemLleg.length>1)
		redibuixar_llegenda=true;
	}
	capa[i_capa].i_estil=i_estil;
	OmpleVistaCapa(i_capa);   	
        if (redibuixar_llegenda)
	    CreaLlegenda();
}

function CanviaEstilCapaDigi(i_capa, i_estil)
{
var redibuixar_llegenda=false;

	if (CapaDigi[i_capa].i_estil==i_estil)
	    return;
	for (var i=0; i<CapaDigi[i_capa].estil.length; i++)
			{
	    if (i==i_estil)
			eval("CanviaEstatLlegendaRadioEstil(this.document.e_obj_digi"+i_capa+"_"+i+", true)");
	    else
			eval("CanviaEstatLlegendaRadioEstil(this.document.e_obj_digi"+i_capa+"_"+i+", false)");
			
	    if (!redibuixar_llegenda && CapaDigi[i_capa].LlegDesplegada==si && CapaDigi[i_capa].estil[i].ItemLleg && CapaDigi[i_capa].estil[i].ItemLleg.length>1)
			redibuixar_llegenda=true;
		}
	if(!redibuixar_llegenda && CapaDigi[i_capa].visible!=no && CapaDigi[i_capa].visible!=ara_no &&
		i_estil!=CapaDigi[i_capa].i_estil && CapaDigi[i_capa].LlegDesplegada==no && 
		((CapaDigi[i_capa].estil[i_estil].ItemLleg && CapaDigi[i_capa].estil[i_estil].ItemLleg.length<2) ||
		 (CapaDigi[i_capa].estil[CapaDigi[i_capa].i_estil].ItemLleg && CapaDigi[i_capa].estil[CapaDigi[i_capa].i_estil].ItemLleg.length<2)))
		redibuixar_llegenda=true;
	CapaDigi[i_capa].i_estil=i_estil;	
	CapaDigi[i_capa].objecte=null;
	CapaDigi[i_capa].tiles_solicitats==null;
	if(CapaDigi[i_capa].servidor)
	{
		//Creo un array de tiles
		CapaDigi[i_capa].tiles_solicitats=new Array(CapaDigi[i_capa].n_cols_tiles*CapaDigi[i_capa].n_files_tiles);
		for(var i_tiles=0; i_tiles<CapaDigi[i_capa].tiles_solicitats.length; i_tiles++)
			CapaDigi[i_capa].tiles_solicitats[i_tiles]=tile_no_solicitat;
		DemanaTilesDeCapaDigitalitzadaSiCal(i_capa,ParamInternCtrl.EnvActual);
	}
    if (redibuixar_llegenda)
		CreaLlegenda();
}
	
function DonaCadenaHTMLCapaDigi(i)
{
var funcio_dona_env_icona=DonaEnvIcona;
var env_icona=new CreaExtent(0,0,0,0);
var simbol;
var punt;

	if (CapaDigi[i].visible!=no/* && EsObjDigiVisibleAAquestNivellDeZoom(CapaDigi[i])*/)
	{					
		cdns2=new Array();
		if(CapaDigi[i].objecte)
		{
			for (var j=CapaDigi[i].objecte.length-1; j>=0; j--)
			{				
		    	//if(i_crea_vista!=NCreaVista)
				//	return;					
				if(CapaDigi[i].objecte[j].seleccionat==true && CapaDigi[i].estil[CapaDigi[i].i_estil].simbol_sel)
				{
					if(CapaDigi[i].estil[CapaDigi[i].i_estil].simbol_sel.length==1) 
						simbol=CapaDigi[i].estil[CapaDigi[i].i_estil].simbol_sel[0].icona;
					else
						simbol=CapaDigi[i].estil[CapaDigi[i].i_estil].simbol_sel[CapaDigi[i].objecte[j].i_simbol].icona;
				}
				else
				{
					if(CapaDigi[i].estil[CapaDigi[i].i_estil].simbol.length==1) 
						simbol=CapaDigi[i].estil[CapaDigi[i].i_estil].simbol[0].icona;
					else
						simbol=CapaDigi[i].estil[CapaDigi[i].i_estil].simbol[CapaDigi[i].objecte[j].i_simbol].icona;
				}
				if(!CapaDigi[i].CRS  || CapaDigi[i].CRS.toUpperCase()==ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS.toUpperCase())
					punt=CapaDigi[i].objecte[j].punt[0];			        
				else
					punt=CapaDigi[i].objecte[j].puntCRSactual[0];
				funcio_dona_env_icona(env_icona, punt, simbol);
					
				if (ParamInternCtrl.EnvActual.MinX < env_icona.MinX &&
					ParamInternCtrl.EnvActual.MaxX > env_icona.MaxX &&
					ParamInternCtrl.EnvActual.MinY < env_icona.MinY &&
					ParamInternCtrl.EnvActual.MaxY > env_icona.MaxY)
				{
					//la layer l_obj_digi té les coordenades referides a la seva layer pare que és l_capa_digi --> No he de considerar ni els marges 
					//de la vista ni els scrolls.
					cdns2.push(textHTMLLayer("l_obj_digi"+i+"_"+j, 
									((punt.x-ParamInternCtrl.EnvActual.MinX)/(ParamInternCtrl.EnvActual.MaxX-ParamInternCtrl.EnvActual.MinX)*(ParamCtrl.ncol))-simbol.i, 
							  		((ParamInternCtrl.EnvActual.MaxY-punt.y)/(ParamInternCtrl.EnvActual.MaxY-ParamInternCtrl.EnvActual.MinY)*(ParamCtrl.nfil))-simbol.j, 
							 		simbol.ncol, simbol.nfil, null, false, 
							  		((EsObjDigiVisibleAAquestNivellDeZoom(CapaDigi[i])) ? true : false), null, 
							  		"<img name=\"i_obj_digi"+i+"_"+j+"\" src=\""+
									(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+
									simbol.icona+"\" width=\"" +
							  		simbol.ncol + "\" height=\"" + simbol.nfil + "\">"));					
				}
			}				
		}
		if(CapaDigi[i].servidor)
			DemanaTilesDeCapaDigitalitzadaSiCal(i,ParamInternCtrl.EnvActual);
		return cdns2.join("");
	}
	else 
		return "";
}

function CreaCapaDigiLayer(i)
{
	if (CapaDigi[i].visible!=no/* && EsObjDigiVisibleAAquestNivellDeZoom(CapaDigi[i])*/)
		return textHTMLLayer("l_capa_digi"+i, MargeEsquerraVista+1, MargeSuperiorVista+1, 
						ParamCtrl.ncol, ParamCtrl.nfil, null, false, true, null, DonaCadenaHTMLCapaDigi(i));
	else return "";
}

function OmpleMatriuVistaCapaTiled(i_capa)
{
	var i_tile_matrix=DonaIndexTileMatrix(i_capa, ParamInternCtrl.CostatZoomActual);
	if (i_tile_matrix==-1)
	{
		ParamInternCtrl.Vista[i_capa].TileMatrix=null;
		return i_tile_matrix;
	}
	ParamInternCtrl.Vista[i_capa].TileMatrix=capa[i_capa].TileMatrixSet.ll[i_tile_matrix];
	
	ParamInternCtrl.Vista[i_capa].ITileMin = floor_DJ((ParamInternCtrl.EnvActual.MinX - ParamInternCtrl.Vista[i_capa].TileMatrix.TopLeftPoint.x) / (ParamInternCtrl.Vista[i_capa].TileMatrix.costat*ParamInternCtrl.Vista[i_capa].TileMatrix.TileWidth));
	ParamInternCtrl.Vista[i_capa].ITileMax = floor_DJ((ParamInternCtrl.EnvActual.MaxX - ParamInternCtrl.Vista[i_capa].TileMatrix.TopLeftPoint.x) / (ParamInternCtrl.Vista[i_capa].TileMatrix.costat*ParamInternCtrl.Vista[i_capa].TileMatrix.TileWidth));
	ParamInternCtrl.Vista[i_capa].JTileMin = floor_DJ((ParamInternCtrl.Vista[i_capa].TileMatrix.TopLeftPoint.y - ParamInternCtrl.EnvActual.MaxY) / (ParamInternCtrl.Vista[i_capa].TileMatrix.costat*ParamInternCtrl.Vista[i_capa].TileMatrix.TileHeight));
	ParamInternCtrl.Vista[i_capa].JTileMax = floor_DJ((ParamInternCtrl.Vista[i_capa].TileMatrix.TopLeftPoint.y - ParamInternCtrl.EnvActual.MinY) / (ParamInternCtrl.Vista[i_capa].TileMatrix.costat*ParamInternCtrl.Vista[i_capa].TileMatrix.TileHeight));

	if (ParamInternCtrl.Vista[i_capa].ITileMin < 0) ParamInternCtrl.Vista[i_capa].ITileMin = 0;
	else if (ParamInternCtrl.Vista[i_capa].ITileMin >= ParamInternCtrl.Vista[i_capa].TileMatrix.MatrixWidth) ParamInternCtrl.Vista[i_capa].ITileMin = ParamInternCtrl.Vista[i_capa].TileMatrix.MatrixWidth - 1;
	if (ParamInternCtrl.Vista[i_capa].ITileMax < 0) ParamInternCtrl.Vista[i_capa].ITileMax = 0;
	else if (ParamInternCtrl.Vista[i_capa].ITileMax >= ParamInternCtrl.Vista[i_capa].TileMatrix.MatrixWidth) ParamInternCtrl.Vista[i_capa].ITileMax = ParamInternCtrl.Vista[i_capa].TileMatrix.MatrixWidth - 1;

	if (ParamInternCtrl.Vista[i_capa].JTileMin < 0) ParamInternCtrl.Vista[i_capa].JTileMin = 0;
	else if (ParamInternCtrl.Vista[i_capa].JTileMin >= ParamInternCtrl.Vista[i_capa].TileMatrix.MatrixHeight) ParamInternCtrl.Vista[i_capa].JTileMin = ParamInternCtrl.Vista[i_capa].TileMatrix.MatrixHeight - 1;
	if (ParamInternCtrl.Vista[i_capa].JTileMax < 0) ParamInternCtrl.Vista[i_capa].JTileMax = 0;
	else if (ParamInternCtrl.Vista[i_capa].JTileMax >= ParamInternCtrl.Vista[i_capa].TileMatrix.MatrixHeight) ParamInternCtrl.Vista[i_capa].JTileMax = ParamInternCtrl.Vista[i_capa].TileMatrix.MatrixHeight - 1;
 
	//Moc la layer, li canvio de mides i la tallo.
	ParamInternCtrl.Vista[i_capa].dx= floor_DJ((ParamInternCtrl.EnvActual.MinX - (ParamInternCtrl.Vista[i_capa].TileMatrix.TopLeftPoint.x+ParamInternCtrl.Vista[i_capa].TileMatrix.costat*ParamInternCtrl.Vista[i_capa].TileMatrix.TileWidth*ParamInternCtrl.Vista[i_capa].ITileMin))/ParamInternCtrl.Vista[i_capa].TileMatrix.costat);
	ParamInternCtrl.Vista[i_capa].dy= floor_DJ(((ParamInternCtrl.Vista[i_capa].TileMatrix.TopLeftPoint.y-ParamInternCtrl.Vista[i_capa].TileMatrix.costat*ParamInternCtrl.Vista[i_capa].TileMatrix.TileHeight*ParamInternCtrl.Vista[i_capa].JTileMin) - ParamInternCtrl.EnvActual.MaxY)/ParamInternCtrl.Vista[i_capa].TileMatrix.costat);
	return i_tile_matrix;
}

function CreaMatriuCapaTiled(i_capa)
{
var cdns=new Array();

	var i_tile_matrix=OmpleMatriuVistaCapaTiled(i_capa);
	if(i_tile_matrix==-1) 
	{	
		eval("this.document.i_raster"+i_capa+".src=\""+(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+"1tran.gif\"");
		return;
	}
	var layer_vista=getLayer(this, "l_raster"+i_capa);

	moveLayer(layer_vista, MargeEsquerraVista+1-ParamInternCtrl.Vista[i_capa].dx, MargeSuperiorVista+1-ParamInternCtrl.Vista[i_capa].dy, (ParamInternCtrl.Vista[i_capa].ITileMax-ParamInternCtrl.Vista[i_capa].ITileMin+1)*ParamInternCtrl.Vista[i_capa].TileMatrix.TileWidth, (ParamInternCtrl.Vista[i_capa].JTileMax-ParamInternCtrl.Vista[i_capa].JTileMin+1)*ParamInternCtrl.Vista[i_capa].TileMatrix.TileHeight);
	clipLayer(layer_vista, ParamInternCtrl.Vista[i_capa].dx, ParamInternCtrl.Vista[i_capa].dy, ParamCtrl.ncol, ParamCtrl.nfil);

	//Genero la taula
	cdns.push("<table border=0 cellspacing=0 cellpadding=0>");
	for (var j=ParamInternCtrl.Vista[i_capa].JTileMin; j<=ParamInternCtrl.Vista[i_capa].JTileMax; j++)
	{
		cdns.push("  <tr cellspacing=0 cellpadding=0 height=", ParamInternCtrl.Vista[i_capa].TileMatrix.TileHeight ,">");
		for (var i=ParamInternCtrl.Vista[i_capa].ITileMin; i<=ParamInternCtrl.Vista[i_capa].ITileMax; i++)
		{
			cdns.push("<td width=", ParamInternCtrl.Vista[i_capa].TileMatrix.TileWidth, "><img name=\"i_raster", i_capa, "_" , j , "_", i , "\" src=",
						(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
						DonaCadena3("espereu.gif", "espereu_spa.gif", "espereu_eng.gif") +"></td>");
		}
		cdns.push("  </tr>");
	}
	cdns.push("  </table>");
	
	contentLayer(layer_vista, cdns.join(""));

	//Carrego les imatges
	for (var j=ParamInternCtrl.Vista[i_capa].JTileMin; j<=ParamInternCtrl.Vista[i_capa].JTileMax; j++)
	{
		for (var i=ParamInternCtrl.Vista[i_capa].ITileMin; i<=ParamInternCtrl.Vista[i_capa].ITileMax; i++)
		{
			if (capa[i_capa].tipus==TipusWMTS_SOAP)
			{
				//if(j==ParamInternCtrl.Vista[i_capa].JTileMin && i==ParamInternCtrl.Vista[i_capa].ITileMin)
				FesPeticioAjaxGetTileWMTS_SOAP(i_capa, null, i_tile_matrix, j, i, -1);  //NJ a JM: Perquè el estil i el i_data sempre són null en el WMTS?? 
			}
			else
				setTimeout("this.document.i_raster"+ i_capa +"_"+ j +"_"+ i +".src=DonaNomImatgeTiled("+i_capa+", "+i_tile_matrix+", "+j+", "+i+", null, true, -1)", 75);
		}
	}
}

function DonaTextMatriuCapaTiledImprimir(i_capa, ncol, nfil, env)
{
var cdns=new Array();

	//Donat que només és possible imprimir conservant la resolució.
	var i_tile_matrix=DonaIndexTileMatrix(i_capa, (env.MaxX-env.MinX)/ncol);
	if (i_tile_matrix==-1)
	{
		//ParamInternCtrl.Vista[i_capa].TileMatrix=null;
		return "<img name=\"l_raster_print"+i_capa+"\" src=\""+
		(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+"1tran.gif\">";
	}
	//ParamInternCtrl.Vista[i_capa].TileMatrix=capa[i_capa].TileMatrixSet.ll[i_tile_matrix];
	
	var i_tile_min = floor_DJ((env.MinX - capa[i_capa].TileMatrixSet.ll[i_tile_matrix].TopLeftPoint.x) / (capa[i_capa].TileMatrixSet.ll[i_tile_matrix].costat*capa[i_capa].TileMatrixSet.ll[i_tile_matrix].TileWidth));
	var i_tile_max = floor_DJ((env.MaxX - capa[i_capa].TileMatrixSet.ll[i_tile_matrix].TopLeftPoint.x) / (capa[i_capa].TileMatrixSet.ll[i_tile_matrix].costat*capa[i_capa].TileMatrixSet.ll[i_tile_matrix].TileWidth));
	var j_tile_min = floor_DJ((capa[i_capa].TileMatrixSet.ll[i_tile_matrix].TopLeftPoint.y - env.MaxY) / (capa[i_capa].TileMatrixSet.ll[i_tile_matrix].costat*capa[i_capa].TileMatrixSet.ll[i_tile_matrix].TileHeight));
	var j_tile_max = floor_DJ((capa[i_capa].TileMatrixSet.ll[i_tile_matrix].TopLeftPoint.y - env.MinY) / (capa[i_capa].TileMatrixSet.ll[i_tile_matrix].costat*capa[i_capa].TileMatrixSet.ll[i_tile_matrix].TileHeight));

	if (i_tile_min < 0) i_tile_min = 0;
	else if (i_tile_min >= capa[i_capa].TileMatrixSet.ll[i_tile_matrix].MatrixWidth) i_tile_min = capa[i_capa].TileMatrixSet.ll[i_tile_matrix].MatrixWidth - 1;
	if (i_tile_max < 0) i_tile_max = 0;
	else if (i_tile_max >= capa[i_capa].TileMatrixSet.ll[i_tile_matrix].MatrixWidth) i_tile_max = capa[i_capa].TileMatrixSet.ll[i_tile_matrix].MatrixWidth - 1;

	if (j_tile_min < 0) j_tile_min = 0;
	else if (j_tile_min >= capa[i_capa].TileMatrixSet.ll[i_tile_matrix].MatrixHeight) j_tile_min = capa[i_capa].TileMatrixSet.ll[i_tile_matrix].MatrixHeight - 1;
	if (j_tile_max < 0) j_tile_max = 0;
	else if (j_tile_max >= capa[i_capa].TileMatrixSet.ll[i_tile_matrix].MatrixHeight) j_tile_max = capa[i_capa].TileMatrixSet.ll[i_tile_matrix].MatrixHeight - 1;
 
	//Moc la layer, li canvio de mides i la tallo.
	var dx= floor_DJ((env.MinX - (capa[i_capa].TileMatrixSet.ll[i_tile_matrix].TopLeftPoint.x+capa[i_capa].TileMatrixSet.ll[i_tile_matrix].costat*capa[i_capa].TileMatrixSet.ll[i_tile_matrix].TileWidth*i_tile_min))/capa[i_capa].TileMatrixSet.ll[i_tile_matrix].costat);
	var dy= floor_DJ(((capa[i_capa].TileMatrixSet.ll[i_tile_matrix].TopLeftPoint.y-capa[i_capa].TileMatrixSet.ll[i_tile_matrix].costat*capa[i_capa].TileMatrixSet.ll[i_tile_matrix].TileHeight*j_tile_min) - env.MaxY)/capa[i_capa].TileMatrixSet.ll[i_tile_matrix].costat);

	var layer_vista=getLayer(winImprimir, "l_raster_print"+i_capa);

	moveLayer(layer_vista, -dx, -dy, (i_tile_max-i_tile_min+1)*capa[i_capa].TileMatrixSet.ll[i_tile_matrix].TileWidth, (j_tile_max-j_tile_min+1)*capa[i_capa].TileMatrixSet.ll[i_tile_matrix].TileHeight);
	clipLayer(layer_vista, dx, dy, ncol, nfil);

	//Genero la taula
	//NJ a JM: cal fer alguna modificació aquí també perquè funcioni correctament la impressió en SOAP
	cdns.push("<table border=0 cellspacing=0 cellpadding=0>");
	for (var j=j_tile_min; j<=j_tile_max; j++)
	{
		cdns.push("  <tr cellspacing=0 cellpadding=0 height=", capa[i_capa].TileMatrixSet.ll[i_tile_matrix].TileHeight ,">");
		for (var i=i_tile_min; i<=i_tile_max; i++)
		{
			cdns.push("<td width=", capa[i_capa].TileMatrixSet.ll[i_tile_matrix].TileWidth, "><img name=\"i_raster", i_capa, "_" , j , "_", i , "\" src=");
			cdns.push(DonaNomImatgeTiled(i_capa, i_tile_matrix, j, i, null, true, -1));
			//cdns.push(DonaRequestGetMapTiled(i_capa, null, true, capa[i_capa].TileMatrixSet.ll[i_tile_matrix].TileWidth, capa[i_capa].TileMatrixSet.ll[i_tile_matrix].TileHeight, i_tile_matrix, j, i, -1));
			cdns.push("></td>");
		}
		cdns.push("  </tr>");
	}
	cdns.push("  </table>");
	
	return cdns.join("");
}

var MidaFletxaInclinada=10;
var MidaFletxaPlana=15;
var AltTextCoordenada=18;
var AmpleTextCoordenada=85;
var MargeSuperiorVista=0;
var MargeEsquerraVista=0;
var OrigenSuperiorVista=0;
var OrigenEsquerraVista=0;

function CreaVista()
{	
	if (timeoutCreaVista)
	{
		clearTimeout(timeoutCreaVista);
		timeoutCreaVista=null;
	}			
	timeoutCreaVista=setTimeout(CreaVistaImmediata, 10);
}

var NCreaVista=0;

function CreaVistaImmediata()
{
var s;
var cdns=new Array();
var i_crea_vista;
var elem=getLayer(this, "vista");

	NCreaVista++;
	i_crea_vista=NCreaVista;
		
	cdns.push("<table border=0 cellspacing=0 cellpadding=0>",
	  	"  <tr cellspacing=0 cellpadding=0>",
	  	"    <td rowspan=", (ParamCtrl.CoordExtermes ? 8 : 7), "><img src=",
		(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), "1tran.gif height=1 width=", ParamCtrl.MargeEsqVista , "></td>",
	  	"    <td colspan=", (ParamCtrl.CoordExtermes ? 6 : 5), "><img src=",
		(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), "1tran.gif height=" , ParamCtrl.MargeSupVista , " width=1></td>",
	  	"  </tr>");

	if (ParamCtrl.CoordExtermes)
	{
	    cdns.push("  <tr>\n");
		if (ParamCtrl.CoordExtermes&longlat_g || ParamCtrl.CoordExtermes&longlat_gms)
		    DonaCoordenadesLongLat(ParamInternCtrl.EnvActual.MinX,ParamInternCtrl.EnvActual.MaxY,ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS);
		cdns.push("    <td colspan=2 align=left><font face=arial size=1>\n");
		if (ParamCtrl.CoordExtermes&proj)
		    cdns.push((OKStrOfNe(ParamInternCtrl.EnvActual.MinX,ParamCtrl.NDecimalsCoordXY)));
		else if (ParamCtrl.CoordExtermes&longlat_g)
		    cdns.push((OKStrOfNe(ll_x,ParamCtrl.NDecimalsCoordXY*4)));
		else //if (ParamCtrl.CoordExtermes&longlat_gms)
		    cdns.push((g_gms(ll_x, true)));
		cdns.push("</td>\n");

		if (ParamCtrl.CoordExtermes&longlat_g || ParamCtrl.CoordExtermes&longlat_gms)
		    DonaCoordenadesLongLat(ParamInternCtrl.EnvActual.MaxX,ParamInternCtrl.EnvActual.MaxY,ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS);
		cdns.push("    <td colspan=3 align=right><font face=arial size=1>\n");
		if (ParamCtrl.CoordExtermes&proj)
		    cdns.push((OKStrOfNe(ParamInternCtrl.EnvActual.MaxX,ParamCtrl.NDecimalsCoordXY)));
		else if (ParamCtrl.CoordExtermes&longlat_g)
		   cdns.push((OKStrOfNe(ll_x,ParamCtrl.NDecimalsCoordXY*4)));
		else //if (ParamCtrl.CoordExtermes&longlat_gms)
		    cdns.push((g_gms(ll_x, true)));
		cdns.push("    </td>\n",
		   "    <td><img src=",(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
		   "1tran.gif height=" , AltTextCoordenada , "></td>\n",
		   "  </tr>\n");
	}
	cdns.push("  <tr>",
	   "    <td><a href=\"javascript:MouLaVistaSalt(-1,1);\"><img src=",
	   (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
	   "f_inc11.gif width=",
	   	MidaFletxaInclinada," height=",MidaFletxaInclinada," border=0></a></td>",
	   "    <td><img src=",
	   (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
	   "1gris.gif width=",Math.floor((ParamCtrl.ncol-MidaFletxaPlana)/2)," height=",MidaFletxaInclinada,"></td>",
	   "    <td><a href=\"javascript:MouLaVistaSalt(0,1);\"><img src=",
	   (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
	   "f_pla1.gif width=",MidaFletxaPlana," height=",MidaFletxaInclinada," border=0></a></td>",
	   "    <td><img src=",
	   (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
	   "1gris.gif width=",(Math.floor((ParamCtrl.ncol-MidaFletxaPlana)/2)+(ParamCtrl.ncol-MidaFletxaPlana)%2)," height=",MidaFletxaInclinada,"></td>",
	   "    <td><a href=\"javascript:MouLaVistaSalt(1,1);\"><img src=",
	   (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
	   "f_inc21.gif width=",MidaFletxaInclinada," height=",MidaFletxaInclinada,
	   " border=0></a></td>\n");
	if (ParamCtrl.CoordExtermes)
	{
		cdns.push("    <td rowspan=3 valign=top><font face=arial size=1>&nbsp;&nbsp;\n");
		if (ParamCtrl.CoordExtermes&proj)		
		    cdns.push((OKStrOfNe(ParamInternCtrl.EnvActual.MaxY,ParamCtrl.NDecimalsCoordXY)));
		else if (ParamCtrl.CoordExtermes&longlat_g)
		    cdns.push((OKStrOfNe(ll_y,ParamCtrl.NDecimalsCoordXY*4)));
		else //if (ParamCtrl.CoordExtermes&longlat_gms)
		    cdns.push((g_gms(ll_y, true)));
		cdns.push("</td>\n");
	}		 
	cdns.push("  </tr>",
	   "  <tr>",
	   "    <td><img src=",
	   (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
	   "1gris.gif width=",MidaFletxaInclinada," height=",Math.floor((ParamCtrl.nfil-MidaFletxaPlana)/2),"></td>",
	   "    <td colspan=3 rowspan=3><img src=", (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
	   DonaFitxerColor(ParamCtrl.ColorFonsVista)," width=",ParamCtrl.ncol," height=",ParamCtrl.nfil,"></td>",
	   "    <td><img src=",(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
	   "1gris.gif width=",MidaFletxaInclinada," height=",Math.floor((ParamCtrl.nfil-MidaFletxaPlana)/2),"></td>",
	   "  </tr>",
	   "  <tr>",
	   "    <td><a href=\"javascript:MouLaVistaSalt(-1,0);\"><img src=",
	   (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
	   "f_ver1.gif width=",MidaFletxaInclinada," height=",MidaFletxaPlana," border=0></a></td>",
	   "    <td><a href=\"javascript:MouLaVistaSalt(1,0);\"><img src=",
	   (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
	   "f_ver2.gif width=",MidaFletxaInclinada," height=",MidaFletxaPlana," border=0></a></td>",
	   "  </tr>",
	   "  <tr>",
	   "    <td><img src=",(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
	   "1gris.gif width=",MidaFletxaInclinada," height=",(Math.floor((ParamCtrl.nfil-MidaFletxaPlana)/2)+(ParamCtrl.nfil-MidaFletxaPlana)%2),"></td>",
	   "    <td><img src=",(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
	   "1gris.gif width=",MidaFletxaInclinada," height=",(Math.floor((ParamCtrl.nfil-MidaFletxaPlana)/2)+(ParamCtrl.nfil-MidaFletxaPlana)%2),"></td>\n");
	if (ParamCtrl.CoordExtermes)
	{
		cdns.push("    <td rowspan=2 valign=bottom><font face=arial size=1>&nbsp;&nbsp;\n");
		if (ParamCtrl.CoordExtermes&longlat_g || ParamCtrl.CoordExtermes&longlat_gms)
		    DonaCoordenadesLongLat(ParamInternCtrl.EnvActual.MaxX,ParamInternCtrl.EnvActual.MinY,ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS);
		if (ParamCtrl.CoordExtermes&proj)
		    cdns.push((OKStrOfNe(ParamInternCtrl.EnvActual.MinY,ParamCtrl.NDecimalsCoordXY)));
		else if (ParamCtrl.CoordExtermes&longlat_g)
		    cdns.push((OKStrOfNe(ll_y,ParamCtrl.NDecimalsCoordXY*4)));
		else //if (ParamCtrl.CoordExtermes&longlat_gms)
		    cdns.push((g_gms(ll_y, true)));
		cdns.push("</td>\n");
	}
	cdns.push("  </tr>",
	   "  <tr>",
	   "    <td><a href=\"javascript:MouLaVistaSalt(-1,-1);\"><img src=",
	   (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
	   "f_inc12.gif width=",MidaFletxaInclinada," height=",MidaFletxaInclinada," border=0></a></td>",
	   "    <td><img src=",
	   (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
	   "1gris.gif width=",Math.floor((ParamCtrl.ncol-MidaFletxaPlana)/2)," height=",MidaFletxaInclinada,"></td>",
	   "    <td><a href=\"javascript:MouLaVistaSalt(0,-1);\"><img src=",
	   (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
	   "f_pla2.gif width=",MidaFletxaPlana," height=",MidaFletxaInclinada," border=0></a></td>",
	   "    <td><img src=",
	   (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
	   "1gris.gif width=",(Math.floor((ParamCtrl.ncol-MidaFletxaPlana)/2)+(ParamCtrl.ncol-MidaFletxaPlana)%2), " height=",MidaFletxaInclinada,"></td>",
	   "    <td><a href=\"javascript:MouLaVistaSalt(1,-1);\"><img src=",
	   (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
	   "f_inc22.gif width=",MidaFletxaInclinada," height=",MidaFletxaInclinada," border=0></a></td>",
	   "  </tr>");
	if(!(ParamCtrl.flags&amaga_barra_escala))
	{
		cdns.push("  <tr>",
		   "    <td>&nbsp;</td>",
		   "    <td colspan=3 align=middle>", DonaCadenaHTMLEscala(ParamInternCtrl.EnvActual) ,"</td>",  //Servirà per indicar l'escala.
		   "    <td><img src=",
		   (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), "1tran.gif></td>\n");
		if (ParamCtrl.CoordExtermes)
			cdns.push("    <td><img src=",(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), "1tran.gif></td>\n");
		cdns.push("  </tr>");
	}
	cdns.push("</table>");

	MargeSuperiorVista=ParamCtrl.MargeSupVista+(ParamCtrl.CoordExtermes?AltTextCoordenada:0)+MidaFletxaInclinada;  //Distancia entre la vista i vora superior del frame
	MargeEsquerraVista=MidaFletxaInclinada+ParamCtrl.MargeEsqVista;      //Distancia entre la vista i vora esquerra del frame
	if (isLayer(elem))
	{
		getRectLayer(elem);

		OrigenSuperiorVista=MargeSuperiorVista+RectGetRectLayer.sup;
		OrigenEsquerraVista=MargeEsquerraVista+RectGetRectLayer.esq;
		//Les capes
		for (var i=capa.length-1; i>=0; i--)
		{
			if(i_crea_vista!=NCreaVista)		
				return;
			if (capa[i].visible!=no)
			{
				cdns.push(textHTMLLayer("l_raster"+i, MargeEsquerraVista+1, MargeSuperiorVista+1, ParamCtrl.ncol, ParamCtrl.nfil, null, false, 
										((EsCapaVisibleAAquestNivellDeZoom(i)) ? true : false), null, "<img name=\"i_raster"+i+"\" src=\""+
										(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+
										DonaCadena3("espereu.gif", "espereu_spa.gif", "espereu_eng.gif")+"\">"));
			}
		}

		//Els objectes digitalitzats
		if (CapaDigi.length)
		{
			for (var i=CapaDigi.length-1; i>=0; i--)
			{
				if(i_crea_vista!=NCreaVista)
					return;				
				if (i==i_objdigi_consulta || i==i_objdigi_anar_coord || i==i_objdigi_edicio)
					continue;
				cdns.push(CreaCapaDigiLayer(i));
			}
			if(i_objdigi_consulta!=-1)
				cdns.push(CreaCapaDigiLayer(i_objdigi_consulta));
			if(i_objdigi_anar_coord!=-1)
				cdns.push(CreaCapaDigiLayer(i_objdigi_anar_coord));
			if(i_objdigi_edicio!=-1)
				cdns.push(CreaCapaDigiLayer(i_objdigi_edicio));
		}		

		//Dibuixo el rectangle de situació
		cdns.push(textHTMLLayer("z_rectangle", MargeEsquerraVista, MargeSuperiorVista, ParamCtrl.ncol+1, ParamCtrl.nfil+1, null, false, false, null, 
				  "<table border=0 cellspacing=0 cellpadding=0 width=100% height=100%>"+
				  "  <tr cellspacing=0 cellpadding=0>"+
				  "    <td colspan=3 height=1><img src=" + (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "") + 
				  DonaFitxerColor(ParamCtrl.ColorQuadratSituacio) + " height=1 width=100%></td>"+
				  "  </tr>"+
				  "  <tr>"+
				  "    <td width=1><img src=" + (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+
				  DonaFitxerColor(ParamCtrl.ColorQuadratSituacio) + " height=100% width=1></td>"+
				  "    <td><img src="+(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+"1tran.gif height=1 width=100%></td>"+
				  "    <td width=1><img src=" + (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "") +
				  DonaFitxerColor(ParamCtrl.ColorQuadratSituacio) + " height=100% width=1></td>"+
				  "  </tr>"+
				  "  <tr>"+
				  "    <td colspan=3 height=1><img src=" + (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "") +
				  DonaFitxerColor(ParamCtrl.ColorQuadratSituacio) + " height=1 width=100%></td>"+
				  "</table>"));
		//Dibuixo el tel transparent actiu a sobre de tot.
		if (ParamCtrl.flags&zoom_un_sol_clic)
		{
			cdns.push(textHTMLLayer("tel_trans", MargeEsquerraVista+1, MargeSuperiorVista+1, ParamCtrl.ncol, ParamCtrl.nfil, null, false, true, "onmousemove=\"MovimentSobreVista(event);\" onmousedown=\"IniciClickSobreVista(event);\" onClick=\"ClickSobreVista(event);\"", "<!-- -->"));
		}
		else
		{
			cdns.push(textHTMLLayer("tel_trans", MargeEsquerraVista+1, MargeSuperiorVista+1, ParamCtrl.ncol, ParamCtrl.nfil, null, false, true, null, "<img src=\""+
									(AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : "")+
									"1tran.gif\" width=\""+(ParamCtrl.ncol+1)+ "\" HEIGHT=\"" +(ParamCtrl.nfil+1)+ 
									"\" onmousemove=\"MovimentSobreVista(event);\" onClick=\"ClickSobreVista(event);\">"));
		}
		//s=cdns.join("");
		//alert(s.substring(2000,5000));
		contentLayer(elem, cdns.join(""));		
	}
	//Només s'hauria de fer si hi ha peticions SOAP
	RespostaGetTileWMTS_SOAP.splice(0,RespostaGetTileWMTS_SOAP.length);
	ajaxGetTileWMTS_SOAP.splice(0,ajaxGetTileWMTS_SOAP.length);
	for (var i=capa.length-1; i>=0; i--)
	{
		if (EsCapaVisibleAAquestNivellDeZoom(i))
			setTimeout("OmpleVistaCapa("+i+")", 75);
	}
}

function OmpleXYAmpleAltEnvConsultaTipicaCompleta(win, i_ctipica, env)
{
    if (win && win.document && ParamCtrl.ConsultaTipica[i_ctipica].TipusConsultaTipica==ctipica_completa)
    {
	form_ctipica=eval("this.document.ctipica"+i_ctipica);
	if (form_ctipica)
	{
	    if (env)
	    {
		form_ctipica.x.value=OKStrOfNe((env.MaxX+env.MinX)/2,ParamCtrl.NDecimalsCoordXY);
	    	form_ctipica.y.value=OKStrOfNe((env.MaxY+env.MinY)/2,ParamCtrl.NDecimalsCoordXY);
	    	form_ctipica.ample.value=OKStrOfNe(env.MaxX-env.MinX,ParamCtrl.NDecimalsCoordXY);
	    	form_ctipica.alt.value=OKStrOfNe(env.MaxY-env.MinY,ParamCtrl.NDecimalsCoordXY);

	    	form_ctipica.MinX.value=OKStrOfNe(env.MinX,ParamCtrl.NDecimalsCoordXY);
	    	form_ctipica.MaxX.value=OKStrOfNe(env.MaxX,ParamCtrl.NDecimalsCoordXY);
	    	form_ctipica.MinY.value=OKStrOfNe(env.MinY,ParamCtrl.NDecimalsCoordXY);
	    	form_ctipica.MaxY.value=OKStrOfNe(env.MaxY,ParamCtrl.NDecimalsCoordXY);
	    }
	    else
	    {
		form_ctipica.x.value=OKStrOfNe(
	    				ParamInternCtrl.PuntOri.x,ParamCtrl.NDecimalsCoordXY);
	    	form_ctipica.y.value=OKStrOfNe(
	    				ParamInternCtrl.PuntOri.y,ParamCtrl.NDecimalsCoordXY);
	    	form_ctipica.ample.value=OKStrOfNe(
	    				ParamCtrl.ncol*ParamInternCtrl.CostatZoomActual,ParamCtrl.NDecimalsCoordXY);
	    	form_ctipica.alt.value=OKStrOfNe(
	    				ParamCtrl.nfil*ParamInternCtrl.CostatZoomActual,ParamCtrl.NDecimalsCoordXY);

	    	form_ctipica.MinX.value=OKStrOfNe(
	    				ParamInternCtrl.PuntOri.x-ParamCtrl.ncol*ParamInternCtrl.CostatZoomActual/2,ParamCtrl.NDecimalsCoordXY);
	    	form_ctipica.MinY.value=OKStrOfNe(
	    				ParamInternCtrl.PuntOri.y-ParamCtrl.nfil*ParamInternCtrl.CostatZoomActual/2,ParamCtrl.NDecimalsCoordXY);
	    	form_ctipica.MaxX.value=OKStrOfNe(
	    				ParamInternCtrl.PuntOri.x+ParamCtrl.ncol*ParamInternCtrl.CostatZoomActual/2,ParamCtrl.NDecimalsCoordXY);
	    	form_ctipica.MaxY.value=OKStrOfNe(
	    				ParamInternCtrl.PuntOri.y+ParamCtrl.nfil*ParamInternCtrl.CostatZoomActual/2,ParamCtrl.NDecimalsCoordXY);
            }
	}
    }
}

function OmpleXYAmpleAltEnvConsultesTipiquesCompleta(env)
{
	for (var i_ctipica=0; i_ctipica<ParamCtrl.ConsultaTipica.length; i_ctipica++)
	{
		OmpleXYAmpleAltEnvConsultaTipicaCompleta(this, i_ctipica, env);
	}
}

function PortamAPunt(x,y)
{
	if (ParamCtrl.ConsultaTipica)
		PosaLlistaValorsConsultesTipiquesAlPrincipi(-1);
	GuardaVistaPrevia();
	CentraLaVista(x, y);
	VerificaICorregeixPuntOri();
	RepintaMapesIVistes();
}

function PortamAAmbit(env)
{
	var costat=(env.MaxX-env.MinX)/ParamCtrl.ncol;
	var costat_Y=(env.MaxY-env.MinY)/ParamCtrl.nfil;
	if (costat<costat_Y)
		costat=costat_Y;

	GuardaVistaPrevia();
	if (ParamCtrl.ZoomContinu==si)
	{	
		if (zoom && zoom.length>2)
		{
			if (costat>zoom[0].costat)
			{
				alert(DonaCadena3("No hi ha zoom inferior a mostrar.", "No hay zoom inferior a mostrar.", "There is no more zoom out to be shown."));
				costat=zoom[0].costat;
			}
			else if (costat<zoom[zoom.length-1].costat)
			{
				alert(DonaCadena3("No hi ha zoom superior a mostrar.", "No hay zoom superior a mostrar.", "There is no more zoom in to be shown."));
				costat=zoom[zoom.length-1].costat;
			}
		}
		ParamInternCtrl.CostatZoomActual=costat;
		CentraLaVista((env.MaxX+env.MinX)/2,(env.MaxY+env.MinY)/2);
		RepintaMapesIVistes();
	}
	else
	{
		var j;
		for (j=zoom.length-1; j>0; j--)
		{
			if (zoom[j].costat>=costat)
				break;
		}
		CentraLaVista((env.MaxX+env.MinX)/2,(env.MaxY+env.MinY)/2);
		if (j!=DonaIndexNivellZoom(ParamInternCtrl.CostatZoomActual))  //Evito canviar de nivell al nivell actual.
			CanviaNivellDeZoom(j);
		else
		{
			RevisaEstatsCapes();
			CreaLlegenda();
			RepintaMapesIVistes();
		}
	}
	if (ParamCtrl.ConsultaTipica)
		OmpleXYAmpleAltEnvConsultesTipiquesCompleta(env);
}

//Posa visible la capa ctipica si pot i posa a no visible la resta de ctipiques
function PosaVisibleIConsultableCapaConsultaTipica(i_ctipica)
{
var retorn=1;  //No he tocat res
var i_capa, i_capa_a_activar;

	for(i_capa=0; i_capa<capa.length; i_capa++)
	{
		if (capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].nom==capa[i_capa].nom)
		{
			if (capa[i_capa].visible==no)
				return retorn;
			i_capa_a_activar=i_capa;
			break;
		}
	}
	if (i_capa==capa.length)
		return retorn;

	for(var i_tipica=0; i_tipica<capa_consulta_tipica_intern.length; i_tipica++)
	{
		for(i_capa=0; i_capa<capa.length; i_capa++)
		{
			if (i_capa!=i_capa_a_activar &&
				capa_consulta_tipica_intern[i_tipica].nom==capa[i_capa].nom)
			{
				if (i_tipica!=CTipicaCapa[i_ctipica])
				{
					//Revisa si hi ha capes consultables-tipica visibles o consultables i apaga-les 
					if (capa[i_capa].visible!=no)
					{
			       			if (capa[i_capa].visible!=ara_no)
						{
							capa[i_capa].visible=ara_no;
							retorn=0;  //He tocat
						}
					}
					if (capa[i_capa].consultable!=no)
					{
						if (capa[i_capa].consultable!=ara_no)
						{
							capa[i_capa].consultable=ara_no;
							retorn=0;  //He tocat
						}
					}

				}
			}
		}
	}
	//Activa la capa consultada.
	if (capa[i_capa_a_activar].visible!=no)
	{
		if (capa[i_capa_a_activar].transparencia==semitransparent)
		{
			for(i_capa=i_capa_a_activar+1; i_capa<capa.length; i_capa++)
			{
				if (capa[i_capa].visible==si || capa[i_capa].visible==semitransparent)
					break;
			}
			if (capa[i_capa_a_activar].visible!=semitransparent &&
			    capa[i_capa_a_activar].visible!=si)
			{
				if (i_capa==capa.length)
					capa[i_capa_a_activar].visible=si;
				else
					capa[i_capa_a_activar].visible=semitransparent;
				retorn=0;  //He tocat
			}
		}
		else
		{
			if (capa[i_capa_a_activar].visible!=si)
			{
				capa[i_capa_a_activar].visible=si;
				retorn=0;  //He tocat
			}
		}
		if (capa[i_capa_a_activar].estil!=null && CTipicaValor < capa[i_capa_a_activar].estil.length)
			capa[i_capa_a_activar].i_estil=CTipicaValor;
	}
	if (capa[i_capa_a_activar].consultable!=no)
	{
		if (capa[i_capa_a_activar].consultable!=si)
		{
			capa[i_capa_a_activar].consultable=si;
			retorn=0;  //He tocat
		}
	}
	return retorn;
}


function PortamAAmbitConsultaTipicaCercador(i_ctipica, i_llista_buscar)
{
var i_ctipica_capa, i_valor;

	if (ParamCtrl.ConsultaTipica[i_ctipica].TipusConsultaTipica==ctipica_cercador)
	{
		var i_llista=0;
		if (ParamCtrl.ConsultaTipica[i_ctipica].NomCapa==null)
		{
			if (capa_consulta_tipica_intern.length==1)
			{
				if(capa_consulta_tipica_intern[0].id_camp)
					i_valor=capa_consulta_tipica_intern[0].id_camp[0][i_llista_buscar].id;
				else
					i_valor==i_llista_buscar;				
				PortamAAmbitConsultaTipica(i_ctipica, 0, 0, i_valor);
				return;
			}
			else
			{
				for (var i_tipica_capa=0; i_tipica_capa<capa_consulta_tipica_intern.length; i_tipica_capa++)
				{		    	    
					if(capa_consulta_tipica_intern[i_tipica_capa].id_camp)
					{
						for (var i=0; i<capa_consulta_tipica_intern[i_tipica_capa].id_camp[0].length; i++, i_llista++)
						{
							if (i_llista==i_llista_buscar)
							{
								i_valor=capa_consulta_tipica_intern[0].id_camp[0][i].id;
								PortamAAmbitConsultaTipica(i_ctipica, i_tipica_capa, 0, i_valor);
								return 0;
							}	
						}								
					}
					else
					{
						for (var i_valor=0; i_valor<capa_consulta_tipica_intern[i_tipica_capa].proj_camp[0].length; i_valor++, i_llista++)
						{
							if (i_llista==i_llista_buscar)
							{
								PortamAAmbitConsultaTipica(i_ctipica, i_tipica_capa, 0, i_valor);
								return 0;
							}
						}
					}
				}
			}
		}
		else
		{
			for (i_nom_capa=0; i_nom_capa<ParamCtrl.ConsultaTipica[i_ctipica].NomCapa.length; i_nom_capa++)
			{
				for (var i_tipica_capa=0; i_tipica_capa<capa_consulta_tipica_intern.length; i_tipica_capa++)
				{
					if (capa_consulta_tipica_intern[i_tipica_capa].nom==ParamCtrl.ConsultaTipica[i_ctipica].NomCapa[i_nom_capa])
						break;
				}
				if (i_tipica_capa<capa_consulta_tipica_intern.length)
				{
					if(capa_consulta_tipica_intern[i_tipica_capa].id_camp)
					{
						for (var i=0; i<capa_consulta_tipica_intern[i_tipica_capa].id_camp[0].length; i++, i_llista++)
						{
							if (i_llista==i_llista_buscar)
							{
								i_valor=capa_consulta_tipica_intern[0].id_camp[0][i].id;
								PortamAAmbitConsultaTipica(i_ctipica, i_tipica_capa, 0, i_valor);
								return 0;
							}	
						}								
					}
					else
					{
						for (var i_valor=0; i_valor<capa_consulta_tipica_intern[i_tipica_capa].proj_camp[0].length; i_valor++, i_llista++)
						{
							if (i_llista==i_llista_buscar)
							{
								PortamAAmbitConsultaTipica(i_ctipica, i_tipica_capa, 0, i_valor);
								return 0;
							}
						}
					}
				}
			}
		}
	}
	return;  //això no hauria de passar mai.
}

function sortNumber(a, b)
{
	return a - b;
}

function InsertaOpcioEnSelect(selector, opcio, posicio)
{
	try
	{						
		selector.add(opcio, posicio);// standards compliant
	}
	catch(ex)
	{						
		selector.add(opcio); //IE only
	}
}

function ActualitzaComboConsultaTipicaSeguents(i_ctipica, i_ctipica_capa, i_camp_ctipica, valor)
{
	if (capa_consulta_tipica_intern.length && i_camp_ctipica>0)
	{
		//He d'actualitzar els combos amb la informació del valor seleccionat a partir d'aquest combo			
		var document_ctipica= eval("this.document");
		var i_camp_selec=i_camp_ctipica;
		if(valor<0 && i_camp_selec<capa_consulta_tipica_intern[i_ctipica_capa].camps.length)  // S'ha escollit l'opció de --Seleccionar ---
			i_camp_selec++;

		var select_ctipica_anterior;
		var valor_seleccionat=new Array(capa_consulta_tipica_intern[i_ctipica_capa].camps.length);
		for(var z=i_camp_selec; z<capa_consulta_tipica_intern[i_ctipica_capa].camps.length; z++)
		{
			select_ctipica_anterior=eval("this.document.ctipica"+i_ctipica+".valor"+z);
			valor_seleccionat[z]=select_ctipica_anterior.options[select_ctipica_anterior.selectedIndex].value;
		}
		for(var i=i_camp_ctipica-1; i>=0; i--)
		{
			var opcio="";
			var array_index= new Array();
			var select_ctipica=eval("this.document.ctipica"+i_ctipica+".valor"+i);				
			
			//Esborro el select
			select_ctipica.options.length=0;
			
			//Construeixo una llista amb els índexs dels camps que cumpleixen la selecció actual i les anteriors
			for(var j=0; j<capa_consulta_tipica_intern[i_ctipica_capa].id_camp[0].length; j++)
			{													
				for(var z=i_camp_selec; z<capa_consulta_tipica_intern[i_ctipica_capa].camps.length; z++)
				{
					if(valor_seleccionat[z]>=0 && capa_consulta_tipica_intern[i_ctipica_capa].id_camp[z][j].id!=valor_seleccionat[z])													
						break;
				}
				if(z==capa_consulta_tipica_intern[i_ctipica_capa].camps.length)
					array_index[array_index.length]=capa_consulta_tipica_intern[i_ctipica_capa].id_camp[i][j].id;
			}
			//Haig ordenar array_index
			array_index.sort(sortNumber);
			//Tornor a omplir el combo 				
			//Afegeix-ho el seleccionar tots
			opcio=document_ctipica.createElement('option');
			opcio.text=DonaCadena3("--Seleccionar--", "--Seleccionar--", "--Select--");
			opcio.value=-2;
			opcio.selected=true;
			InsertaOpcioEnSelect(select_ctipica, opcio, null);
			opcio=document_ctipica.createElement('option');
			opcio.text=DonaCadena3("---------------", "---------------", "----------");
			opcio.value=-1;
			opcio.selected=false;
			InsertaOpcioEnSelect(select_ctipica, opcio, null);
			
			//I ara els valors
			var ultim_valor_usat=-1;
			for(var j=0; j<array_index.length; j++)
			{					
				//En l'array hi poden haver-hi repeticions					
				if(ultim_valor_usat!=array_index[j])
				{
					opcio=document_ctipica.createElement('option');
					opcio.text=capa_consulta_tipica_intern[i_ctipica_capa].proj_camp[i][array_index[j]].valor;
					opcio.value=array_index[j];
					opcio.selected=false;
					InsertaOpcioEnSelect(select_ctipica, opcio, null);
					ultim_valor_usat=array_index[j];
				}
			}
		}			
	}
}

function PortamAAmbitConsultaTipica(i_ctipica, i_ctipica_capa, i_camp_ctipica, valor)
{

	if (capa_consulta_tipica_intern.length && i_camp_ctipica>=0 && valor>=0)
	{
		CTipicaCapa[i_ctipica]=i_ctipica_capa;
		CTipicaValor=valor;
		if (ParamCtrl.FlagsLlegenda&lliga_visible_amb_ctipica)
		{
			if (PosaVisibleIConsultableCapaConsultaTipica(i_ctipica)==0)
			{
				RevisaEstatsCapes();
				CreaLlegenda();
			}
		}
		EstableixNouCRSEnv(capa_consulta_pregunta_servidor[i_ctipica_capa].CRS, capa_consulta_tipica_intern[i_ctipica_capa].proj_camp[i_camp_ctipica][valor].env);
		PortamAAmbit(capa_consulta_tipica_intern[i_ctipica_capa].proj_camp[i_camp_ctipica][valor].env);
		PosaLlistaValorsConsultesTipiquesAlPrincipi(i_ctipica);
	}
}

function PortamAAmbitConsultaTipicaCompleta(i_ctipica, capa, valor)
{
    if (ParamCtrl.ConsultaTipica[i_ctipica].TipusConsultaTipica==ctipica_completa)
    {
	var form_ctipica=eval("this.document.ctipica"+i_ctipica);
	if (form_ctipica && form_ctipica.capa)
	{
		CTipicaCapa[i_ctipica]=capa;
	    	PortamAAmbitConsultaTipica(i_ctipica, capa, 0, valor);
		for (var i=0; i<capa_consulta_tipica_intern.length+3; i++)
		{
		 	if (i==CTipicaCapa[i_ctipica])
			    form_ctipica.capa[i].checked=true;
			else
			    form_ctipica.capa[i].checked=false;
		}
		form_ctipica.retallar[2].disabled=false;
	}
    }
}

function DonaEnvDeXYAmpleAlt(x, y, ample, alt)
{
var env=new CreaExtent(x-ample/2, x+ample/2, y-alt/2, y+alt/2);
	return env;
}

function DonaEnvDeMinMaxXY(minx, maxx, miny, maxy)
{
var env=new CreaExtent(minx, maxx, miny, maxy);
	return env;
}

function SeleccionaRadialPuntCentralConsultaTipica(i_ctipica)
{
    if (ParamCtrl.ConsultaTipica[i_ctipica].TipusConsultaTipica==ctipica_completa)
    {
	var form_ctipica=eval("this.document.ctipica"+i_ctipica);
	if (form_ctipica && form_ctipica.capa)
	{
		for (var i=0; i<capa_consulta_tipica_intern.length+3; i++)
		    form_ctipica.capa[i].checked=false;
	        form_ctipica.capa[capa_consulta_tipica_intern.length].checked=true;
	}
    }
}

function SeleccionaRadialPuntCentralConsultesTipiques()
{
	for (var i=0; i<ParamCtrl.ConsultaTipica.length; i++)
		SeleccionaRadialPuntCentralConsultaTipica(i);
	}

function ModificaAmpleIAltFactor(ctipica, factor)
{
	ctipica.ample.value=OKStrOfNe(parseFloat(ctipica.ample.value)*factor,ParamCtrl.NDecimalsCoordXY);
	ctipica.alt.value=OKStrOfNe(parseFloat(ctipica.alt.value)*factor,ParamCtrl.NDecimalsCoordXY);
}

function PosaAGrisRetallPerObjecteConsultaTipica(i_ctipica)
{
    if (ParamCtrl.ConsultaTipica[i_ctipica].TipusConsultaTipica==ctipica_completa)
    {
		var form_ctipica=eval("this.document.ctipica"+i_ctipica);
		if (form_ctipica && form_ctipica.capa)
		{
				for (var i=0; i<capa_consulta_tipica_intern.length; i++)
			{
				if (form_ctipica.capa[i].checked)
					break;
			}
			if (i==capa_consulta_tipica_intern.length)
			{
				if (form_ctipica.retallar[2].checked)
			{
						form_ctipica.retallar[2].checked=false;	    		
					form_ctipica.retallar[1].checked=true;
			}
			form_ctipica.retallar[2].disabled=true;
			}
		}
    }
}

function PosaAGrisRetallPerObjecteConsultesTipiques()
{
	for (var i=0; i<ParamCtrl.ConsultaTipica.length; i++)
		PosaAGrisRetallPerObjecteConsultaTipica(i);
}

//var ctipica_capa=0; ara és CTipicaCapa[i_ctipica]
var CTipicaOffset=2;  //És una constant per saltar el text "seleccioneu"
var CTipicaValor=-CTipicaOffset;

function CanviaLlistaCapaConsultaTipica(i_ctipica)
{
    if (capa_consulta_tipica_intern.length)
    {
		var form_ctipica=eval("this.document.ctipica"+i_ctipica);
		if (form_ctipica && form_ctipica.capa)
		{
			CTipicaCapa[i_ctipica]=form_ctipica.capa.selectedIndex;
			CTipicaValor=-CTipicaOffset;		
			CreaConsultaTipica(i_ctipica);
		}
    }
}


function PosaConsultaTipicaDesplegableAlPrincipi(i_ctipica)
{
    if (capa_consulta_tipica_intern.length)
    {
		var form_ctipica=eval("this.document.ctipica"+i_ctipica);
		if (form_ctipica)
		{
			if(capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].id_camp)		
			{
				var form_ctipica_valor=eval("form_ctipica.valor"+(capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].camps.length-1));
				if(form_ctipica_valor)
				{
					CTipicaValor=-CTipicaOffset;
					form_ctipica_valor.selectedIndex=0;
					ActualitzaComboConsultaTipicaSeguents(i_ctipica, CTipicaCapa[i_ctipica], 
						(capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].camps.length-1), -2);
				}
			}
			else
			{
				if(form_ctipica.valor)
				{
					CTipicaValor=-CTipicaOffset;
					form_ctipica.valor.selectedIndex=0;
				}
			}
		}
    }
}

function PosaConsultaTipicaCercadorAlPrincipi(win, i_ctipica)
{
    if (win && win.document && capa_consulta_tipica_intern.length)
    {
		var form_ctipica=eval("this.document.ctipica"+i_ctipica);
		
		if (form_ctipica)
		{
			var valor=eval("this.document.ctipica"+i_ctipica+".llavor"+i_ctipica);
			if (valor)
			{
				valor.value="";
				hideLayer(getLayer(this, NomLayerLlista[i_ctipica]));
			}
		}
    }
}

function PosaLlistaValorsConsultesTipiquesAlPrincipi(excepte_i_ctipica)
{
	for (var i_ctipica=0; i_ctipica<ParamCtrl.ConsultaTipica.length; i_ctipica++)
	{
		if (i_ctipica==excepte_i_ctipica)
			continue;
		if (ParamCtrl.ConsultaTipica[i_ctipica].TipusConsultaTipica==ctipica_desplegables)
			PosaConsultaTipicaDesplegableAlPrincipi(i_ctipica);
		else if (ParamCtrl.ConsultaTipica[i_ctipica].TipusConsultaTipica==ctipica_cercador)
			PosaConsultaTipicaCercadorAlPrincipi(this, i_ctipica);
		else if (ParamCtrl.ConsultaTipica[i_ctipica].TipusConsultaTipica==ctipica_inicials)
			CanviaInicialCapaConsultaTipica(i_ctipica, null);
	}
}

var InicialConsultaTipica="A";
function CanviaInicialCapaConsultaTipica(i_ctipica, s)
{
	if (capa_consulta_tipica_intern.length)
	{
		InicialConsultaTipica=s;		
		CreaConsultaTipica(i_ctipica);
	}
}

function CreaConsultaTipica(i_ctipica)
{
var cdns=new Array();
var s;

	
	cdns.push("<FORM NAME=\"ctipica",i_ctipica,"\" onSubmit=\"return false;\">\n\n");
	
	if ((ParamCtrl.ConsultaTipica[i_ctipica].TipusConsultaTipica&ctipica_desplegables || ParamCtrl.ConsultaTipica[i_ctipica].TipusConsultaTipica&ctipica_inicials) 
	&& capa_consulta_tipica_intern.length)
	{
		//Camp final seleccionable Anar a ""
		if ((ParamCtrl.ConsultaTipica[i_ctipica].NomCapa==null && capa_consulta_tipica_intern.length==1) || 
		   (ParamCtrl.ConsultaTipica[i_ctipica].NomCapa!=null && ParamCtrl.ConsultaTipica[i_ctipica].NomCapa.length==1))
		{
			cdns.push("<span class=\"text_general_consulta\">",
			    DonaCadena(capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].camps[0].previ) , " </span><span class=\"nom_capa_consulta\">" ,
			    DonaCadena(capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].camps[0].desc) , "</span> ");

			cdns.push("<span class=\"text_general_consulta\">");
			if(capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].camps.length>1  && ParamCtrl.ConsultaTipica[i_ctipica].TipusConsultaTipica&ctipica_desplegables)
			    cdns.push("<br>&nbsp;&nbsp;&nbsp;&nbsp;",DonaCadena(capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].camps[capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].camps.length-1].previ));
			else
			    cdns.push(DonaCadena(capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].camps[0].post));
			cdns.push("</span>");
		}
		else //Hi ha més d'una capa
		{	
			cdns.push("<span class=\"text_general_consulta\">",
			   DonaCadena(capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].camps[0].previ), " </span>" ,
			   "  <select name=\"capa\" class=\"desplegable\" onChange=\'CanviaLlistaCapaConsultaTipica(",i_ctipica,");\'>");
			if (ParamCtrl.ConsultaTipica[i_ctipica].NomCapa==null)
			{
				for (var i=0; i<capa_consulta_tipica_intern.length; i++)
				{
        		    	    cdns.push("  <option VALUE=\"" , i , "\"" , ((i==CTipicaCapa[i_ctipica]) ? " SELECTED" : "") , ">" ,
				       DonaCadena(capa_consulta_tipica_intern[i].camps[0].desc) , "</option>");
				}
			}
			else
			{
				for (var i_nom_capa=0; i_nom_capa<ParamCtrl.ConsultaTipica[i_ctipica].NomCapa.length; i_nom_capa++)
				{			        	
					for (var i=0; i<capa_consulta_tipica_intern.length; i++)
		        	{
						if (capa_consulta_tipica_intern[i].nom==ParamCtrl.ConsultaTipica[i_ctipica].NomCapa[i_nom_capa])
							break;
		        	}
		        	if (i==capa_consulta_tipica_intern.length)
					{						
						s=DonaCadena3("La capa ", "La capa ", "Layer ") + 
						ParamCtrl.ConsultaTipica[i_ctipica].NomCapa[i_nom_capa] +
						DonaCadena3(" per a mostrar al frame ", " para mostrar en el frame ", " to be shown in the frame ") +
						ParamCtrl.ConsultaTipica[i_ctipica].nom + 
						DonaCadena3(" no és a la llista de capes amb consulta típica.", 
							    " no está en la lista de capas con consulta típica.", 
							    " is not in the typical query layer list.");
						alert(s);								 
					}
			        else
			        {
	    	            cdns.push("  <option VALUE=\"" , i , "\"" , ((i==CTipicaCapa[i_ctipica]) ? " SELECTED" : "") , 
					       ">" , DonaCadena(capa_consulta_tipica_intern[i].camps[0].desc) , "</option>");
			        }
               	}	
			}
			cdns.push("  </SELECT><span class=\"text_general_consulta\">");
			if(capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].camps.length>1 && ParamCtrl.ConsultaTipica[i_ctipica].TipusConsultaTipica&ctipica_desplegables)
			    cdns.push("<br>&nbsp;&nbsp;&nbsp;&nbsp;",
			         DonaCadena(capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].camps[capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].camps.length-1].previ));
			else
			    cdns.push("&nbsp;",DonaCadena(capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].camps[0].post));
			cdns.push("</span>");
		}
		
		//Valors del camp si només ni ha un o valors del camp n, n-1,...1 
		if (capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]])
		{
		    if (ParamCtrl.ConsultaTipica[i_ctipica].TipusConsultaTipica&ctipica_inicials)
		    {
				//Crear les llistes de lletres.
				cdns.push("<br><span class=\"lletres_consulta_inicials\">");
				for (var i=0; i<capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].proj_camp[0].length; i++)
				{
					if (i==0 || capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].proj_camp[0][i].valor.substring(0,1)!=
								 capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].proj_camp[0][i-1].valor.substring(0,1))
					{
						if (i!=0)
						   cdns.push("\n");
						//Faig que la lletres seleccionada estigui en negreta.
						if (capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].proj_camp[0][i].valor.substring(0,1)==InicialConsultaTipica)
						   cdns.push("<b>");
						cdns.push("<a href=\"javascript:void(0);\" onClick=\'CanviaInicialCapaConsultaTipica(",i_ctipica,
						   ",\"" , (capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].proj_camp[0][i].valor.substring(0,1)) , "\");\'>",
						   (capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].proj_camp[0][i].valor.substring(0,1)) ,"</a>");									
						if (capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].proj_camp[0][i].valor.substring(0,1)==InicialConsultaTipica)
							cdns.push("</b>");
					}
				}
				cdns.push("<br></span><span class=\"valors_consulta_inicials\"><ul>");
	
				//Crear les llistes d'atributs de la inicial seleccionada.
				for (var i=0; i<capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].proj_camp[0].length; i++)
				{
					if (capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].proj_camp[0][i].valor.substring(0,1)==InicialConsultaTipica)
					   break;
				}
				for (; i<capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].proj_camp[0].length; i++)
				{
					if (capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].proj_camp[0][i].valor.substring(0,1)!=InicialConsultaTipica)
					   break;
					cdns.push("\n<li><a href=\"javascript:void(0);\" onClick=\"PortamAAmbitConsultaTipica(",
					   i_ctipica,", ",CTipicaCapa[i_ctipica],", 0, ",i,");\">",
					   capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].proj_camp[0][i].valor,
					   "</a>");
				}
				cdns.push("\n</ul></span>");
		    }
		    else  //  if (ParamCtrl.ConsultaTipica[i_ctipica].TipusConsultaTipica&ctipica_desplegables)
		    {
				var valor_opcio="";
				if(capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].camps.length>1)
				{
					for (var j=capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].camps.length-1; j>0; j--)
					{
						cdns.push("<span class=\"nom_camp_consulta\">&nbsp;" ,
						  DonaCadena(capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].camps[j].desc) ,
						  " </span><span class=\"text_general_consulta\">",
						  DonaCadena(capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].camps[j].post),
						  "</span>");
						valor_opcio="document.ctipica"+i_ctipica+".valor"+j+".options[document.ctipica"+i_ctipica+".valor"+j+".selectedIndex].value";
						cdns.push("  <select name=\"valor",j,"\" class=\"desplegable\" onChange=\"PortamAAmbitConsultaTipica(",i_ctipica,", ",
							   CTipicaCapa[i_ctipica],", ",j,", ",valor_opcio,");",
							   "ActualitzaComboConsultaTipicaSeguents(",i_ctipica,", ",CTipicaCapa[i_ctipica],", ",j,
							   ", ",valor_opcio,");\">" ,
							   "  <option VALUE=\"-2\"" , ((-1==CTipicaValor) ? " SELECTED" : "") , ">" , 
							   (DonaCadena3("--Seleccionar--", "--Seleccionar--", "--Select--")) , "</option>" ,
							   "  <option VALUE=\"-1\">" , (DonaCadena3("---------------", "---------------", "----------")) , "</option>");
						for (var i=0; i<capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].proj_camp[j].length; i++)
							cdns.push("  <option VALUE=\"" , i , "\"" , ((i==CTipicaValor) ? " SELECTED" : "") , ">" , 
								capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].proj_camp[j][i].valor , "</option>");
						cdns.push("  </SELECT>");
						if(j>1)
						   cdns.push("<br><span class=\"text_general_consulta\">&nbsp;&nbsp;&nbsp;&nbsp;",
							   DonaCadena(capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].camps[j-1].previ),"</span>");
					}
					cdns.push("<br><span class=\"text_general_consulta\">",
						DonaCadena(capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].camps[0].post),
						"</span>");
				}
				valor_opcio="document.ctipica"+i_ctipica+".valor"+0+".options[document.ctipica"+i_ctipica+".valor"+0+".selectedIndex].value";
				cdns.push("  <select name=\"valor0\" class=\"desplegable\" onChange=\"PortamAAmbitConsultaTipica(",i_ctipica,", ",
				   CTipicaCapa[i_ctipica] , ", 0, " , valor_opcio , ");\">" ,
				   "  <option VALUE=\"-2\"" , ((-1==CTipicaValor) ? " SELECTED" : "") , ">" , 
				   (DonaCadena3("--Seleccionar--", "--Seleccionar--", "--Select--")) , "</option>" ,
				   "  <option VALUE=\"-1\">" , (DonaCadena3("---------------", "---------------", "----------")) , "</option>");
				for (var i=0; i<capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].proj_camp[0].length; i++)
			    	cdns.push("  <option VALUE=\"" , i , "\"" , ((i==CTipicaValor) ? " SELECTED" : "") , ">" , 
			    		capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].proj_camp[0][i].valor , "</option>");
				cdns.push("  </SELECT>");
		    }
		}
		cdns.push("</FORM>");
	}
	else if (ParamCtrl.ConsultaTipica[i_ctipica].TipusConsultaTipica==ctipica_cercador)
	{
		cdns.push("<span class=\"text_general_consulta\">",
		   DonaCadena(capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].camps[0].previ), 
		   "</span> <input class=\"InputPetit\" autocomplete=\"off\" type=text name=\"llavor",i_ctipica,
		   "\" size=\"55\" onkeyup=\"WindowDelEvent=this;TeclaLLavor(event);\" onfocus=\"SeleccionaEditLlavor(this);\"></FORM>\n",
		   (textHTMLiframeLayer("AreaLlista"+i_ctipica, 60, 20, 364, 70, true)),
		   (textHTMLLayer("AreaLlista"+i_ctipica, 60, 20, 364, 70, null, true, true, null, "--Waiting--")));
	}
	else if (ParamCtrl.ConsultaTipica[i_ctipica].TipusConsultaTipica==ctipica_completa)
	{
		cdns.push("<table border=0 cellspacing=0 cellpadding=0>" ,
		   "<tr><td rowspan=",(capa_consulta_tipica_intern.length+4),
		   "><img src=",
		   (AdrecaBaseSRC ? (DonaAdrecaSenseBarraFinal(AdrecaBaseSRC)+"/") : ""), 
		   "1tran.gif height=1 width=5></td>",
		   "<td colspan=2><FONT FACE=\"Verdana, Arial, Helvetica, sans-serif\" size=2><b>Selecció de l'àmbit:</b></td></tr>");
		//(*) Per ··· [    ][v]
		var i;
		for (i=0; i<capa_consulta_tipica_intern.length; i++)
		{
			cdns.push("<tr><td><FONT FACE=\"Verdana, Arial, Helvetica, sans-serif\" size=2><input type=\"radio\" name=\"capa\" value=\"" , i , 
				"\" onClick='PortamAAmbitConsultaTipicaCompleta(",i_ctipica,", ",i,", 0, document.ctipica",i_ctipica,".valor",i,
				".selectedIndex);'> Per " , DonaCadena(capa_consulta_tipica_intern[i].camps[0].desc) , ": </td>" ,
				"<td><select name=\"valor",i,"\" onChange='PortamAAmbitConsultaTipicaCompleta(",i_ctipica,", ",i,
				", 0, document.ctipica",i_ctipica,".valor",i,".selectedIndex);'>");
			for (var j=0; j<capa_consulta_tipica_intern[i].proj_camp[0].length; j++)
				cdns.push("  <option VALUE=\"" , j , "\"" , ((i==CTipicaCapa[i_ctipica] && j==CTipicaValor) ? " SELECTED" : "") , ">" , 
					capa_consulta_tipica_intern[i].proj_camp[0][j].valor , "</option>");
			cdns.push("  </SELECT></td></tr>");
		}
		
    		//(*) Per punt central: x:[ ] y:[ ] ample: [ ] alt: [ ] [Anar-hi] [+10%][x2][/2]
		cdns.push("<tr><td valign=top><FONT FACE=\"Verdana, Arial, Helvetica, sans-serif\" size=2><input type=\"radio\" name=\"capa\" value=\"" , i , 
		"\" CHECKED onClick='PosaAGrisRetallPerObjecteConsultaTipica(this);'> Per punt central:</td><td valign=top><FONT FACE=\"Verdana, Arial, Helvetica, sans-serif\" size=2>x: <input type=\"text\" size=\"15\" name=\"x\" value=\"\"> y: <input type=\"text\" size=\"15\" name=\"y\" value=\"\"><br>" ,
		"ample: <input type=\"text\" size=\"8\" name=\"ample\" value=\"\"> alt: <input type=\"text\" size=\"8\" name=\"alt\" value=\"\">" ,
		"<input TYPE=\"button\" VALUE=\"Anar-hi\" onClick=\"PortamAAmbit(DonaEnvDeXYAmpleAlt(parseFloat(document.ctipica",i_ctipica,".x.value), parseFloat(document.ctipica",i_ctipica,".y.value), parseFloat(document.ctipica",i_ctipica,".ample.value), parseFloat(document.ctipica",i_ctipica,".alt.value)));document.ctipica",i_ctipica,".capa[",i,"].checked=true;\">" ,
		"<input TYPE=\"button\" VALUE=\"+10%\" onClick=\"ModificaAmpleIAltFactor(document.ctipica",i_ctipica,", 1.1);PortamAAmbit(DonaEnvDeXYAmpleAlt(parseFloat(document.ctipica",i_ctipica,".x.value), parseFloat(document.ctipica",i_ctipica,".y.value), parseFloat(document.ctipica",i_ctipica,".ample.value), parseFloat(document.ctipica",i_ctipica,".alt.value)));document.ctipica",i_ctipica,".capa[",i,"].checked=true;\">" ,
		"<input TYPE=\"button\" VALUE=\"*2\" onClick=\"ModificaAmpleIAltFactor(document.ctipica",i_ctipica,", 2.0);PortamAAmbit(DonaEnvDeXYAmpleAlt(parseFloat(document.ctipica",i_ctipica,".x.value), parseFloat(document.ctipica",i_ctipica,".y.value), parseFloat(document.ctipica",i_ctipica,".ample.value), parseFloat(document.ctipica",i_ctipica,".alt.value)));document.ctipica",i_ctipica,".capa[",i,"].checked=true;\">" ,
		"<input TYPE=\"button\" VALUE=\"/2\" onClick=\"ModificaAmpleIAltFactor(document.ctipica",i_ctipica,", 0.5);PortamAAmbit(DonaEnvDeXYAmpleAlt(parseFloat(document.ctipica",i_ctipica,".x.value), parseFloat(document.ctipica",i_ctipica,".y.value), parseFloat(document.ctipica",i_ctipica,".ample.value), parseFloat(document.ctipica",i_ctipica,".alt.value)));document.ctipica",i_ctipica,".capa[",i,"].checked=true;\"></td></tr>");
		i++;
		
		//(*) Per envolupant X min: [  ] X max: []  Y min: [] X max: [] [Anar-hi]
		cdns.push("<tr><td valign=top><FONT FACE=\"Verdana, Arial, Helvetica, sans-serif\" size=2><input type=\"radio\" name=\"capa\" value=\"" , i , 
		"\" onClick='PosaAGrisRetallPerObjecteConsultaTipica(this);'> Per envolupant:</td><td valign=top><FONT FACE=\"Verdana, Arial, Helvetica, sans-serif\" size=2>mín X: <input type=\"text\" size=\"15\" name=\"MinX\" value=\"\"> màx X: <input type=\"text\" size=\"15\" name=\"MaxX\" value=\"\"><br>mín Y: <input type=\"text\" size=\"15\" name=\"MinY\" value=\"\"> màx Y: <input type=\"text\" size=\"15\" name=\"MaxY\" value=\"\"> <input TYPE=\"button\" VALUE=\"Anar-hi\" onClick=\"PortamAAmbit(new CreaExtent(parseFloat(document.ctipica",
		i_ctipica,".MinX.value), parseFloat(document.ctipica",i_ctipica,".MaxX.value), parseFloat(document.ctipica",i_ctipica,
		".MinY.value), parseFloat(document.ctipica",i_ctipica,".MaxY.value)));document.ctipica",i_ctipica,".capa[",i,"].checked=true;\"></td></tr>");
		i++;
		
		//(*) Tot l'ambit disponible
		cdns.push("<tr><td colspan=2><FONT FACE=\"Verdana, Arial, Helvetica, sans-serif\" size=2><input type=\"radio\" name=\"capa\" value=\"" , i , 
		"\" onClick=\"PortamAVistaGeneral();document.ctipica",i_ctipica,".capa[",i,
		"].checked=true;\"> Tot l'àmbit disponible <small>(només per a les capes més lleugeres)</small></td></tr>" ,
		"<table>" ,
		"<br><FONT FACE=\"Verdana, Arial, Helvetica, sans-serif\" size=2>",
		"&nbsp;&nbsp;<b>En descarregar:</b><br>" ,
		"&nbsp;<input type=\"radio\" name=\"retallar\" value=\"fulls_sencers\" CHECKED> Obtenir fulls vectorials sencers <small>(força més ràpid)</small><br>" ,
		"&nbsp;<input type=\"radio\" name=\"retallar\" value=\"per_rectangle\"> Retallar per rectangle d'àmbit exacte <small>(més lent)</small><br>" ,
		"&nbsp;<input type=\"radio\" name=\"retallar\" value=\"per_objecte\" DISABLED> Retallar usant l'objecte selecionat <small>(encara més lent)</small><br>" ,
		"</FONT></FORM>");
	}
	var elem=getLayer(this, ParamCtrl.ConsultaTipica[i_ctipica].nom);
	if (isLayer(elem))
	{
		s=cdns.join("");
		contentLayer(elem, s);
	}
	if (ParamCtrl.ConsultaTipica[i_ctipica].TipusConsultaTipica==ctipica_cercador)
	{
		elem=getLayer(this, "AreaLlista"+i_ctipica);
		borderLayer(elem, "1.0px solid #000000");
		colorLayer(elem, "#FFFFFF");
		llavor_ctipica=eval("this.document.ctipica"+i_ctipica+".llavor"+i_ctipica);
		ActualitzaLlista(llavor_ctipica, i_ctipica, 0);
	}
}

function CreaConsultesTipiques()
{
	for (var i=0; i<ParamCtrl.ConsultaTipica.length; i++)
		CreaConsultaTipica(i);
}

var ajax_ctipica= new Array();
var capa_consulta_tipica_intern = new Array();

function OmpleICarregaConsultaTipica(doc)
{
var root=doc.documentElement;
var i_ctipica=-1, i_camp_ctipica;
var nom_capa="", nom_camp="";
var id_camps_id_tesaure=null;

	if(root && root.hasChildNodes)
  	{
		if(root.tagName=="ConsultaTipica")
		{				    
			//Obtinc el nom i CRS identificador de la capa consulta típica
			nom_capa=root.getAttribute('id_capa');
				//Busco quin index de consulta li pertoca per començar a omplir l'estructura
			for(var i=0; i<capa_consulta_tipica_intern.length; i++)
			{
				if(capa_consulta_tipica_intern[i].nom==nom_capa)
				{	
					i_ctipica=i;
					break;
				}
			}
			if(i_ctipica==-1)
				return;
	
			//Obtinc la taula de identificadors
	
			var taula_id=root.getElementsByTagName('TaulaIdentificadors')[0];
			var camps=taula_id.getElementsByTagName('Camps')[0];
			var n_camps=parseInt(camps.getAttribute("NombreDeCamps"));

	    	if(n_camps>1) //Hi ha registres a la taula d'identificadors
		    {
				capa_consulta_tipica_intern[i_ctipica].id_camp=new Array(n_camps);
				capa_consulta_tipica_intern[i_ctipica].proj_camp=new Array(n_camps);
				id_camps_id_tesaure=new Array(n_camps);
			}
		    else //Només tinc un tesaure
		    {
				capa_consulta_tipica_intern[i_ctipica].id_camp=null;
				capa_consulta_tipica_intern[i_ctipica].proj_camp=new Array(1);
				id_camps_id_tesaure=new Array(1);
			}

			/*Busco el nom dels camps a omplir i els seus tesaures corresponents i els deso en
			  una estructura amb igual ordre que camps de capa_consulta_tipica_intern[i_ctipica] */
			var camp=camps.getElementsByTagName('Camp');
			for(var i=0; i<camp.length; i++)
			{
				i_camp_ctipica=-1;
				nom_camp=camp[i].getAttribute('id_camp');
	
				for(var j=0; j<capa_consulta_tipica_intern[i_ctipica].camps.length; j++)
				{
				   if(capa_consulta_tipica_intern[i_ctipica].camps[j].nom==nom_camp)
				   {
						i_camp_ctipica=j;
						break;
				   }				
				}
				if(i_camp_ctipica==-1)
				   return;
	
				id_camps_id_tesaure[i_camp_ctipica]=new CreaNomIDescripcio(nom_camp, camp[i].getAttribute('id_tesaure'));
			 }

		     //Llegeixo els registres de la Taula d'Identificadors
		     if(n_camps>1)
	    	 {
				var registres=taula_id.getElementsByTagName('Registres')[0];
				var num_regs=parseInt(registres.getAttribute('NombreDeRegistres'));
				for(var z=0; z<n_camps; z++)
				{
				  capa_consulta_tipica_intern[i_ctipica].id_camp[z]=new Array(num_regs);
				}

				for(var i=0; i<registres.childNodes.length; i++)
				{
					var reg=registres.childNodes[i];
				
					if(reg.tagName=="Registre")
					{			
						var index=parseInt(reg.getAttribute('id_reg'));	
						var valors=reg.getElementsByTagName('Valor');

						for(var j=0; j<valors.length; j++)
						{			   
						   var valor_id=parseInt(valors[j].childNodes[0].nodeValue);

						   for(var z=0; z<id_camps_id_tesaure.length; z++)
						   {
								if(id_camps_id_tesaure[z].nom==valors[j].getAttribute('id_camp'))
								{				    
									capa_consulta_tipica_intern[i_ctipica].id_camp[z][index]=new CreaItemIdentificadorConsultaTipica(index, valor_id);
									break;
								}
							}
						}
				    }
				}
			}

		 	//Començo a llegir els tesaures de cada un dels camps
			var tesaures=root.getElementsByTagName('Tesaure');
			for(var i=0; i<tesaures.length; i++)
			{
				var nom_tesaure=tesaures[i].getAttribute('id_tesaure');
				i_camp_ctipica=-1;
				for(var j=0; j<id_camps_id_tesaure.length; j++)
				{
					if(id_camps_id_tesaure[j].desc==nom_tesaure)
					{
						i_camp_ctipica=j;
						break;
					}
				}
				if(i_camp_ctipica==-1)
				   return;

				//Ja tinc l'índex d'on haig de desar l'estructura projecció del camp
				var registres=tesaures[i].getElementsByTagName('Registres')[0];
				var num_regs=parseInt(registres.getAttribute('NombreDeRegistres'));

				capa_consulta_tipica_intern[i_ctipica].proj_camp[i_camp_ctipica]=new Array(num_regs);
			
				//Començo a llegir els registres de tesaure
				for(var z=0; z<registres.childNodes.length; z++)
				{
					var reg=registres.childNodes[z];
						
					if(reg.tagName=="Registre")
					{			
						var index=parseInt(reg.getAttribute('id_reg'));	
						var valor=reg.getElementsByTagName('Valor')[0];
						var bbox=reg.getElementsByTagName('BoundingBox')[0];			
						var env_reg= new CreaExtent(0,0,0,0);
						env_reg.MinX=parseFloat(bbox.getAttribute('minx'));
						env_reg.MinY=parseFloat(bbox.getAttribute('miny'));
						env_reg.MaxX=parseFloat(bbox.getAttribute('maxx'));
						env_reg.MaxY=parseFloat(bbox.getAttribute('maxy'));
			
						capa_consulta_tipica_intern[i_ctipica].proj_camp[i_camp_ctipica][index]=
							new CreaItemProjeccioConsultaTipica(valor.childNodes[0].nodeValue,
													env_reg);
					}
				}
			}						
			n_capes_ctipica++;
		}
	}
   	if(capa_consulta_tipica_intern.length>0 && n_capes_ctipica==capa_consulta_tipica_intern.length)
   	{
		//Ja les tinc totes carregades i ja puc iniciar les consultes típiques
		IniciaConsultesTipiques();
		CreaConsultesTipiques();
		if(dades_pendents_accio)
		{
			dades_pendents_accio=false;
			if(Accio && Accio.accio&accio_validacio)
			{			
				//Haig de tornar a fer un CreaLLegenda() perquè he tocat l'estat de les capes						
				CreaLlegenda();
				BuscaValorAConsultesTipiques();
				if(Accio.coord)
				{
					var event_de_click= SimulaEventOnClickPerConloc();
					ClickSobreVista(event_de_click);
				}
				else 
				{
					//Mostro un missatge de que comencin a buscar amb les eines del navegador
					alert(DonaCadena3("Usa les eines del navegador per situar-te sobre la vista.\nA continuació fés clic sobre la vista per determinar la coordenada i la informació del punt a validar.\nPer finalitzar, prem [Validar Coordenada] o [Cancel·lar] des de la finestra de validació.",
					"Utiliza las herramientas del navegador para situarte sobre la vista.\nA continuación haz clic sobre la vista para determinar la coordenada y la información del punto a validar.\nPara finalizar aprieta [Validar Coordenada] o [Cancelar] desde la ventana de validación.",
					"You have to use browser tools to place on the view.\n Later, you have to click on the view to determine the coordinate\nand the information of the point of validating\n.To finish you have to click [Validate coordinate] or [Cancel] from the validation window.")); 				
					Accio.coord=new CreaPunt2D(0,0);
				}
			}
		}
	}
}//Fi de OmpleICarregaConsultaTipica()


function CarregaConsultesTipiques()
{
var s="";

	n_capes_ctipica=0;

	if (ParamCtrl.ConsultaTipica && capa_consulta_pregunta_servidor)
	{
		for (var i=0; i<capa_consulta_pregunta_servidor.length; i++)
		{
	   		capa_consulta_tipica_intern[i]= new CreaConsultaTipicaIntern(capa_consulta_pregunta_servidor[i].servidor, 
				capa_consulta_pregunta_servidor[i].nom, 
				capa_consulta_pregunta_servidor[i].camps, 
				capa_consulta_pregunta_servidor[i].CRS, null, null);
		}
		//Primer creo las capes i desprès torno a fer un bucle per demanar-les
		//sinó em trobava amb problemes de que no estaven totes creades i algunes 
		//coses es feien massa vegades
		for (var i=0; i<capa_consulta_pregunta_servidor.length; i++)
		{
			var cdns=new Array();
		   	ajax_ctipica[i]=new Ajax();
			cdns.push("VERSION=1.2.0&REQUEST=DonaProjeccioConsultaTipica&CRS=",
				capa_consulta_pregunta_servidor[i].CRS,
				"&INFO_FORMAT=text/xml&QUERY_LAYERS=",
				capa_consulta_pregunta_servidor[i].nom);
			s=AfegeixNomServidorARequest(capa_consulta_pregunta_servidor[i].servidor, cdns.join(""), true);
			CreaIOmpleEventConsola("DonaProjeccioConsultaTipica", s, TipusEventDonaProjeccioConsultaTipica);
			ajax_ctipica[i].doGet(s, OmpleICarregaConsultaTipica, 'text/xml', null);
		}
	}
}//Fi de CarregaConsultesTipiques()

function DonaCoordXCentralDeEnv(env)
{
	return ((env.MaxX-env.MinX)/2)+env.MinX;
}
function DonaCoordYCentralDeEnv(env)
{
	return ((env.MaxY-env.MinY)/2)+env.MinY;
}
					
function BuscaValorAConsultesTipiques()
{
var trobat=false;

	if(Accio && capa_consulta_tipica_intern.length>0 && Accio.valors && Accio.valors.length>0)
	{
	   //Per cada una de les capes a validar	   
	   for(var i_capa_accio=0; i_capa_accio<Accio.valors.length; i_capa_accio++)
	   {
	      for(var i_tipica=0; i_tipica<capa_consulta_tipica_intern.length; i_tipica++)
	      {
	   	 //Busco si té una consulta típica amb la que pugui validar el valor demanat
		 if(Accio.capes[i_capa_accio]==capa_consulta_tipica_intern[i_tipica].nom)
		 {
		    //Ara haig de buscar el camp a dins de la consulta típica
		    //Busco el camp a validar dins dels camps de la consulta típica de la capa
		    for(var i_camp=0; i_camp<capa_consulta_tipica_intern[i_tipica].camps.length; i_camp++)
		    {
			if(Accio.camps[i_capa_accio]==capa_consulta_tipica_intern[i_tipica].camps[i_camp].nom)
			{
			     //he trobat el camp
			     if(capa_consulta_tipica_intern[i_tipica].proj_camp && capa_consulta_tipica_intern[i_tipica].proj_camp[i_camp])
			     {
				   for(var i_valor=0; i_valor<capa_consulta_tipica_intern[i_tipica].proj_camp[i_camp].length; i_valor++)
				   {
					if(Accio.valors[i_capa_accio]==capa_consulta_tipica_intern[i_tipica].proj_camp[i_camp][i_valor].valor)
					{						
						if(Accio.coord==null)
						{
						    Accio.coord=new CreaPunt2D(DonaCoordXCentralDeEnv(capa_consulta_tipica_intern[i_tipica].proj_camp[i_camp][i_valor].env),
									DonaCoordYCentralDeEnv(capa_consulta_tipica_intern[i_tipica].proj_camp[i_camp][i_valor].env));
						}						
						trobat=true;
						break;
					}
				   }
				   if(i_valor==capa_consulta_tipica_intern[i_tipica].proj_camp[i_camp].length && Accio.valors[i_capa_accio]!=null && Accio.valors[i_capa_accio]!="")
				   {
				   	alert(DonaCadena3("El valor "+Accio.valors[i_capa_accio]+" del camp "+
								Accio.camps[i_capa_accio]+" de la capa "+Accio.capes[i_capa_accio]+" és incorrecte",
				     		"El valor "+Accio.valors[i_capa_accio]+" del campo "+
								Accio.camps[i_capa_accio]+" de la capa "+Accio.capes[i_capa_accio]+" es incorrecto",
						"The value "+Accio.valors[i_capa_accio]+" of the field "+
								Accio.camps[i_capa_accio]+" of the layer "+Accio.capes[i_capa_accio]+" is incorrect"));
				   }   
			     }
			     break;
		        }			
		    }		     
		    break; //aquest camp ja l'he validat i haig de passar a validar la següent capa
		    //else if(i_camp==capa_consulta_tipica_intern[i_tipica].camps.length)
		    //No he trobat el camp a dins de la consulta típica i per tant no he pogut validar		     
		    //Si he arribat aquí és perquè el valor indicat és incorrecte, he trobat la capa però no he trobat el valor	     	    
		  }
	      }	      	      
	   }
	}
	return trobat;
}//Fi de BuscaValorAConsultesTipiques()

function IniciaConsultesTipiques()
{
var valor;

	if(capa_consulta_tipica_intern.length>0)
	{
		//Per cada finestra de consulta típica

		for (var i_ctipica=0; i_ctipica<ParamCtrl.ConsultaTipica.length; i_ctipica++)
		{
			if (ParamCtrl.ConsultaTipica[i_ctipica].NomCapa)
			{
				for (CTipicaCapa[i_ctipica]=0; CTipicaCapa[i_ctipica]<capa_consulta_tipica_intern.length; CTipicaCapa[i_ctipica]++)
				{
					if (capa_consulta_tipica_intern[CTipicaCapa[i_ctipica]].nom==ParamCtrl.ConsultaTipica[i_ctipica].NomCapa[0])
						break;
				}
				if (CTipicaCapa[i_ctipica]==capa_consulta_tipica_intern.length)
				{
					var s=DonaCadena3("La capa", "La capa", "Layer") + 
						ParamCtrl.ConsultaTipica[i_ctipica].NomCapa[0] +
						DonaCadena3(" per a mostrar al frame ", " para mostrar en el frame ", " to be shown in the frame ") +
						ParamCtrl.ConsultaTipica[i_ctipica].nom + 
						DonaCadena3(" no és a la llista de capes amb consulta típica.", 
							    " no está en la lista de capas con consulta típica.", 
							    " is not in the typical query layer list.");
					alert(s);
				}
			}
			else
				CTipicaCapa[i_ctipica]=0;
		
			if (ParamCtrl.ConsultaTipica[i_ctipica].TipusConsultaTipica==ctipica_cercador)
			{
				var i_llista=0;
				LlistaCadenes[i_ctipica]=new Array();
				if (ParamCtrl.ConsultaTipica[i_ctipica].NomCapa==null)
				{
					if (capa_consulta_tipica_intern.length==1)
					{
						if(capa_consulta_tipica_intern[0].id_camp)
						{							
							var i_proj=0;
							//Totes les columnnes de id_camp tenen els mateixos registres --> Per cada registre
							for (var i=0; i<capa_consulta_tipica_intern[0].id_camp[0].length; i++, i_llista++)
							{								
								//Per cada camp busco el seu valor que possarè a llista
								valor="";
								for(var j=0; j<capa_consulta_tipica_intern[0].camps.length; j++)
								{
									i_proj=capa_consulta_tipica_intern[0].id_camp[j][i].id;
									if(j==0)
										valor=capa_consulta_tipica_intern[0].proj_camp[j][i_proj].valor;
									else
										valor+=" (" + capa_consulta_tipica_intern[0].proj_camp[j][i_proj].valor + ")";
								}
								LlistaCadenes[i_ctipica][i_llista]=valor;
							}
						}
						else
						{
							for (var i=0; i<capa_consulta_tipica_intern[0].proj_camp[0].length; i++, i_llista++)
							{
								LlistaCadenes[i_ctipica][i_llista]=capa_consulta_tipica_intern[0].proj_camp[0][i].valor;
							}
						}
					}
					else
					{
						for (var i_tipica_capa=0; i_tipica_capa<capa_consulta_tipica_intern.length; i_tipica_capa++)
						{
							if(capa_consulta_tipica_intern[i_tipica_capa].id_camp)
							{							
								var i_proj=0;
								//Totes les columnnes de id_camp tenen els mateixos registres --> Per cada registre
								for (var i=0; i<capa_consulta_tipica_intern[i_tipica_capa].id_camp[0].length; i++, i_llista++)
								{								
									//Per cada camp busco el seu valor que possarè a llista
									valor="";
									for(var j=0; j<capa_consulta_tipica_intern[i_tipica_capa].camps.length; j++)
									{
										i_proj=capa_consulta_tipica_intern[i_tipica_capa].id_camp[j][i].id;
										if(j==0)
											valor=capa_consulta_tipica_intern[i_tipica_capa].proj_camp[j][i_proj].valor;
										else
											valor+=" (" + capa_consulta_tipica_intern[i_tipica_capa].proj_camp[j][i_proj].valor + ")";
									}									
									LlistaCadenes[i_ctipica][i_llista]=valor + " ("+DonaCadena(capa_consulta_tipica_intern[i_tipica_capa].camps[0].desc)+")";
								}
							}
							else
							{
								//La consulta només té un camps
								for (var i=0; i<capa_consulta_tipica_intern[i_tipica_capa].proj_camp[0].length; i++, i_llista++)
								{
									LlistaCadenes[i_ctipica][i_llista]=capa_consulta_tipica_intern[i_tipica_capa].proj_camp[0][i].valor + 
									" ("+DonaCadena(capa_consulta_tipica_intern[i_tipica_capa].camps[0].desc)+")";
								}
							}
						}
					}
				}
				else
				{
					//Per totes les capes de la finestra i_ctipica 
					for (var i_nom_capa=0; i_nom_capa<ParamCtrl.ConsultaTipica[i_ctipica].NomCapa.length; i_nom_capa++)
					{
						for (var i_tipica_capa=0; i_tipica_capa<capa_consulta_tipica_intern.length; i_tipica_capa++)
						{
							if (capa_consulta_tipica_intern[i_tipica_capa].nom==ParamCtrl.ConsultaTipica[i_ctipica].NomCapa[i_nom_capa])
								break;
						}
						if (i_tipica_capa==capa_consulta_tipica_intern.length)
						{
							var s=DonaCadena3("La capa", "La capa", "Layer") + 
							ParamCtrl.ConsultaTipica[i_ctipica].NomCapa[i_nom_capa] +
							DonaCadena3(" per a mostrar al frame ", " para mostrar en el frame ", " to be shown in the frame ") +
							ParamCtrl.ConsultaTipica[i_ctipica].nom + 
							DonaCadena3(" no és a la llista de capes amb consulta típica.", 
								    " no está en la lista de capas con consulta típica.", 
								    " is not in the typical query layer list.");
							alert(s);
						}
						else
						{
							if(capa_consulta_tipica_intern[i_tipica_capa].id_camp)
							{							
								//Totes les columnnes de id_camp tenen els mateixos registres --> Per cada registre
								var i_proj=0;
								for (var i=0; i<capa_consulta_tipica_intern[i_tipica_capa].id_camp[0].length; i++, i_llista++)
								{								
									//Per cada camp busco el seu valor que possarè a llista
									valor="";									
									for(var j=0; j<capa_consulta_tipica_intern[i_tipica_capa].camps.length; j++)
									{										
										i_proj=capa_consulta_tipica_intern[i_tipica_capa].id_camp[j][i].id;
										if(i_proj>=capa_consulta_tipica_intern[i_tipica_capa].proj_camp[j].length)
											alert("Error: Índex de registre de projecció incorrecte "+
												capa_consulta_tipica_intern[i_tipica_capa].id_camp[j][i].id +
												"de camp "+ j);
										if(j==0)
										{											
											valor=capa_consulta_tipica_intern[i_tipica_capa].proj_camp[j][i_proj].valor;
										}
										else
										{
											valor+=" (" + 
											capa_consulta_tipica_intern[i_tipica_capa].proj_camp[j][i_proj].valor + 
											")";											
										}
									}
									LlistaCadenes[i_ctipica][i_llista]=valor + " ("+DonaCadena(capa_consulta_tipica_intern[i_tipica_capa].camps[0].desc)+")";
								}
							}
							else
							{
								//La consulta només té un camps
								for (var i=0; i<capa_consulta_tipica_intern[i_tipica_capa].proj_camp[0].length; i++, i_llista++)
								{
									LlistaCadenes[i_ctipica][i_llista]=capa_consulta_tipica_intern[i_tipica_capa].proj_camp[0][i].valor + 
									" ("+DonaCadena(capa_consulta_tipica_intern[i_tipica_capa].camps[0].desc)+")";
								}
							}
						}
					}
				}
				IniciaLlista("AreaLlista"+i_ctipica, "llavor"+i_ctipica, i_ctipica);
			}
		}
	}
}//Fi de IniciaConsultesTipiques()

function CalculaMidesVista()
{
var w=0, h=0;
var elem=getLayer(this, "vista");
if (isLayer(elem))
	{
		getRectLayer(elem);
		w=RectGetRectLayer.ample;
		h=RectGetRectLayer.alt;
	}
	if (w>0)
	{
		ParamCtrl.ncol=w-(ParamCtrl.MargeEsqVista+MidaFletxaInclinada*2+MidaFletxaPlana+(ParamCtrl.CoordExtermes ? AmpleTextCoordenada : 0));
		if (w>200)
		    ParamCtrl.ncol+=10;
		if (ParamCtrl.ncol<MidaFletxaPlana+(ParamCtrl.CoordExtermes ? AmpleTextCoordenada*2 : 5))
			ParamCtrl.ncol=MidaFletxaPlana+(ParamCtrl.CoordExtermes ? AmpleTextCoordenada*2 : 5);
	}
	if (h>0)
	{
		ParamCtrl.nfil=h-(ParamCtrl.MargeSupVista+(ParamCtrl.CoordExtermes ? AltTextCoordenada:0)+MidaFletxaInclinada*2+MidaFletxaPlana+AltTextCoordenada+5);
		if (h>200)
		    ParamCtrl.nfil+=18;
		if (ParamCtrl.nfil<MidaFletxaPlana+(ParamCtrl.CoordExtermes ? AltTextCoordenada*2 : 5))
			ParamCtrl.nfil=MidaFletxaPlana+(ParamCtrl.CoordExtermes ? AltTextCoordenada*2 : 5);
	}
}

function ActualitzaEnvParametresDeControl()
{
/*Generalment demandes un ambit que està desplaçat de la malla de píxels. El resultat és que la CGI et retorna
  una imatge 1 píxel més gran del compte. Per prevenir això, decremento en 1. Aquest truco està molts llocs!. Compte!*/
	if (ParamCtrl.NColNFilAuto)
		CalculaMidesVista(this.document);

	if (Math.abs(ParamInternCtrl.EnvActual.MinX-ParamInternCtrl.PuntOri.x+(ParamCtrl.ncol)*ParamInternCtrl.CostatZoomActual/2)<1e-9 &&
		Math.abs(ParamInternCtrl.EnvActual.MaxX-ParamInternCtrl.PuntOri.x-(ParamCtrl.ncol)*ParamInternCtrl.CostatZoomActual/2)<1e-9 &&
		Math.abs(ParamInternCtrl.EnvActual.MinY-ParamInternCtrl.PuntOri.y+(ParamCtrl.nfil)*ParamInternCtrl.CostatZoomActual/2)<1e-9 &&
		Math.abs(ParamInternCtrl.EnvActual.MaxY-ParamInternCtrl.PuntOri.y-(ParamCtrl.nfil)*ParamInternCtrl.CostatZoomActual/2)<1e-9)
		return 0;
	ParamInternCtrl.EnvActual.MinX=ParamInternCtrl.PuntOri.x-(ParamCtrl.ncol)*ParamInternCtrl.CostatZoomActual/2;
	ParamInternCtrl.EnvActual.MaxX=ParamInternCtrl.PuntOri.x+(ParamCtrl.ncol)*ParamInternCtrl.CostatZoomActual/2;
	ParamInternCtrl.EnvActual.MinY=ParamInternCtrl.PuntOri.y-(ParamCtrl.nfil)*ParamInternCtrl.CostatZoomActual/2;
	ParamInternCtrl.EnvActual.MaxY=ParamInternCtrl.PuntOri.y+(ParamCtrl.nfil)*ParamInternCtrl.CostatZoomActual/2;
	return 1;
}

function EstableixNouCRSSiCal()
{
var i_min=ParamCtrl.ImatgeSituacio.length, i_max;

	DonaEnvolupantLongLat(ParamInternCtrl.EnvActual, ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS);
	for (var i=0; i<ParamCtrl.ImatgeSituacio.length; i++)
	{
		if (ParamInternCtrl.EnvLLSituacio[i].MinX-(ParamInternCtrl.EnvLLSituacio[i].MaxX-ParamInternCtrl.EnvLLSituacio[i].MinX)*0.15<env_ll.MinX && ParamInternCtrl.EnvLLSituacio[i].MaxX+(ParamInternCtrl.EnvLLSituacio[i].MaxX-ParamInternCtrl.EnvLLSituacio[i].MinX)*0.15>env_ll.MaxX &&
			ParamInternCtrl.EnvLLSituacio[i].MinY-(ParamInternCtrl.EnvLLSituacio[i].MaxY-ParamInternCtrl.EnvLLSituacio[i].MinY)*0.15<env_ll.MinY && ParamInternCtrl.EnvLLSituacio[i].MaxY+(ParamInternCtrl.EnvLLSituacio[i].MaxY-ParamInternCtrl.EnvLLSituacio[i].MinY)*0.15>env_ll.MaxY &&
                        (i_min==ParamCtrl.ImatgeSituacio.length || 
				(ParamInternCtrl.EnvLLSituacio[i_min].MaxX-ParamInternCtrl.EnvLLSituacio[i_min].MinX)+(ParamInternCtrl.EnvLLSituacio[i_min].MaxY-ParamInternCtrl.EnvLLSituacio[i_min].MinY)>
				(ParamInternCtrl.EnvLLSituacio[i].MaxX-ParamInternCtrl.EnvLLSituacio[i].MinX)+(ParamInternCtrl.EnvLLSituacio[i].MaxY-ParamInternCtrl.EnvLLSituacio[i].MinY) ))
				i_min=i;
	}

	if (i_min==ParamCtrl.ImatgeSituacio.length)
	{
	    //Agafo la més general en aquest cas.
	    i_max=0;
	    for (var i=1; i<ParamCtrl.ImatgeSituacio.length; i++)
	    {
		if ((ParamInternCtrl.EnvLLSituacio[i_max].MaxX-ParamInternCtrl.EnvLLSituacio[i_max].MinX)+
			(ParamInternCtrl.EnvLLSituacio[i_max].MaxY-ParamInternCtrl.EnvLLSituacio[i_max].MinY)<
		    (ParamInternCtrl.EnvLLSituacio[i].MaxX-ParamInternCtrl.EnvLLSituacio[i].MinX)+
			(ParamInternCtrl.EnvLLSituacio[i].MaxY-ParamInternCtrl.EnvLLSituacio[i].MinY))
				i_max=i;
	    }
            i_min=i_max;
	}

	if (ParamInternCtrl.ISituacio!=i_min)
	{
	    if (ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS!=ParamCtrl.ImatgeSituacio[i_min].EnvTotal.CRS)
		CanviaCRS(ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS, ParamCtrl.ImatgeSituacio[i_min].EnvTotal.CRS);
	    ParamInternCtrl.ISituacio=i_min;
		if(ParamCtrl.FuncioCanviProjeccio)
			eval(ParamCtrl.FuncioCanviProjeccio);
	    return 1;
	}

	return 0;
}

function EstableixNouCRSEnv(crs, env)
{
var i_min=ParamCtrl.ImatgeSituacio.length, i_max;
var i_situacio_anterior=ParamInternCtrl.ISituacio;

	for (var i=0; i<ParamCtrl.ImatgeSituacio.length; i++)
	{
		if (crs==ParamCtrl.ImatgeSituacio[i].EnvTotal.CRS &&
		        ParamCtrl.ImatgeSituacio[i].EnvTotal.EnvCRS.MinX-(ParamCtrl.ImatgeSituacio[i].EnvTotal.EnvCRS.MaxX-ParamCtrl.ImatgeSituacio[i].EnvTotal.EnvCRS.MinX)*0.15<env.MinX && ParamCtrl.ImatgeSituacio[i].EnvTotal.EnvCRS.MaxX+(ParamCtrl.ImatgeSituacio[i].EnvTotal.EnvCRS.MaxX-ParamCtrl.ImatgeSituacio[i].EnvTotal.EnvCRS.MinX)*0.15>env.MaxX &&
			ParamCtrl.ImatgeSituacio[i].EnvTotal.EnvCRS.MinY-(ParamCtrl.ImatgeSituacio[i].EnvTotal.EnvCRS.MaxY-ParamCtrl.ImatgeSituacio[i].EnvTotal.EnvCRS.MinY)*0.15<env.MinY && ParamCtrl.ImatgeSituacio[i].EnvTotal.EnvCRS.MaxY+(ParamCtrl.ImatgeSituacio[i].EnvTotal.EnvCRS.MaxY-ParamCtrl.ImatgeSituacio[i].EnvTotal.EnvCRS.MinY)*0.15>env.MaxY &&
                        (i_min==ParamCtrl.ImatgeSituacio.length || 
				(ParamCtrl.ImatgeSituacio[i_min].EnvTotal.EnvCRS.MaxX-ParamCtrl.ImatgeSituacio[i_min].EnvTotal.EnvCRS.MinX)+(ParamCtrl.ImatgeSituacio[i_min].EnvTotal.EnvCRS.MaxY-ParamCtrl.ImatgeSituacio[i_min].EnvTotal.EnvCRS.MinY)>
				(ParamCtrl.ImatgeSituacio[i].EnvTotal.EnvCRS.MaxX-ParamCtrl.ImatgeSituacio[i].EnvTotal.EnvCRS.MinX)+(ParamCtrl.ImatgeSituacio[i].EnvTotal.EnvCRS.MaxY-ParamCtrl.ImatgeSituacio[i].EnvTotal.EnvCRS.MinY) ))
				i_min=i;
	}

	if (i_min==ParamCtrl.ImatgeSituacio.length)
	{
	    //Agafo la més general en aquest cas.
	    i_max=0;
	    for (var i=1; i<ParamCtrl.ImatgeSituacio.length; i++)
	    {
		if (crs==ParamCtrl.ImatgeSituacio[i].EnvTotal.CRS &&
		    ((ParamCtrl.ImatgeSituacio[i_max].EnvTotal.EnvCRS.MaxX-ParamCtrl.ImatgeSituacio[i_max].EnvTotal.EnvCRS.MinX)+
		     (ParamCtrl.ImatgeSituacio[i_max].EnvTotal.EnvCRS.MaxY-ParamCtrl.ImatgeSituacio[i_max].EnvTotal.EnvCRS.MinY)<
		     (ParamCtrl.ImatgeSituacio[i].EnvTotal.EnvCRS.MaxX-ParamCtrl.ImatgeSituacio[i].EnvTotal.EnvCRS.MinX)+
		     (ParamCtrl.ImatgeSituacio[i].EnvTotal.EnvCRS.MaxY-ParamCtrl.ImatgeSituacio[i].EnvTotal.EnvCRS.MinY)))
				i_max=i;
	    }
            i_min=i_max;
	}

	if (ParamInternCtrl.ISituacio!=i_min)
	{
	    if (ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS!=ParamCtrl.ImatgeSituacio[i_min].EnvTotal.CRS)
			CanviaCRS(ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS, ParamCtrl.ImatgeSituacio[i_min].EnvTotal.CRS);		
	    ParamInternCtrl.ISituacio=i_min;
		if(ParamCtrl.FuncioCanviProjeccio)
			eval(ParamCtrl.FuncioCanviProjeccio);
	    return 1;
	}
	return 0;
}

function RepintaMapesIVistes()
{
	ActualitzaEnvParametresDeControl();
	if (ParamInternCtrl.flags&ara_canvi_proj_auto)
	{
		if (EstableixNouCRSSiCal())
			ActualitzaEnvParametresDeControl();
	}
	CreaSituacio();
    CreaVista();
	CreaProjeccio();
	if (ParamCtrl.FlagsLlegenda&amaga_si_fora_ambit || ParamCtrl.FlagsLlegenda&gris_si_fora_ambit)
		CreaLlegenda();
	if (ParamCtrl.ConsultaTipica)
	{
		OmpleXYAmpleAltEnvConsultesTipiquesCompleta(null);
		SeleccionaRadialPuntCentralConsultesTipiques();
		PosaAGrisRetallPerObjecteConsultesTipiques();
	}
}

function CanviaMidaVista()
{
;	if (isLayer(getLayer(this, "vista")))
		if (changeSizeLayers(this)==false)
			return;
	if (ActualitzaEnvParametresDeControl())
	{
		CreaSituacio();
        CreaVista();
		CreaProjeccio();
	}
}

function ComprovaOpcionsAccio()
{
	if(Accio.accio==null)
	{
		alert(DonaCadena3("No s'ha trobat el paràmetre 'REQUEST'", 
				  "No se ha encontrado el parámetro 'REQUEST'",
				  "Cannot find the 'REQUEST' parameter"));
		return false;	
	}
	if(Accio.accio&accio_validacio)
	{
		if(Accio.servidor==null)
		{
			alert(DonaCadena3("No s'ha trobat el paràmetre 'SERVERTORESPONSE'", 
					  "No se ha encontrado el parámetro 'SERVERTORESPONSE'",
					  "Cannot find the 'SERVERTORESPONSE' parameter"));
			return false;	
		}
		if(Accio.capes==null)
		{
			alert(DonaCadena3("No s'ha trobat el paràmetre 'TEST_LAYERS'", 
					  "No se ha encontrado el parámetro 'TEST_LAYERS'",
					  "Cannot find the 'TEST_LAYERS' parameter"));			
			return false;	
		}
		if(Accio.camps==null)
		{
			alert(DonaCadena3("No s'ha trobat el paràmetre 'TEST_FIELDS'", 
					  "No se ha encontrado el parámetro 'TEST_FIELDS'",
					  "Cannot find the 'TEST_FIELDS'  parameter"));
			return false;	
		}
		
		if(Accio.camps.length!=Accio.capes.length)
		{
			alert(DonaCadena3("El nombre de camps no es correspon amb el nombre de capes.", 
					  "El número de campos no se corresponde con el número de capas.", 
					  "Field number is not the same of the number of layers."));
			return false;
		}
		if(Accio.valors && Accio.valors.length!=Accio.capes.length)
		{
			alert(DonaCadena3("El nombre de valors no es correspon amb el nombre de capes.", 
					  "El número de valores no se corresponde con el número de capas.", 
					  "Field values number is not the same of the number of layers."));	  
			return false;
		}		
		
		if(capa)
		{		
			//Cal marcar com a consultables les capes sol·licitades en l'acció i la resta com a no consultables
			//Ho faré mentre les recorro per comprobar que són correctes
			for (var j=0; j<capa.length; j++)
			{
				if(capa[j].consultable==si)
					capa[j].consultable=ara_no;
			}
			for (var i=0; i<Accio.capes.length; i++)
			{	
				for (var j=0; j<capa.length; j++)
				{
					if (Accio.capes[i]==capa[j].nom)					
					{
						if(capa[j].consultable==ara_no)
							capa[j].consultable=si;
						break;					
					}
				}
				if(j==capa.length) //Capa no trobada
				{
					alert(DonaCadena3("La capa " + Accio.capes[i] + " indicada al paràmetre TEST_LAYERS no existeix.", 
							  "La capa " + Accio.capes[i] + " indicada en el parámetro TEST_LAYERS no existe.", 
							  "Layer " + Accio.capes[i] + " indicated in TEST_LAYERS parameter does not exist."));
					return false;
				}
			}
		
		}
		//Comprovo si puc anar a alguna coordenada perquè m'ho han indicat o a partir de la consulta típica
		if(Accio.coord)
		{
			if(isNaN(Accio.coord.x) || isNaN(Accio.coord.y))
				Accio.coord=null;
			else if(!EsPuntDinsAmbitNavegacio(Accio.coord))
			{
				alert(DonaCadena3("El punt sol·licitat (x,y)="+Accio.coord.x+","+Accio.coord.y+" està fora de l'àmbit de navegació", 
						  "El punto solicitado (x,y)="+Accio.coord.x+","+Accio.coord.y+" está fuera del ámbito de navegación", 
						  "The requested point (x,y)="+Accio.coord.x+","+Accio.coord.y+" is outside browser envelope"));
				Accio.coord=null;
			}
			else
				Accio.accio|=accio_conloc;			
		}
		if(Accio.valors)
		{
			//Intento buscar un punt on anar mitjançant els valors dels camps
			// i si el trobo marco
			if(dades_pendents_accio==false && BuscaValorAConsultesTipiques())
				Accio.accio|=accio_conloc;
		}
		else
		{
			dades_pendents_accio=true;
			Accio.valors=new Array(Accio.capes.length);
		}
	}
	else if(Accio.accio&accio_anar_coord || Accio.accio&accio_conloc)
	{
		if(Accio.coord==null)
		{
			alert(DonaCadena3("No s'ha trobat els paràmetres 'X' i 'Y'", 
				  "No se ha encontrado los parámetro 'X' y 'Y'",
				  "Cannot find 'X' and 'Y' parameters"));
			return false;
		}
		else if(!EsPuntDinsAmbitNavegacio(Accio.coord))
		{
			alert(DonaCadena3("El punt sol·licitat (x,y)="+Accio.coord.x+","+Accio.coord.y+" està fora de l'àmbit de navegació", 
					  "El punto solicitado (x,y)="+Accio.coord.x+","+Accio.coord.y+" está fuera del ámbito de navegación", 
					  "The requested point (x,y)="+Accio.coord.x+","+Accio.coord.y+" is outside browser envelope"));
			return false;
		}
	}
	return true;
	
}//Fi de ComprovaOpcionsAccio()
 
function SimulaEventOnClickPerConloc()
{
	if(Accio && Accio.coord)
	{
		PortamAPunt(Accio.coord.x, Accio.coord.y);			
		ParamCtrl.EstatClickSobreVista=estat_click_conloc;
		var event_de_click= new Object();
		
		event_de_click.clientX=DonaCoordSobreVistaDeCoordX(Accio.coord.x);
		//+ OrigenEsquerraVista-((this.document.body.scrollLeft) ? this.document.body.scrollLeft : 0);
		event_de_click.clientY=DonaCoordSobreVistaDeCoordY(Accio.coord.y);
		//+ OrigenSuperiorVista -((this.document.body.scrollTop) ? this.document.body.scrollTop : 0);					
		return event_de_click;
	}
	else
		return null;
}//Fi de SimulaEventOnClickPerConloc()

var dades_pendents_accio=false;

function IniciaVisualitzacio()
{
var clau=new Array("BBOX=", "LAYERS=", "QUERY_LAYERS=", "LANGUAGE=", "CRS=" , "REQUEST=", "X=", "Y=", "BUFFER=", 
		   "TEST_LAYERS=", "TEST_FIELDS=",  "TEST_VALUES=", "SERVERTORESPONSE=", "IDTRANS=");
var nou_env=new CreaExtent(0,0,0,0);
var nou_CRS="";
var win;

	changeSizeLayers(this);
	CarregaConsultesTipiques();
	if(CapaDigi.length>0)
	{
		for(var i_capa_digi=0; i_capa_digi<CapaDigi.length; i_capa_digi++)
		{
			if(CapaDigi[i_capa_digi].servidor && CapaDigi[i_capa_digi].tiles_solicitats==null) //És una capa que té objectes GML
			{
				//Creo un array de tiles
				CapaDigi[i_capa_digi].tiles_solicitats=new Array(CapaDigi[i_capa_digi].n_cols_tiles*CapaDigi[i_capa_digi].n_files_tiles);
				for(var i_tiles=0; i_tiles<CapaDigi[i_capa_digi].tiles_solicitats.length; i_tiles++)
					CapaDigi[i_capa_digi].tiles_solicitats[i_tiles]=tile_no_solicitat;
			}
			if(CapaDigi[i_capa_digi].CRS &&
			   CapaDigi[i_capa_digi].CRS.toUpperCase()!=ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS.toUpperCase() && CapaDigi[i_capa_digi].objecte)
			{
				for(var j=0; j<CapaDigi[i_capa_digi].objecte.length; j++)
				{
					CapaDigi[i_capa_digi].objecte[j].puntCRSactual=new Array();
					CapaDigi[i_capa_digi].objecte[j].puntCRSactual[0]=new CreaPunt2D(CapaDigi[i].objecte[j].punt[0].x, CapaDigi[i_capa_digi].objecte[j].punt[0].y);
					TransformaCoordenadesPunt(CapaDigi[i_capa_digi].objecte[j].puntCRSactual[0], CapaDigi[i_capa_digi].CRS, ParamCtrl.ImatgeSituacio[ParamInternCtrl.ISituacio].EnvTotal.CRS);
				}
			}
		}
	}
	if (parent.location.search && parent.location.search.substring(0,1)=="?")
	{
		var kvp=parent.location.search.substring(1, parent.location.search.length).split("&");
		for (var i_clau=0; i_clau<clau.length; i_clau++)
		{
			for (var i_kvp=0; i_kvp<kvp.length; i_kvp++)
			{
				if (kvp[i_kvp].substring(0, clau[i_clau].length).toUpperCase()==clau[i_clau])
				{
					var valor=unescape(kvp[i_kvp].substring(clau[i_clau].length,kvp[i_kvp].length));
					if (i_clau==0)  //BBOX
					{
						var coord=valor.split(",");
						if (coord.length!=4)
						{
							alert(DonaCadena3("No trobo les 4 coordenades a BBOX=", "No encuentro las 4 coordenadas en BBOX=", "Cannot find 4 coordinates at BBOX="));
							break;
						}
						//Cal carregar les 4 coordenades i fer el canvi d'àmbit
						nou_env.MinX=parseFloat(coord[0]); 
						nou_env.MaxX=parseFloat(coord[2]); 
						nou_env.MinY=parseFloat(coord[1]);
						nou_env.MaxY=parseFloat(coord[3]);
					}
					else if (i_clau==1)  //LAYERS
					{
						//Declaro totes les capes com a ara no visibles.
						for (var i=0; i<capa.length; i++)
						{
							if (capa[i].visible==si || capa[i].visible==semitransparent)
							{
								capa[i].visible=ara_no;	
							}
							if (capa[i].descarregable==si)
								capa[i].descarregable=ara_no;
						}
						//Declaro visibles les que m'han dit.
						var capa_visible=valor.split(",");
						var tinc_estils=false;
						for (var i_kvp2=0; i_kvp2<kvp.length; i_kvp2++)
						{
							if (kvp[i_kvp2].substring(0, 7).toUpperCase()=="STYLES=")
							{
								var valor2=unescape(kvp[i_kvp2].substring(7,kvp[i_kvp2].length));
								var capa_estil=valor2.split(",");
								if (capa_visible.length==capa_estil.length)
									tinc_estils=true;
								else
									alert(DonaCadena3("El nombre d\'estils no es correspon amb el nombre de capes.", "El número de estilos no se corresponde con el número de capas.", "Style number is no the same of the number of layers."));
							}
						}
						for (var j=0; j<capa_visible.length; j++)
						{
							for (var i=0; i<capa.length; i++)
							{
								if (capa_visible[j]==capa[i].nom)
								{
									if (capa[i].visible==ara_no)
										capa[i].visible=si;
									else
										alert(DonaCadena3("La capa ", "La capa ", "Layer ") + capa_visible[j] + DonaCadena3(" indicada a LAYERS= no pot ser activada.", " indicada en LAYERS= no puede ser activada.", " indicated at LAYERS= cannot be activaded"));
									if (tinc_estils)
									{
										if (capa[i].estil && capa[i].estil.length>1)
										{
											//Si a la part del final posa ":SEMITRANSPARENT"
											if (capa_estil[j].toUpperCase()=="SEMITRANSPARENT")
											{
												if (capa[i].visible!=no)
													capa[i].visible=semitransparent;
											}
											else
											{
												if (capa_estil[j].length>16 && capa_estil[j].substring(capa_estil[j].length-16, capa_estil[j].length).toUpperCase()==":SEMITRANSPARENT")
												{
													if (capa[i].visible!=no)
														capa[i].visible=semitransparent;
													capa_estil[j]=capa_estil[j].substring(0, capa_estil[j].length-16);
												}
												for (i_estil=0; i_estil<capa[i].estil.length; i_estil++)
												{													
													if (capa[i].estil[i_estil].nom==capa_estil[j])
													{
														capa[i].i_estil=i_estil;
														break;
													}
													
												}
												if (i_estil==capa[i].estil.length)
												{
													if (capa_estil[j]!=null && capa_estil[j]!="")  //si es blanc vol dir estil per defecte													
														alert(DonaCadena3("No trobo l\'estil ", "No encuentro el estilo ", "Cannot find style ") + capa_estil[j] + DonaCadena3(" per a la capa ", " para la capa ", "  for the layer ") + capa_visible[j]);
														
												}
											}
										}
										else
										{
											//Només pot dir semitransparent.
											if (capa_estil[j].toUpperCase()=="SEMITRANSPARENT")
											{
												if (capa[i].visible!=no)
													capa[i].visible=semitransparent;
											}
											else
											{
												if (capa_estil[j]!=null && capa_estil[j]!="")													
													alert(DonaCadena3("No trobo l\'estil ", "No encuentro el estilo ", "Cannot find style ") + capa_estil[j] + DonaCadena3(" per a la capa ", " para la capa ", "  for the layer ") + capa_visible[j]);
											}
										}
									}
									if (capa[i].descarregable==ara_no)
										capa[i].descarregable=si;
									break;
								}
							}
							if (i==capa.length)
								alert(DonaCadena3("No trobo la capa ", "No encuentro la capa ", "Cannot find layer ") + capa_visible[j] + DonaCadena3(" indicada a LAYERS=", " indicada en LAYERS=", " indicated at LAYERS="));
						}
					        //CreaVista();
						//CreaLlegenda();
					}
					else if (i_clau==2)  //QUERY_LAYERS
					{
						//Declaro totes les capes com a ara no consultables.
						for (var i=0; i<capa.length; i++)
						{
							if (capa[i].consultable==si)
								capa[i].consultable=ara_no;
						}
						//Declaro consultables les que m'han dit.
						var capa_visible=valor.split(",");
						for (var j=0; j<capa_visible.length; j++)
						{
							for (var i=0; i<capa.length; i++)
							{
								if (capa_visible[j]==capa[i].nom)
								{
									if (capa[i].consultable==ara_no)
										capa[i].consultable=si;
									else
										alert(DonaCadena3("La capa ", "La capa ", "Layer ") + capa_visible[j] + DonaCadena3(" indicada a QUERY_LAYERS= no pot ser activada.", " indicada en QUERY_LAYERS= no puede ser activada.", " indicated at QUERY_LAYERS= cannot be activaded"));
									break;
								}
							}
							if (i==capa.length)
								alert(DonaCadena3("No trobo la capa ", "No encuentro la capa ", "Cannot find layer ") + capa_visible[j] + DonaCadena3(" indicada a QUERY_LAYERS=", " indicada en QUERY_LAYERS=", " indicated at QUERY_LAYERS="));
						}
					        //CreaVista();
						//CreaLlegenda();
					}
					else if (i_clau==3)  //LANGUAGE
					{
						//CanviaIdioma(valor);
						ParamCtrl.idioma=valor.toLowerCase();
					}
					else if (i_clau==4)  //CRS
						nou_CRS=valor;
					else if(i_clau==5)// REQUEST
					{
						if(valor.toLowerCase()=="validaatributscoord")
						{
							if(Accio==null)
								Accio=new CreaAccio(accio_validacio, null, null, 0, null, null, null, null, false);
							else
								Accio.accio=accio_validacio;
						}
						else if(valor.toLowerCase()=="anarcoord")
						{
							if(Accio==null)
								Accio=new CreaAccio(accio_anar_coord, null, null, 0, null, null, null, null, false);
							else
								Accio.accio=accio_anar_coord;
						}
						else if(valor.toLowerCase()=="consultaperlocalitzacio")
						{
							if(Accio==null)
								Accio=new CreaAccio(accio_conloc, null, null, 0, null, null, null, null, false);
							else
								Accio.accio=accio_conloc;
						}
					}
					else if(i_clau==6) //X=
					{
						if(Accio==null)
							Accio=new CreaAccio(null, null, new CreaPunt2D(parseFloat(valor),0), 0, null, null, null, null, false);								
						else
						{
							if(Accio.coord==null)							
								Accio.coord=new CreaPunt2D(parseFloat(valor),0);
							else
								Accio.coord.x=parseFloat(valor);
						}
					}
					else if(i_clau==7) //Y=
					{
						if(Accio==null)
							Accio=new CreaAccio(null, null, new CreaPunt2D(0,parseFloat(valor)), 0, null, null, null, null, false);								
						else
						{
							if(Accio.coord==null)
								Accio.coord=new CreaPunt2D(0, parseFloat(valor));
							else
								Accio.coord.y=parseFloat(valor);
						}

					}
					else if(i_clau==8) //BUFFER
					{
						if(Accio==null)
							Accio=new CreaAccio(null,null, null, parseFloat(valor), null, null, null, null,false);
						else
							Accio.buffer=parseFloat(valor);
					}
					else if(i_clau==9)//TEST_LAYERS
					{
						if(Accio==null)
							Accio=new CreaAccio(null,null, null, 0, valor.split(","), null, null, null,false);
						else
							Accio.capes=valor.split(",");
					}
					else if(i_clau==10)//TEST_FIELDS
					{
						if(Accio==null)
							Accio=new CreaAccio(null, null, null, 0, null, valor.split(","), null, null, false);
						else
							Accio.camps=valor.split(",")
					}
					else if(i_clau==11)//TEST_VALUES
					{
						if(Accio==null)
							Accio=new CreaAccio(null, null, null, 0, null, null, valor.split(","), null, false);
						else
							Accio.valors=valor.split(",")
					}
					else if(i_clau==12) //SERVERTORESPONSE
					{
						if(Accio==null)
							Accio=new CreaAccio(null, valor, null, 0, null, null, null, null, false);
						else
							Accio.servidor=valor;
					}
					else if(i_clau==13)//IDTRANS
					{
						if(Accio==null)
							Accio=new CreaAccio(null, null, null, 0, null, null, null, valor, false);
						else
							Accio.id_trans=valor;
					}
					//Ara els altres paràmetres.
					break;
				}
			}
		}
	}
	if(Accio && n_capes_ctipica < capa_consulta_tipica_intern.length)
		dades_pendents_accio=true;
	
	if (nou_env.MinX!=0.0 || nou_env.MaxX!=0.0 || nou_env.MinY!=0.0 || nou_env.MaxY!=0.0)
	{
		
		if (nou_CRS!="")
			EstableixNouCRSEnv(nou_CRS, nou_env);
		CanviaIdioma(ParamCtrl.idioma);
		PortamAAmbit(nou_env);		
	}
	else
	{
		RevisaEstatsCapes();
		CanviaIdioma(ParamCtrl.idioma);
		RepintaMapesIVistes();
	}		
	document.body.bgColor=ParamCtrl.ColorFonsPlana;		
	if(Accio && ComprovaOpcionsAccio())
	{			
		if(Accio.accio&accio_validacio || Accio.accio&accio_conloc)
		{
			//Haig de tornar a fer un CreaLLegenda() perquè he tocat l'estat de les capes
			CreaLlegenda();
			if(dades_pendents_accio==false)
			{
				if(Accio.coord)
				{
					var event_de_click= SimulaEventOnClickPerConloc();
					ClickSobreVista(event_de_click);
				}
				else
				{
					//Mostro un missatge de que comencin a buscar amb les eines del navegador
					alert(DonaCadena3("Usa les eines del navegador per situar-te sobre la vista.\nA continuació fés clic sobre la vista per determinar la coordenada i la informació del punt a validar.\nPer finalitzar, prem [Validar Coordenada] o [Cancel·lar] des de la finestra de validació.",
					"Utiliza las herramientas del navegador para situarte sobre la vista.\nA continuación haz clic sobre la vista para determinar la coordenada y la información del punto a validar.\nPara finalizar aprieta [Validar Coordenada] o [Cancelar] desde la ventana de validación.",
					"You have to use browser tools to place on the view.\n Later, you have to click on the view to determine the coordinate\nand the information of the point of validating\n.To finish you have to click [Validate coordinate] or [Cancel] from the validation window.")); 				
					Accio.coord=new CreaPunt2D(0,0);
				}
			}
			form_anar_coord= new FormAnarCoord(true, ParamInternCtrl.PuntOri.x, ParamInternCtrl.PuntOri.y, ParamInternCtrl.CostatZoomActual);
		}
		else if(Accio.accio&accio_anar_coord)
		{
			dades_pendents_accio=false;
			form_anar_coord= new FormAnarCoord(true, Accio.coord.x, Accio.coord.y, Accio.buffer);
			MostraFinestraAnarCoordenada();
			var formulari=getLayer(this, "anarCoord_finestra").getElementsByTagName("form")[0];
			if(formulari)
				AnarACoordenada(formulari);			
		}
	}
	else
	{
		if(Accio)
		{
			if(Accio.accio&accio_validacio)			
				EnviarRespostaAccioValidacio(false);
			Accio=null;
			dades_pendents_accio=false;
			CreaBarra(null);			
		}
		form_anar_coord= new FormAnarCoord(true, ParamInternCtrl.PuntOri.x, ParamInternCtrl.PuntOri.y, ParamInternCtrl.CostatZoomActual);
	}
}//Fi de IniciaVisualitzacio()

function FinalitzaVisualitzacio()
{
	if (ParametresWindow!=null)
	{
		ParametresWindow.close();
		ParametresWindow=null;
	}
	if (TriaFullWindow!=null)
	{
		TriaFullWindow.close();
		TriaFullWindow=null;
	}
	if (AjudaWindow!=null)
	{
		AjudaWindow.close();
		AjudaWindow=null;
	}
	if (ConsultaWindow!=null)
	{
		ConsultaWindow.close();
		ConsultaWindow=null;
	}
	if (MMZWindow!=null)
	{
		MMZWindow.close();
		MMZWindow=null;
	}
	if (WCSWindow!=null)
	{
		WCSWindow.close();
		WCSWindow=null;
	}
	if (VideoWindow!=null)
	{
		VideoWindow.close();
		VideoWindow=null;
	}
}

