// Metodes de la guia

// *******************************
// Opcions globals dels OpenLayers
// *******************************
OpenLayers.IMAGE_RELOAD_ATTEMPTS = 3;
OpenLayers.Util.onImageLoadErrorColor = "transparent";
Proj4js.defs["EPSG:23031"] = "+title=ED50 / UTM zone 31N +proj=utm +zone=31 +ellps=intl +units=m +towgs84=-131.0320,-100.2510,-163.3540,-1.2438,-0.0195,-1.1436,9.3900";

// *************************
// Variables global del mapa
// *************************
var gisServer = "http://www.ajmanresa.cat/web/php/webService/WMS.php";
//var gisServer = "http://ExtranetServer/extranet/aspx/SigmaSIGWMS/wms.aspx";
//var gisServer = "http://GisServer/SigmaSIGWMS/wms.aspx";
//var gisServer = "http://localhost/SigmaSIGWMS/wms.aspx";

var adrService = "http://www.ajmanresa.cat/web/php/webService/GuiaWS.php";
//var adrService = "http://ExtranetServer/extranet/aspx/GuiaWS/GuiaWS.asmx";
//var adrService = "http://GisServer/GuiaWS/GuiaWS.asmx";
//var adrService = "http://localhost/GuiaWS/GuiaWS.asmx";

var photoService = "http://www.ajmanresa.cat/web/php/webService/GetPhoto.php";
//var photoService = "http://ExtranetServer/extranet/aspx/GuiaWS/GetPhoto.aspx";
//var photoService = "http://GisServer/GuiaWS/GetPhoto.aspx";
//var photoService = "http://localhost/GuiaWS/GetPhoto.aspx";

var map = null; // El mapa
var mapClickEvt = null; // Ultim event del mapa
var mapPopup = null; // El PopUp d'informació dels elements
var ol_wmsbl = null; // El base Layer
var ol_mrkl = null; // El Marker Layer
var ol_sel = null; // El Layer de selecció
var mrk = null; // El Marker
var mServer = null; // El Servidor de mapes
//var baseLayers = "sptermsu,lnterme,sppriu,lnviesc,lnedif,txedif,spilla50,spilla,spcadas,lnparce,lncadas,lnvorera,lnca5000,lnca2000,lnca1000,lnca500,ARBRAT,ADR";
var baseLayers = "base";
var selLayer = "ADR";
var ultimLayerGroup = ""; // Ultim LayerGroup triat (el que està ctualment obert)
var clickAction = ""; // L'acció que s'ha de fer quan es fa un "Click" al mapa
var endSelect = false; // Si hem d'acabar el procés de selecció (ja hem trobat un element)
var usr = "AJT"; // Usuari
var sec = ""; // Sessio
var elementAdr = ""; // Adreça de l'element trobat
var photoList = ""; // LLista de fotos
var photoArray = null; // LLista de fotos com un array
var photoIndex = 0; // Foto que s'està mostrant
var photoMax = 800; // Mida màxima en X o en Y de les fotos que es mostren
var imageFormat = "image/png"; // Format dels layers temàtics
var refParAdr = ""; // Adreça de la parcel·la trobada
var adrList = ""; // Llista d'adreces
var ntb = null; // NavToolBar
var ect = null; // controlEscala
var numCod = 0;

// ********
// Funcions
// ********

// Retorna el valor d'un paràmetre de la URL
function gup(name)
{
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+name+"=([^&#]*)";
    var regex = new RegExp( regexS );
    var results = regex.exec( window.location.href );
    if( results == null )
        return "";
    else
        return results[1];
}

// Amaga un item
function hide(id)
{
   var el = document.getElementById(id);
   el.style.visibility = "hidden";
   el.style.display = "none";
}

// Mostra un item
function show(id)
{
   var el = document.getElementById(id);
   el.style.visibility = "visible";
   el.style.display = "block";
}

// Fa el padding d'un número com a string amb zeros al davant
function pad(val, len)
{
	val = String(val);
	while (val.length < len) val = "0" + val;
	return val;
}

// Retorna la data d'avui correctament formatada (yyyymmdd)
function data()
{
   var dt = new Date();
   var dd = pad(dt.getDate(), 2);
   var mm = pad(dt.getMonth() + 1, 2);
   var yyyy = String(dt.getFullYear());
   return yyyy + mm + dd;
}

// retorna el que hi ha a str entre str1 i str2 (per llegir facilement coses d'un XML)
function getBetween(str1, str2, str)
{
   if (str != null)
   {
      var i = str.indexOf(str1);
      if (i >= 0 && i + str1.length < str.length)
      {
         i += str1.length;
         var j = str.indexOf(str2, i);
         if (j > i)
            return str.substring(i, j);
      }
   }
   return null;
}

