//
// part of myWMSClient
//
// Copyright (C) BT-GIS & Dietmar Stolz, V2.0 2007
//

var myHost = window.location.protocol+"//"+window.location.hostname+window.location.pathname;
var tmp = window.location.pathname.split("/");
myHost = myHost.replace(tmp[tmp.length-1],"");

var msgList = new Array();
var imgTitle = new Array();
var markerImg = new Image();
var navImgBar = new Array();
 /*
 navImgBar[0] = new Image(); navImgBar[0].src = "images/navbarN.gif";
 navImgBar[1] = new Image(); navImgBar[1].src = "images/navbarE.gif";
 navImgBar[2] = new Image(); navImgBar[2].src = "images/navbarS.gif";
 navImgBar[3] = new Image(); navImgBar[3].src = "images/navbarW.gif";
 navImgBar[4] = new Image(); navImgBar[4].src = "images/navbarNE.gif";
 navImgBar[5] = new Image(); navImgBar[5].src = "images/navbarSE.gif";
 navImgBar[6] = new Image(); navImgBar[6].src = "images/navbarSW.gif";
 navImgBar[7] = new Image(); navImgBar[7].src = "images/navbarNW.gif";
 */
 
 navImgBar[0] = new Image(); navImgBar[0].src = "images/pan_north.gif";
 navImgBar[1] = new Image(); navImgBar[1].src = "images/pan_east.gif";
 navImgBar[2] = new Image(); navImgBar[2].src = "images/pan_south.gif";
 navImgBar[3] = new Image(); navImgBar[3].src = "images/pan_west.gif";
 navImgBar[4] = new Image(); navImgBar[4].src = "images/pan_northeast.gif";
 navImgBar[5] = new Image(); navImgBar[5].src = "images/pan_southeast.gif";
 navImgBar[6] = new Image(); navImgBar[6].src = "images/pan_southwest.gif";
 navImgBar[7] = new Image(); navImgBar[7].src = "images/pan_northwest.gif";
 
var myNaviBar = true;
var myNaviBarWidth = 14;

var ie = document.all?1:0;
  if(navigator.userAgent.indexOf("Opera")>-1) { ie=0; }
var myCorrectFrameIE = 0; // correction when running in a frame
if(window.name && ie) { myCorrectFrameIE = 2; } // correction when client running in a frame
var resizeImg = new Image(); resizeImg.src = "images/resize.gif";
var transparentImg = new Image(); transparentImg.src = "images/transparent.gif";
var folderOpenImg = new Image(); folderOpenImg.src = "images/open.gif";
var folderCloseImg = new Image(); folderCloseImg.src = "images/close.gif";
var changeXYScImg = new Image(); changeXYScImg.src = "images/go.gif";
var scalebarImg = new Image(); scalebarImg.src = "images/scalebar.gif";
var waitImg = new Image(); waitImg.src = "images/sandclock.gif";
var maxImg = new Image(); maxImg.src = "images/open.gif";
var minImg = new Image(); minImg.src = "images/close.gif";

var myWMS = new Array();
var myBBox = new Array();
var myMaxBBox = new Array(0,0,0,0);
var myMapSize = new Array(500,500);
var myXY = new Array();
var myHome = new Array(); // x,y,scale
var myScale = 50000;
var myMinMaxScale = new Array(1,999999999);
var myMapPos = new Array(20,20);
var myAddNav = 0.5;
var myDebug = false;
var myResolution = 28.35*1.333;
var myMaxScaleMeasure = 99999999;
var myVendorSpecific = new Array();
var myQualityFillPoly = 2;
var myClickXY = new Array();
var myStartXY = new Array();
var myEndXY = new Array();
var myMapResize = null;
var myMapSizeMax = new Array(1500,1500);
var myMapSizeMin = new Array(300,300);
var myMapFrame = null;
var myMarker = new Array(-1,-1,myScale,""); // x,y,scale,objName
var mySlidePixel = new Array();
var mySlideActive = false;
var mySliderScale = myScale;
var mySliderPreview = true;
var myWheelHandler = true;
var myMashUp = false;
var myFeatureRequest2Mashup = false; // open featureInfo in mashup

var myIFrameActiveId = "myIFrame0";
var myMoveIFrame = true;
var myLanguage = "german";
var mySelection = false; // selection mode
var mySelectionAutoClose = true; // automa. poly close
var myCheckWMSComplete = true;
var myCount = 0;
var myActivButtonStyle = new Array("0px solid rgb(180,180,180)","1px solid rgb(255,0,0)");
var myActivButton = "";
var mySlideBarDir = false;
var myScaleList = new Array(500,1000,2000,3000,4000,5000,6000,7500,10000,15000,20000,25000,30000,40000,50000,60000,70000,75000,80000,100000,120000,125000,150000,160000,200000,250000,300000,320000,400000,500000,750000,800000,1600000,3200000);
var myScaleMatching = new Array(500,1000,2000,3000,4000,5000,6000,7500,10000,15000,20000,25000,30000,40000,50000,60000,70000,75000,80000,100000,120000,125000,150000,160000,200000,250000,300000,320000,400000,500000,750000,800000,1600000,3200000);
//var myScaleList = new Array(500,1000,2500,5000,10000,25000); //"scale|scale text"
//var myScaleMatching = new Array();
var mySliderScaleMatching = false;

var myPanActive = false;
var myZoomBoxActive = false;
var zbb = new Array();
var myMapHistory = new Array(); // x,y,sc
var myMeasure = new Array(); // x,y,dist,totaldist
var myMeasureActive = false;
var myMeasurePolyClosed = false;
var myShowMeasure = myHost+"/myWMSClientShowCoords.html";
var myMaxMeasurePoints = 50;
var myMeasureDashDist = 7;
var myMeasureFormat = 1; // 0:nothing; 1:tt+list; 2:list; 3:tt; 4:frame
var myWFSTol = 10; // tolerance wfs-filter point
var myUsemapID = "";
var myShowXYSc = true;
var myShowScalebar = true;
var myShowMapresize = true;
var myShowXYoutput = 2; // 1:Statuszeil; 2:XY-Feld

var myUMArea = "";
var myUMObject = new Object();

var myRegistration = false;

if(ie) { myFrameBorder = 2; } else { myFrameBorder = 0; }

if(!document.getElementById) {
  alert('Your browser needs DOM:\n\nNetscape >6.x\nInternet Explorer >5.x\nOpera >5.12\nMozilla Firefox >1.0\Konqueror >3.3\nSafari >1.2');
  this.location.href = transparentImg.src;
}

function my_setSkin() {

  if(myMapSize[0]>myMapSizeMax[0]) { myMapSize[0] = myMapSizeMax[0]; }
  if(myMapSize[1]>myMapSizeMax[1]) { myMapSize[1] = myMapSizeMax[1]; }

  document.write("<div id='layerMapBorder' style='position:absolute;left:"+(myMapPos[0])+"px;top:"+(myMapPos[1])+"px;width:"+(myMapSize[0])+"px;height:"+(myMapSize[1])+"px;overflow:hidden;border-width:1px'>");
    document.write("<div id='layerAll' style='position:absolute;left:0px;top:0px;width:"+(myMapSize[0])+"px;height:"+(myMapSize[1])+"px;background-color:white'>");
      for(var i=0;i<myWMS.length;i++) {
        my_createDiv("layerWMS"+i,0,0,0,0,true,"");
      }
      my_createDiv("layerUsemapHighlight",0,0,0,0,true,"");
      my_createDiv("divMarkerIcon",0,0,0,0,false,"");
      for(var i=0;i<myWMS.length;i++) {
        my_createDiv("layerUsemap"+i,0,0,0,0,true,"");
      }
      my_createDiv("layerMeasureLine",0,0,0,0,true,"");
      my_createDiv("layerMeasureRun",0,0,0,0,true,"");
      content = "<span id='divMarkerInfo' style='visibility:hidden' onmouseover='myMashUp=true' onmouseout='myMashUp=false' onclick='myMashUp=true'></span>";
      my_createDiv("layerMarker",0,0,0,0,false,content);
      my_createDiv("layerZoomBox",0,0,0,0,false,"");
      my_createDiv("divHighlightIcon",0,0,0,0,false,"");
      my_createDiv("divTooltip",0,0,0,0,false,"");
    document.write("</div>");
    my_createDiv("layerEventHandling",0,0,myMapSize[0],myMapSize[1],false,"");
    my_createDiv("layerPrintPreview1",0,0,0,0,false,"");
    my_createDiv("layerPrintPreview2",0,0,0,0,false,"");
    my_createDiv("layerPrintPreview3",0,0,0,0,false,"");
    my_createDiv("layerPrintPreview4",0,0,0,0,false,"");
  document.write("</div>");
  // dummy frame for usemap
  for(var i=0;i<myWMS.length;i++) {
    document.write("<iframe name='layerUsemapFrame"+i+"' id='layerUsemapFrame"+i+"' style='position:absolute;left:0px;top:0px;width:0px;height:0px;display:none'></iframe>");
  }
  // mapresizedivMapResize
  if(myShowMapresize) {
    document.write("<div id='divMapResize' style='position:absolute;left:"+(myMapSize[0]+myMapPos[0]-8-myFrameBorder)+"px;top:"+(myMapSize[1]+myMapPos[1]-8-myFrameBorder)+"px;width:13px;height:13px;background-image:url("+resizeImg.src+");background-repeat:no-repeat' onmousedown=my_mapResize() title='"+msgList[0]+"'></div>");
  }
  my_createDiv("divWaitIcon",(myMapSize[0]/2)+myMapPos[0],(myMapSize[1]/2)+myMapPos[1],-1,-1,true,"");
  my_createDiv("divScalebar",0,0,0,0,myShowScalebar,"");
  if(myNaviBar) { my_setNaviBar(); }
  // scale list
  var content = "";
  for(var i=0;i<myScaleList.length;i++) {
    tmp = myScaleList[i].toString().split('|');
    if(!tmp[1]) { tmp[1] = "1:"+tmp[0]; }
    content += "<a href='#' onclick=my_repaintXYSc(null,null,"+tmp[0]+")>1:"+tmp[0]+"</a>";
  }
  my_createDiv("divScaleList",0,0,62,myScaleList.length*12,true,content);

  var content = "";
  if(myShowXYSc) {
    content += "<form name='myFormXYSc' action='javascript:my_dialogXYSc()' onmouseover=my_selectStart(true) onmouseout=my_selectStart(false)>";
    content += "<font>"+msgList[1]+"</font>";
    content += "<input name='x' class='divStatusXY' value='' onfocus='document.onkeydown=null' title='"+msgList[7]+"'></input>";
    content += "<font>"+msgList[2]+"</font>";
    content += "<input name='y' class='divStatusXY' value='' onfocus='document.onkeydown=null' title='"+msgList[7]+"'></input>";
    content += "<img id='imgScList' src='"+folderOpenImg.src+"' title='"+msgList[6]+"' onclick=my_getMousePos(event);my_getID('divScaleList').style.left=myClickXY[0]+myMapPos[0];my_getID('divScaleList').style.top=myClickXY[1]+myMapPos[1];my_setScaleFromList() style='position:absolute;left:0px;top:0px;'>";
    content += "&nbsp;<input name='sc' class='divStatusSc' value='' onfocus='document.onkeydown=null' title='"+msgList[7]+"'></input>";
    content += "&nbsp;<input type='image' src='"+changeXYScImg.src+"' id='divChangeXYSc' onmouseover=my_mOverEl(this) onmouseout=my_mOutOfEl(this) title='"+msgList[5]+"' style='border:none;background-color:transparent'>";
    content += "</form>";
  }
  my_createDiv("divStatusbar",0,-100,0,0,true,content);
  my_createDiv("divInfo",-100,-100,0,0,true,"");

  //dummy frame
  content = "<iframe name='DUMMY'></iframe>";
  my_createDiv("DUMMY",0,0,0,0,false,content);
}

function my_selectStart(val) {
  document.body.onselectstart=function() { return val; }
}

function init() {
  my_sliderInit();
  my_getCGIParams1();
  myHome[0] = myXY[0];
  myHome[1] = myXY[1];
  myHome[2] = myScale;
  if(my_checkDIV("divWaitIcon")) { // for position
    my_arrangeElement("divWaitIcon",(myMapSize[0]/2)+myMapPos[0]-(waitImg.width/2),(myMapSize[1]/2)+myMapPos[1]-(waitImg.height/2));
  }
  my_subHide(); // show/hide submenu
  my_repaintXYSc(myXY[0],myXY[1],myScale);
  my_mapResizeNaviBar();
}

