var RAA = window.RAA || {};

RAA.closeMarkerPopup = function(e) {
	var layer = map.getLayer("BBR_MARKERS");
	if  (layer && layer.selectedFeature) {
		layer.markerClick.call(layer.selectedFeature, e);
	}
}

/**
 * Utskrift
 */
RAA.printPage = function() {
	if(!RAA.updatePrintMap()) {
		window.print();
	}
}

/**
 * Uppdatera kartbild i map_print-div
 */
RAA.updatePrintMap = function() {
	var printMapDiv = document.getElementById("map_print");
	if(printMapDiv != null) {
		RAA.clearDiv(printMapDiv);
	} else {
		return false;
	}
	var printMapdataDiv = document.getElementById("mapdata_print");
	if(printMapdataDiv != null) {
		RAA.clearDiv(printMapdataDiv);
	}	

	// AJAX-anrop för att generera kartbilden och returnera filnamn
	var urlString = RAA.getPrintMapUrlString();
	OpenLayers.loadURL("printmap", {'urlString' : urlString}, this, RAA.printCallback, RAA.errorCallback);

	return true;
}

/**
 * Rensa alla element i en DIV
 */
RAA.clearDiv = function(div) {
	var elements = div.getElementsByTagName("*");
	while(elements.length > 0) {
		div.removeChild(elements[0]);
	}
}

/**
 * AJAX-callback, sätter kartbildens filnamn, vilket
 * sedan matchas i sitemap
 */
RAA.printCallback = function(res) {
	var printMapDiv = document.getElementById("map_print");
	if(printMapDiv != null) {
		var imgElement = document.createElement("img");
		imgElement.setAttribute("src", "print/" + res.responseText);
		printMapDiv.appendChild(imgElement);
		
		var printMapdataDiv = document.getElementById("mapdata_print");
		if(printMapdataDiv != null) {
			var mapScaleDiv = document.getElementById("mapdataScale");
			if(mapScaleDiv != null) {
				var printMapScaleDiv = mapScaleDiv.cloneNode(true);
				printMapdataDiv.appendChild(printMapScaleDiv);
			}
		
			var copyrightTextDiv = document.createElement("div");
			copyrightTextDiv.setAttribute("id", "mapdata_print_copyright");
			copyrightTextDiv.setAttribute("class", "right");
			var copyrightText = document.createTextNode("Bakgrundskarta Copyright \u00A9 Lantmäteriet");
			copyrightTextDiv.appendChild(copyrightText);
			printMapdataDiv.appendChild(copyrightTextDiv);
		}
	}
	window.print();
}

/**
 * AJAX error-callback
 */
RAA.errorCallback = function(req) {
	window.print();
}

/**
 * Skapa URL-sträng som skickas till Print.createSingleLayerImage()
 */
RAA.getPrintMapUrlString = function() {
	var urlString = "";
	var layers = map.getLayersByClass("OpenLayers.Layer.WMS");
	for(var ii = 0; ii < layers.length; ii++) {
		var layer = layers[ii];
        if (layer.getVisibility()) {
        	if (urlString != "") {
        		urlString += "url=";
        	}
        	urlString += RAA.getLayerUrl(map, layer, null);
        }
	}

	var bbrLayer = map.getLayersByName("Byggnader");
    if (bbrLayer.length > 0) {
		if (urlString != "") {
			urlString += "url=";
		}
		urlString += RAA.getLayerUrl(map, bbrLayer[0], RAA.getSldUrl());
    }
    
	return encodeURIComponent(urlString);
}

/**
 * Hämta SLD-URL från DOM-trädet
 */
RAA.getSldUrl = function() {
	var sldUrlElem = document.getElementById("sldUrl");
	if(sldUrlElem == null) {
		return null;
	} else {
		return sldUrlElem.getAttribute("href");
	}
}

/**
 * Skapa URL-sträng för enskilt lager
 */
RAA.getLayerUrl = function(map, layer, sld) {
	var clonedLayer = layer.clone();
	clonedLayer.singleTile = true;
	clonedLayer.ratio = 1.0;
	var params;
	if (sld) {
		params = {
	    	tiled: "false",
	    	sld: sld
		}
	} else {
		params = {
	    	tiled: "false"
		}
	}
	clonedLayer.mergeNewParams(params);
	// tyvärr måste lagret läggas till kartan om man inte gör ett specialhack
	// som "klarar" this.map.getProjection() i WMS.getFullRequestString
	map.addLayer(clonedLayer);
	var extent = map.getExtent().clone();
	var tmpUrl = clonedLayer.getURL(extent);
	if (/sverige|fastighet/.test(clonedLayer.params.LAYERS)) {
		// bara qs för dessa
		tmpUrl = tmpUrl.substring(tmpUrl.indexOf('?'));
	    tmpUrl = tmpUrl.replace('sverige', '1,2,3,4,5,6,7,8,9,11,12,13,14,17,18,19,20');
	    tmpUrl = tmpUrl.replace('fastighet', '0,1,2,3,4,5,6,7,8,9,11,12,13,14,17,18,19,20');
	}
	map.removeLayer(clonedLayer);
	return tmpUrl;
}