function setSelectValue(selObj, val) 
{
   var i;
   val = val.toUpperCase();
   for(i = 0; i < selObj.length; i++) 
   {
      if(selObj[i].value == val)
      {
         selObj.selectedIndex = i;
         return;
      }
   }
}

// Escapa un HTML
function escapeHTML(str)
{
   var div = document.createElement("div");
   var text = document.createTextNode(str);
   div.appendChild(text);
   return div.innerHTML;
};

// Funció que crea el Layer WMS
function createWMSBaseLayer(sTile)
{
    var iCache;
    if (sTile)
       iCache = "";
    else
       iCache = "ImageCache=True&"
    var wmsLayer = new OpenLayers.Layer.WMS(
      "Base",
      mServer + iCache,
      {layers: baseLayers, format: "image/png" },
      {
          maxExtent: new OpenLayers.Bounds(397735.506, 4615943.757, 406412.386, 4623777.750),
//          maxResolution: 20,
//          minResolution: 0.1,
//          maxScale: 45000,
//          minScale: 500,
          numZoomLevels: 10,
          projection: new OpenLayers.Projection("EPSG:23031"),
          units: "m",
          singleTile: sTile,
          transitionEffect: "resize",
          gutter: 15,
          isBaseLayer: true
      });
    return wmsLayer;
}

// Funció que crea el Layer WMS
function createWMSLayer(layer)
{
   var wmsLayer = new OpenLayers.Layer.WMS(
      layer,
      mServer,
      {layers: layer, transparent: true, format: imageFormat },
      {
          maxExtent: new OpenLayers.Bounds(397735.506, 4615943.757, 406412.386, 4623777.750),
//          maxResolution: 20,
//          minResolution: 0.1,
//          maxScale: 45000,
//          minScale: 500,
          numZoomLevels: 10,
          projection: new OpenLayers.Projection("EPSG:23031"),
          units: "m",
          singleTile: true,
          transitionEffect: null,
          isBaseLayer: false
      });
   wmsLayer.id = layer;
   return wmsLayer;
}

// Funció que crea el MarkerLayer
function createMarkerLayer(layer)
{
    var mrkLayer = new OpenLayers.Layer.Markers("Markers", { numZoomLevels: 10 } );
    mrkLayer.display(false);
    return mrkLayer;
}

// Funció que crea el Layer WMS
function createSELLayer()
{
   var sLayer = new OpenLayers.Layer.WMS(
      "Select",
      mServer,
      {layers: selLayer, transparent: true, format: "image/png" },
      {
          maxExtent: new OpenLayers.Bounds(397735.506, 4615943.757, 406412.386, 4623777.750),
//          maxResolution: 20,
//          minResolution: 0.1,
//          maxScale: 45000,
//          minScale: 500,
          numZoomLevels: 10,
          projection: new OpenLayers.Projection("EPSG:23031"),
          units: "m",
          singleTile: true,
          transitionEffect: null,
          isBaseLayer: false
      });
   sLayer.mergeNewParams({select: selLayer + ".0"});
   sLayer.setOpacity(0.6);
   sLayer.display(false);
   return sLayer;
}

// Activa el Zoom a la NavToolbar
function activaZoom()
{
    if (ntb)
    {
        ntb.controls[0].deactivate();
        ntb.controls[1].activate();
     }
}

// Activa el Pan a la NavToolbar
function activaPan()
{
    if (ntb)
    {
        ntb.controls[1].deactivate();
        ntb.controls[0].activate();
    }
}

