function MakeWktPolygon(x1, y1, x2, y2) {
    return "POLYGON((" + x1 + " " + y1 + ", " + x2 + " " + y1 + ", " + x2 + " " + y2 + ", " + x1 + " " + y2 + ", " + x1 + " " + y1 + "))";
}

function createLoadingPopup(map, context) {
    var popup = new OpenLayers.Popup("schoolPopup",
        map.getCenter(),
        null,
        "<img src='" + context + "/images/openlayers/ajax_activity_indicators_download_bigrotation2.gif' border='0' />",
        null, false, null
    );
    map.addPopup(popup, true, true);
    return popup;
}

function GetVisSelLayers() {
    var labelElts = document.getElementById("layers").getElementsByTagName("label");
    var ret = "";

    for (var i = 0; i < labelElts.length; i++) {
        var label = labelElts[i];
        var id = label.attributes['for'].value;
        var chk = document.getElementById(id);
        if (chk.checked) {
            if (ret != "") {
                ret += ",";
            }
            try {
                if (label.textContent) {
                    ret += label.textContent;
                } else {
                    ret += label.innerText;
                }
            } catch (e) {
                ret += label.innerText;
            }
        }
    }

    return ret;
}

function QueryFeatureInfo(geom, maxfeatures, sessionId, mapName, base_href)
{
    var url = base_href;
    var req = url + "?OPERATION=QUERYMAPFEATURES&VERSION=1.0.0&PERSIST=1&MAPNAME=" + encodeURIComponent(mapName) + "&SESSION=" + sessionId + "&SEQ=" + Math.random();

    req += "&LAYERNAMES=" + encodeURIComponent(GetVisSelLayers()) + "&GEOMETRY=" + geom + "&SELECTIONVARIANT=INTERSECTS";
    if (maxfeatures != 0)
        req += "&MAXFEATURES=" + maxfeatures;

    var selRequest = CreateRequestHandler();

    selRequest.open("GET", req, false);
    selRequest.send(null);

    parsePropertiesXML(selRequest.responseXML);

    var elt = getMapImage();
    refreshImageMap(elt, elt.src);
}

function parsePropertiesXML(doc) {
    if (doc == null) {
        return;
    }
    var properties = doc.getElementsByTagName("Property");
    var div = document.getElementById("properties");
    div.innerHTML = "";
    for (var i = 0; i < properties.length; i++) {
        var property = properties[i];
        div.innerHTML += (property.getAttribute("name") + " = " + property.getAttribute("value") + "<br/>");
    }
}

function refreshImageMap(elt, url) {
    url = url.replace(/&SEQ\=[\d\.]/, "");
    url += "&SEQ=" + Math.random();
    elt.src = url;
}