////////////////////////////
  // calling parameters
////////////////////////////

function my_getCGIParams1() {
  var obj = "";
  var argstr = location.search.substring(1,location.search.length);
  if(argstr.length > 0) {
    var args = argstr.toString().split('&');
    for(var i=0;i<args.length;i++) {
      var tmp = args[i].split('=');
      var nam = unescape(tmp[0]);
      var val = unescape(tmp[1]);
      if(nam.search(/\blanguage\b/i)> -1) { myLanguage = val; }
      if(nam.search(/\bx\b/i)> -1) { myXY[0] = Math.round(val); }
      if(nam.search(/\by\b/i)> -1) { myXY[1] = Math.round(val); }
      if(nam.search(/\bscale\b/i)> -1) { myScale = Math.round(val); }
      if(nam.search(/\blayers\b/i)> -1) {
        var lay = val.split(",");
        if(val != "") {
          for (var j=0;j<myWMS.length;j++) { myWMS[j][4] = false; }
          for (var j=0;j<lay.length;j++) { myWMS[lay[j]][4] = true; }
        }
      }
      if(nam.search(/\bobject\b/i)> -1) {
        myMarker = new Array();
        myMarker = val.split(",");
      }
      if(nam.search(/\bbbox\b/i)> -1) { my_bb2Scale(val.split(",")); }
      if(nam.search(/\bmeasure\b/i)> -1 && val != "") {
        var co = val.split(",")
        myMeasureFormat = 0;
        if(co.length > 4) {
          my_measureDelete();
          var k = 0;
          for(var j=0;j<co.length;j+=4) {
            myMeasure[k] = new Array(co[j]*1,co[j+1]*1,co[j+2]*1,co[j+3]*1);
            k++;
          }
          if(myMeasure[0][0]==myMeasure[myMeasure.length-1][0] && myMeasure[0][1]==myMeasure[myMeasure.length-1][1]) {
            myMeasurePolyClosed = true;
          } else { myMeasurePolyClosed = false; }
        }
      }
      if(nam.search(/\bdebug\b/i)> -1) {
        if(val == "true") { myDebug = true; }
      }
    }
  }
}

function my_getCGIParams() {
  var obj = "";
  var argstr = location.search.substring(1,location.search.length);
  if(argstr.length > 0) {
    var args = argstr.toString().split('&');
    for(var i=0;i<args.length;i++) {
      var tmp = args[i].split('=');
      var nam = unescape(tmp[0]);
      var val = unescape(tmp[1]);
      if(nam.search(/\bleft\b/i)> -1) { myMapPos[0] = Math.round(val); }
      if(nam.search(/\btop\b/i)> -1) { myMapPos[1] = Math.round(val); }
      if(nam.search(/\bwidth\b/i)> -1) { myMapSize[0] = Math.round(val); }
      if(nam.search(/\bheight\b/i)> -1) { myMapSize[1] = Math.round(val); }
    }
  }
}

////////////////////////////
  // maprequest
////////////////////////////

function my_setMapRequest() {

  my_MapRequestPreFunctions();
  my_usemapOut(); // disable usemap

  var requ = "&WIDTH=" + myMapSize[0]
   + "&HEIGHT=" + myMapSize[1]
   + "&SCALE=" + myScale
   + "&BBOX="+((myBBox[0]*100)/100)+","+((myBBox[1]*100)/100)+","+((myBBox[2]*100)/100)+","+((myBBox[3]*100)/100)
   + my_getVendorSpecificString();
  for(var i=0;i<myWMS.length;i++) { // after pan drop clear maps
    my_getID("layerUsemap"+i).innerHTML = ""; 
    my_getID("layerUsemap"+i).style.width = "0px";
    my_getID("layerUsemap"+i).style.height = "0px";
  }
  for(var i=0;i<myWMS.length;i++) {
    if(myWMS[i][0]) { //wms
      if(myWMS[i][0].indexOf('?') == -1) { myWMS[i][0] += "?"; }
      var newWMS = myWMS[i][0] + requ;
      if(myWMS[i][4] == false || my_checkLayerInScale(i) == false) { newWMS = transparentImg.src; }
      if(myDebug && myWMS[i][4] == true && newWMS.indexOf(transparentImg.src)==-1) { prompt("",newWMS); }
      my_getID("layerWMS"+i).innerHTML = "<img id='map"+i+"' name='mapimage'  style='position:absolute;left:0px;top:0px;width:"+myMapSize[0]+"px;height:"+myMapSize[1]+"px' src='"+newWMS+"' onError=my_WMSError("+i+") onAbort=my_stopWMS("+i+")>";
      my_sandclock(true,"map"+i);
    }
    if(myWMS[i][5]) { //wfs
      if(myWMS[i][5].indexOf('?') == -1) { myWMS[i][5] += "?"; }
      var newUm = myWMS[i][5] + requ + "&USEMAPLAYER=layerUsemap" + i;
      if(myWMS[i][4] && my_checkLayerInScale(i)) {
        if(myDebug) { prompt("",newUm); }
        my_arrangeElement("layerUsemap"+i,0,0,myMapSize[0],myMapSize[1]);
        window.frames["layerUsemapFrame"+i].location.replace(newUm);
      }
    }
  }
  my_changeMenu(); // layer in scale?
  my_MapRequestSubFunctions();
  my_arrangeElement("layerMapBorder",myMapPos[0],myMapPos[1],myMapSize[0],myMapSize[1]);
  my_arrangeElement("layerAll",0,0,myMapSize[0],myMapSize[1]);
  my_arrangeElement("layerEventHandling",0,0,myMapSize[0],myMapSize[1]);
  if(myMeasure.length>0) { my_drawDashedLine(); }
  my_setMarker(myMarker[0],myMarker[1],myMarker[2],myMarker[3],1);
}

function my_MapRequestPreFunctions() {}
function my_MapRequestSubFunctions() {}

// update layers in menu (layer in scale?)
function my_changeMenu() {
  for(var i=0;i<myWMS.length;i++) {
    my_getID("myWMS"+i).checked = myWMS[i][4];
    // layer not in scale
    if(my_checkLayerInScale(i)) {
       my_getID("myWMS"+i).disabled = "";
    } else {
       my_getID("myWMS"+i).disabled = "disabled";
    }
  }
}

function my_WMSError(id) {
  clearTimeout(aktiv);
  my_getID("divWaitIcon").innerHTML = "";
  my_getID("layerWMS"+id).innerHTML = "<img id='map"+id+"' name='mapimage' style='position:absolute;left:0px;top:0px;width:"+myMapSize[0]+"px;height:"+myMapSize[1]+"px' src='"+transparentImg.src+"'>";
  alert("Error: "+myWMS[id][1]+" is not accessible!\n\n("+myWMS[id][0]+")");
}

function my_stopWMS(id) {
  clearTimeout(aktiv);
  my_getID("divWaitIcon").innerHTML = "";
  if(id) {
    my_getID("layerWMS"+id).innerHTML = "<img id='map"+id+"' name='mapimage' style='position:absolute;left:0px;top:0px;width:"+myMapSize[0]+"px;height:"+myMapSize[1]+"px' src='"+transparentImg.src+"'>";
  }
}

function my_checkLayerInScale(id) {
  var myMinSc = false;
  var myMaxSc = false;
  if(myWMS[id][2] == 0 || myScale > myWMS[id][2]) { myMinSc = true; }
  if(myWMS[id][3] == 0 || myScale <= myWMS[id][3]) { myMaxSc = true; }
  if(myMinSc == true && myMaxSc == true) {
    return true;
  } else { return false }
}

function my_getLayersID() {
  var thisLayersID = new Array();
  for(var i=0;i<myWMS.length;i++) {
    if(myWMS[i][4] == true && my_checkLayerInScale(i)) {
      thisLayersID.push(i);
    }
  }
  return thisLayersID;
}

function my_getLink() {
  var url = window.location.protocol+"//"+window.location.host+window.location.pathname
   + "?X="+myXY[0]+"&Y="+myXY[1]+"&SCALE="+myScale+"&LAYERS="+my_getLayersID();
  if(myMarker[0]>0 && myMarker[1]>0) {
    url += "&OBJECT="+myMarker[0]+","+myMarker[1]+","+myMarker[2]+","+escape(myMarker[3]);
  }
  if(myMeasure.length>0) {
   url += "&MEASURE="+myMeasure;
  }
  return url;
}

function my_getCurrentStyle(element,cssPropertyName) {
  if(window.getComputedStyle) {
    return window.getComputedStyle(element,"").getPropertyValue(cssPropertyName.replace(/([A-Z])/g,"-$1").toLowerCase());
  } else if(element.currentStyle) {
    return element.currentStyle[cssPropertyName];
  } else { return ""; }
}

////////////////////////////
  // featureinfo requests
////////////////////////////

function my_setFeatureRequest() {
  my_eventLayer(false);
  my_featureInfoPreFunctions();
  if(mySelection == false) { return false; }
  mySelection = false;
  my_getFeatureInfoFrame();
  for(var i=0;i<myWMS.length;i++) {
    if(myWMS[i][4] == true && myWMS[i][6] != null && my_checkLayerInScale(i) == true) {
      if(myFeatureRequest2Mashup) {
        var newFI = "<iframe id='muIFrame' src='"+my_getFeatureInfoURL(i)+"' frameborder='0' scrolling='no' marginWidth='0' marginHeight='0'></iframe>";
        my_setMarker(myClickXY[0],myClickXY[1],null,newFI,1);
      } else {
        var newFI = my_getFeatureInfoURL(i);
        window.frames["layerUsemapFrame"+i].location.replace(newFI);
      }
      if(myDebug) { prompt("",newFI); }
    }
  }
  my_featureInfoSubFunctions();
}

function my_getFeatureInfoURL(id) {
  if(myWMS[id][6] == null) { alert("no featureRequest defined"); return false; }
  var pos = my_pixel2Meter(myClickXY[0],myClickXY[1]);
  if(myWMS[id][6].indexOf('?') == -1) { myWMS[id][6] += "?"; }
  var newFI = myWMS[id][6]
   + "&BBOX=" + myBBox
   + "&WIDTH=" + myMapSize[0]
   + "&HEIGHT=" + myMapSize[1]
   + "&X=" + myClickXY[0]
   + "&Y=" + myClickXY[1]
   + "&SCALE=" + myScale
   + my_getVendorSpecificString()
   + "&ID="+myUsemapID;
  var co = new Array();
  for(var j=0;j<myMeasure.length;j++) {
    co.push(myMeasure[j][0],myMeasure[j][1]);
  }
  if(co.length == 0) { co.push(pos[0],pos[1]); } //point
  newFI += "&SELAREA=" + co;

  // wfs filter
  var co = "";
  if(myMeasure.length>0) {
    for(var j=0;j<myMeasure.length;j++) {
      co += myMeasure[j][0]+","+myMeasure[j][1];
      if(j<myMeasure.length) { co += "+"; }
    }
  } else { // point
    co = (pos[0]-myWFSTol)+","+(pos[1]-myWFSTol)+"+"+(pos[0]+myWFSTol)+","+(pos[1]-myWFSTol)+"+"+(pos[0]+myWFSTol)+","+(pos[1]+myWFSTol)+"+"+(pos[0]-myWFSTol)+","+(pos[1]+myWFSTol);
  }
  newFI += ""
  + "&filter=<ogc:Filter><Intersects><ogc:PropertyName>msGeometry</ogc:PropertyName><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing>"
  + "<gml:coordinates>"+co+"</gml:coordinates>"
  + "</gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></Intersects></ogc:Filter>";
  return newFI;
}

function my_featureInfoPreFunctions() {}
function my_featureInfoSubFunctions() {}

////////////////////////////
  // selection tools
////////////////////////////
function my_setSelectionTool(val) {
  my_setMarker(-1,-1);
  switch(val) {
    case 1: //rectangle
      my_measureDelete();
      mySelection = true;
      my_zoomBoxInit();
    break;
    case 2: //poly
      my_measureDelete();
      mySelection = true;
      my_measureInit(0);
    break;
    case 3: //full map extend
      mySelection = true;
      zbb[0] = 2;
      zbb[1] = 2;
      zbb[2] = myMapSize[0]-1-myFrameBorder;
      zbb[3] = myMapSize[1]-1-myFrameBorder;
      my_zoomBoxStop();
      my_measureDelete();
    break;
    case 4: //update selection
      mySelection = true;
      my_setFeatureRequest();
    break;
  }
}

// featureinfo frame
function my_getFeatureInfoFrame() {
  try { window.frames["myIFrame1"].document.close(); } catch (e) {}
}