// Inicialitza el mapa
function initMap()
{
    hexcase = 0;
    sec = hex_md5(usr + data());
    mServer = gisServer + "?EXCEPTIONS=application/vnd.ogc.se_inimage&User=" + usr + "&SessionID=" + sec + "&";
    map = new OpenLayers.Map("map",
       {
          controls: [new OpenLayers.Control.PanZoomBar()],
          projection: new OpenLayers.Projection("EPSG:23031"),
  //        displayProjection: new OpenLayers.Projection("EPSG:23031"),
          maxResolution: 20,
          minResolution: 0.1,
          maxScale: 45000,
          minScale: 500,
          numZoomLevels: 10,
          scales: [45000, 25000, 15000, 10000, 5000, 2500, 2000, 1500, 1000, 500],
          units: "m"
       }
    );

    // Afegim el Layer
    ol_wmsbl = createWMSBaseLayer(false);
    map.addLayer(ol_wmsbl);

    // Afegim el Layer de selecció d'adreça
    ol_sel = createSELLayer();
    map.addLayer(ol_sel);

    // Afegim el MarkerLayer
    ol_mrkl = createMarkerLayer();
    map.addLayer(ol_mrkl);

    //map.addControl(new OpenLayers.Control.MouseDefaults());
    ect = new OpenLayers.Control.LiniaEscala();
    map.addControl(ect);
    //map.addControl(new OpenLayers.Control.OverviewMap());
    ntb = new OpenLayers.Control.NavToolbar();
    map.addControl(ntb);
    activaPan();
    //map.addControl(new OpenLayers.Control.LoadingPanel());
    map.addControl(new OpenLayers.Control.KeyboardDefaults());
    map.events.register("click", map, mapClick);
    map.zoomToMaxExtent();

    // Mirem l'explorador per saber si hem de fer gif's transparents o podem fer png's
    var vers = getBetween("MSIE ", ";", navigator.appVersion);
    if (vers && parseFloat(vers) < 7.0)
       imageFormat = "image/gif";
    else
       imageFormat = "image/png";

    // Processem els paràmetres de la url
    var adr = gup("NomCarr"); // Mirem si hem d'anar a la cerca
    if (adr > "")
    {
       document.getElementById("NomCarr").value = adr;
       var tip = gup("TipCarr");
       if (tip > "")
          setSelectValue(document.getElementById("SelCarSig"), tip);
       var num = gup("Numero");
       if (num > "")
          document.getElementById("Numero").value = num;
    	 findAdreces();
    }
    var lon = gup("X"); // Mirem si hi hem de forçar una posició
    var lat = gup("Y");
    if (lon > "")
    {
       if (lat > "")
       {
          var zoom = gup("Zoom");
          if (zoom > "")
          {
             map.setCenter(new OpenLayers.LonLat(lon, lat), zoom, true, true);
             ect.draw();
          }
       }
    }
    // Mirem si hem d'anar a l'adreça
    var ncod = gup("NumCod");
    if (ncod > "")
    {
       if (lon > "" && lat > "")
    	    showNumCod(ncod);
      else
    	    findNumCod(ncod);
    }
    var lys = gup("Layers"); // Mirem si hem d'activar algunes capes
    if (lys > "")
    {
        var lys2 = lys.split(",");
        for (var i = lys2.length - 1; i >= 0; i--)
        {
           var cbly = document.getElementById(lys2[i].toUpperCase());
           if (cbly)
              cbly.click();
        }
    }
    var mlon = gup("MrkX"); // Mirem si hi ha la marca
    if (mlon > "")
    {
       var mlat = gup("MrkY");
       if (mlat > "")
          setMarker(new OpenLayers.LonLat(mlon, mlat));
    }
}

// Inicialitza el mapa d'impressió
function initPrintMap()
{
    // Processem els paràmetres de la url
    var lon = gup("X"); // Obligatòria la posició i el zoom
    var wo = window.opener; // Obligatori el window opener
    if (lon > "" && wo)
    {
       var lat = gup("Y");
       if (lat > "")
       {
          var zoom = gup("Zoom");
          if (zoom > "")
          {
            hexcase = 0;
            sec = hex_md5(usr + data());
            mServer = gisServer + "?EXCEPTIONS=application/vnd.ogc.se_inimage&User=" + usr + "&SessionID=" + sec + "&";
            map = new OpenLayers.Map("map",
               {
                  controls: [],
                  projection: new OpenLayers.Projection("EPSG:23031"),
          //        displayProjection: new OpenLayers.Projection("EPSG:23031"),
                  maxResolution: 20,
                  minResolution: 0.1,
                  maxScale: 45000,
                  minScale: 500,
                  numZoomLevels: 10,
                  scales: [45000, 25000, 15000, 10000, 5000, 2500, 2000, 1500, 1000, 500],
                  units: "m"
               }
            );

            // Afegim el Layer
            ol_wmsbl = createWMSBaseLayer(true);
            map.addLayer(ol_wmsbl);

            // Afegim el Layer de selecció d'adreça
            ol_sel = createSELLayer();
            map.addLayer(ol_sel);

            // Afegim el MarkerLayer
            ol_mrkl = createMarkerLayer();
            map.addLayer(ol_mrkl);

            // Afegim els controls al mapa
            ect = new OpenLayers.Control.LiniaEscala();
            map.addControl(ect);

            // Mirem l'explorador per saber si hem de fer gif's transparents o podem fer png's
            var vers = getBetween("MSIE ", ";", navigator.appVersion);
            if (vers && parseFloat(vers) < 7.0)
               imageFormat = "image/gif";
            else
               imageFormat = "image/png";
            // Situem el mapa
            map.setCenter(new OpenLayers.LonLat(lon, lat), zoom, true, true);
            ect.draw();
            // Mirem si hi ha adreca
            var ncod = gup("NumCod");
            if (ncod > "")
	            showNumCod(ncod);
            var lys = gup("Layers");
            if (lys > "")
            {
               var lys2 = lys.split(",");
               for (var i = lys2.length - 1; i >= 0; i--)
               {
                  var cbly = wo.document.getElementById(lys2[i].toUpperCase());
                  if (cbly)
                  {
                     map.addLayer(createWMSLayer(cbly.id));
                     show(cbly.id)
                  }
               }
            }
            // Mirem si hi ha la marca
            var mlon = gup("MrkX");
            if (mlon > "")
            {
               var mlat = gup("MrkY");
               if (mlat > "")
               {
                  setMarker(new OpenLayers.LonLat(mlon, mlat));
               }
            }
          }
       }
    }
}

