/**
 * FMIS javaskript för klientsidan. Utskriftsfunktioner.
 * Version: CVS $Id: print.js,v 1.21 2009/10/20 11:03:16 niklas Exp $
 */

//<!--

var PRINT_WINDOW_ID = 'fornsok_utskrift';
var PRINT_WINDOW_PARAMS = 'width=800,height=600,status=yes,toolbar=no,menubar=no,resizable=yes,scrollbars=yes';

RAA.openPrintWindow = function(url,params) {
    var p;
    if (params) {
        p = params;
    } else {
        p = PRINT_WINDOW_PARAMS;
    }
    return RAA.openWindow(url,PRINT_WINDOW_ID,p,"utskrift");
}

RAA.openMapPrintWindow = function(e) {
    YAHOO.util.Event.stopEvent(e);
    return RAA.openPrintWindow(appBaseLink + 'printmap_callback.html', 'width=800,height=500,status=yes,toolbar=no,menubar=no,resizable=yes,scrollbars=no');
}

RAA.openObjectPrintWindow = function(e, objectId) {
	YAHOO.util.Event.stopEvent(e);
    if (!objectId) return null;
    return RAA.openPrintWindow(appBaseLink + 'objektutskrift.html?objektid=' + objectId + (histDateTime != null ? '&histDate=' + histDateTime : ''));
}

RAA.openSearchResultPrintWindow = function(e) {
    YAHOO.util.Event.stopEvent(e);
    var searchQueryString = RAA.createSearchQueryString(RAA.searchResultPage, true, true);
    return RAA.openPrintWindow(appBaseLink + 'sokresultatutskrift.html?' + searchQueryString);
}

RAA.getLayerPrintQsURL = function(map, layer, sld) {
	var clonedLayer = layer.clone();
	clonedLayer.singleTile = true;
	clonedLayer.ratio = 1.0;
	var params;
	if (sld) {
		params = {
	    	tiled: "false",
	    	sld: sld,
	    	styles: ""
		}
	} 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
	clonedLayer.displayInLayerSwitcher = false;
	map.addLayer(clonedLayer);
	var extent = map.getExtent().clone();
	var tmpUrl = clonedLayer.getURL(extent);
	if (/sverige|fastighet|sjokort/.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,10,11,12,13,14,15,16,17,18,20,21,23,26,27,28,29');
	    tmpUrl = tmpUrl.replace('fastighet', '0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,23,26,27,28,29');
	    tmpUrl = tmpUrl.replace('sjokort', '19,24,25');
	}
	map.removeLayer(clonedLayer);
	return tmpUrl;
}

RAA.getPrintSettings = function() {
    var opener = window.opener;
    var map = null;
    if (opener) map = opener.map;
    if (!map) {
        window.close();
        return;
    }
    // ev specialhantering av annan centrumpunkt för visa objekt
    if (opener.RAA.isLeftPanelAndShowObjectActive()) {
    	// flytta kartcentrum th
    	opener.RAA.tempPanSpecialRight(true);
    }
    var qsURLs = "";
    // klona synliga lager
    for (var index=0; index < map.getNumLayers(); index++) {
        var layer = map.layers[index];
        if (layer.CLASS_NAME == "OpenLayers.Layer.WMS" && layer.getVisibility()) {
        	if (qsURLs != "") {
        		qsURLs += "url=";
        	}
            qsURLs += RAA.getLayerPrintQsURL(map, layer);
        }
    }
    var markerLayer = map.getLayer("FMI_MARKERS");
    if (markerLayer && markerLayer.getVisibility()) {
	    // skapa lager för markerade träffar
	    var fmiLayer = map.getLayer("FMI");
	    if (fmiLayer && opener.RAA.printSLD != null) {
			if (qsURLs != "") {
				qsURLs += "url=";
			}
			qsURLs += RAA.getLayerPrintQsURL(map, fmiLayer, opener.RAA.printSLD);
	    }
	}
    document.getElementById('scale').value = Math.round(map.getScale());
    var mapExtent = map.getExtent();
    document.getElementById('x1').value = mapExtent.left;
    document.getElementById('x2').value = mapExtent.right;
    document.getElementById('y1').value = mapExtent.bottom;
    document.getElementById('y2').value = mapExtent.top;

    var info = RAA.getScalebarInfo(opener);
    document.getElementById('scaleBarGraphics').value = info.graphics;
    document.getElementById('scaleBarLabels').value = info.labels;
    document.getElementById('scaleBarUnit').value = info.unit;
    document.getElementById('scaleBarDim').value = info.dimension;

    var form = document.getElementById('printForm');
    var output = document.getElementById('printQsURLs');
    output.value = qsURLs;
    // ev specialhantering av centrumpunkt, tillbakaflytt
    if (opener.RAA.isLeftPanelAndShowObjectActive()) {
    	opener.RAA.tempPanSpecialLeft(true);
    }
    form.submit();
}