// view measure statistic
function my_getMeasureFrame(url) {
  if(myMeasure.length>0) { my_changeIFrame("myIFrame1",myShowMeasure); }
}

// set overview marker after map move
function my_getOverviewFrame() {
  try {
    window.frames["myOverviewFrame"].my_setOverviewBBox();
  } catch (e) {}
}

function my_registerVendorSpecific(stringFunction) {
  myVendorSpecific[myVendorSpecific.length] = stringFunction;
}

function my_getVendorSpecificString() {
  content = "";
  for(var j=0;j<myVendorSpecific.length;j++) {
    if(eval(myVendorSpecific[j])) {
      content += "&" + eval(myVendorSpecific[j]);
    }
  }
  return content;
}

////////////////////////////
  // navigation
////////////////////////////

function my_repaintXYSc(x,y,sc) {

  if(typeof(x) == "string") { x *= 1; }
  if(typeof(y) == "string") { y *= 1; }
  if(typeof(sc) == "string") { sc *= 1; }

  my_setVisibilityLayer("visible");
  my_hideHighlight();

  if(isNaN(x) == true || isNaN(y) == true || isNaN(sc) == true) { return; }
  if(!my_checkWMSComplete()) { return; }
  myCount++;
  var pos = new Array();
  if(x == null && y == null){
    pos = my_getXYSc();
    x = pos[0];
    y = pos[1];
  }
  if(sc == null || sc == "" || sc == "undefined") {
    pos = my_getXYSc();
    sc = pos[2];
  }
  if(sc<myMinMaxScale[0]) {
    my_repaintXYSc(x,y,myMinMaxScale[0]);
    if(msgList[14] != "") { alert(msgList[14]+ " 1:"+myMinMaxScale[0]); }
    return;
  }
  if(sc>myMinMaxScale[1]) {
    my_repaintXYSc(null,null,myMinMaxScale[1]);
    if(msgList[13] != "") { alert(msgList[13]+ " 1:"+myMinMaxScale[1]); }
    return;
  }

  sc = my_checkScaleMatching(sc);
  var bbtmp = new Array(myBBox[0],myBBox[1],myBBox[2],myBBox[3]);
  // bbox for ogc maprequest
  myBBox[0] = Math.round((x-(myMapSize[0]/(myResolution*100*2)*sc))*100)/100;
  myBBox[1] = Math.round((y-(myMapSize[1]/(myResolution*100*2)*sc))*100)/100;
  myBBox[2] = Math.round((x+(myMapSize[0]/(myResolution*100*2)*sc))*100)/100;
  myBBox[3] = Math.round((y+(myMapSize[1]/(myResolution*100*2)*sc))*100)/100;
  if(myMaxBBox[0]!=0 && (myBBox[0]<myMaxBBox[0] || myBBox[1]<myMaxBBox[1] || myBBox[2]>myMaxBBox[2] || myBBox[3]>myMaxBBox[3])) {
    myBBox = new Array(bbtmp[0],bbtmp[1],bbtmp[2],bbtmp[3]);
    my_arrangeElement("layerAll",0,0);
    my_eventLayer(false);
    alert(msgList[12]);
    my_setXYSc(myXY[0],myXY[1],null);
    return;
  }
  pos = my_getXYSc();
  myXY[0] = pos[0];
  myXY[1] = pos[1];
  myScale = pos[2];
  if(myVisSc == 1) { my_setScaleFromList(); }
  my_setXYSc(myXY[0],myXY[1],myScale);
  if(my_checkDIV("divScalebar")) { my_getID("divScalebar").innerHTML = my_scalebar(28.35); }
  my_eventLayer(false);
  my_measureStop();
  my_setSlider(myScale);
  my_setHistoryObj();
  my_setMapRequest();
  my_setKeyhandler();
  my_getOverviewFrame();
}

function my_checkScaleMatching(sc) {
  if(myScaleMatching.length>0 && myMapHistory[myMapHistory.length-1]) {
    var oldSc = myMapHistory[myMapHistory.length-1].toString().split(",");
    if(sc < oldSc[2]) { var tmp=1; }
    if(sc > oldSc[2]) { var tmp=0; }
    if(sc != oldSc[2]) {
      for(var i=0;i<myScaleMatching.length;i++) {
        if(sc == myScaleMatching[i]){break;}
        if(sc <= myScaleMatching[i]*1.01) { sc = myScaleMatching[i-tmp]; break; }
      }
    }
  }
  return(sc);
}

function my_setXYSc(x,y,sc) {
  if(my_checkDIV("divStatusbar")) {
    try {
      if(x != null) { document.myFormXYSc.x.value = x; }
      if(y != null) { document.myFormXYSc.y.value = y; }
      if(sc != null) { document.myFormXYSc.sc.value = "1:"+sc; }
    } catch (e) {}
  }
}

var myVisSc = 0;
function my_setScaleFromList() {
  my_eventLayer(false);
  vis = myVisSc;
  vis = (vis-1)*(vis-1);
  myVisSc = vis;
  if(myVisSc == 1) {
    my_getID("divScaleList").style.display = "inline";
    document.images["imgScList"].src = folderCloseImg.src;
  } else {
    my_getID("divScaleList").style.display = "none";
    document.images["imgScList"].src = folderOpenImg.src;
  }
}

function my_setVisibilityLayer(stat) {
  for(var i=0;i<myWMS.length;i++) {
    if(myWMS[i][5]) {
      my_getID("layerUsemap"+i).style.visibility = stat;
    }
  }
  my_getID("layerMeasureLine").style.visibility = stat;
  my_getID("layerMeasureRun").style.visibility = stat;
  my_getID("layerUsemapHighlight").style.visibility = stat;
  my_hideTT();
}

function my_dialogXYSc() {
  if(my_checkDIV("divStatusbar")) {
    try {
      var x = document.myFormXYSc.x.value;
      var y = document.myFormXYSc.y.value;
      var sc = document.myFormXYSc.sc.value;
    } catch (e) {}
  }
  sc = sc.replace(/1:/g,"");
  x = x.replace(/[.,]/g,"");
  y = y.replace(/[.,]/g,"");
  sc = sc.replace(/[.,]/g,"");
  if(isNaN(x) == true || isNaN(y) == true || isNaN(sc) == true) {
    alert(msgList[4]);
    my_setXYSc(myXY[0],myXY[1],myScale);
    my_eventLayer(false);
    return;
  }
  my_repaintXYSc(Math.abs(x),Math.abs(y),Math.abs(sc));
}

//maprequest is only possible when all WMS complete
function my_checkWMSComplete() {
  //needed for: key,nav,pan,slider-click,slider-drag,overview-click,overview-zoom,link,mapresize
  if(myCount>1 && myCheckWMSComplete && my_getID("divWaitIcon").innerHTML != "") {
    my_arrangeElement("layerAll",0,0);
    my_eventLayer(false);
    if(my_getID("divWaitIcon").innerHTML.search(/\berror\b/i) == -1) {
      my_getID("divWaitIcon").innerHTML+="<p class='error'>"+msgList[10]+"</p>";
    }
    return false;
  }
  return true;
}

function my_getXYSc() {
  var pos = new Array();
  pos[0] = Math.round(((myBBox[2]-myBBox[0])/2)+myBBox[0]);
  pos[1] = Math.round(((myBBox[3]-myBBox[1])/2)+myBBox[1]);
  pos[2] = Math.round(((myBBox[3]-myBBox[1])/myMapSize[1])*(myResolution*100));
  return pos;
}

function my_zoomMap(factor) {
 var pos = my_getXYSc();
 pos[2] *= factor;
 my_repaintXYSc(pos[0],pos[1],pos[2]);
}

function my_moveMap(addX,addY) {
  var pos = my_getXYSc();
  if(addX == -1 && addY == -1) { // center
     pos[0] = myHome[0];
     pos[1] = myHome[1];
     pos[2] = myHome[2];
     if(my_getID("myIFrame0")) { my_changeIFrame("myIFrame0"); }
  } else {
    var addX = (myBBox[2]-myBBox[0])*addX;
    var addY = (myBBox[3]-myBBox[1])*addY;
    pos[0] += addX;
    pos[1] += addY;
  }
  my_repaintXYSc(Math.round(pos[0]),Math.round(pos[1]),pos[2]);
}

function my_mOverEl(elName) {
  elName.style.fontSize = "0px";
  my_setClass(elName,"bntOver");
}

function my_mOutOfEl(elName) {
  elName.style.fontSize = "0px";
  my_setClass(elName,"bntOut");
}

function my_mClickEl(elName) {
  if(!elName && my_checkDIV(myActivButton)) { // default function:pan
    my_setClass(myActivButton,"bntOut");
  }
  var t = typeof(elName);
  if(t == "object") { elName = elName.id; }
  if(my_checkDIV(elName)) {
    if(my_checkDIV(myActivButton)) {
      my_setClass(myActivButton,"");
    }
    my_getID(elName).style.fontSize = "0px";
    my_setClass(elName,"bntClick");
    myActivButton = elName;
  }
}

function my_setInfo(val) {
  if(!val) { val = ""; }
  if(my_checkDIV("divInfo")) {
    my_getID("divInfo").innerHTML = val;
  }
}

function my_createDiv(elName,left,top,width,height,visible,content) {
  if(width>0 && height>0) {
    document.writeln('<div id="'+elName+'" style="position:absolute;left:'+left+'px;top:'+top+'px;width:'+width+'px;height:'+height+'px;visibility:'+(visible ? 'visible;' : 'hidden;')+'">');
  } else {
    document.writeln('<div id="'+elName+'" style="position:absolute;left:'+left+'px;top:'+top+'px;visibility:'+(visible ? 'visible;' : 'hidden;')+'">');
  }
  document.writeln(content);
  document.writeln('</div>');
}

function my_checkDIV(elName) {
  if(my_getID(elName)) { return true; } else { return false; }
}

function my_arrangeElement(elName,left,top,width,height) {
  var t =typeof(elName);
  if(t == "string") { elName = new Object(my_getID(elName)); }
  if(left != null) { elName.style.left = left; }
  if(top != null) { elName.style.top = top; }
  if(width) { elName.style.width = width; }
  if(height) { elName.style.height = height; }
}

function my_getMousePos(e) {
  if(ie) {
    myClickXY[0] = event.clientX+document.body.scrollLeft-myMapPos[0]-myFrameBorder+myCorrectFrameIE;
    myClickXY[1] = event.clientY+document.body.scrollTop-myMapPos[1]-myFrameBorder+myCorrectFrameIE;
  } else {
    myClickXY[0] = e.pageX-myMapPos[0]-myFrameBorder;
    myClickXY[1] = e.pageY-myMapPos[1]-myFrameBorder;
  }
}

function my_pixel2Meter(pixX,pixY) {
  var posX = myBBox[0]+(pixX/myMapSize[0])*(myBBox[2]-myBBox[0]);
  var posY = myBBox[3]-(pixY/myMapSize[1])*(myBBox[3]-myBBox[1]);
  posX = Math.round(posX*100)/100;
  posY = Math.round(posY*100)/100;
  return new Array(posX,posY);
}

function my_meter2Pixel(meterX,meterY) {
  var posX =((meterX-myBBox[0])/(myBBox[2]-myBBox[0]))*myMapSize[0];
  var posY =((myBBox[3]-meterY)/(myBBox[3]-myBBox[1]))*myMapSize[1];
  return new Array(posX,posY);
}

function my_bb2Scale(bb) {
  myXY[0] = ((bb[2]-bb[0])/2)+Math.round(bb[0]);
  myXY[1] = ((bb[3]-bb[1])/2)+Math.round(bb[1]);
  if( (bb[2]-bb[0]) > (bb[3]-bb[1]) ) {
    myScale = Math.round((((bb[2]-bb[0])/myMapSize[0])*1000*3.5)+(bb[2]-bb[0])/10);
  } else {
    myScale = Math.round((((bb[3]-bb[1])/myMapSize[1])*1000*3.5)+(bb[3]-bb[1])/10);
  }
}

function my_showHighlight(x,y) {
  if(my_checkDIV("divHighlightIcon")) {
    var pos = my_meter2Pixel(x,y);
    my_arrangeElement("divHighlightIcon",pos[0],pos[1]);
    my_getID("divHighlightIcon").style.visibility = "visible";
  }
  return false;
}

function my_hideHighlight() {
  if(my_checkDIV("divHighlightIcon")) {
    my_getID("divHighlightIcon").style.visibility = "hidden";
  }
  return false;
}

////////////////////////////
  // mapresize
////////////////////////////