// Obrim la pàgina d'imprimir el mapa
function printMap()
{
   var center = map.getCenter();
   var pmrk = "";
   if (mrk)
      pmrk = "&MrkX=" + mrk.lonlat.lon + "&MrkY=" + mrk.lonlat.lat;
   var pncod = ""
   if (numCod > 0)
      pncod = "&NumCod=" + numCod;
   var plys = "";
   for (var i = 0; i < document.frmLys.layer.length; i++)
   {
       if (document.frmLys.layer[i].checked)
       {
          if (plys == "")
             plys = "&Layers=";
          else
             plys = plys + ",";
          plys = plys + document.frmLys.layer[i].id;
       }
   }
   window.open("/web/php/guia/Print.htm?X=" + center.lon + "&Y=" + center.lat + "&Zoom=" + map.getZoom() + pmrk + pncod + plys, "PrintGuia");
}

// Mostra o amaga la url del mapa
function switchUrl()
{
   var urld = document.getElementById("T_Url");
   if (urld.hasChildNodes())
   {
      while (urld.hasChildNodes())
         urld.removeChild(urld.firstChild);
   }
   else
   {
      var center = map.getCenter();
      var pmrk = "";
      if (mrk)
         pmrk = "&MrkX=" + mrk.lonlat.lon + "&MrkY=" + mrk.lonlat.lat;
      var pncod = ""
      if (numCod > 0)
         pncod = "&NumCod=" + numCod;
      var plys = "";
      for (var i = 0; i < document.frmLys.layer.length; i++)
      {
         if (document.frmLys.layer[i].checked)
         {
            if (plys == "")
               plys = "&Layers=";
            else
               plys = plys + ",";
               plys = plys + document.frmLys.layer[i].id;
         }
      }
      var urlx = document.location.href;
      var i = urlx.indexOf("?");
      if (i > 0)
         urlx = urlx.substring(0, i);
      i = urlx.indexOf("#");
      if (i > 0)
         urlx = urlx.substring(0, i);
      urld.appendChild(document.createTextNode(urlx + "?X=" + center.lon + "&Y=" + center.lat + "&Zoom=" + map.getZoom() + pmrk + plys + pncod));
   }
}

// Amaga la url del mapa
function hideUrl()
{
   var urld = document.getElementById("T_Url");
   if (urld.hasChildNodes())
   {
       while (urld.hasChildNodes())
            urld.removeChild(urld.firstChild);
   }
}

// S'ha fet click al mapa
function mapClick(e)
{
    var i;
    var lay;
    var url;
    var lonlat;

    mapClickEvt = e;
    if (clickAction == "Ident")
    {
        endSelect = false;
        for (i = 0; !endSelect && i < map.layers.length; i++)
        {
            lay = map.layers[i];
            if (!lay.isBaseLayer && lay.name != "Markers")
            {
                url = lay.getFullRequestString({
                        REQUEST: "GetFeatureInfo",
                        EXCEPTIONS: "application/vnd.ogc.se_xml",
                        BBOX: map.getExtent().toBBOX(),
                        X: e.xy.x,
                        Y: e.xy.y,
                        INFO_FORMAT: "application/vnd.ogc.gml",
                        QUERY_LAYERS: lay.name,
                        WIDTH: map.size.w,
                        HEIGHT: map.size.h});
                OpenLayers.loadURL(url, "", this, selectElement, requestError);
                //OpenLayers.Event.stop(e);
            }
        }
        document.getElementById("map").style.cursor = "crosshair";
    }
    else if (clickAction == "Photo")
    {
        lay = map.layers[0];
        url = lay.getFullRequestString({
                REQUEST: "GetFeatureInfo",
                EXCEPTIONS: "application/vnd.ogc.se_xml",
                BBOX: map.getExtent().toBBOX(),
                X: e.xy.x,
                Y: e.xy.y,
                INFO_FORMAT: "application/vnd.ogc.gml",
                QUERY_LAYERS: "spparce",
                WIDTH: map.size.w,
                HEIGHT: map.size.h});
        OpenLayers.loadURL(url, "", this, selectRefPar, requestError);
        //OpenLayers.Event.stop(e);
        document.getElementById("map").style.cursor = "crosshair";
    }
    else if (clickAction == "SetPos")
    {
        setMarker(map.getLonLatFromViewPortPx(e.xy));
        setClickAction("");
    }
    OpenLayers.Event.stop(e);
}

