/*

  initmap.js 



*/ 

	    var map;
	    var loadedLayers;
            //var tiled;
///////////////////////////////////////////////////////////////////////////////	    
////////////////////////////////////////////////////////////////////////////////
// zmienne definicji obiektów warstw baseLayer
	    var mpzp_db_pm_tb;

// 	    var google_lay;
////////////////////////////////////////////////////////////////////////////////
	    var pureCoverage = false;

////////////////////////////////////////////////////////////////////////////////
	    var idKartyRegPatt = "[0-9]{2}\\-[0-9A-Z]{1}[0-9]{2}\\-[A-Z]{1,3}";
	    var idFunkcjiRegPatt = "[A-Z]{1,3}";

////////////////////////////////////////////////////////////////////////////////	    
	    var req;
	    var response;
////////////////////////////////////////////////////////////////////////////////
	    var terFuncColorMap = 
	  {
	    MN: "#996600",
	    MNL: "#996600",
	    MW: "#993300",
	    U: "#ff0000",
	    UP: "#ff0000",
	    US: "#cc0000",
	    P: "#660066",
	    PG: "#660066",
	    R: "#ffff00",
	    RM: "#ffcc00",
	    RU: "#ff9900",
	    Z: "#00cc00",
	    ZP: "#00cc00",
	    ZN: "#66ff00",
	    ZC: "#006666",
	    ZD: "#999900",
	    ZL: "#006600",
	    ZLZ: "#666600",	    
	    WS: "#0000cc",
	    KDZ: "lightgray",
	    KDL: "white",
	    KDD: "white",
	    KDW: "white",
	    KDX: "white",
	    KX: "white",
	    KP: "white",
	    IE: "gray",
	    IW: "gray",
	    IK: "gray",
	    IT: "gray",
	    IO: "gray"
	  };
	   
            // pink tile avoidance
            OpenLayers.IMAGE_RELOAD_ATTEMPTS = 5;
            // make OL compute scale according to WMS spec
            OpenLayers.DOTS_PER_INCH = 25.4 / 0.28;


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Funkcja wywoływana na onLoad
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


	    
            function init(){
	      
                // if this is just a coverage or a group of them, disable a few items,
                // and default to jpeg format
                format = mainrasformat;
                if(pureCoverage) {
                    document.getElementById('filterType').disabled = true;
                    document.getElementById('filter').disabled = true;
                    //document.getElementById('antialiasSelector').disabled = true;
                    document.getElementById('updateFilterButton').disabled = true;
                    document.getElementById('resetFilterButton').disabled = true;
                    //document.getElementById('jpeg').selected = true;
                    format = mainrasformat;
                }

		
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//	Tworzenie warstw
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

		mpzp_db_pm_tb = new OpenLayers.Layer.WMS(
                    "Plan gminy " + gm_name + " - ogólny", wmsurl,
                    {
                        width: mapwindow_width,
                        srs: map_proj,
                        layers: base_resource_layer,
                        height: mapwindow_height,
                        styles: '',
                        format: format
                    },
                    {singleTile: true, ratio: 1}
                );

		
		var prglaylist = wmsLayersNamesSeries (wms_adm_kontekst_laynames_arr);

		var katasterlaylist = wmsLayersNamesSeries (wms_kataster_laynames_arr);

		var bdot_2010_laylist = wmsLayersNamesSeries (wms_bdot_2010_laynames_arr);

		
		graniceAdministracyjne = {serviceurl: prgurl, wmslayname: prglaylist, wmslayopis: "Granice administracyjne"};
		podzialGeodezyjny = {serviceurl: katasterurl, wmslayname: katasterlaylist, wmslayopis: "Podział geodezyjny"}; 
		zabudowa = {serviceurl: bdot_2010_url, wmslayname: bdot_2010_laylist, wmslayopis: "Zabudowa"};
		
		var wms_layers_ext_props_arr = new Array (graniceAdministracyjne, podzialGeodezyjny, zabudowa);
		var wms_layers_ext_arr = wmsLayersArrGen (wms_layers_ext_props_arr);

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//	Tworzenie mapy i ładowanie warstw
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
		var bounds = mpzp_db_pm_tb.getExtent();
		alert('Bounds: ' + bounds);
		*/
/*
		var bounds = new OpenLayers.Bounds(
                    397167.71875, 710061.5,
                    418798.5, 731916.0625
                );*/
                var options = {
                    controls: [],
                    maxExtent: bounds,
                    maxResolution: 903.7203747558597,
                    projection: map_proj,
                    units: 'm'
                };

                map = new OpenLayers.Map('map', options);


		loadedLayers = new Array(mpzp_db_pm_tb);
                map.addLayers(loadedLayers);
		map.addLayers(wms_layers_ext_arr);


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//	KONTROLKI MAPY
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//activateMPZP ();

		// build up all controls
                map.addControl(new OpenLayers.Control.PanZoomBar({
                    position: new OpenLayers.Pixel(2, 15)
                }));
	  
                map.addControl(new OpenLayers.Control.Navigation());
                map.addControl(new OpenLayers.Control.Scale($('scale')));
                map.addControl(new OpenLayers.Control.MousePosition({element: $('location')}));
                map.zoomToExtent(bounds);

		map.addControl(new OpenLayers.Control.LayerSwitcher());

                // wire up the option button
                var options = document.getElementById("options");
                options.onclick = toggleControlPanel;

		legendaFunkcje ();
		//alert(map.getProjection());
		
		map.events.register('click', map, performEvent);
            }

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//	Wywoływanie GetFeatureInfo
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	    function performEvent(e) {
                    document.getElementById('nodelist').innerHTML = "Loading... please wait...";
                    var queryParams = {
                        REQUEST: "GetFeatureInfo",
                        EXCEPTIONS: "application/vnd.ogc.se_xml",
                        BBOX: map.getExtent().toBBOX(),
                        X: e.xy.x,
                        Y: e.xy.y,
                        INFO_FORMAT: 'text/html',
                        QUERY_LAYERS: map.baseLayer.params.LAYERS,
                        FEATURE_COUNT: 50,
                        Srs: map.getProjection(),
                        Layers: map.baseLayer.params.LAYERS,
                        Styles: '',
                        WIDTH: map.size.w,
                        HEIGHT: map.size.h,
                        format: format};
		    
                    updateFeatureInfoFilters(queryParams);
		    
		    var fullRequestString = map.baseLayer.getFullRequestString(queryParams, wmsurl);

		    var hrefURL = '<br /><a href="' + fullRequestString + '" id="featureInforRef" target="_blank">Informacja o obiekcie: ' + map.baseLayer.name + '</a>' + '<p> [' + map.baseLayer.params.LAYERS + '] - współrzędne:' + ' X = ' + queryParams.X + ', Y = ' + queryParams.Y + '</p>';
		    document.getElementById('GetFeatureInfoRef').innerHTML = hrefURL;
		    
		    
		    OpenLayers.loadURL(wmsurl, queryParams, this, setHTML, setHTML);

                    OpenLayers.Event.stop(e);
                }

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//	Obsługa response w HTML
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	//Dodaje znaczniki <a href... > oraz uzupelhnia identyfikatory
	function transformHTMLText (htmlText) 
	{
		//alert(htmlText);
	 
		var eventReactTxt = 'class="AttribTable" onmouseover="this.style.background=\'red\'" onmouseout="this.style.background=null"';
		//' + idKartyRegPatt + '
		var regExpPatt_th = new RegExp('<th >terident</th>', "gm");
		var newStr_th = htmlText.replace(regExpPatt_th, "$&" + '<th >Karta terenu</th>');
		
		var regExpPatt_titles_fid = new RegExp('fid', "gm");
		var regExpPatt_titles_teryt = new RegExp('teryt', "gm");
		var regExpPatt_titles_ternr = new RegExp('ternr', "gm");
		var regExpPatt_titles_terfunc = new RegExp('terfunc', "gm");
		var regExpPatt_titles_terident = new RegExp('terident', "gm");
		var regExpPatt_titles_obj_area = new RegExp('obj_area', "gm");
		var regExpPatt_titles_obj_perim = new RegExp('obj_perim', "gm");
		
		var newStr_titles = newStr_th.replace(regExpPatt_titles_fid, 'OGC-Ident<br />($&)').replace(regExpPatt_titles_teryt, 'Obręb<br />($&)').replace(regExpPatt_titles_ternr, 'Numer terenu<br />($&)').replace(regExpPatt_titles_terfunc, 'Przeznaczenie<br />($&)').replace(regExpPatt_titles_terident, 'Identyfikator<br />($&)').replace(regExpPatt_titles_obj_area, 'Pole powierzchni [m<sup>2</sup>]<br />($&)').replace(regExpPatt_titles_obj_perim, 'Obwód<br />($&)');
		//alert(newStr_titles);
		
		//dodanie zdarzenia do wyboru pojedynczego terenu po identyfikatorze 		
		var regExpPatt_0 = new RegExp('<td>([a-z_]+\\.[0-9]+)</td>', "gm");
		var regExpPatt_01 = new RegExp('<td>(' + idFunkcjiRegPatt + ')</td>', "gm");
		var regExpPatt_1 = new RegExp('<td>(' + idKartyRegPatt + ')</td>', "gm");
		var regExpPatt_2 = new RegExp('<td>' + kartaurl + '\\?zm_tryb=karta_wg_ident&identyfikator=(' + idKartyRegPatt + ')</td>', "gm");

		var featId = (regExpPatt_0.exec(newStr_titles))[0].replace('<td>','').replace('</td>','');
		var terId = (regExpPatt_1.exec(newStr_titles))[0].replace('<td>','').replace('</td>','');
		
//		var newStr_0 = newStr_titles.replace(regExpPatt_0, '<td ' + eventReactTxt + '  onClick="selectFeature(this)" id="' + "$1" + '">' + "$1" + ' </td>').replace(regExpPatt_01, '<td ' + eventReactTxt + '  onClick="selectFeaturesByFunkcja(this)" id="' + "Funkcja_nr_" + regExpPatt_01.lastindex + '">' + "$1" + ' </td>');

 		var newStr_0 = newStr_titles.replace(regExpPatt_0, '<td ' + eventReactTxt + '  onClick="selectFeature(this)" id="' + "$1" + '">' + "$1" + ' </td>').replace(regExpPatt_01, '<td ' + eventReactTxt + '  onClick="selectFeaturesByFunkcja(\'' + "$1" + '\')" >' + "$1" + ' </td>');

		if (!newStr_0.match(regExpPatt_2))
		{
			var newStr = newStr_0.replace(regExpPatt_1, '<td ' + eventReactTxt + ' onClick="getObj(this)" id="' + "$1" + '">' + "$1" + ' </td><td><a class="AttribTable" target="_blank" id="' + "$1" + '_url" href="' + kartaurl + '?zm_tryb=karta_wg_ident&identyfikator=' + "$1" + '" >Otwórz</a></td>');
		}
		else
		{
			var newStr_1 = newStr_0.replace(regExpPatt_1, '<td ' + eventReactTxt + ' onClick="getObj(this)" id="' + "$1" + '">' + "$1" + ' </td>');
			var newStr = newStr_1.replace(regExpPatt_2, '<td><a class="AttribTable" target="_blank" id="' + "$1" + '_url" href="' + kartaurl + '?zm_tryb=karta_wg_ident&identyfikator=' + "$1" + '" >Otwórz</a></td>');
		}
		//alert (newStr);
		return newStr;
	}

	// sets the HTML provided into the nodelist element
        function setHTML(response)
	{
		var newHTML = transformHTMLText(response.responseText);
              //document.getElementById('nodelist').innerHTML = response.responseText;
		document.getElementById('nodelist').innerHTML = newHTML;
        }

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//	LEGENDA
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


	function legendaFunkcje ()
	{
	  legendHTML = '<table class="legendaFunkcje" id="legendaFunkcje_id" ><tr>\n';
	  for (var funkcja in terFuncColorMap)
	  {
		tdcolor = terFuncColor (funkcja);
		legendHTML = legendHTML + '<style type="text/css">\n';
		legendHTML = legendHTML + '#symb_' + funkcja  + '{\n';
		legendHTML = legendHTML + 'background-color: ' +  tdcolor + ';\n';
		legendHTML = legendHTML + 'border-style: inset;\n';
		legendHTML = legendHTML + '}\n';
		legendHTML = legendHTML + '</style>\n';
		legendHTML = legendHTML + '<td id="symb_' + funkcja  + '" onmouseover="this.style.border=\'yellow\'" onmouseout="this.style.border=null"  onClick="selectFeaturesByFunkcja(\''+funkcja+ '\')">' + funkcja  + '</td>\n';
		
	    //	    
	  }
	  legendHTML = legendHTML + '</tr></table>';
	  document.getElementById('funkcjalist').innerHTML = legendHTML;
	}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//	Analizy przestrzenne - wybieranie wg funkcji lub obiektów
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


	function getObj(elObj)
	{
		alert('Id elementu: ' + elObj.id);
	}

	function selectFeature(elObj)
	{
		currLayer = map.baseLayer;
		//alert('Id elementu: ' + elObj.id);
		
                var filterParams = {
                    filter: null,
                    cql_filter: null,
                    featureId: null
                };
                filterParams["featureId"] = elObj.id;
		currLayer.mergeNewParams(filterParams);

                //return filterParams;
	}
	
	function selectFeaturesByFunkcja(funkcja)
	{	
		currLayer = map.baseLayer;
		//alert('Id elementu: ' + elObj.id);
		
                var filterParams = {
                    filter: null,
                    cql_filter: null,
                    featureId: null
                };
                filterParams["cql_filter"] = "terfunc EQ '" + funkcja +"'";
		currLayer.mergeNewParams(filterParams);
	}
	

	function getInfoFromEl(infoTxt)
	{
		alert('Id elementu ' + infoTxt); 
	}
	
	function changeStyleToSelected(id)
	{
		alert('Selected' + id);
//		document.getElementById(id).style.background-color='red';
	}



	function changeStyleToDeselect(id)
	{
		//document.getElementById(id).style.property=new style;
	}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//	KONTROLKI
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



            // shows/hide the control panel
            function toggleControlPanel(event){
                var toolbar = document.getElementById("toolbar");
                if (toolbar.style.display == "none") {
                    toolbar.style.display = "block";
                }
                else {
                    toolbar.style.display = "none";
                }
                event.stopPropagation();
                map.updateSize()
            }
	
            function setWidth(size){
                var mapDiv = document.getElementById('map');
                var wrapper = document.getElementById('wrapper');

                if (size == "auto") {
                    // reset back to the default value
                    mapDiv.style.width = null;
                    wrapper.style.width = null;
                }
                else {
                    mapDiv.style.width = size + "px";
                    wrapper.style.width = size + "px";
                }
                // notify OL that we changed the size of the map div
                map.updateSize();
            }

            function setHeight(size){
                var mapDiv = document.getElementById('map');

                if (size == "auto") {
                    // reset back to the default value
                    mapDiv.style.height = null;
                }
                else {
                    mapDiv.style.height = size + "px";
                }
                // notify OL that we changed the size of the map div
                map.updateSize();
            }


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//	FILTRY
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


            function updateFilter(){
                // merge the new filter definitions
                currLayer = map.baseLayer;
                var filterParams = getFilterParams();
                currLayer.mergeNewParams(filterParams);
            }

            function getFilterParams() {
              if(pureCoverage)
                  return null;

                var filterType = document.getElementById('filterType').value;
                var filter = document.getElementById('filter').value;

                // by default, reset all filters
                var filterParams = {
                    filter: null,
                    cql_filter: null,
                    featureId: null,
		    terfunc: null
                };
                if (OpenLayers.String.trim(filter) != "" && OpenLayers.String.trim(filterType) != 'funkcja') {
                    if (filterType == "cql")
                        filterParams["cql_filter"] = filter;
                    if (filterType == "ogc")
                        filterParams["filter"] = filter;
                    if (filterType == "fid")
                        filterParams["featureId"] = filter;
                }
		else
		{
		    
		      /*if (OpenLayers.String.trim(filter) != "" && OpenLayers.String.trim(filter) != null)
		      {
			filterParams["terfunc"] = filter;
			wfsQuery(filter);
		      }*/
		}
                return filterParams;
            }

            function updateFeatureInfoFilters(featureInfoParams){
                var filterParams = getFilterParams();
                if(!filterParams)
                  return;

                featureInfoParams["cql_filter"] = filterParams["cql_filter"];
                featureInfoParams["filter"] = filterParams["filter"];
                featureInfoParams["featureId"] = filterParams["featureId"];

		//alert('2Aa) featureInfoParams["cql_filter"] = ' + featureInfoParams["cql_filter"]); terfunc
		//alert('2Ab) featureInfoParams["filter"] = ' + featureInfoParams["filter"]);
// 		alert('2Ac) featureInfoParams["featureId"] = ' + featureInfoParams["featureId"]);
            }

            function resetFilter() {
                if(pureCoverage)
                  return;

                document.getElementById('filter').value = "";
                updateFilter();
            }

//             function mergeNewParams(params){
//                 //tiled.mergeNewParams(params);
//                 woj_kontekst_lay.mergeNewParams(params);
//             }




////////////////////////////////////////////////////////////////////////////////////////////////
	function funkLegend ()
	{
		
	}
	function terFuncColor (funcName)
	{	  
	  return terFuncColorMap[funcName];
	}