function my_mapResize() {
  if(!my_checkWMSComplete()) { return; }
  window.scrollTo(0,0);
  document.onmousemove = my_mapResizeRun;
  document.onmouseup = my_mapResizeStop;
  my_eventLayer(true);
  myMapResize = my_getID("divMapResize");
  myMapResize.style.borderWidth = "2px";
  my_arrangeElement(myMapResize,myMapPos[0],myMapPos[1],myMapSize[0],myMapSize[1]);
}

function my_mapResizeRun(e) {
  my_getMousePos(e);
  myClickXY[0] += myMapPos[0]+myFrameBorder;
  myClickXY[1] += myMapPos[1]+myFrameBorder;
  if((myClickXY[0]-myMapPos[0])>myMapSizeMax[0] || (myClickXY[1]-myMapPos[1])>myMapSizeMax[1]) {
    my_mapResizeStop(e);
    alert(msgList[11]+" ("+myMapSizeMax[0]+"x"+myMapSizeMax[1]+")");
    return false;
  }
  my_arrangeElement(myMapResize,null,null,myClickXY[0]-myMapPos[0],myClickXY[1]-myMapPos[1]);
  return false;
}

function my_mapResizeStop(e) {
  document.onmousemove = null;
  document.onmouseup = null;
  if(isNaN(myClickXY[0]) == true || isNaN(myClickXY[0]) == true) {
    myClickXY = new Array(myMapPos[0]+myMapSize[0]+2,myMapPos[1]+myMapSize[1]+2);
  }
  if(myClickXY[0]-myMapPos[0] < myMapSizeMin[0]) {
    myClickXY[0] = myMapSizeMin[0];
  }
  if(myClickXY[1]-myMapPos[1] < myMapSizeMin[1]) {
    myClickXY[1] = myMapSizeMin[1];
  }
  if(myClickXY[0]-myMapPos[0] < myMapSizeMin[0] || myClickXY[1]-myMapPos[1] < myMapSizeMin[1]) {
    alert(msgList[11]+" ("+myMapSizeMin[0]+"x"+myMapSizeMin[1]+")");
  }
  var newMeterX = myBBox[0]+((((myBBox[2]-myBBox[0])/myMapSize[0])*(myClickXY[0]-myMapPos[0]))/2);
  var newMeterY = myBBox[3]-((((myBBox[3]-myBBox[1])/myMapSize[1])*(myClickXY[1]-myMapPos[1]))/2);
  myMapSize[0] = myClickXY[0]-myMapPos[0];
  myMapSize[1] = myClickXY[1]-myMapPos[1];
  my_arrangeElement(myMapResize,myMapSize[0]+myMapPos[0]-8-myFrameBorder,myMapSize[1]+myMapPos[1]-8-myFrameBorder,13,13);
  myMapResize.style.borderWidth = "0px";
  my_repaintXYSc(newMeterX,newMeterY,myScale);
  my_mapResizeNaviBar();
  my_mapResizeSubFunctions();
}

// after mapresize: redraw elements on new position
function my_mapResizeSubFunctions() {}

////////////////////////////
  // panning
////////////////////////////

function my_panInit() {
  myMapFrame.style.cursor = "pointer";
  myMapFrame.onmousedown = my_panStart;
  myMapFrame.onmousemove = my_panRun;
  myMapFrame.onmouseup = my_panStop;
}

function my_panStart(e) {
  if(myMashUp){ return; } //click on mashup win -> no featureinfo
  if(my_checkWMSComplete()) {
    myPanActive = true;
  } else {
    myPanActive = false;
  }
  myMapFrame.style.cursor = "move";
  my_getMousePos(e);
  myStartXY[0] = myClickXY[0];
  myStartXY[1] = myClickXY[1];
  myEndXY[0] = myClickXY[0];
  myEndXY[1] = myClickXY[1];
  return false;
}

function my_panRun(e) {
  window.status = "";
  my_getMousePos(e);
  if(myPanActive) {
    if(myClickXY[0]>0 && myClickXY[1]>0 && myClickXY[0]<myMapSize[0] && myClickXY[1]<myMapSize[1]) {
      myEndXY[0] = myClickXY[0];
      myEndXY[1] = myClickXY[1];
      var pos1 = my_pixel2Meter(myStartXY[0],myStartXY[1]);
      var pos2 = my_pixel2Meter(myEndXY[0],myEndXY[1]);
      my_arrangeElement("layerAll",myEndXY[0]-myStartXY[0],myEndXY[1]-myStartXY[1]);
    }
  } else {
    if(myShowXYoutput == 1) {
      var pos = my_pixel2Meter(myClickXY[0],myClickXY[1]);
      window.status = "XY: "+pos[0]+","+pos[1];
    }
    if(myShowXYoutput == 2 && my_checkDIV("divStatusbar")) {
      try {
        var pos = my_pixel2Meter(myClickXY[0],myClickXY[1]);
        document.myFormXYSc.x.value = Math.round(pos[0]);
        document.myFormXYSc.y.value = Math.round(pos[1]);
      } catch (e) {}
    }
  }
  return false;
}

function my_panStop(e) {
 if(myPanActive) {
   my_usemapOut();
   myPanActive = false;
   var dif_x = myEndXY[0]-myStartXY[0];
   var dif_y = myEndXY[1]-myStartXY[1];
   if(Math.abs(dif_x)>10 || Math.abs(dif_y)>10) {
     var newMeterX = ((myBBox[2]-myBBox[0])/myMapSize[0])*dif_x;
     var newMeterY = (((myBBox[3]-myBBox[1])/myMapSize[1])*dif_y)*-1;
     var pos = my_getXYSc();
     my_repaintXYSc(pos[0]-newMeterX,pos[1]-newMeterY,null);
   } else {
     my_arrangeElement("layerAll",0,0);
     my_eventLayer(false);
   }
   // start feature request
   if(dif_x == 0 && dif_y == 0) {
     my_setFeatureRequest();
   }
 }
 if(mySlideActive) { my_sliderStop(e); }
}


////////////////////////////
  // slidebar
////////////////////////////
function my_sliderInit() {
 if(my_checkDIV("divSlideBarIcon") && my_checkDIV("divSliderIcon")) {
  var mySlideBar = my_getID("divSlideBarIcon");
  var mySlideIcon = my_getID("divSliderIcon");
  if(parseInt(mySlideBar.style.width) > parseInt(mySlideBar.style.height)) { mySlideBarDir = true; } //horiz.
  if(mySlideBarDir) {
    mySlidePixel[0] = parseInt(mySlideBar.style.left)+parseInt(mySlideBar.style.width)-parseInt(mySlideIcon.style.width)/2-1; // right
    mySlidePixel[1] = parseInt(mySlideBar.style.left)+parseInt(mySlideIcon.style.width)/2; //left
  } else {
    mySlidePixel[0] = parseInt(mySlideBar.style.top)+parseInt(mySlideIcon.style.height)/2-1; //top
    mySlidePixel[1] = parseInt(mySlideBar.style.top)+parseInt(mySlideBar.style.height)-parseInt(mySlideIcon.style.height)/2-myFrameBorder; //bottom
  }
  mySlideBar.onclick = my_sliderRun;
  mySlideIcon.onmousedown = my_sliderStart;
 }
}

function my_sliderStart(e) {
  if(!my_checkWMSComplete()) {return;}
  document.onmousemove = my_sliderRun;
  document.onmouseup = my_sliderStop;
  my_eventLayer(true);
  mySlideActive = true;
  my_setVisibilityLayer("hidden");
  return false;
}

var myCorrSlider = new Array(-1,-1);
function my_sliderRun(e) {
  if(!my_checkWMSComplete()) {return;}
  if(myCorrSlider[0] != -1) { // slider runs in menue
    corr = new Array();
    corr[0] = parseInt(my_getID("layerMenu").style.left)+myCorrSlider[0]+myFrameBorder-myCorrectFrameIE;
    corr[1] = parseInt(my_getID("layerMenu").style.top)+myCorrSlider[1]+myFrameBorder-myCorrectFrameIE;
    myClickXY[0] = ie ? document.body.scrollLeft + event.clientX-corr[0] : e.pageX - corr[0];
    myClickXY[1] = ie ? document.body.scrollTop + event.clientY-corr[1] : e.pageY - corr[1];
  } else {
    my_getMousePos(e);
  }
  if(my_getID("myToolbar")) {
    myClickXY[0] -= parseInt(my_getID("myToolbar").style.left)+1;
    myClickXY[1] -= parseInt(my_getID("myToolbar").style.top);
  }
  myClickXY[0] += 1;
  if(mySlideBarDir) {
    myClickXY[0] += myMapPos[0];
      var proc = (100/(mySlidePixel[0]-mySlidePixel[1]))*(myClickXY[0]-mySlidePixel[1]);
  } else {
    myClickXY[1] += myMapPos[1];
    var proc = 100-((100/(mySlidePixel[1]-mySlidePixel[0]))*(myClickXY[1]-mySlidePixel[0]));
  }
  if(proc>100) { proc = 100; }
  if(proc<0) { proc = 0; }
  proc = proc/100;
  mySliderScale = Math.round((1-proc)*myMinMaxScale[1]+(proc*myMinMaxScale[0])-(proc*(1-proc)*myMinMaxScale[1]));
  if(mySliderScale && mySliderScale>=myMinMaxScale[0] && mySliderScale<=myMinMaxScale[1]) {
    if(mySliderScaleMatching) { mySliderScale = my_checkScaleMatching(mySliderScale); }
    my_setXYSc(null,null,mySliderScale);
    my_setSlider(mySliderScale);
    my_sliderMapResize(mySliderScale); // mapframe resizen
  }
  if(mySlideActive == false) { my_sliderStop(e); } else { return false; } //after slidebarclick->redraw, no mapslide
}

function my_setSlider(sc) {
 if(my_checkDIV("divSlideBarIcon") && my_checkDIV("divSliderIcon")) {
   var eqPart = Math.sqrt((myMinMaxScale[0]*myMinMaxScale[0])+(4*myMinMaxScale[1]*sc)-(4*myMinMaxScale[1]*myMinMaxScale[0]));
   var newPos = ((2*myMinMaxScale[1])-myMinMaxScale[0]+eqPart)/(2*myMinMaxScale[1]);
   if(newPos<0 || newPos>1) {
     newPos = ((2*myMinMaxScale[1])-myMinMaxScale[0]-eqPart)/(2*myMinMaxScale[1]);
   }
   if(newPos>1 || isNaN(newPos)) { newPos = 1; }
   if(mySlideBarDir) {
     my_getID("divSliderIcon").style.left = mySlidePixel[1]-((mySlidePixel[1]-mySlidePixel[0])*newPos)-parseInt(my_getID("divSliderIcon").style.width)/2;
   } else {
     newPos = 1-newPos;
     my_getID("divSliderIcon").style.top = mySlidePixel[0]+((mySlidePixel[1]-mySlidePixel[0])*newPos)-parseInt(my_getID("divSliderIcon").style.height)/2;
   }
 }
}

function my_sliderMapResize(sc) {
  if(mySliderPreview) {
    var scRatio = myScale/sc;
    var newW = myMapSize[0]*scRatio;
    var newH = myMapSize[1]*scRatio;
    var newLeft = (myMapSize[0]-newW)/2;
    var newTop = (myMapSize[1]-newH)/2;
    try {
      for(var i=0;i<myWMS.length;i++) {
        if(my_getID("map"+i).src.indexOf("transparent.gif")<0) {
          my_arrangeElement("map"+i,newLeft,newTop,newW,newH);
        }
      }
    } catch (e) {}
    posn = my_meter2Pixel(myMarker[0],myMarker[1]);
    tmpx = posn[0]*scRatio+newLeft;
    tmpy = posn[1]*scRatio+newTop;
    my_arrangeElement("divMarkerIcon",tmpx,tmpy);
    my_arrangeElement("layerMarker",tmpx,tmpy);
    my_arrangeElement("divMarkerInfo",tmpx,tmpy);
  }
}

function my_sliderStop(e) {
  document.onmousemove = null;
  document.onmouseup = null;
  mySlideActive = false;
  my_repaintXYSc(null,null,mySliderScale);
}

////////////////////////////
  // scalebar
////////////////////////////