// Mostra l'error en el request
function requestError(response)
{
    alert("ERR:" + response.responseText);
}

function encode_utf8( s )
{
   return unescape( encodeURIComponent( s ) );
}

function decode_utf8( s )
{
   //return decodeURIComponent( escape( s ) );
   return decodeURIComponent(escape( s ));
}
//function decode_utf8 ( str_data )
//{
//   // Converts a UTF-8 encoded string to ISO-8859-1
//   //
//   // version: 810.1317
//   // discuss at: http://phpjs.org/functions/utf8_decode
//   // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
//   // +      input by: Aman Gupta
//   // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
//   // +   improved by: Norman "zEh" Fuchs
//   // +   bugfixed by: hitwork
//   // +   bugfixed by: Onno Marsman
//   // *     example 1: utf8_decode('Kevin van Zonneveld');
//   // *     returns 1: 'Kevin van Zonneveld'
//   var tmp_arr = [], i = ac = c1 = c2 = c3 = 0;
//
//   str_data += '';
//
//   while ( i < str_data.length ) {
//       c1 = str_data.charCodeAt(i);
//       if (c1 < 128) {
//           tmp_arr[ac++] = String.fromCharCode(c1);
//           i++;
//       } else if ((c1 > 191) && (c1 < 224)) {
//           c2 = str_data.charCodeAt(i+1);
//           tmp_arr[ac++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
//           i += 2;
//       } else {
//           c2 = str_data.charCodeAt(i+1);
//           c3 = str_data.charCodeAt(i+2);
//           tmp_arr[ac++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
//           i += 3;
//       }
//   }
//
//   return tmp_arr.join('');
//}

// Selecciona l'element retornat
function selectElement(response)
{
    var txt = getBetween("DESCRIP>", "</", response.responseText);
    var num = getBetween("NUMCOD>", "</", response.responseText);
    if (txt || num)
    {
        if (!txt)
            txt = "";
        if (num)
        {
            OpenLayers.Request.POST({
                url: adrService,
                async: false,
                data: '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><GetAdrecaByNumCod xmlns="http://www.ajmanresa.cat/GuiaWS"><pXML>' + escapeHTML('<WSParam><Session>' + sec + '</Session><Usuari>' + usr + '</Usuari><NumCod>' + num + '</NumCod></WSParam>') + '</pXML></GetAdrecaByNumCod></soap:Body></soap:Envelope>',
                callback: getElementAdr,
                headers: { "Content-Type": "text/xml; charset=utf-8" },
                scope: this
            });
        }
        else
            elementAdr = "";
        if (mapPopup)
            map.removePopup(mapPopup);
        mapPopup = new OpenLayers.Popup.FramedCloud("ElementInfo", map.getLonLatFromPixel(mapClickEvt.xy),
                                                    null, '<span class="ElementInfo"><strong>' + txt + '</strong><br />' + elementAdr + '</span>', null, true, closeMapPopup);
        map.addPopup(mapPopup);
        endSelect = true;
   }
}

// El resultat del WebService de l'adreça d'un NumCod
function getElementAdr(response)
{
    elementAdr = getBetween("<GetAdrecaByNumCodResult>", "</", response.responseText);
    if (!elementAdr)
        elementAdr = "";
}

// S'ha tancat el mapPoupu
function closeMapPopup()
{
    map.removePopup(mapPopup);
    mapPopup = null;
}

// Selecciona la referència cadastral
function selectRefPar(response)
{
		carregant();
		blockPage();

    var ref = getBetween("REFPAR>", "</", response.responseText);
    if (ref)
    {
        OpenLayers.Request.POST({
            url: adrService,
            async: false,
            data: '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><GetPhotoList xmlns="http://www.ajmanresa.cat/GuiaWS"><pXML>' + escapeHTML('<WSParam><Session>' + sec + '</Session><Usuari>' + usr + '</Usuari><RefPar>' + ref + '</RefPar></WSParam>') + '</pXML></GetPhotoList></soap:Body></soap:Envelope>',
            callback: getRefParPhotoList,
            headers: { "Content-Type": "text/xml; charset=utf-8" },
            scope: this
        });
        if (photoList.length > 0)
        {
            photoArray = photoList.split(";");
            OpenLayers.Request.POST({
                url: adrService,
                async: false,
                data: '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><GetAdrecaByRefPar xmlns="http://www.ajmanresa.cat/GuiaWS"><pXML>' + escapeHTML('<WSParam><Session>' + sec + '</Session><Usuari>' + usr + '</Usuari><RefPar>' + ref + '</RefPar></WSParam>') + '</pXML></GetAdrecaByRefPar></soap:Body></soap:Envelope>',
                callback: getRefParAdr,
                headers: { "Content-Type": "text/xml; charset=utf-8" },
                scope: this
            });
            if (refParAdr.length == 0)
               refParadr = ref;
            showPhoto();

        }
        else
           closePhoto();
    }
    else
  	{
  		activePage();
  	}
    carregaOk();

}