function CreateRequestHandler() {
    try {
        return new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {
        return new XMLHttpRequest();
    }
}

function RefreshLayers(mapLayers, map) {
    var layersElt = document.getElementById("layers");
    if (layersElt != null) {
        var layers = layersElt.getElementsByTagName("tr");
        for (var i = 0; i < layers.length; i++) {
            var layer = layers[i];
            if (layer.className == "layer") {
                var mapLayer = mapLayers[layer.getAttribute("id")];
                var name = mapLayer["name"];
                if (mapLayer["minScale"] <= map.getScale() && mapLayer["maxScale"] >= map.getScale()) {
                    layer.style.display = "";
                    layer.disabled = false;
                    var id = layer.getAttribute("id");
                    if (id.indexOf("_info") >= 0) {
                        id = id.substring(0, id.indexOf("_info")) + "_layer";
                        var control_layer = document.getElementById(id);
                        var visible = control_layer.getElementsByTagName("input")[0].checked;
                        layer.style.display = visible ? "" : "none";

                        if (visible) {
                            if (name == "Deprivation indicator (IDACI)") {
                                document.getElementById("idaciLegend").style.display = ""
                            }
                            if (name == "Urban rural indicator") {
                                document.getElementById("urbanLegend").style.display = "";
                            }
                        }
                    }
                } else {
                    if (layer.getAttribute("id").indexOf("_info") >= 0) {
                        layer.style.display = "none";
                    } else {
                        // hide unavailable OS layers
                        if (name == "Miniscale" || name.match(/^OS \d+K$/)) {
                            layer.style.display = "none";
                        } else {
	                        layer.disabled = true;
                        }

                        if (name == "Deprivation indicator (IDACI)") {
                            document.getElementById("idaciLegend").style.display = "none"
                        }
                        if (name == "Urban rural indicator") {
                            document.getElementById("urbanLegend").style.display = "none";
                        }
                    }
                }
            }
        }
    }
}


function RefreshLabelsVisibility(map, sessionId, context) {
    var retainHide = document.getElementById("viewLabel") != null && !document.getElementById("viewLabel").checked;
    var req = context + "/setLabelVisibility.xhtml?sessionId=" + sessionId + "&mapId=Library://Samples/LEA/Maps/LEA.MapDefinition&retainHide=" + retainHide;
    var extent = map.getExtent();
    req += "&left=" + extent.left;
    req += "&right=" + extent.right;
    req += "&top=" + extent.top;
    req += "&bottom=" + extent.bottom;
    var selRequest = CreateRequestHandler();
    selRequest.open("GET", req, false);
    selRequest.send(null);
    var doc = selRequest.responseXML;
    var result = doc.getElementsByTagName("Result")[0];
    if (result.getAttribute("refresh") == "yes") {
        var elt = getMapImage();
        refreshImageMap(elt, elt.src);
    }

    var viewLabel = document.getElementById("viewLabel");
    if (viewLabel != null) {
        viewLabel.style.display = result.getAttribute("count") > parseInt(result.getAttribute("maxFeatures")) ? "none" : "";
        var label = document.getElementById("viewLabelText");
        label.style.display = viewLabel.style.display;
        // image separator
        label.nextSibling.style.display = viewLabel.style.display;
    }
}

function querySchoolsInfo(map, x, y, sessionId, context, onlySchools) {
    var req = context + "/viewLayerInfo.xhtml?sessionId=" + sessionId + "&mapId=Library://Samples/LEA/Maps/LEA.MapDefinition";
    req += "&x=" + x;
    req += "&y=" + y;

    req += ("&onlySchools=" + (onlySchools ? "yes" : "no"));

    var px1 = map.getViewPortPxFromLonLat(new OpenLayers.LonLat(x, y));
    px1 = px1.add(-5, -5);
    var px2 = px1.add(10, 10);
    var l1 = map.getLonLatFromViewPortPx(px1);
    var l2 = map.getLonLatFromViewPortPx(px2);

    req += "&delta=" + (l2.lon - l1.lon);


    var selRequest = CreateRequestHandler();
    selRequest.open("GET", req, false);
    selRequest.send(null);

    return selRequest.responseXML;
}

function clickSchools(map, x, y, sessionId, context) {
    var doc = querySchoolsInfo(map, x, y, sessionId, context, true);
    if (doc == null) {
        return false;
    }

    var schools = doc.getElementsByTagName("School");

    if (schools.length != 0) {
        var school = schools[0];
        var html = "<div>";
        var urn = school.getAttribute("urn");

        var properties = school.getElementsByTagName("Property");
        var establishmentName, establishmentNumber, phase, type, la;
        for (var i = 0; i < properties.length; i++) {
            var name = properties[i].getAttribute("name");
            if (name == "EstablishmentName") {
                establishmentName = properties[i].getAttribute("value");
            }
            if (name == "EstablishmentNumber") {
                establishmentNumber = properties[i].getAttribute("value");
            }
            if (name == "LA code") {
                la = properties[i].getAttribute("value");
            }
            if (name == "PhaseOfEducation") {
                phase = properties[i].getAttribute("value");
            }
            if (name == "TypeOfEstablishment") {
                type = properties[i].getAttribute("value");
            }
        }

        html += "<b>" + la + "/" + establishmentNumber + " ";
        var title = "Click here to open establishment's record";
        html += "<a title=\"" + title + "\" href=\"" + context + "/establishment/summary.xhtml?urn=" + urn + "\">" + establishmentName + "</a></b><br/>";
        html += "Phase of Education = <b>" + phase + "</b><br/>";
        html += "Type of Establishment = <b>" + type + "</b>";

        html += "</div>";

        var popup = new OpenLayers.Popup.FramedCloud("schoolPopup",
                 new OpenLayers.LonLat(x, y),
                 null,
                 html,
                 null, true, null
        );

        map.addPopup(popup);
    }

    return false;
/*    var layers = doc.getElementsByTagName("Layer");

    var propertiesElt = document.getElementById("properties");

    propertiesElt.innerHTML = "";

    if (layers.length != 0) {
      for (var layerIdx = 0; layerIdx < layers.length; layerIdx++) {
        var layer = layers[layerIdx];
        var content = "";
        var features = layer.getElementsByTagName("Feature");
        if (features.length != 0) {
          content += "<h3>" + layer.getAttribute("caption") + "</h3>";
	        content += "<table class='search_results th_auto'>";
          var isFirst = true;
          for (var featureIdx = 0; featureIdx < features.length; featureIdx++) {
            var feature = features[featureIdx];
            var properties = feature.getElementsByTagName("Property");
            if (isFirst) {
              content += "<tr>";
              for (var propertyIdx = 0; propertyIdx < properties.length; propertyIdx++) {
                property = properties[propertyIdx];
                content += "<th>" + property.getAttribute("display") + "</th>";
              };
              content += "</tr>";
              isFirst = false;
            }
            content += "<tr>";
            for (var propertyIdx = 0; propertyIdx < properties.length; propertyIdx++) {
              property = properties[propertyIdx];
              content += "<td>" + property.getAttribute("value") + "</td>";
            };
            content += "</tr>";
          };
        }
        content += "</table><br/>";
        propertiesElt.innerHTML += content;
      };
    }

    return false;*/
}

function showSchoolToolTip(map, x, y, sessionId, context) {
    var doc = querySchoolsInfo(map, x, y, sessionId, context, true);
    if (doc == null) {
        return null;
    }

    var schools = doc.getElementsByTagName("School");

    if (schools.length > 0) {
        var school = schools[0];
        var properties = school.getElementsByTagName("Property");
        var name = null;
        for (var i = 0; i < properties.length; i++) {
            name = properties[i].getAttribute("name");
            if (name == "EstablishmentName") {
                name = properties[i].getAttribute("value")
                break;
            }
        }

        if (name == null) {
            return null;
        }

        var pt = map.getViewPortPxFromLonLat(new OpenLayers.LonLat(x, y));
        pt.x += 15;

        var toolTipPopup = new OpenLayers.Popup("schoolPopup",
            map.getLonLatFromViewPortPx(pt),
            new OpenLayers.Size(100, 10),
            "<div class='schoolPopup'>" + name + "</div>",
            null, false, null
        );

//		var div = document.createElement("div");
        //		div.outerHTML = "<div style='position:absolute;left:" + pt.x + "; top:" + pt.y + "border:solid black 1px; padding:0px; width:195px; background-color:white;'>" + name + "</div>";
        //		div.setAttribute("style", "position:absolute;left:" + pt.x + "px; top:" + pt.y + "px;border:solid black 1px; padding:0px; width:autopx; background-color:white;");
        //		div.appendChild(document.createTextNode(name));
        //		document.getElementById("map").appendChild(div);
        //		document.body.appendChild(div);
        toolTipPopup.autoSize = true;
        toolTipPopup.maxSize = new OpenLayers.Size(150, -1);
        toolTipPopup.opacity = -1;
        toolTipPopup.setBackgroundColor("none");
        toolTipPopup.moveTo(new OpenLayers.Pixel(50, 0));
        map.addPopup(toolTipPopup);
        return toolTipPopup;
    }

    return null;
}

function ShowHideLayers(elt, id) {
    document.getElementById(id + "_info").style.display = elt.checked ? "" : "none";
    ShowGroupLayers("", "", elt.checked ? id : "", !elt.checked ? id : "");
}

function ShowHideAllLayers(context) {
    var showIds = "";
    var hideIds = "";
    document.getElementById("urbanLegend").style.display = "none";
    document.getElementById("idaciLegend").style.display = "none"
    $$("#layers_content tr.layer input").each(function(elt) {
        var id = elt.getAttribute("id").replace("chk_", "id_");
        if (elt.parentNode.parentNode.style.display != "none") {
            document.getElementById(id + "_info").style.display = elt.checked ? "" : "none";
            if (elt.checked) {
                var label = document.getElementById(id.replace("id_", "label_chk_"));
                if (label.innerHTML == 'Urban rural indicator') {
                  document.getElementById("urbanLegend").style.display = "";
                  document.getElementById("idaciLegend").style.display = "none"
                } else if (label.innerHTML == 'Deprivation indicator (IDACI)') {
                  document.getElementById("idaciLegend").style.display = "";
                  document.getElementById("urbanLegend").style.display = "none";
                }
                showIds += id.replace("id_", "") + ",";
            } else {
                hideIds += id.replace("id_", "") + ",";
            }
        }
    });

    // remove last ','
    if (showIds.length > 0) {
        showIds = showIds.substr(0, showIds.length - 1);
    }

    if (hideIds.length > 0) {
        hideIds = hideIds.substr(0, hideIds.length - 1);
    }

    OpenLayers.Popup.COLOR = "transparent";
    var popup = createLoadingPopup(map, context);
    getMapImage().onload = function() {
      popup.hide();
      popup.destroy();
      getMapImage().onload = null;
    }

    ShowGroupLayers("", "", showIds, hideIds);
}


function getMapImage() {
    var elts = document.getElementsByTagName("img");
    var elt;

    for (var i = 0; i < elts.length; i++) {
        if (elts[i].id.indexOf("OpenLayersDiv") == 0) {
            elt = elts[i];
            break;
        }
    }
    return elt;
}

function ShowGroupLayers(showGroup, hideGroup, showLayer, hideLayer) {
    var elt = getMapImage();

    var url = elt.src;
    var param = "";
    if (showGroup != "") {
        param += "&SHOWGROUPS=" + showGroup;
    }
    if (hideGroup != "") {
        param += "&HIDEGROUPS=" + hideGroup;
    }
    if (showLayer != "") {
        param += "&SHOWLAYERS=" + showLayer;
    }
    if (hideLayer != "") {
        param += "&HIDELAYERS=" + hideLayer;
    }

    url = url.replace(/&(HIDEGROUPS|SHOWLAYERS|HIDELAYERS|SHOWGROUPS)\=[\d\w\-,]*/g, "");

    url += param;

    refreshImageMap(elt, url);
}

function activateTab(tab, contentId) {
    var tabsTogglers = tab.parentNode.parentNode.childNodes;
    for (var k = 0; k < tabsTogglers.length; k++) {
        var elt = tabsTogglers[k].childNodes[0];
        elt.className = elt == tab ? "on" : "";
    }

    var layer = document.getElementById('layers')
    var layerChilds = layer.childNodes;
    for (var i = 0; i < layerChilds.length; i++) {
        if (layerChilds[i].className === 'tabContent') {
            layerChilds[i].style.display = layerChilds[i].getAttribute("id") == contentId ? "block" : "none";
        }
    }
}


function clickSymbolCriterion(a, id) {

     var simbolHld = document.getElementById('symbols')
     var simbolChilds =  simbolHld.childNodes[0].childNodes;
     for (var i = 0; i < simbolChilds.length;i++) {
           if(simbolChilds[i].childNodes[0].childNodes[0].tagName == 'A'){
               simbolChilds[i].childNodes[0].className = "mapSymbol";
           }
     }
    a.parentNode.className = "currentMapSymbol";
    var symbolPlacer = document.getElementById('symbolPlacer')
    var symbolPlacerChilds =  symbolPlacer.childNodes;
      for (var i = 0; i < symbolPlacerChilds.length;i++) {
          var elt = symbolPlacerChilds[i];
          if (elt.getAttribute("id") != null && elt.getAttribute("id").indexOf("symbols_") == 0) {
               elt.style.display = "none";
          }
      }
    document.getElementById(id).style.display = "block";


//    $$("#symbols a").each(function(elt) {
//		elt.parentNode.className = "mapSymbol";
//	});
//
//	a.parentNode.className = "currentMapSymbol";
//	$$("#symbolPlacer div").each(
//        function(elt) {
//            if (elt.getAttribute("id") != null && elt.getAttribute("id").indexOf("symbols_") == 0) {
//                elt.style.display = "none";
//            }
//        }
//	);
//	document.getElementById(id).style.display = "block";
}

function setMapSymbols(criterionName, sessionId, context) {
    var req = context + "/setMapSymbols.xhtml?sessionId=" + sessionId + "&mapId=Library://Samples/LEA/Maps/LEA.MapDefinition";
    req += "&criterion=" + criterionName;
    var selRequest = CreateRequestHandler();
    selRequest.open("GET", req, false);
    selRequest.send(null);
    var doc = selRequest.responseXML;
    var elt = getMapImage();
    refreshImageMap(elt, elt.src);
}

function switchLabelsVisibility(val, sessionId, context) {
    var req = context + "/switchLabelVisibility.xhtml?sessionId=" + sessionId + "&mapId=Library://Samples/LEA/Maps/LEA.MapDefinition&show=" + val;
    var selRequest = CreateRequestHandler();
    selRequest.open("GET", req, false);
    selRequest.send(null);
    var elt = getMapImage();

    /*OpenLayers.Popup.COLOR = "transparent";
    var popup = createLoadingPopup(map, context);
    getMapImage().onload = function() {
      popup.hide();
      popup.destroy();
      getMapImage().onload = null;
    }*/

    refreshImageMap(elt, elt.src);
}

function createMeasureLayer(map, sessionId, context) {

    var lineOptions = {
        units: "m",
        styleMap: new OpenLayers.StyleMap({
            strokeWidth: 3,
            strokeOpacity: 1,
            strokeColor: "#666666",
            strokeDashstyle: "dash"
        })
    };

    var lineLayer = new OpenLayers.Layer.Vector("Measure Layer", lineOptions);

    var options = {
        handlerOptions: {
            freehand: false
        },
        callbacks: { "draw" :
            function() {
                var geometry = measureControl.handler.line.geometry.components;

                if (geometry.length > 0 && geometry.length < 3) {
                    document.getElementById("measureDistanceDesc").innerHTML = "Click on second point on map";
                }

                if (geometry.length == 3) {
                    measureControl.handler.finalize();
                    measureControl.deactivate();

                    var unit = null;
                    var unitName = null;
                    var inputs = document.getElementsByTagName('input');
                    for (var i = 0; i < inputs.length; i++) {
                        if (inputs[i].getAttribute('name') === 'distanceUnit') {
                                if (inputs[i].checked) {
                                    unit = inputs[i].value;
                                    unitName = inputs[i].nextSibling.innerHTML;
                                }
                        }
                    }
                    var req = context + "/measureDistance.xhtml?sessionId=" + sessionId + "&mapId=Library://Samples/LEA/Maps/LEA.MapDefinition";
                    req += "&x1=" + geometry[0].x;
                    req += "&y1=" + geometry[0].y;
                    req += "&x2=" + geometry[2].x;
                    req += "&y2=" + geometry[2].y;
                    req += "&type=" + unit;

                    var selRequest = CreateRequestHandler();
                    selRequest.open("GET", req, false);
                    selRequest.send(null);
                    var doc = selRequest.responseXML;

                    var distance = 0;
                    var values = doc.getElementsByTagName("Value");
                    for (var i = 0; i < values.length; i++) {
                        var valueItem = values[i];
                        var currentUnit = valueItem.getAttribute("unit");
                        var currentValue = valueItem.getAttribute("value");
                        document.getElementById("measurementValue_" + currentUnit).value = currentValue;
                        if (currentUnit == unit) {
                            distance = currentValue;
                        }
                    }

                    document.getElementById("measureDistanceDesc").innerHTML = "Distance is " + distance + " " + unitName;
                    measurePopup = new OpenLayers.Popup.FramedCloud("measurePopup",
                        new OpenLayers.LonLat(geometry[2].x, geometry[2].y),
                        null,
                        "<div style='padding:3px'>Distance is " + distance + " " + unitName + "<br/></div>",
                        null, true,
                        function() {
                            measureDistance(map, sessionId, context, true);
                            measurePopup.destroy();
                            measurePopup = null;
                        }
                    );
                    map.addPopup(measurePopup);
                }
            }
        }
    };
    map.addLayer(lineLayer);

    measureControl = new OpenLayers.Control.DrawFeature(lineLayer, OpenLayers.Handler.Path, options)
    map.addControl(measureControl);
}

function setMeasureUnit(elt) {
    var newUnit = elt.value;
    var newValue = document.getElementById("measurementValue_" + newUnit).value;
    document.getElementById("measureDistanceDesc").innerHTML = "Distance is " + newValue + " " + elt.nextSibling.innerHTML;
}

function clearMeasureDistance(map) {
    var elt = document.getElementById("measureDistance");
    elt.style.display = "none";
    var layers = map.getLayersByName("Measure Layer");
    if (layers.length > 0) {
        measureControl.deactivate();
        map.removeLayer(layers[0]);
    }
    if (measurePopup != null) {
        measurePopup.destroy();
    }
    document.getElementById("measureDistanceDesc").innerHTML = "";
}

function measureDistance(map, sessionId, context, clear) {
    var elt = document.getElementById("measureDistance");
    elt.style.display = "";
    var layers = map.getLayersByName("Measure Layer");
    if (layers.length > 0) {
        if (clear) {
            measureControl.deactivate();
	        map.removeLayer(layers[0]);
        } else {
            // do nothing and return
            return;
        }
    }

    document.getElementById("measurementValue_k").value = "0";
    document.getElementById("measurementValue_m").value = "0";
    document.getElementById("measurementValue_mt").value = "0";

    createMeasureLayer(map, sessionId, context);
    measureControl.activate();
    document.getElementById("measureDistanceDesc").innerHTML = "Click on first point on map";
}

function clearPrintInputs(form) {
	form.exportPng.value = '';
	form.exportPdf.value = '';
}

function clickMapToolbar(img) {
    var imgs = img.parentNode.childNodes;
    for (var i = 0; i < imgs.length; i++) {
        var elt = imgs[i];
        if(elt.className==='toolbarButton'){
            elt.src = elt.src.replace("_fon", "");
        }
    }
     img.src = img.src.replace(".gif", "_fon.gif");
}

function addZoomControl() {
    zoomControl = new OpenLayers.Control();
    OpenLayers.Util.extend(zoomControl, {
        draw: function () {
            this.box = new OpenLayers.Handler.Box(
                zoomControl,
                {"done": new OpenLayers.Control.ZoomBox().zoomBox},
                {keyMask: OpenLayers.Handler.MOD_NONE}
            );
            this.box.activate();
        }
    });
    map.addControl(zoomControl);
    zoomControl.activate();
}

function removeZoomControl() {
	if (zoomControl != null) {
		zoomControl.box.deactivate();
		zoomControl.deactivate();
	}
}

function showToolbar() {

  $$("#page_setup input[disabled]").each(function(elt) {
    elt.disabled = false;
  });

  var textStyleFunction = function(elt) {
    elt.className = "hide";
    if (elt.value == "Enter notes here" || elt.value == "Enter title here") {
      elt.className += " grayedInput";
      elt.onfocus = function() {
        if (elt.className.contains("grayedInput")) {
	      elt.className = "hide";
          elt.style.color = "black";
	      elt.value = "";
        }
      };
    }
  };

  $$("#print_area textarea").each(textStyleFunction);

  $$("#print_area input[type=text]").each(textStyleFunction);

  $$("#print_area pre").each(function(elt) {
    elt.className = "visible";
  });
}

function hideThematicLayer(name) {
    $$("#layers_content label").each(
        function(elt) {
          if (elt.innerHTML == name) {
            $(elt.attributes['for'].nodeValue).checked = false;
          }
        }
    );

    /*$$("div.thematicLegend").each(
        function(elt) {
            elt.style.display = "none";
        }
    );*/
}

function selectInputText(input) {
  if (input.selectionStart != null) {
    input.selectionStart = 0;
    input.selectionEnd = input.value.length;
  } else {
    var rng=input.createTextRange();
    rng.moveStart("textedit", 0);
    rng.moveEnd("textedit", input.value.length);
    rng.select();
   }
  input.focus();
}

function openMapURLGenerateWindow() {
    var div = $("saveMap");
    div.style.display = "";
    var toolbar = $("mapToolbar");
    div.style.top = (toolbar.offsetTop + 17 + toolbar.clientHeight) + "px";
    var mapLink = $("mapUrlLink");
    div.style.left = (mapLink.getPosition()["x"] - 31) + "px";
    var urlInput = $("mapUrl");
    urlInput.value = "";
    $("saveMapURLSection").style.display = "none";
    $("mapDescription").value = "";
}

function generateMapURL(sessionId, context, portalPath) {
    var description = $("mapDescription").value;
    var req = context + portalPath + "/saveMap.xhtml";
    var selRequest = CreateRequestHandler();
    selRequest.open("POST", req, false);
    selRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    var data = "sessionId=" + sessionId + "&mapId=Library://Samples/LEA/Maps/LEA.MapDefinition&description=" + encodeURIComponent(description);
    selRequest.send(data);
    var doc = selRequest.responseXML;

    var file = doc.getElementsByTagName("file");
    if (file == null || file.length == 0) {
        document.getElementById("mapUrl").innerHTML = "";
        alert("Map URL can't be generated");
    } else {
        $("saveMapURLSection").style.display = "";
        var link = file[0].getAttribute("baseUrl") + "/loadMap.xhtml?mapStoreId=" + file[0].getAttribute("id") + "&key=" + file[0].getAttribute("key");
        var div = $("saveMap");
        div.style.display = "";
        var toolbar = $("mapToolbar");
        div.style.top = (toolbar.offsetTop + 17 + toolbar.clientHeight) + "px";
        var mapLink = $("mapUrlLink");
        div.style.left = (mapLink.getPosition()["x"] - 31) + "px";
        var urlInput = $("mapUrl");
        urlInput.value = link;
        selectInputText(urlInput);
    }
}

function restrictMaxLength(obj, maxLen) {
  if (obj.value.length > maxLen) {
    obj.value = obj.value.substring(0, maxLen);
  }
}


function replaceNewLine(value) {
  return value.replace('\n', '<br/>');
}

function addPrintStyles(path, titleColor, notesColor) {
  document.write("<style type=\"text/css\" media=\"all\">@import url( " + path + "/styles/map_print_js.css );<\/style>");
  document.write("<style type=\"text/css\" media=\"all\">#mapTitle {color:" + titleColor + ";} #mapNotes {color:" + notesColor + ";}<\/style>");
}

function addMapJsStyle(path) {
    document.write("<style type=\"text/css\" media=\"all\">@import url( " + path + "/styles/map_js.css );<\/style>");
}