function my_scalebar(res) {
  if(myScale<10){
    var unit = '10&nbsp;cm';
    var factor = 10/myScale;
    var img_width = Math.round(factor * res);
  }
  if(myScale>= 10 && myScale< 100){
    var unit = '1&nbsp;m';
    var factor = 100/myScale;
    var img_width = Math.round(factor * res);
  }
  if(myScale< 1000 && myScale>= 100){
    var unit = '10&nbsp;m';
    var factor = 1000/myScale;
    var img_width = Math.round(factor * res);
  }
  if(myScale< 10000 && myScale>= 1000){
    var unit = '100&nbsp;m';
    var factor = 10000/myScale;
    var img_width = Math.round(factor * res);
  }
  if(myScale< 100000 && myScale>= 10000){
    var unit = '1&nbsp;km';
    var factor = 100000/myScale;
    var img_width = Math.round(factor * res);
  }
  if(myScale< 1000000 && myScale>= 100000){
    var unit = '10&nbsp;km';
    var factor = 1000000/myScale;
    var img_width = Math.round(factor * res);
  }
  if(myScale< 10000000 && myScale>= 1000000){
    var unit = '100&nbsp;km';
    var factor = 10000000/myScale;
    var img_width = Math.round(factor * res);
  }
  if(myScale< 100000000 && myScale>= 10000000){
    var unit = '1000&nbsp;km';
    var factor = 100000000/myScale;
    var img_width = Math.round(factor * res);
  }
  if(myScale>= 100000000){
    var unit = '1000&nbsp;km';
    var factor = 100000000/myScale;
    var img_width = Math.round(factor * res);
  }
  var content = "<img src='"+scalebarImg.src+"' width='"+img_width+"'>";
  content += "<font style='position:absolute;left:"+(img_width+5)+";top:-5;color:white'>"+unit+"</font>";
  content += "<font style='position:absolute;left:"+(img_width+4)+";top:-6'>"+unit+"</font>";
  return content;
}


////////////////////////////
  // zoombox
////////////////////////////

function my_zoomBoxInit() {
  my_measureStop();
  my_eventLayer(true);
  myMapFrame.style.cursor = "crosshair";
  myMapFrame.onmousedown = my_zoomBoxStart;
  myMapFrame.onmousemove = my_zoomBoxRun;
  myMapFrame.onmouseup = my_zoomBoxStop;
}

function my_zoomBoxStart(e) {
  myZoomBoxActive = true;
  my_getMousePos(e);
  myStartXY[0] = myClickXY[0];
  myStartXY[1] = myClickXY[1];
  zbb = new Array(myClickXY[0],myClickXY[1],myClickXY[0],myClickXY[1]);
  return false;
}

function my_zoomBoxRun(e) {
  if(myZoomBoxActive) {
    my_getMousePos(e);
    var pos = my_pixel2Meter(myClickXY[0],myClickXY[1]);
    if(myStartXY[0] > myClickXY[0]) {
      zbb[0] = myClickXY[0];
      zbb[2] = myStartXY[0];
    } else {
      zbb[0] = myStartXY[0]-3+myFrameBorder;
      zbb[2] = myClickXY[0]-3+myFrameBorder;
    }
    if(myStartXY[1] > myClickXY[1]) {
      zbb[3] = myStartXY[1];
      zbb[1] = myClickXY[1];
    } else {
      zbb[1] = myStartXY[1]-3+myFrameBorder;
      zbb[3] = myClickXY[1]-3+myFrameBorder;
    }
    if((zbb[2]-zbb[0])>0 && (zbb[3]-zbb[1])>0 && zbb[0]>0 && zbb[1]>0 && zbb[2]<myMapSize[0] && zbb[3]<myMapSize[1]) {
      var myZoomBox = my_getID("layerZoomBox");
      myZoomBox.style.borderWidth = "1px";
      myZoomBox.style.visibility = "visible";
      my_arrangeElement("layerZoomBox",zbb[0],zbb[1],zbb[2]-zbb[0],zbb[3]-zbb[1]);
    }
    if(myShowXYoutput == 2 && my_checkDIV("divStatusbar")) {
      try {
        document.myFormXYSc.x.value = Math.round(pos[0]);
        document.myFormXYSc.y.value = Math.round(pos[1]);
      } catch (e) {}
    } else {
      window.status = "XY: "+pos[0]+","+pos[1];
    }
  }
  return false;
}

function my_zoomBoxStop(e) {
  myZoomBoxActive = false;
  myMapFrame.onmousedown = null;
  myMapFrame.onmousemove = null;
  myMapFrame.onmouseup = null;
  var pos1 = my_pixel2Meter(zbb[0],zbb[3]); //zbb(left-top,right-bottom)
  var pos2 = my_pixel2Meter(zbb[2],zbb[1]);
  var mapX = ((pos2[0]-pos1[0])/2)+pos1[0];
  var mapY = ((pos2[1]-pos1[1])/2)+pos1[1];
  if((pos2[0]-pos1[0])>(pos2[1]-pos1[1])) {
    var newSc = (myScale/(myBBox[2]-myBBox[0]))*(pos2[0]-pos1[0]);
  } else {
    var newSc = (myScale/(myBBox[3]-myBBox[1]))*(pos2[1]-pos1[1]);
  }
  my_getID("layerZoomBox").style.visibility = "hidden";
  if(mySelection) {
    if((zbb[2]-zbb[0]<10) || (zbb[3]-zbb[1]<10) || zbb[0]==zbb[2] || zbb[1]==zbb[3]) { // point selection
      my_setMarker(mapX,mapY,myScale,"",1);
    } else {
      myMeasureFormat = 0;
      my_measureDelete();
      myMeasure[0] = new Array(pos1[0],pos1[1],0,0);
      var dt = pos2[0]-pos1[0];
      myMeasure[1] = new Array(pos2[0],pos1[1],pos2[0]-pos1[0],dt);
      dt = pos2[1]-pos1[1]+dt;
      myMeasure[2] = new Array(pos2[0],pos2[1],pos2[1]-pos1[1],dt);
      dt = pos2[0]-pos1[0]+dt;
      myMeasure[3] = new Array(pos1[0],pos2[1],pos2[0]-pos1[0],dt);
      dt = pos2[1]-pos1[1]+dt;
      myMeasure[4] = new Array(pos1[0],pos1[1],pos2[1]-pos1[1],dt);
      myMeasurePolyClosed = true;
      my_drawDashedLine();
    }
    my_setFeatureRequest();
  } else {
    my_repaintXYSc(mapX,mapY,newSc);
  }
  zbb = new Array();
  window.status = "";
}


////////////////////////////
  // measure
////////////////////////////

function my_measureInit(val) { // 0:nothing; 1:tt+list; 2:list; 3:tt; 4:frame
  if(val > 0) { myMeasureFormat = val; } else { myMeasureFormat = 0; }
  if(myMeasurePolyClosed == true) { my_measureDelete(); }
  if(myMeasureFormat == 1 || myMeasureFormat == 2 || myMeasureFormat == 4) { my_getMeasureFrame(myShowMeasure); }
  my_eventLayer(true);
  myMeasureActive = true;
  myMapFrame.style.cursor = "crosshair";
  myMapFrame.onmousedown = my_measureStart;
  myMapFrame.onmousemove = my_measureRun;
  myMapFrame.ondblclick = my_polyClose;
  myMapFrame.onmouseup = null;
}

function my_measureStart(e) {
  myMeasurePolyClosed = false;
  my_getMousePos(e);
  if(ie) { var code = event.button; } else { var code = e.button; }
  if(code == 2 && myMeasure.length>0) { my_polyClose(); return; } // right mouseclick -> stop
  var pos = my_pixel2Meter(myClickXY[0],myClickXY[1]);
  myMeasure[myMeasure.length] = new Array(0,0,0,0);
  myMeasure[myMeasure.length-1][0] = (pos[0]*100)/100;
  myMeasure[myMeasure.length-1][1] = (pos[1]*100)/100;
  if(myMeasure.length > 1) {
    var dist_x = Math.abs(myMeasure[myMeasure.length-2][0]-myMeasure[myMeasure.length-1][0]);
    var dist_y = Math.abs(myMeasure[myMeasure.length-2][1]-myMeasure[myMeasure.length-1][1]);
    if(dist_x==0 && dist_y==0) { myMeasure.pop(); }
    else {
      var dist = Math.round(Math.sqrt(Math.pow(dist_x,2)+Math.pow(dist_y,2))*100)/100;
      myMeasure[myMeasure.length-1][2] = dist;
      var totalDist = myMeasure[myMeasure.length-2][3]+dist;
      myMeasure[myMeasure.length-1][3] = Math.round(totalDist*100)/100;
    }
  }
  // poly closed
  var d = my_getDistance(myMeasure[0][0],myMeasure[0][1],myMeasure[myMeasure.length-1][0],myMeasure[myMeasure.length-1][1]);
  var tol = 4*(myBBox[2]-myBBox[0])/myMapSize[1];
  if(tol<0.5) { tol = 0.3; }
  if(myMeasure.length>2 && d<tol) {
    myMeasurePolyClosed = true;
    myMeasure[myMeasure.length-1][0] = myMeasure[0][0];
    myMeasure[myMeasure.length-1][1] = myMeasure[0][1];
    my_polyClose();
  }
  my_drawDashedLine();
  if(myMeasure.length>myMaxMeasurePoints) {
    my_measureStop();
    alert(msgList[8]);
  }
  return false;
}

function my_measureRun(e) {
  my_setKeyhandler();
  my_getMousePos(e);
  var pos = my_pixel2Meter(myClickXY[0],myClickXY[1]);
  window.status = "XY: "+(Math.round(pos[0]*100)/100)+","+(Math.round(pos[1]*100)/100);
  if(myMeasure.length>0){
    var dist_x = Math.abs(myMeasure[myMeasure.length-1][0]-pos[0]);
    var dist_y = Math.abs(myMeasure[myMeasure.length-1][1]-pos[1]);
    if(isNaN(dist_x) == false) {
      // rubberline
      var posn = my_meter2Pixel(myMeasure[myMeasure.length-1][0],myMeasure[myMeasure.length-1][1]);
      var str_display = my_evaluateDashes(posn[0],posn[1],myClickXY[0],myClickXY[1],0);
      if(mySelection && mySelectionAutoClose) { //autom. close poly; 1st point to mousepos
        posn = my_meter2Pixel(myMeasure[0][0],myMeasure[0][1]);
        str_display += my_evaluateDashes(posn[0],posn[1],myClickXY[0],myClickXY[1],0);
      }
      var d = my_getDistance(myMeasure[0][0],myMeasure[0][1],pos[0],pos[1]);
      var tol = 4*(myBBox[2]-myBBox[0])/myMapSize[1];
      if(tol<0.5) { tol = 0.3; }
      if(myMeasure.length>2 && d<tol) {
        my_setClass("divPoint1","divMeasure1stPointOver");
        str_display += "<div style='position:absolute;left:"+(myClickXY[0]+2)+"px;top:"+(myClickXY[1]-18)+"px;z-index:2'><font class='divMeasureTextOver'>"+msgList[16]+"</font></div>";
      } else {
        my_setClass("divPoint1","divMeasure1stPoint");
        str_display += "<div style='position:absolute;left:"+(myClickXY[0]+2)+"px;top:"+(myClickXY[1]-18)+"px;z-index:2'><font class='divMeasureText'>"+(Math.round(Math.sqrt(Math.pow(dist_x,2)+Math.pow(dist_y,2))*1)/1)+"&nbsp;m</font></div>";
      }
    } else {
      var str_display = "";
    }
    my_getID("layerMeasureRun").innerHTML = str_display;
  }
  return false;
}

function my_measureStop() {
  myMeasureActive = false;
  window.status = "";
  my_getID("layerMeasureRun").innerHTML = "";
  myMapFrame.onmousedown = null;
  myMapFrame.onmousemove = null;
  myMapFrame.ondblclick = null;
  myMapFrame.onmouseup = null;
  my_eventLayer(false);
}

function my_measureDelete() {
  myMeasureActive = false;
  myMeasure = new Array();
  my_getID("layerMeasureLine").innerHTML = "";
  my_getID("layerMeasureRun").innerHTML = "";
  my_getID("divMarkerIcon").style.visibility = "hidden";
  myMeasurePolyClosed = false;
  my_eventLayer(false);
  window.status = "";
}