// El resultat del WebService de l'adreça d'una RefPar
function getRefParAdr(response)
{
    refParAdr = getBetween("<GetAdrecaByRefParResult>", "</", response.responseText);
    if (!refParAdr)
        refParAdr = "";
}

// Mostra una foto
function showPhoto()
{
    deleteAdreces();
    photoIndex = 0;


    var tit = document.getElementById("photoTitle");
    while (tit.hasChildNodes())
        tit.removeChild(tit.firstChild);
    tit.appendChild(document.createTextNode(refParAdr));
    document.getElementById("photoImg").src=photoService + "?Photo=" + photoArray[photoIndex] + "&Usuari=" + usr + "&Session=" + sec;


    show("photoDiv2");


    if (photoArray.length > 1)
    {
        show("photoPrev");
        show("photoNext");
    }
    else
    {
        hide("photoPrev");
        hide("photoNext");
    }

}

// Mostra l'anterior foto
function prevPhoto()
{
    photoIndex--;
    if (photoIndex < 0)
        photoIndex = photoArray.length - 1;
    document.getElementById("photoImg").src=photoService + "?Photo=" + photoArray[photoIndex] + "&Usuari=" + usr + "&Session=" + sec;
}

// Mostra la següent foto
function nextPhoto()
{
    photoIndex++;
    if (photoIndex >= photoArray.length)
        photoIndex = 0;
    document.getElementById("photoImg").src=photoService + "?Photo=" + photoArray[photoIndex] + "&Usuari=" + usr + "&Session=" + sec;
}

// Tanca el div de les fotos
function closePhoto()
{
    activePage();
    hide("photoDiv2");
    document.getElementById("photoImg").src="";
}

// Limita la mida de la foto carregada
function resizePhoto()
{
   var img = document.getElementById("photoImg");
   if (img.width > photoMax)
   {
      img.height = img.height * photoMax / img.width;
      im.width = photoMax;
      im.resize();
   }
   else
   {
      if (img.height > photoMax)
      {
         img.width = img.width * photoMax / img.height;
         im.height = photoMax;
         im.resize();
      }
   }
}

// El resultat del WebService de la llista de fotos d'una parcel·la
function getRefParPhotoList(response)
{
    photoList = getBetween("<GetPhotoListResult>", "</", response.responseText);
    if (!photoList)
        photoList = "";
}


// ***************
// Gestió de capes
// ***************

// Obre o tanca la opció de menú corresponent
function redibuixarMenu(opcio)
{
    var elmH;

    if (ultimLayerGroup != "")
    {
        hide("S_" + ultimLayerGroup);
        elmH = document.getElementById("H_" + ultimLayerGroup);
        elmH.firstChild.data = elmH.firstChild.data.replace("[-]", "[+]");
    }
    if (ultimLayerGroup == opcio)
        ultimLayerGroup = "";
    else
    {
        show("S_" + opcio);
        ultimLayerGroup = opcio;
        elmH = document.getElementById("H_" + opcio);
        elmH.firstChild.data = elmH.firstChild.data.replace("[+]", "[-]");
    }
}

// posa o treu una capa
function layerToggle(cbLayer)
{
   if (cbLayer.checked)
      map.addLayer(createWMSLayer(cbLayer.id));
   else
      map.removeLayer(map.getLayer(cbLayer.id));
}

// Activa una acció amb el click
function setClickAction(opcio)
{

    if (clickAction != "")
        document.getElementById("T_" + clickAction).className = "Plain";
    if (clickAction == opcio || opcio == "")
    {
        clickAction = "";
        document.getElementById("map").style.cursor="default";
    }
    else if (opcio != "")
    {
        document.getElementById("T_" + opcio).className = "Inset";
        clickAction = opcio;
        document.getElementById("map").style.cursor = "crosshair";
    }
}

function deleteNomAdr()
{
	  //netejem nom del carrer
    var urld = document.getElementById("T_Adr");
    while (urld.hasChildNodes())
        urld.removeChild(urld.firstChild);
}

