/* Obiekt InfoLink przechowuje nazwy serwisów oraz warstwy (w postaci obiektów), o które można pytać */
function InfoLink() {
    this.services = [];
    this.layersForServices = [];
}

InfoLink.prototype.toString = function() {
    var link = '{"services": [';
    for (var i = 0; i < this.services.length; i++) {
	link += '{"name" : "' + this.services[i] + '", "layers" : "' + this.layersForServices[i] +'"}';
	if ( i < this.services.length-1)
	    link+=",";
    }	
	link+=']}';

    return link;
    }
    

function getURLParam(strParamName) {
    var strReturn = "";
    var strHref = window.location.href;
    if ( strHref.indexOf("?") > -1 ) {
	var strQueryString = strHref.substr(strHref.indexOf("?")).toLowerCase();
	var aQueryString = strQueryString.split("&");
        for ( var iParam = 0; iParam < aQueryString.length; iParam++ ) {
	    if (aQueryString[iParam].indexOf(strParamName.toLowerCase() + "=") > -1 ) {
		var aParam = aQueryString[iParam].split("=");
    		strReturn = aParam[1];
		break;
	    }
	}
    }
    return unescape(strReturn);
}


function load() { 
    var newMapPrefixId = 'newMap';
    var lat = null;
    var lng = null;
    var zoom = null;

	var map = new google.maps.Map(document.getElementById('map'));
       
	/*Dodanie linijki do mapy*/
	var ruler = new Ruler(map,'ruler_tresc',false);
        var rulerDiv = document.getElementById('ruler');
        rulerDiv.onclick = function() {
    	    if (ruler.active == true) {
    		showHideForm("ruler","ruler_tresc","100px","15px",false);
    		rulerDiv.style.cursor = "pointer";
    		ruler.active = false;
    	    } else {
        	showHideForm("ruler","ruler_tresc","auto","auto",false);
        	rulerDiv.style.cursor = "default";
                ruler.active = true;             	    
    	    } 
        }
        
        /*Dodanie kontrolki przezroczystości*/
        loadTrackbar('tableVis', document.formInfo.transparency, map);
        
        /*Dodanie obsługi wyszukiwania*/
        document.getElementsByName('formSearch')[0].onsubmit = function() {
    	    searchPlace(map,this.searchText.value,'wyszukInfo','showPoint');
    	    return false;
        }
        
        google.maps.event.addListener(map,'idle', function() {
	    var center = this.getCenter();
	    var czoom = this.getZoom();
	    document.formLink.link.value =
		location.protocol +
		"//" +
		location.hostname +
		":" + location.port +
		location.pathname +
		"?z=" + czoom.toString() + "&x=" + center.lat() + "&y=" + center.lng();
	    var latlng = center;
	    document.formSearch.lat.value = latlng.lat() | 0;
	    document.formSearch.lng.value = latlng.lng() | 0;
	    document.formSearch.latmin.value = ((latlng.lat() * 60.0) - (latlng.lat()| 0) * 60.0) | 0;
	    document.formSearch.lngmin.value = ((latlng.lng() * 60.0) - (latlng.lng()| 0) * 60.0) | 0;
	    document.formSearch.latsec.value = ((latlng.lat() * 3600.0) - ((latlng.lat() * 60.0) | 0) * 60.0) | 0;
	    document.formSearch.lngsec.value = ((latlng.lng() * 3600.0) - ((latlng.lng() * 60.0) | 0) * 60.0) | 0;
	});
	
   $.ajax({
    type: "POST",
    url: "wms",
    data: "action=jsonAllDescription",
    success: function (msg) {
	var json = $.parseJSON(msg);
	var mapTypeIds = [google.maps.MapTypeId.ROADMAP,google.maps.MapTypeId.TERRAIN,google.maps.MapTypeId.SATELLITE];
	/* Przygotowanie miejsc na nowe mapy */
	for (var i = 0; i < json.maps.length; i++) {
	    mapTypeIds.push(newMapPrefixId + i);
	}
	var lat = json.mapStartPositionX;
	var lng = json.mapStartPositionY;
	var zoom = json.mapStartZoom;
	
	if (!isNaN(getURLParam('x')) && !getURLParam('x') == "")
	    lat = getURLParam('x') / 1;
	if (!isNaN(getURLParam('y')) && !getURLParam('y') == "")
	    lng = getURLParam('y') / 1;
	if (!isNaN(getURLParam('z')) && !getURLParam('z') == "")
	    zoom = getURLParam('z') / 1;
	    
	var latlng = new google.maps.LatLng(lat, lng);

        var myOptions = {
	    draggableCursor:"pointer",
	    zoom: zoom,
	    center: latlng,
	    mapTypeId: google.maps.MapTypeId.SATELLITE,
	    mapTypeControlOptions: {
		mapTypeIds: mapTypeIds
		}
	    };
	    
	map.setOptions(myOptions);    
	    
        /* Dodawanie nowych map */
	/*TODO: ? http://wiki.openstreetmap.org/wiki/Cycle_map*/
        for (var i = 0; i < json.maps.length; i++) {
            var layers =[];
            for (var j = 0;  j < json.maps[i].layers.length; j++) {
                layers.push(json.maps[i].layers[j].name);
            }
                                                                                         
    	    new MapType(map,
    		json.maps[i].useCache=='true'?'cache?':json.maps[i].adressWMS+'?',
    		json.maps[i].cacheName,
    		layers,
    		json.maps[i].label,
    		newMapPrefixId + i,
    		json.mapMinimumZoom,
    		json.mapMaximumZoom,
    		json.maps[i].useCache=='true'?'cache':'live',
    		false);
        }
        
        var link = new InfoLink();                    
        for (var i = 0; i < json.services.length; i++) {
    	    var layers =[];
    	    var layersLabels = [];
    	    for (var j = 0;  j < json.services[i].layers.length; j++) {
    		layersLabels.push(json.services[i].layers[j].title);
    		layers.push(json.services[i].layers[j].name);
    	    }
    	    var mapType = new MapType(map,
    			json.services[i].useCache=='true'?'cache?':json.services[i].adressWMS+'?service=WMS&',
    			json.services[i].cacheName,
    			layers,
    			json.services[i].title,
    			json.services[i].cacheName,
    			json.mapMinimumZoom,
    			json.mapMaximumZoom,
    			json.services[i].useCache=='true'?'cache':'live',
    			true,
    			json.services[i].imageType,
    			256,
    			json.services[i].tileSizeInWMS,
    			json.services[i].imageType=='image/jpeg'?false:true,
    			'legend',
    			layersLabels,
    			document.formInfo.transparency);
    	    link.services.push(json.services[i].cacheName);
    	    link.layersForServices.push(mapType);
    	}
    	
    	
        new MapType(map,
    			'vt?hl=pl&src=api&',
    			'Galil',
    			['h@155'],
    			'Google',
    			null,
    			6,
    			20,
    			'google',
    			true,
    			'image/png',
    			256,
    			256,
    			true,
    			'legend',
    			['Drogi i miasta']);
    			
    	for (var i = 0; i < json.KMLservices.length; i++) {
	    layers =[];
	    layersLabels = [];
	    for (var j = 0;  j < json.KMLservices[i].folders.length; j++) {
		layersLabels.push(json.KMLservices[i].folders[i].name);
		layers.push(i);
	    }
	    addKMLLayer(map, json.KMLservices[i].address, json.KMLservices[i].folders[0].name, json.KMLservices[i].name, layers, layersLabels, 'legend');
    	}
	
    	
    	    google.maps.event.addListener(map, 'click', function(event) {
    		if (ruler.active == false) {
    		    showInfoFromServlet(event.latLng, link, map, 'info');
    		}
    		});
    	    document.getElementById('showPoint').onclick = function () {
        	showPoint(map,document.getElementsByName('formSearch')[0],link,'info');
        }
		
	/*integracja z Wirtualnymi Wycieczkami*/	
    insertPanorama(map,'legend');
    
    },
    error: function (msg) {
	alert('Wystąpił błąd wczytywania pliku konfiguracyjnego.');
    }
    });

}
         