function my_drawDashedLine() {
  var str_mPoints = "";
  for(var i=0;i<myMeasure.length;i++) {
    var pos = my_meter2Pixel(myMeasure[i][0],myMeasure[i][1]);
    if(myMeasureFormat == 4 && myMeasureActive) { my_getMeasureFrame(myShowMeasure); } // not pan,zoom
    // 1. point
    if(i==0 && myMeasurePolyClosed == false) {
      if(ie) { wz=9;pz=5; } else { wz=7;pz=5; }
      str_mPoints += "<div id='divPoint1' class='divMeasure1stPoint' style='position:absolute;top:"+(pos[1]-pz)+"px;left:"+(pos[0]-pz)+"px;width:"+wz+"px;height:"+wz+"px'></div>";
    } else {
      // measure labels
      if(myScale<myMaxScaleMeasure && isNaN(myMeasure[i][3]) == false) {
        if(myMeasureFormat==1 || myMeasureFormat==3) { // output labels
          var tmp = "P"+i+":"+Math.round(myMeasure[i][3])+"m (+"+Math.round(myMeasure[i][2])+")";
          if(i == myMeasure.length-1 && myMeasurePolyClosed == true) { tmp += ";&nbsp;"+my_measureArea()+"m&sup2;"; }
          str_mPoints += "<div style='position:absolute;top:"+(pos[1]+1)+"px;left:"+(pos[0]+1)+"px;z-index:2'><font class='divMeasureText'>"+tmp+"</font></div>";
        }
      }
    }
  }
  if(myMeasure.length>1) {
    for(var k=1;k<myMeasure.length;k++){
      var pos0 = my_meter2Pixel(myMeasure[k][0],myMeasure[k][1]);
      var pos1 = my_meter2Pixel(myMeasure[k-1][0],myMeasure[k-1][1]);
      str_mPoints += my_evaluateDashes(pos1[0],pos1[1],pos0[0],pos0[1],0);
    }
  }
  my_getID("layerMeasureLine").innerHTML = str_mPoints;
}

function my_evaluateDashes(x1,y1,x2,y2,count) {
  var str_dashedLine = "";
  var s = myMeasureDashDist;
  var d = Math.sqrt(Math.pow((y1-y2),2)+Math.pow((x1-x2),2)) ;
  var n = Math.round(d/s);
  var s_x = (x2-x1)/n;
  var s_y = (y2-y1)/n;
  if(ie) { var ad=2; } else { var ad=2; }
  for(var i=0;i<=n;i++) {
    var x = Math.round(x1+i*s_x)-ad;
    var y = Math.round(y1+i*s_y)-ad;
    if(isNaN(x) == false && isNaN(y) == false && x>=0 && x<=myMapSize[0] && y>=0 && y<=myMapSize[1]) {
      if(i == 0 || i == n) { var myCl = "divMeasurePoint"; } else { var myCl = "divMeasureLine"; }
      str_dashedLine += "<div class='"+myCl+"' style='top:"+y+"px;left:"+x+"px'></div>";
    }
  }
  return str_dashedLine;
}

function my_polyClose() {
  if(myMeasure[0][0] == myMeasure[myMeasure.length-1][0] && myMeasure[0][1] == myMeasure[myMeasure.length-1][1]) {
    myMeasurePolyClosed = true;
  } else { myMeasurePolyClosed = false; }
  my_measureStop();
  if(mySelection) {
   if(mySelectionAutoClose) {
    if(myMeasure[0][0] != myMeasure[myMeasure.length-1][0]) {
      myMeasure.push(myMeasure[0]);
      myMeasurePolyClosed = true;
      my_drawDashedLine();
    }
    my_setFeatureRequest();
   } else {
    if(myMeasure[0][0] == myMeasure[myMeasure.length-1][0]) { my_setFeatureRequest(); }
   }
  } else {
    if(myMeasureFormat == 1 || myMeasureFormat == 2 || myMeasureFormat == 4) { my_getMeasureFrame(myShowMeasure); }
  }
}

function my_getDistance(dx1,dy1,dx2,dy2) {
  return Math.sqrt((dx1-dx2)*(dx1-dx2)+(dy1-dy2)*(dy1-dy2));
}

function my_measureArea() {
  var a = 0;
  if(myMeasurePolyClosed == true) {
    for(var i=1;i<myMeasure.length;i++) {
      a += (myMeasure[i-1][1]-myMeasure[i][1])*(myMeasure[i-1][0]+myMeasure[i][0]);
    }
    a = Math.abs(a/2);
    a = Math.round(a*1)/1;
  }
  return a;
}

function my_measureCenter() {
  if(myMeasure.length>0) {
    var bbPoly = my_getBBoxPoly();
    var w = Math.round(bbPoly[2]-bbPoly[0]);
    var h = Math.round(bbPoly[3]-bbPoly[1]);
    var ppm = 3.5;
    if(w > h) { sc = Math.round(((w/myMapSize[0])*1000*ppm)+w/1); }
    else { sc = Math.round(((h/myMapSize[1])*1000*ppm)+h/1); }
    myXY = new Array(Math.round((w/2)+parseFloat(bbPoly[0])),Math.round((h/2)+parseFloat(bbPoly[1])));
    if(sc<100) { sc = 100; }
    my_repaintXYSc(myXY[0],myXY[1],sc);
  }
}
function my_getBBoxPoly() {
  sortX = new Array();
  sortY = new Array();
  for(var i=0;i<myMeasure.length;i++) { sortX.push(myMeasure[i][0]);sortY.push(myMeasure[i][1]) }
  sortX.sort(my_numsort);
  sortY.sort(my_numsort);
  return new Array(sortX[0],sortY[0],sortX[sortX.length-1],sortY[sortY.length-1]);
}
function my_numsort(a,b) { return a-b; }

function my_measureInput(val) {
  if(!val) {
    n=prompt(msgList[15],"");
    if(n != null && n!="") {
      n = n.replace(/[ ;]/g,",");
      args = n.toString().split(',');
    }
  } else { args = val.toString().split(','); }
  my_measureDelete();
  var j = 0;

  //if(args[0] != args[args.length-2] && args[1] != args[args.length-1]) {
  //  args.push(args[0],args[1]);
  //}

  for(var i=0;i<args.length;i++) {
//    if(isNaN(args[i]) == false && args[i]>0 && isNaN(args[i+1]) == false && args[i+1]>0) {
    if(isNaN(args[i]) == false && isNaN(args[i+1]) == false) {
      if(args[i]<10000) { //poly comes in pixelcoords
        tmp = my_pixel2Meter(args[i],args[i+1]);
        args[i] = tmp[0]; args[i+1] = tmp[1];
      }
      myMeasure[j] = new Array(args[i],args[i+1],0,0);
      if(myMeasure.length > 1) {
        var dist_x = Math.abs(myMeasure[myMeasure.length-2][0]-myMeasure[myMeasure.length-1][0]);
        var dist_y = Math.abs(myMeasure[myMeasure.length-2][1]-myMeasure[myMeasure.length-1][1]);
        var dist = Math.round(Math.sqrt(Math.pow(dist_x,2)+Math.pow(dist_y,2))*100)/100;
        myMeasure[myMeasure.length-1][2] = dist;
        var totalDist = myMeasure[myMeasure.length-2][3]+dist;
        myMeasure[myMeasure.length-1][3] = Math.round(totalDist*100)/100;
      }
      j++;i++;
    }
  }
  myMeasureFormat = 0;
  my_polyClose();
  my_drawDashedLine();
  my_eventLayer(false);
}

////////////////////////////
  // keyhandler
////////////////////////////
function my_setKeyhandler() {
  window.focus();
  window.document.onkeydown = my_Keyhandler;
  if(myWheelHandler) {
    if (document.addEventListener) {
      document.addEventListener('DOMMouseScroll',my_mouseWheelEvent,false); // DOMMouseScroll for mozilla
    }
    document.onmousewheel = my_mouseWheelEvent; // ie/opera
    mySliderScale = myScale;
  }
}

function my_Keyhandler(k) {
  if(ie) { code = event.keyCode; } else { code = k.which; }
  if(code == 107 || code == 61 || code == 187) { my_zoomMap(0.7); }
  if(code == 109 || code == 189) { my_zoomMap(1.3); }
  if(code == 38) { my_moveMap(0,myAddNav); }
  if(code == 40) { my_moveMap(0,-myAddNav); }
  if(code == 39) { my_moveMap(myAddNav,0); }
  if(code == 37) { my_moveMap(-myAddNav,0); }
  if(code == 27) {
   if(my_getID("divWaitIcon").innerHTML != "") {
    my_stopWMS(); //NS: stop WMS request
   } else { my_measureDelete(); } //esc
  }
  if(code == 32) { my_measureStop(); }  //space
}

////////////////////////////
  // mousewheel
////////////////////////////
function my_mouseWheelEvent(event){
  var delta = 0;
  if (!event) { event = window.event; } // ie
  if (event.wheelDelta) { // ie/opera
    delta = event.wheelDelta/120;
    if (window.opera) { delta = -delta; }
  } else if (event.detail) { // mozilla
    delta = -event.detail/3;
  }
  if (delta) { my_mouseWheelHandle(delta); }
  if (event.preventDefault) { event.preventDefault(); }
  event.returnValue = false;
}

var myTimeOut = null;
function my_mouseWheelHandle(delta) {
  if(!my_checkWMSComplete()) { return; }
  if (delta < 0) { // zoom out
    mySliderScale *= 1.2;
    if(mySliderScale >= myMinMaxScale[1]) { mySliderScale = myMinMaxScale[1]; }
  } else {
    mySliderScale *= 0.8; // zoomin
    if(mySliderScale <= myMinMaxScale[0]) { mySliderScale = myMinMaxScale[0]; }
  }
  mySliderScale = parseInt(mySliderScale);
  if(mySliderScale && mySliderScale >= myMinMaxScale[0] && mySliderScale <= myMinMaxScale[1] && myScale != mySliderScale) {
    if(mySliderScaleMatching) { mySliderScale = my_checkScaleMatching(mySliderScale); }
    my_setXYSc(null,null,mySliderScale);
    my_setSlider(mySliderScale);
    my_setVisibilityLayer("hidden");
    my_sliderMapResize(mySliderScale); // mapframe resizen
    clearTimeout(myTimeOut);
    myTimeOut = setTimeout("my_repaintXYSc(null,null,mySliderScale)",500);
    return false;
  }
}

////////////////////////////
  // marker, highlight
////////////////////////////
function my_setMarker(x,y,sc,txt,obj) {
  if(x>0 && x<10000) { // x,y is pixelcoord
    tmp = my_pixel2Meter(x,y);
    x = tmp[0]; y = tmp[1];
  }
  if(x>0) {
    myMarker = new Array();
    myMarker[0] = x;
    myMarker[1] = y;
    if(!txt) { txt= ""; }
    if(txt != "") { myMarker[3] = txt; } else { myMarker[3] = ""; }
    if(sc != null) { myMarker[2] = sc; } else { myMarker[2] = myScale; }
    if(obj != 1) { // new marker is set
      my_repaintXYSc(myMarker[0],myMarker[1],myMarker[2]);
      myMarker[4] = obj;
    }
    var pos = my_meter2Pixel(myMarker[0],myMarker[1]);
    my_getID("divMarkerIcon").style.left = pos[0];
    my_getID("divMarkerIcon").style.top = pos[1];
    my_getID("divMarkerIcon").style.visibility = "visible";
    if(myMarker[3] != "" && pos[0]>0 && pos[1]>0 && pos[0]<myMapSize[0] && pos[1]<myMapSize[1]) {
      var tmp = my_createMaspupWin(txt);
      my_getID("divMarkerInfo").innerHTML = tmp;
      w = parseInt(my_getID("layerMarker").offsetWidth);
      h = parseInt(my_getID("layerMarker").offsetHeight);
      if((pos[0]+w)>myMapSize[0]) { pos[0] -= w; }
      if((pos[1]+h)>myMapSize[1]) { pos[1] -= h; }
      my_getID("layerMarker").style.left = pos[0];
      my_getID("layerMarker").style.top = pos[1];
      my_getID("layerMarker").style.visibility = "visible";
      my_getID("divMarkerInfo").style.visibility = "visible";
    } else {
      my_getID("divMarkerInfo").innerHTML = "";
      my_getID("divMarkerInfo").style.visibility = "hidden";
    }
  } else {
    my_getID("layerMarker").style.visibility = "hidden";
    my_getID("divMarkerInfo").style.visibility = "hidden";
    my_getID("divMarkerIcon").style.visibility = "hidden";
    myMarker = new Array(-1,-1,myScale,"");
  }
  myMashUp = false;
  my_eventLayer(false);
}