// Fa l'acció d'esborrar la posició
function deleteMarker()
{
    deleteNomAdr()
    setClickAction("");
    ol_mrkl.display(false);
    if (mrk)
    {
        ol_mrkl.clearMarkers();
        mrk.destroy();
        mrk = null;
    }
    ol_sel.display(false);
    if (ol_sel["SELECT"] == null)
        ol_sel.mergeNewParams({select: selLayer + ".0"});
    else
        ol_sel["SELECT"] = selLayer + ".0";
    numCod = 0;
}

// Posa el marker
function setMarker(lonlat)
{
    if (mrk)
    {
        ol_mrkl.clearMarkers();
        mrk.destroy();
        mrk = null;
    }
    mrk = new OpenLayers.Marker(lonlat, new OpenLayers.Icon("/web/php/guia/imatges/bookmarklt.gif", new OpenLayers.Size(16, 16), new OpenLayers.Pixel(-8, -8)));
    ol_mrkl.addMarker(mrk);
    ol_mrkl.display(true);
}
function carregant()
{
	show("divCarregant");


//	javascript:blockPage();show("divCarregant");void(0);
}
function carregaOk()
{
	hide("divCarregant");

//	javascript:blockPage();show("divCarregant");void(0);
}

function blockPage()
{
	scroll(0,100000);
	show("photoDiv1");
	//document.getElementById('photoDiv1').width=document.getElementsByTagName('html')[0].scrollLeft + document.height;
	var alcada = document.getElementsByTagName('html')[0].scrollTop + document.body.clientHeight;
	document.getElementById('photoDiv1').style.height= alcada + 'px';
	//document.getElementsByTagName("html")[0].style.overflow = "hidden";
	scroll(0,0)

}
function activePage()
{
	hide("photoDiv1");
}
// Fa l'acció de cercar adreces
function findAdreces()
{
    var sel;
    var carSig, carDesc, numNum;
    var adrs;
    var adrArray;
    var adreca;
    var i;
    var div, a;

    hideUrl();
	 deleteNomAdr()
    setClickAction("");
    deleteAdreces();

    sel = document.getElementById("SelCarSig");
    carSig = sel.options[sel.selectedIndex].value;
    carDesc = document.getElementById("NomCarr").value;
    numNum = document.getElementById("Numero").value;

		carregant();
		blockPage();

    OpenLayers.Request.POST({
        url: adrService,
        async: false,
        data: '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><GetAdrecaList xmlns="http://www.ajmanresa.cat/GuiaWS"><pXML>' + escapeHTML('<WSParam><Session>' + sec + '</Session><Usuari>' + usr + '</Usuari><CarSig>' + carSig + '</CarSig><CarDesc>' + carDesc + '</CarDesc><NumNum>' + numNum + '</NumNum></WSParam>') + '</pXML></GetAdrecaList></soap:Body></soap:Envelope>',
        callback: getAdrecaList,
        headers: { "Content-Type": "text/xml; charset=utf-8" },
        //headers: { "Content-Type": "text/xml; charset=iso-8859-1" },
        scope: this
    });
    adrs = document.getElementById("T_Adreces");

    carregaOk();

    if (adrList == "")
    {
				show("carrerList");

        adrs.appendChild(document.createTextNode("No s'ha trobat cap adreça."));

    }
    else
    {
        adrArray = adrList.split(";");
        adreca = adrArray[0].split("#");
        if (adrArray.length > 1)
        {
					show("carrerList");

	        div = document.createElement("div");
	        a = document.createElement("a");
	        a.setAttribute('class', 'LayerGroup');
	        a.setAttribute('href', 'javascript:gotoCoord(' + adreca[1] + ',' + adreca[2] + ', true, "' + adreca[0] + '");');
              a.setAttribute('href', 'javascript:gotoAdre(' + adreca[3] + ',' + adreca[1] + ',' + adreca[2] + ', true, "' + adreca[0] + '");');
	        a.appendChild(document.createTextNode(adreca[0]));
	        div.appendChild(a);
	        adrs.appendChild(div);

//					blockPage();
//	    		show("carrerList");

          for (i = 1; i < adrArray.length; i++)
          {
              adreca = adrArray[i].split("#");
              div = document.createElement("div");
              a = document.createElement("a");
              a.setAttribute('class', 'LayerGroup');
              //a.setAttribute('href', 'javascript:gotoCoord(' + adreca[1] + ',' + adreca[2] + ', true, "' + adreca[0] + '");');
              a.setAttribute('href', 'javascript:gotoAdre(' + adreca[3] + ',' + adreca[1] + ',' + adreca[2] + ', true, "' + adreca[0] + '");');
              //a.appendChild(document.createTextNode(decode_utf8(adreca[0])));
              a.appendChild(document.createTextNode(adreca[0]));
              div.appendChild(a);
              adrs.appendChild(div);
          }
          //document.location = document.location + "#adreces";
        }
        else // SI només n'hem trobat un hi anem automàticament
        {
        	activePage();
          //gotoCoord(adreca[1], adreca[2], true, adreca[0]);
          gotoAdre(adreca[3], adreca[1], adreca[2], true, adreca[0]);
        }
    }
}