RAA.getScalebarInfo = function(opener) {
    var getDiv = YAHOO.util.Dom.getElementsByClassName;
    var hasClass = YAHOO.util.Dom.hasClass;

    var scalebarInfo = "";
    var scalebarDiv = opener.document.getElementById('scalebar');

    // ta ut grafiken
    var scaleBarGraphics = YAHOO.util.Dom.getElementsByClassName('olControlScaleBarGraphics', 'div', opener.document.getElementById('doc3'))[0];
    var graphicElements = scaleBarGraphics.childNodes;
    var graphics = "";

    // enkoda som en trippel typ, position, bredd
    for (var i = 0; i < graphicElements.length; i++) {
        var childElement = graphicElements.item(i);
        if (hasClass(childElement, 'olControlScaleBarMarkerMajor')) {
            graphics += "1;";
        } else if (hasClass(childElement, 'olControlScaleBarMarkerMinor')) {
            graphics += "2;";
        } else if (hasClass(childElement, 'olControlScaleBarBar')) {
            graphics += "3;";
        } else if (hasClass(childElement, 'olControlScaleBarBarAlt')) {
            graphics += "4;";
        } else {
            // fel!!!
        }
        graphics += childElement.style.left + ";";
        var width = childElement.style.width;
        if (width == undefined || width == null || width == '') {
            width = '-1'
        }
        graphics += width + ";";
    }
    // ta ut labels;
    var labels = "";
    var scaleBarLabels = YAHOO.util.Dom.getElementsByClassName('olControlScaleBarNumbers', 'div', opener.document.getElementById('doc3'))[0];
    var labelElements = scaleBarLabels.childNodes;
    // enkoda som ett par värde, position
    for (var i = 0; i < labelElements.length; i++) {
        var childElement = labelElements.item(i);
        if (hasClass(childElement, 'olControlScaleBarNumbersBox')) {
            labels += childElement.firstChild.nodeValue + ";";
        }
        labels += childElement.style.left + ";";
    }
    // ta ut enhet
    var scaleBarUnits = YAHOO.util.Dom.getElementsByClassName('olControlScaleBarUnits', 'div', opener.document.getElementById('doc3'))[0];
    var unitElement = scaleBarUnits.childNodes[0];
    var unit = unitElement.firstChild.nodeValue;

    // dimension
    var scaleBarWrapper = YAHOO.util.Dom.getElementsByClassName('olControlScaleBarWrapper', 'div', opener.document.getElementById('doc3'))[0];
    var dimension = scaleBarWrapper.style.width;
    dimension += ";" + scaleBarWrapper.style.height;

    var info = {
        "unit": unit,
        "graphics": graphics,
        "labels": labels,
        "dimension": dimension
    }
    return info;
}

// ----------------------  Event hooks  -------------------

RAA.addPrintListeners = function() {
    YAHOO.util.Event.addListener("printMapButton", "click", RAA.openMapPrintWindow);
}

// Print listeners
YAHOO.util.Event.onDOMReady(RAA.addPrintListeners);

//-->