function my_createMaspupWin(val) {
  var tmp = "<table border='0' cellspacing='0' cellpadding='0' onmouseover=this.className='muOver'  onmouseout=this.className='muOut'>";

  tmp += "<tr>";
  tmp += "<td class='td1'></td>";
  tmp += "<td class='td2' colspan='2'></td>";
  tmp += "<td class='td3'></td>";
  tmp += "</tr>";

  tmp += "<tr>";
  tmp += "<td class='td4'></td>";
  tmp += "<td class='mu'>"+unescape(val)+"</td>";
  tmp += "<td class='td5' id='muClose' onclick=my_setMarker(-1,-1) title='"+msgList[17]+"'></td>";
  tmp += "<td class='td6'></td>";
  tmp += "</tr>";

  tmp += "<tr>";
  tmp += "<td class='td7'></td>";
  tmp += "<td class='td8' colspan='2'></td>";
  tmp += "<td class='td9'></td>";
  tmp += "</tr>";

  tmp += "</table>";
  return tmp;
}

function my_eventLayer(val) {
  if(val == true) {
    myMapFrame = my_getID("layerEventHandling");
    myMapFrame.style.visibility = "visible";
  } else {
    my_setInfo(msgList[9]);
    if(my_checkDIV("divPanIcon")) { my_mClickEl('divPanIcon'); } else { my_mClickEl(); }
    my_getID("layerEventHandling").style.visibility = "hidden";
    myMapFrame = my_getID("layerAll");
    my_panInit();
  }
}

////////////////////////////
  // usemap highlight
////////////////////////////

function my_usemapOver(val) {
  var tmp = typeof val;
  if (tmp == "string" && my_checkDIV(val)) { val = my_getID(val); }
  myUMObject = val;
  if(val.title) { myUsemapID = val.title; }
  if(val.coords) {
    var coords = val.coords.split(','); //POLY
    if(val.shape.toUpperCase() == "RECT") {
      coords = new Array(coords[0],coords[1],coords[0],coords[3],coords[2],coords[3],coords[2],coords[1],coords[0],coords[1]);
    }
    if(val.shape.toUpperCase() == "CIRCLE") {
      var x = coords[0]-coords[2];
      var y = coords[1]-coords[2];
      var t = Math.round(coords[2]*2/3);
      coords = new Array(x,y,x,y+t*3,x+t*3,y+t*3,x+t*3,y); // to rect
    }
    var Xcoords = my_umXCoords(coords);
    var Ycoords = my_umYCoords(coords);
    var pgx = Xcoords.split(',');
    var pgy = Ycoords.split(',');
    for (var i=0;i<pgx.length;i++) {
     pgx[i] = parseInt(pgx[i]);
     pgy[i] = parseInt(pgy[i]);
    }
    my_umFillPoly(pgx,pgy);
    my_getID("layerUsemapHighlight").innerHTML = myUMArea;
  }
  return false;
}

function my_usemapOut() {
  my_hideTT();
  myUMArea = "";
  my_getID("layerUsemapHighlight").innerHTML = myUMArea;
  myUsemapID = "";
  return false;
}

////////////////////////////
  // meter coords to poly
////////////////////////////
function my_setPoly(coords) {
  var xy = coords.split(',');
  coords = new Array();
  for(var i=0;i<xy.length;i=i+2) {
   pos = my_meter2Pixel(xy[i],xy[i+1]);
   coords.push(parseInt(pos[0]),parseInt(pos[1]));
  }
  var Xcoords = my_umXCoords(coords);
  var Ycoords = my_umYCoords(coords);
  var pgx = Xcoords.split(',');
  var pgy = Ycoords.split(',');
  for (var i=0;i<pgx.length;i++) {
    pgx[i] = parseInt(pgx[i]);
    pgy[i] = parseInt(pgy[i]);
  }
  my_umFillPoly(pgx,pgy);
  my_getID("layerUsemapHighlight").innerHTML = myUMArea;
}

function my_umXCoords(coords) {
  var Xcoords = '';
  for(var i=0;i<coords.length;i=i+2) {
    if(i>0) { Xcoords += ', '; }
    Xcoords += Math.round(coords[i]);
  }
  return Xcoords;
}
function my_umYCoords(coords) {
  var Ycoords = '';
  for(var i=1;i<coords.length;i=i+2) {
    if(i>1) { Ycoords += ', '; }
    Ycoords += Math.round(coords[i]);
  }
  return Ycoords;
}

function my_umFillPoly(array_x,array_y) {
  var i;
  var y;
  var miny, maxy;
  var x1, y1;
  var x2, y2;
  var ind1, ind2;
  var ints;
  var n = array_x.length;
  if (!n) return;
  miny = array_y[0];
  maxy = array_y[0];
  for(var i=1;i<n;i++) {
    if(array_y[i] < miny) miny = array_y[i];
    if(array_y[i] > maxy) maxy = array_y[i];
  }
  for(y=miny;y<=maxy;y+=myQualityFillPoly) {
    var polyInts = new Array();
    ints = 0;
    for(var i=0;i<n;i++) {
      if(!i) {
        ind1 = n-1;
        ind2 = 0;
      } else {
        ind1 = i-1;
        ind2 = i;
      }
      y1 = array_y[ind1];
      y2 = array_y[ind2];
      if(y1 < y2) {
        x1 = array_x[ind1];
        x2 = array_x[ind2];
      } else if(y1 > y2) {
        y2 = array_y[ind1];
        y1 = array_y[ind2];
        x2 = array_x[ind1];
        x1 = array_x[ind2];
      } else continue;
      if ((y >= y1) && (y < y2))
        polyInts[ints++] = Math.round((y-y1)*(x2-x1)/(y2-y1) + x1);
      else if ((y == maxy) && (y > y1) && (y <= y2))
        polyInts[ints++] = Math.round((y-y1)*(x2-x1)/(y2-y1) + x1);
      }
    polyInts.sort(my_IntegerCompare);
    for(var i=0;i<ints;i+=2) {
     my_umMakeDiv(polyInts[i],y,polyInts[i+1]-polyInts[i]+1,myQualityFillPoly);
    }
  }
}

function my_IntegerCompare(x,y) {
  return (x < y) ? -1 : ((x > y)*1);
}

function my_umMakeDiv(x,y,w,h) {
  if(x<0) { w += x; x = 0; }
  if((x+w)>myMapSize[0]){ w = myMapSize[0]-x; }
  if(w>=0 && x<myMapSize[0] && y>=0 && y<myMapSize[1]) {
    myUMArea += '<div class="divUsemapHighlight" style="'+
    'left:' + x + 'px;'+
    'top:' + y + 'px;'+
    'width:' + w + 'px;'+
    'height:' + h + 'px;'+
    'clip:rect(0,'+w+'px,'+h+'px,0);' +
    '"><\/div>';
  }
}


////////////////////////////
  // sandclock
////////////////////////////

var myWaitMaxTime = 20000 * 60;
var myWaitMinTime = 5000;

function my_sandclock(start,myMapId){
 if(my_checkDIV("divWaitIcon")) {
  if(start) {
    myWaitCount = myWaitMaxTime;
    var tmp = "<img src='"+waitImg.src+"'>";
    my_getID("divWaitIcon").innerHTML = tmp;
  }
  aktiv = setTimeout("my_sandclock('','"+myMapId+"')",100);
  myWaitCount -= 1000;
  var allMaps = document.getElementsByName("mapimage");
  var cnt = 0;
  for(var i=0;i<allMaps.length;i++) {
   if(allMaps[i].complete == true) { cnt++; }         
  }
  if((myWaitCount <= 0 || cnt >= allMaps.length) && myWaitCount < (myWaitMaxTime - myWaitMinTime)){
    clearTimeout(aktiv);
    my_getID("divWaitIcon").innerHTML = "";
  }
 }
}

////////////////////////////
 // history
////////////////////////////
function my_setHistoryObj() {
  var pos = my_getXYSc();
  if(myMapHistory.length <= 25) {
    myMapHistory.push(pos);
  } else {
    myMapHistory.shift();// fifo
    myMapHistory.push(pos);
  }
}
function my_setHistoryBack() {
  if(myMapHistory.length > 1) {
    myMapHistory.pop();// del actual
    var tmp = myMapHistory[myMapHistory.length-1];
    myMapHistory.pop();
    my_repaintXYSc(tmp[0],tmp[1],tmp[2]);
  }
}

////////////////////////////
 // iframe
////////////////////////////

var winDragElement=null;
function my_moveIFrame(element) {
  if(mySlideActive) { return; }
  if(!element) { element = "layerMenu"; }
  if(myMoveIFrame && my_checkDIV(element)) {
    winDragElement = my_getID(element);
    document.onmousedown = my_dragStart;
    document.onmousemove = my_dragRun;
    document.onmouseup = my_dragStop;
  }
}
function my_dragStart(e) {
  try {
    my_getMousePos(e);
    myStartXY[0] = myClickXY[0];
    myStartXY[1] = myClickXY[1];
  } catch (e) {}
  return false;
}

function my_dragRun(e) {
  try {
    parent.frames[0].focus(); // no focus lost
    my_getMousePos(e);
    winDragElement.style.left = (parseInt(winDragElement.style.left)+myClickXY[0]-myStartXY[0]);
    winDragElement.style.top = (parseInt(winDragElement.style.top)+myClickXY[1]-myStartXY[1]);
    myStartXY[0] = myClickXY[0];
    myStartXY[1] = myClickXY[1];
  } catch (e) {}
  return false;
}
function my_dragStop(e) {
  document.onmousedown = null;
  document.onmousemove = null;
  document.onmouseup = null;
  my_setKeyhandler();
}

function my_minMaxMenu() {
  if(my_getID("myMenuMinMax").src == minImg.src) {
    my_getID(myIFrameActiveId).style.display = "none";
    my_getID("myMenuMinMax").src = maxImg.src;
  } else {
    my_getID(myIFrameActiveId).style.display  = "block";
    my_getID("myMenuMinMax").src = minImg.src;
  }
}

// change menu frames
function my_changeIFrame(frm,url) {
  if(myCount == 0 && !ie) {
    var obj = my_getID("layerMenu");
    if(obj && obj.getElementsByTagName("table")[0]) {
      obj.getElementsByTagName("table")[0].style.width = parseInt(obj.getElementsByTagName("table")[0].style.width)+2;
    }
  }
  my_changeIFramePreFunctions(frm,url);
  myIFrameActiveId = frm;
  for(var i=0;i<10;i++) {
    if(my_checkDIV("myIFrame"+i) && my_checkDIV("myIFrame"+i+"Div")) {
      my_getID("myIFrame"+i).style.display = "none";
      my_setClass("myIFrame"+i+"Div","unselected");
   }
  }
  try {
    my_getID("myMenuMinMax").src = maxImg.src;
    my_minMaxMenu();
  } catch (e) {}
  if(url) {
    window.frames[frm].location.replace(url);
  }
  if(my_checkDIV(frm) && my_checkDIV(frm+"Div")) {
    my_getID(frm).style.display = "block";
    my_setClass(frm+"Div","selected");
  }

  if(frm != "myIFrame2") { // hide print preview
    my_getID("layerPrintPreview1").style.visibility = "hidden";
    my_getID("layerPrintPreview2").style.visibility = "hidden";
    my_getID("layerPrintPreview3").style.visibility = "hidden";
    my_getID("layerPrintPreview4").style.visibility = "hidden";
  }
  if(!myMeasureActive) {
    my_eventLayer(false);
  }
}

function my_changeIFramePreFunctions(frame,url) {}

////////////////////////////
 // menu
////////////////////////////

function my_subShow(obj,el) {
  var t = typeof(obj);
  if(t == "string") { obj= my_getID(obj); }
  if(!obj.getElementsByTagName) { return; }
  var mylis = obj.getElementsByTagName("li");
  if (!mylis) { return; }
  for(var i=0;i<mylis.length;i++) {
    if(mylis[i].style.display == "block") {
      if(el) { el.style.backgroundImage = "url("+folderOpenImg.src+")"; }
      mylis[i].style.display = "none";
    } else {
      mylis[i].style.display = "block";
      if(el) { el.style.backgroundImage = "url("+folderCloseImg.src+")"; }
    }
  }
  return false;
}

function my_subHide() {
  if(my_getID("myIFrame0")) {
    var obj = my_getID("myIFrame0");
    if(obj.getElementsByTagName("li")) {
      var mylis = obj.getElementsByTagName("li");
      for(var i=0;i<mylis.length;i++) {
        var sublis = mylis[i].getElementsByTagName("li"); 
        for(var j=0;j<sublis.length;j++)  {
          if(sublis[j].style) {
            var tmp = mylis[i].getElementsByTagName("a");
            for(var k=0;k<tmp.length;k++) {
              if(tmp[k].className.search(/aMain/i)>-1 && mylis[i].className == "show") {
               tmp[k].style.backgroundImage = "url("+folderCloseImg.src+")";
              }
              if(tmp[k].className.search(/aMain/i)>-1 && mylis[i].className == "hide") {
                tmp[k].style.backgroundImage = "url("+folderOpenImg.src+")";
              }
            }
            if(mylis[i].className == "show") {
              sublis[j].style.display = "block";
            } else {
              sublis[j].style.display = "none"
            }
          }
        }
      }
    }
  }
  for(var i=0;i<10;i++) {
   if(my_checkDIV("myIFrame"+i)) {
     my_getID("myIFrame"+i).style.visibility = "visible";
   }
  }
}