// Fa l'acció de cercar un numcod
function findNumCod(ncod)
{
    var sel;
    var carSig, carDesc, numNum;
    var adrs;
    var adrArray;
    var adreca;
    var i;
    var div, a;

    setClickAction("");
    deleteAdreces();
    OpenLayers.Request.POST({
        url: adrService,
        async: false,
        data: '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><GetAdrecaList xmlns="http://www.ajmanresa.cat/GuiaWS"><pXML>' + escapeHTML('<WSParam><Session>' + sec + '</Session><Usuari>' + usr + '</Usuari><NumCod>' + ncod + '</NumCod></WSParam>') + '</pXML></GetAdrecaList></soap:Body></soap:Envelope>',
        callback: getAdrecaList,
        headers: { "Content-Type": "text/xml; charset=utf-8" },
        scope: this
    });
    adrs = document.getElementById("T_Adreces");
    if (adrList == "")
    {
        adrs.appendChild(document.createTextNode("No s'ha trobat cap adreça."));
    }
    else
    {
        adrArray = adrList.split(";");
        adreca = adrArray[0].split("#");
        div = document.createElement("div");
        a = document.createElement("a");
        a.setAttribute('class', 'LayerGroup');
        //a.setAttribute('href', 'javascript:gotoCoord(' + adreca[1] + ',' + adreca[2] + ', true);');
        a.setAttribute('href', 'javascript:gotoAdre(' + adreca[3] + ',' + adreca[1] + ',' + adreca[2] + ', true);');
        a.appendChild(document.createTextNode(adreca[0]))
        div.appendChild(a)
        adrs.appendChild(div);
        	activePage();
        //gotoCoord(adreca[1], adreca[2], true);
        gotoAdre(adreca[3], adreca[1], adreca[2], true);
    }
}

// Situa el mapa en una adreça determinada
function showNumCod(ncod)
{
    if (ol_sel["SELECT"] == null)
        ol_sel.mergeNewParams({select: selLayer + "." + ncod});
    else
        ol_sel["SELECT"] = selLayer + "." + ncod;
    ol_sel.display(true);
    numCod = ncod;
}

// Situa el mapa en una coordenada determinada
// marker = false -> No posa cap marca al mapa
// marker = true -> Posa la marca de l'estrella al mapa
function gotoCoord(x, y, marker, desc)
{
		//desc=decode_utf8(desc);
		var urld = document.getElementById("T_Adr");
    urld.appendChild(document.createTextNode(desc));

    closeCerca();

    var lonlat = new OpenLayers.LonLat(x, y);
    map.setCenter(lonlat, 8, true, true);
    ect.draw();
    if (marker)
        setMarker(lonlat);
}

// Situa el mapa en una adreça determinada
// marker = false -> No posa cap marca al mapa
// marker = true -> Posa la marca del punt vermell al mapa
function gotoAdre(ncod, x, y, marker, desc)
{
		//desc=decode_utf8(desc);
		var urld = document.getElementById("T_Adr");
    urld.appendChild(document.createTextNode(desc));

    closeCerca();

    var lonlat = new OpenLayers.LonLat(x, y);
    map.setCenter(lonlat, 8, true, true);
    ect.draw();
    if (marker)
    {
       if (ol_sel["SELECT"] == null)
           ol_sel.mergeNewParams({select: selLayer + "." + ncod});
       else
           ol_sel["SELECT"] = selLayer + "." + ncod;
       ol_sel.display(true);
    }
    numCod = ncod;
}

function closeCerca()
{
   hide("carrerList");
   activePage();
}

// Llista d'adreces seleccionades
function getAdrecaList(response)
{
    adrList = getBetween("<GetAdrecaListResult>", "</", response.responseText);
    if (!adrList)
        adrList = "";
}

// Esborra la llista d'adreces trobades
function deleteAdreces()
{
    var adrs = document.getElementById("T_Adreces");
    while (adrs.hasChildNodes())
        adrs.removeChild(adrs.firstChild);
    adrList = "";
}

// Passa el ratolí per sobre d'un botó
function mouseOver(opcio)
{
   document.getElementById("T_" + opcio).className = "Outset";
}

// El ratolí surt del botó del que estava a sobre
function mouseOut(opcio)
{
   if (opcio == clickAction)
      document.getElementById("T_" + opcio).className = "Inset";
   else
      document.getElementById("T_" + opcio).className = "Plain";
}