function my_mailTo(subj) {
  this.location = "mailto:?subject="+subj+"&body="+encodeURIComponent(my_getLink());
}

////////////////////////////
 // navigation bar
////////////////////////////
function my_setNaviBar() {
 if(myNaviBar) {
    for(var i=0;i<=7;i++) {
      content="<img src='"+navImgBar[i].src+"'>";
      my_createDiv("divNavIcon"+i,-20,-20,-1,-1,true,content);
    }
    document.write("<div id='divNavN' class='naviBar' onclick='my_moveMap(0,myAddNav)' onmouseover=my_navOver('divNavN') onmouseout=my_navOut('divNavN') title='"+imgTitle[0]+"'></div>");
    document.write("<div id='divNavE' class='naviBar' onclick=my_moveMap(myAddNav,0) onmouseover=my_navOver('divNavE') onmouseout=my_navOut('divNavE') title='"+imgTitle[3]+"'></div>");
    document.write("<div id='divNavS' class='naviBar' onclick='my_moveMap(0,-myAddNav)' onmouseover=my_navOver('divNavS') onmouseout=my_navOut('divNavS') title='"+imgTitle[1]+"'></div>");
    document.write("<div id='divNavW' class='naviBar' onclick='my_moveMap(-myAddNav,0)' onmouseover=my_navOver('divNavW') onmouseout=my_navOut('divNavW') title='"+imgTitle[2]+"'></div>");
    document.write("<div style='width:0px;height:0px' onmouseover=my_navOver('divNavNE1,divNavNE2') onmouseout=my_navOut('divNavNE1,divNavNE2') onclick=my_moveMap(myAddNav,myAddNav) title='"+imgTitle[5]+"'><span id='divNavNE1' class='naviBar'></span><span id='divNavNE2' class='naviBar'></span></div>");
    document.write("<div style='width:0px;height:0px' onmouseover=my_navOver('divNavSE1,divNavSE2') onmouseout=my_navOut('divNavSE1,divNavSE2') onclick=my_moveMap(myAddNav,-myAddNav) title='"+imgTitle[6]+"'><span id='divNavSE1' class='naviBar'></span><span id='divNavSE2' class='naviBar'></span></div>");
    document.write("<div style='width:0px;height:0px' onmouseover=my_navOver('divNavSW1,divNavSW2') onmouseout=my_navOut('divNavSW1,divNavSW2') onclick=my_moveMap(-myAddNav,-myAddNav) title='"+imgTitle[8]+"'><span id='divNavSW1' class='naviBar'></span><span id='divNavSW2' class='naviBar'></span></div>");
    document.write("<div style='width:0px;height:0px' onmouseover=my_navOver('divNavNW1,divNavNW2') onmouseout=my_navOut('divNavNW1,divNavNW2') onclick=my_moveMap(-myAddNav,myAddNav) title='"+imgTitle[7]+"'><span id='divNavNW1' class='naviBar'></span><span id='divNavNW2' class='naviBar'></span></div>");
  }
}
function my_navOver(val) {
  var val = val.split(",");
  for(var i=0;i<val.length;i++) {
    my_setClass(val[i],"naviBarOver");
  }
}
function my_navOut(val) {
  var val = val.split(",");
  for(var i=0;i<val.length;i++) {
    my_setClass(val[i],"naviBar");
  }
}
function my_mapResizeNaviBar() {

  if (myNaviBar) {
    var v = parseInt(myMapSize[1]/4); // width navigation edge
    var b = myNaviBarWidth;
    if(b<1) { b = 1; }
    var i = parseInt(navImgBar[1].width);

    my_arrangeElement("divNavN",myMapPos[0]+v,myMapPos[1]+1,myMapSize[0]-(2*v),b+2);
    my_arrangeElement("divNavE",myMapSize[0]+myMapPos[0]-b-myFrameBorder-1,myMapPos[1]+v,b+2,myMapSize[1]-(2*v));
    my_arrangeElement("divNavS",myMapPos[0]+v,myMapPos[1]+myMapSize[1]-b-myFrameBorder-1,myMapSize[0]-(2*v),b+2);
    my_arrangeElement("divNavW",myMapPos[0]+1,myMapPos[1]+v,b+2,myMapSize[1]-(2*v));
    my_arrangeElement("divNavNE1",myMapPos[0]+myMapSize[0]-v,myMapPos[1]+1,v-b-myFrameBorder-1,b+2);
    my_arrangeElement("divNavNE2",myMapPos[0]+myMapSize[0]-b-myFrameBorder-1,myMapPos[1]+1,b+2,v-2);
    my_arrangeElement("divNavSE1",myMapPos[0]+myMapSize[0]-v,myMapPos[1]+myMapSize[1]-b-myFrameBorder-1,v-b-myFrameBorder-1,b+2);
    my_arrangeElement("divNavSE2",myMapPos[0]+myMapSize[0]-b-myFrameBorder-1,myMapPos[1]+myMapSize[1]-v,b+2,v-myFrameBorder+2);
    my_arrangeElement("divNavSW1",myMapPos[0]+b+3,myMapPos[1]+myMapSize[1]-b-myFrameBorder-1,v-b,b+2);
    my_arrangeElement("divNavSW2",myMapPos[0]+1,myMapPos[1]+myMapSize[1]-v,b+2,v-myFrameBorder+2);
    my_arrangeElement("divNavNW1",myMapPos[0]+b+3,myMapPos[1]+1,v-b,b+2);
    my_arrangeElement("divNavNW2",myMapPos[0]+1,myMapPos[1]+1,b+2,v-2);

    my_arrangeElement("divNavIcon0",myMapPos[0]+(myMapSize[0]/2)-(i/2),myMapPos[1]+2);
    my_arrangeElement("divNavIcon1",myMapPos[0]+myMapSize[0]-i-myFrameBorder,myMapPos[1]+(myMapSize[1]/2)-(i/2));
    my_arrangeElement("divNavIcon2",myMapPos[0]+(myMapSize[0]/2)-(i/2),myMapPos[1]+myMapSize[1]-i-myFrameBorder);
    my_arrangeElement("divNavIcon3",myMapPos[0]+2,myMapPos[1]+(myMapSize[1]/2)-(i/2));
    my_arrangeElement("divNavIcon4",(myMapSize[0])+myMapPos[0]-i-myFrameBorder,myMapPos[1]+myFrameBorder-myFrameBorder+2);
    my_arrangeElement("divNavIcon5",(myMapSize[0])+myMapPos[0]-i-myFrameBorder,myMapPos[1]+myMapSize[1]-i-myFrameBorder);
    my_arrangeElement("divNavIcon6",myMapPos[0]+2,myMapPos[1]+myMapSize[1]-i-myFrameBorder);
    my_arrangeElement("divNavIcon7",myMapPos[0]+2,myMapPos[1]+2);
  }
}


////////////////////////////
 // change layer visibility
////////////////////////////
function my_changeWMSLayer(obj) {
  if(!my_checkWMSComplete()) {
    my_changeMenu();
    return; 
  }

  var t = typeof(obj);
  if(t == "string") { var id = obj.substring(5);
  } else { var id = obj.id.substring(5); }

  for(i=0;i<myWMS.length;i++) { // hide
    myWMS[i][4] = my_getID("myWMS"+i).checked;
    if(myWMS[i][4] == false) {
      my_getID("layerWMS"+i).innerHTML = "<img id='map"+i+"' name='mapimage' style='position:absolute;left:0px;top:0px;width:"+myMapSize[0]+"px;height:"+myMapSize[1]+"px' src='"+transparentImg.src+"'>";
      my_getID("layerUsemap"+i).innerHTML = ""; 
      my_getID("layerUsemap"+i).style.width = "0px";
      my_getID("layerUsemap"+i).style.height = "0px";
    }
  }

  if(my_getID("myWMS"+id).checked == true) { // show
    myWMS[id][4] = true;
    my_MapRequestPreFunctions();
    var requ = "&WIDTH=" + myMapSize[0]
     + "&HEIGHT=" + myMapSize[1]
     + "&SCALE=" + myScale
     + "&BBOX="+((myBBox[0]*100)/100)+","+((myBBox[1]*100)/100)+","+((myBBox[2]*100)/100)+","+((myBBox[3]*100)/100)
     + my_getVendorSpecificString();

    if(myWMS[id][0]) {
      if(myWMS[id][0].indexOf('?') == -1) { myWMS[id][0] += "?"; }
      var newWMS = myWMS[id][0] + requ;
      if(myDebug) { prompt("",newWMS); }
      my_getID("layerWMS"+id).innerHTML = "<img id='map"+id+"' name='mapimage' style='position:absolute;left:0px;top:0px;width:"+myMapSize[0]+"px;height:"+myMapSize[1]+"px' src='"+newWMS+"' onError=my_WMSError("+id+") onAbort=my_stopWMS("+id+")>";
      my_sandclock(true,"map"+id);
    }
    if(myWMS[id][5]) {
      if(myWMS[id][5].indexOf('?') == -1) { myWMS[id][5] += "?"; }
      var newUm = myWMS[id][5] + requ + "&USEMAPLAYER=layerUsemap" + id
      if(myDebug) { prompt("",newUm); }
      my_arrangeElement("layerUsemap"+id,0,0,myMapSize[0],myMapSize[1]);
      window.frames["layerUsemapFrame"+id].location.replace(newUm);
    }
    my_MapRequestSubFunctions();
  }
}

////////////////////////////
 // tooltip
////////////////////////////
function my_viewTT(val,x,y) {
  if(val != "") {
    val = val.replace(/\+/g," ");
    my_getID("divTooltip").style.left = x;
    my_getID("divTooltip").style.top = y;
    my_getID("divTooltip").innerHTML = unescape(val);
    my_getID("divTooltip").style.visibility = "visible";
  } else {
    my_getID("divTooltip").innerHTML = "";
  }
  return false;
}
function my_hideTT() {
  my_getID("divTooltip").innerHTML = "";
  my_getID("divTooltip").style.visibility = "hidden";
  return false;
}

function my_getID(elName) {
  var theObj = document.getElementById(elName);
  return theObj;
}

function my_setClass(id,myclass) {
  var t = typeof(id);
  if(t == "object") { 
    id.className = myclass;
  } else {
    my_getID(id).className = myclass;
  }
}

////////////////////////////
 // handling for browser window resize
////////////////////////////
function my_windowResize() {
  if(ie) {
    var w = document.body.offsetWidth;
    var h = document.body.offsetHeight;
  } else {
    var w = window.innerWidth;
    var h = window.innerHeight;
  }
  myMapSize[0] = w-myMapPos[0];
  myMapSize[1] = h-myMapPos[1];
  if((w-myMapPos[0])>myMapSizeMax[0]) { myMapSize[0] = myMapSizeMax[0]; }
  if((h-myMapPos[1])>myMapSizeMax[1]) { myMapSize[1] = myMapSizeMax[1]; }
  if((w-myMapPos[0])<myMapSizeMin[0]) { myMapSize[0] = myMapSizeMin[0]; }
  if((h-myMapPos[1])<myMapSizeMin[1]) { myMapSize[1] = myMapSizeMin[1]; }
  myMapSize[0] -= 60;
  myMapSize[1] -= 40;
  my_mapResizeNaviBar();
  my_arrangeElement("layerMapBorder",myMapPos[0],myMapPos[1],myMapSize[0],myMapSize[1]);
  my_arrangeElement("divMapResize",myMapSize[0]+myMapPos[0]-8-myFrameBorder,myMapSize[1]+myMapPos[1]-8-myFrameBorder,13,13);
  my_mapResizeSubFunctions();
  if(myCount==0) { return false; }
  clearTimeout(myTimeOut);
  myTimeOut = setTimeout("my_repaintXYSc(null,null,myScale)",1000);
  return false;
}

////////////////////////////
 // mark search result
////////////////////////////
function my_markObj(val) {
  for(i=0;i<window.frames["myIFrame1"].document.getElementsByTagName("a").length;i++) {
    window.frames["myIFrame1"].document.getElementsByTagName("a")[i].style.border="none";
  }
  window.frames["myIFrame1"].document.getElementById(val).style.border="2px solid rgb(255,0,0)";
}

