var mapview;
var dynamicTheme;
var customerPointsTheme;
var lyrTheme = new Array(64);

var measureTool;
var circleTool;
var rectangleTool;
var polygonTool;

var cSavedLon;
var cSavedLat;

var hgElement = null;

var ilPieTheme = null;
var ilcePieTheme = null;
var mahallePieTheme = null;
var bolgePieTheme = null;
var ilColorTheme = null;
var ilceColorTheme = null;
var mahalleColorTheme = null;
var bolgeColorTheme = null;

var ilPieStyle = null;
var ilcePieStyle = null;
var mahallePieStyle = null;
var bolgePieStyle = null;

var flashCount = 0;

function IMapper() {
}

IMapper.prototype.initMap=function(urlBase, mapBase, ovHide) {
  mapview = new MVMapView(document.getElementById("map"), urlBase);
  mapview.addMapTileLayer(new MVMapTileLayer(mapBase));
  mapview.addCopyRightNote("<font face='arial' size='2'>&#169;2011 Infotech</font>");
  mapview.addScaleBar();
  if( !ovHide ) {
    ovcontainer = new MVMapDecoration('', null, null, 150, 100);
    ovcontainer.setCollapsible(true);
    mapview.addMapDecoration(ovcontainer);
    var ov = new MVOverviewMap(ovcontainer.getContainerDiv(), 3);
    mapview.addOverviewMap(ov);
  }
  mapview.setCenterAndZoomLevel(MVSdoGeometry.createPoint(29.0, 41.0, 8307), 5);
  mapview.display();
  return;
}

IMapper.prototype.addNavigationPanel=function(place) {
  mapview.addNavigationPanel(place);
  return;
}

IMapper.prototype.showMapCentered=function(mapCenterLat, mapCenterLon, mapZoom) {
  mapview.setCenterAndZoomLevel(MVSdoGeometry.createPoint(mapCenterLon, mapCenterLat, 8307), mapZoom);
  return;
}

IMapper.prototype.showMapBB=function(minX, minY, maxX, maxY) {
  mapview.zoomToRectangle(MVSdoGeometry.createRectangle(minX, minY, maxX, maxY, 8307));
  return;
}

IMapper.prototype.showMap=function(mapZoom) {
  mapview.setZoomLevel(mapZoom);
  return;
}

IMapper.prototype.addMouseClickFunction=function(mc) {
  mapview.attachEventListener(MVEvent.MOUSE_CLICK, mc);
  return;
}

IMapper.prototype.removeMouseClickFunction=function(mc) {
  mapview.detachEventListener(MVEvent.MOUSE_CLICK, mc);
  return;
}

IMapper.prototype.addMouseRClickFunction=function(mc) {
  mapview.attachEventListener(MVEvent.MOUSE_RIGHT_CLICK, mc);
  return;
}

IMapper.prototype.removeMouseRClickFunction=function(mc) {
  mapview.detachEventListener(MVEvent.MOUSE_RIGHT_CLICK, mc);
  return;
}

IMapper.prototype.addZoomLevelChangeFunction=function(before, after) {
  mapview.attachEventListener(MVEvent.BEFORE_ZOOM_LEVEL_CHANGE, before);
  mapview.attachEventListener(MVEvent.ZOOM_LEVEL_CHANGE, after);
  return;
}

IMapper.prototype.addRecenterFunction=function(recenter) {
  mapview.attachEventListener(MVEvent.RECENTER, recenter);
  return;
}

IMapper.prototype.getMouseLocation=function(mc) {
  mloc = mapview.getMouseLocation();
  return mloc;
}

IMapper.prototype.displayInfoWindow=function(pt, html, width, height, style, title) {
  mapview.displayInfoWindow(pt, html, width, height, style, title);
  return;
}

IMapper.prototype.removeInfoWindow=function() {
  mapview.removeInfoWindow();
  return;
}

IMapper.prototype.setLyrTheme=function(index, name, themeName, params, visible, mouseclick, mouserclick) {
  lyrTheme[index] = new MVThemeBasedFOI(name, themeName);
  if( params ) {
    switch( params.length ) {
    case 1 :
      lyrTheme[index].setQueryParameters(params[0]);
      break;
    case 2 :
      lyrTheme[index].setQueryParameters(params[0], params[1]);
      break;
    case 3 :
      lyrTheme[index].setQueryParameters(params[0], params[1], params[2]);
      break;
    case 4 :
      lyrTheme[index].setQueryParameters(params[0], params[1], params[2], params[3]);
      break;
    case 5 :
      lyrTheme[index].setQueryParameters(params[0], params[1], params[2], params[3], params[4]);
      break;
    case 6 :
      lyrTheme[index].setQueryParameters(params[0], params[1], params[2], params[3], params[4], params[5]);
      break;
    case 7 :
      lyrTheme[index].setQueryParameters(params[0], params[1], params[2], params[3], params[4], params[5], params[6]);
      break;
    case 8 :
      lyrTheme[index].setQueryParameters(params[0], params[1], params[2], params[3], params[4], params[5], params[6], params[7]);
      break;
    case 9 :
      lyrTheme[index].setQueryParameters(params[0], params[1], params[2], params[3], params[4], params[5], params[6], params[7], params[8]);
      break;
    } // switch()
  }
  lyrTheme[index].setVisible(visible);
  lyrTheme[index].setInfoWindowStyle("MVInfoWindowStyle1");
  lyrTheme[index].enableInfoWindow(true);
  lyrTheme[index].enableAutoWholeImage(true, 0, 6000);
  if( mouseclick ) lyrTheme[index].attachEventListener(MVEvent.MOUSE_CLICK, mouseclick);
  if( mouseclick ) lyrTheme[index].attachEventListener(MVEvent.MOUSE_RIGHT_CLICK, mouserclick);
  mapview.addThemeBasedFOI(lyrTheme[index]);
//  lyrTheme[index].refresh();
  return;
}

IMapper.prototype.setLyrThemeVisible=function(index, visible) {
  lyrTheme[index].setVisible(visible);
  return;
}

IMapper.prototype.refreshLyrTheme=function(index) {
  lyrTheme[index].refresh();
  return;
}

IMapper.prototype.removeLyrTheme=function(index) {
  mapview.removeThemeBasedFOI(lyrTheme[index]);
  lyrTheme[index] = undefined;
  return;
}

IMapper.prototype.setLyrThemeParams=function(index, params) {
  switch( params.length ) {
  case 1 :
    lyrTheme[index].setQueryParameters(params[0]);
    break;
  case 2 :
    lyrTheme[index].setQueryParameters(params[0], params[1]);
    break;
  case 3 :
    lyrTheme[index].setQueryParameters(params[0], params[1], params[2]);
    break;
  case 4 :
    lyrTheme[index].setQueryParameters(params[0], params[1], params[2], params[3]);
    break;
  case 5 :
    lyrTheme[index].setQueryParameters(params[0], params[1], params[2], params[3], params[4]);
    break;
  case 6 :
    lyrTheme[index].setQueryParameters(params[0], params[1], params[2], params[3], params[4], params[5]);
    break;
  case 7 :
    lyrTheme[index].setQueryParameters(params[0], params[1], params[2], params[3], params[4], params[5], params[6]);
    break;
  case 8 :
    lyrTheme[index].setQueryParameters(params[0], params[1], params[2], params[3], params[4], params[5], params[6], params[7]);
    break;
  case 9 :
    lyrTheme[index].setQueryParameters(params[0], params[1], params[2], params[3], params[4], params[5], params[6], params[7], params[8]);
    break;
  } // switch()
  lyrTheme[index].refresh();
  return;
}

IMapper.prototype.setMeasureTool=function(getNewPoint, getNewLine) {
  if( measureTool != null ) {
    measureTool.init();
    return;
  }

  measureTool = new MVRedlineTool("MAPLINK20.L.REDLINE");
  measureTool.setMarkerImage("../jslib/images/distanceMarker.png", 15, 29);
  measureTool.setControlPanelVisible(false);
  measureTool.setAutoClose(false);
  mapview.addRedLineTool(measureTool);
  if( getNewPoint ) measureTool.attachEventListener(MVEvent.NEW_SHAPE_POINT, getNewPoint);
  if( getNewLine ) measureTool.attachEventListener(MVEvent.FINISH, getNewLine);
  measureTool.init();
  return;
}

IMapper.prototype.clearMeasureTool=function() {
  if( measureTool != null ) {
    measureTool.clear();
    measureTool = null;
  }
  return;
}

IMapper.prototype.setCircleTool=function(getOrdinates, getCircle) {
  if( circleTool != null ) {
    circleTool.init();
    return;
  }

  circleTool = new MVCircleTool("MAPLINK20.L.REDLINE");
  mapview.addCircleTool(circleTool);
  if( getOrdinates ) circleTool.attachEventListener(MVEvent.START, getOrdinates);
  if( getCircle ) circleTool.attachEventListener(MVEvent.FINISH, getCircle);
  circleTool.init();
  return;
}

IMapper.prototype.clearCircleTool=function() {
  if( circleTool != null ) {
    circleTool.clear();
    circleTool = null;
  }
  return;
}

IMapper.prototype.setRectangleTool=function(getOrdinates, getRectangle) {
  if( rectangleTool != null ) {
    rectangleTool.init();
    return;
  }

  rectangleTool = new MVRectangleTool("MAPLINK20.L.REDLINE");
  mapview.addRectangleTool(rectangleTool);
  if( getOrdinates ) rectangleTool.attachEventListener(MVEvent.START, getOrdinates);
  if( getRectangle ) rectangleTool.attachEventListener(MVEvent.FINISH, getRectangle);
  rectangleTool.init();
  return;
}

IMapper.prototype.clearRectangleTool=function() {
  if( rectangleTool != null ) {
    rectangleTool.clear();
    rectangleTool = null;
  }
  return;
}

IMapper.prototype.setPolygonTool=function(getOrdinates, getPolygon) {
  if( polygonTool != null ) {
    polygonTool.init();
    return;
  }

  polygonTool = new MVRedlineTool("MAPLINK20.L.REDLINE");
  polygonTool.setControlPanelVisible(false);
  polygonTool.setAutoClose(true);
  mapview.addRedLineTool(polygonTool);
  if( getOrdinates ) polygonTool.attachEventListener(MVEvent.START, getOrdinates);
  if( getPolygon ) polygonTool.attachEventListener(MVEvent.FINISH, getPolygon);
  polygonTool.init();
  return;
}

IMapper.prototype.clearPolygonTool=function() {
  if( polygonTool != null ) {
    polygonTool.clear();
    polygonTool = null;
  }
  return;
}

IMapper.prototype.setCustomerPointsTheme=function(name, themeName, parameters) {
  if( customerPointsTheme != null ) {
    mapview.removeThemeBasedFOI(customerPointsTheme);
  }
  customerPointsTheme = new MVThemeBasedFOI(name, themeName);
  switch( parameters.length ) {
  case 1 :
    customerPointsTheme.setQueryParameters(parameters[0]);
    break;
  case 2 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1]);
    break;
  case 3 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2]);
    break;
  case 4 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2], parameters[3]);
    break;
  case 5 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4]);
    break;
  case 6 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5]);
    break;
  case 7 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6]);
    break;
  case 8 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6], parameters[7]);
    break;
  case 9 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6], parameters[7], parameters[8]);
    break;
  case 10 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6], parameters[7], parameters[8], parameters[9]);
    break;
  case 11 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6], parameters[7], parameters[8], parameters[9], parameters[10]);
    break;
  case 12 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6], parameters[7], parameters[8], parameters[9], parameters[10], parameters[11]);
    break;
  case 13 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6], parameters[7], parameters[8], parameters[9], parameters[10], parameters[11], parameters[12]);
    break;
  case 14 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6], parameters[7], parameters[8], parameters[9], parameters[10], parameters[11], parameters[12], parameters[13]);
    break;
  case 15 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6], parameters[7], parameters[8], parameters[9], parameters[10], parameters[11], parameters[12], parameters[13], parameters[14]);
    break;
  case 16 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6], parameters[7], parameters[8], parameters[9], parameters[10], parameters[11], parameters[12], parameters[13], parameters[14], parameters[15]);
    break;
  } // switch()
  customerPointsTheme.setVisible(true);
  customerPointsTheme.setInfoWindowStyle("MVInfoWindowStyle1");
  customerPointsTheme.enableInfoWindow(true);
  customerPointsTheme.enableAutoWholeImage(true, 0, 6000);
  mapview.addThemeBasedFOI(customerPointsTheme);
//  customerPointsTheme.refresh();
  return;
}

IMapper.prototype.setCustomerPointsThemeWInfo=function(name, themeName, parameters, mouseclick, mouserclick) {
  if( customerPointsTheme != null ) {
    mapview.removeThemeBasedFOI(customerPointsTheme);
  }
  customerPointsTheme = new MVThemeBasedFOI(name, themeName);
  switch( parameters.length ) {
  case 1 :
    customerPointsTheme.setQueryParameters(parameters[0]);
    break;
  case 2 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1]);
    break;
  case 3 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2]);
    break;
  case 4 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2], parameters[3]);
    break;
  case 5 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4]);
    break;
  case 6 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5]);
    break;
  case 7 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6]);
    break;
  case 8 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6], parameters[7]);
    break;
  case 9 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6], parameters[7], parameters[8]);
    break;
  case 10 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6], parameters[7], parameters[8], parameters[9]);
    break;
  case 11 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6], parameters[7], parameters[8], parameters[9], parameters[10]);
    break;
  case 12 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6], parameters[7], parameters[8], parameters[9], parameters[10], parameters[11]);
    break;
  case 13 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6], parameters[7], parameters[8], parameters[9], parameters[10], parameters[11], parameters[12]);
    break;
  case 14 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6], parameters[7], parameters[8], parameters[9], parameters[10], parameters[11], parameters[12], parameters[13]);
    break;
  case 15 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6], parameters[7], parameters[8], parameters[9], parameters[10], parameters[11], parameters[12], parameters[13], parameters[14]);
    break;
  case 16 :
    customerPointsTheme.setQueryParameters(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6], parameters[7], parameters[8], parameters[9], parameters[10], parameters[11], parameters[12], parameters[13], parameters[14], parameters[15]);
    break;
  } // switch()
  customerPointsTheme.setVisible(true);
  customerPointsTheme.enableInfoWindow(false);
  customerPointsTheme.enableAutoWholeImage(true, 0, 6000);
  if( mouseclick ) customerPointsTheme.attachEventListener(MVEvent.MOUSE_CLICK, mouseclick);
  if( mouserclick ) customerPointsTheme.attachEventListener(MVEvent.MOUSE_RIGHT_CLICK, mouserclick);
  mapview.addThemeBasedFOI(customerPointsTheme);
//  customerPointsTheme.refresh();
  return;
}

IMapper.prototype.showCustomerPoint=function(id, name, typ, sym_prefix, latitude, longitude, wid, hei) {
  var foiId = "cpts_" + id;
  var pt = MVSdoGeometry.createPoint(longitude, latitude, 8307);
  var mf = mapview.getFOI(foiId);
  if( mf != null ) mapview.removeFOI(mf);
  var sym = sym_prefix + "_";
  switch( typ ) {
  case 0 : sym += "00"; break;
  case 1 : sym += "01"; break;
  case 2 : sym += "02"; break;
  case 3 : sym += "03"; break;
  case 4 : sym += "04"; break;
  case 5 : sym += "05"; break;
  case 6 : sym += "06"; break;
  case 7 : sym += "07"; break;
  case 8 : sym += "08"; break;
  case 9 : sym += "09"; break;
  default :
    sym += typ;
    break;
  } // switch()
  mf = new MVFOI(foiId, pt, sym, null, wid, hei);
  mf.setInfoTip(name);
  mf.enableInfoTip(true);
  mf.enableInfoWindow(false);
  mf.setClickable(false);
  mapview.addFOI(mf);
  return;
}

IMapper.prototype.showCustomerPointSimple=function(id, name, sym, latitude, longitude) {
  var foiId = "cpts_" + id;
  var pt = MVSdoGeometry.createPoint(longitude, latitude, 8307);
  var mf = mapview.getFOI(foiId);
  if( mf != null ) mapview.removeFOI(mf);
  mf = new MVFOI(foiId, pt, sym, null, 70, 80);
  mf.setInfoTip(name);
  mf.enableInfoTip(true);
  mf.enableInfoWindow(false);
  mf.setClickable(false);
  mf.setZIndex(990);
  mapview.addFOI(mf);
  return;
}

IMapper.prototype.clearCustomerPoints=function() {
  for( var i = 0; i <= 999; i++ ) {
    var mf = mapview.getFOI("cpts_" + i);
    if( mf ) mapview.removeFOI(mf);
  } // for()
  return;
}

IMapper.prototype.showCustomerPoints=function(cpts, sym_prefix, wid, hei, mclick) {
  for( var i = 0; i < cpts.length; i++ ) {
    var foiId = "cpts_" + i;
    var id = cpts[i].id;
    var name = cpts[i].name;
    var typ = cpts[i].typ;
    var latitude = cpts[i].pt.y;
    var longitude = cpts[i].pt.x;

    var pt = MVSdoGeometry.createPoint(longitude, latitude, 8307);
    var mf = mapview.getFOI(foiId);
    if( mf != null ) mapview.removeFOI(mf);
    var sym = sym_prefix + "_";
    switch( typ ) {
    case 0 : sym += "00"; break;
    case 1 : sym += "01"; break;
    case 2 : sym += "02"; break;
    case 3 : sym += "03"; break;
    case 4 : sym += "04"; break;
    case 5 : sym += "05"; break;
    case 6 : sym += "06"; break;
    case 7 : sym += "07"; break;
    case 8 : sym += "08"; break;
    case 9 : sym += "09"; break;
    default :
      sym += typ;
      break;
    } // switch()
    mf = new MVFOI(foiId, pt, sym, null, wid, hei);
    mf.setInfoTip(name);
    mf.enableInfoTip(true);
    mf.enableInfoWindow(false);
    mf.setClickable(true);
    if( mclick ) mf.attachEventListener(MVEvent.MOUSE_CLICK, mclick);
    mf.setZIndex(990);
    mapview.addFOI(mf);
  } // for()
  return;
}

IMapper.prototype.showRoutePoint=function(id, name, latitude, longitude, symbol, wid, hei) {
  var pt = MVSdoGeometry.createPoint(longitude, latitude, 8307);
  var mf = mapview.getFOI("route_" + id);
  if( mf != null ) mapview.removeFOI(mf);
  mf = new MVFOI("route_" + id, pt, symbol, null, wid, hei);
  mf.setInfoTip(name);
  mf.enableInfoTip(true);
  mf.enableInfoWindow(false);
  mf.setClickable(false);
  mf.setZIndex(991);
  mapview.addFOI(mf);
  return;
}

IMapper.prototype.clearRoutePoints=function() {
  for( var i = 0; i <= 999; i++ ) {
    var mf = mapview.getFOI("route_" + i);
    if( mf ) mapview.removeFOI(mf);
  } // for()
  return;
}

IMapper.prototype.clrMarker=function() {
  var mf = mapview.getFOI("marker");
  if( mf != null ) mapview.removeFOI(mf);
  return;
}

IMapper.prototype.addMarker=function(latitude, longitude, name, sym, w, h, mclick) {
  var pt = MVSdoGeometry.createPoint(longitude, latitude, 8307);
  var mf = mapview.getFOI("marker");
  if( mf != null ) mapview.removeFOI(mf);
  mf = new MVFOI("marker", pt, sym, null, w, h);
  mf.setInfoTip(name);
  mf.enableInfoTip(true);
  mf.enableInfoWindow(false);
  if( !mclick ) {
    mf.setClickable(false);
  }
  else {
    mf.setClickable(true);
    mf.attachEventListener(MVEvent.MOUSE_CLICK, mclick);
  }
  mf.setZIndex(999);
  mapview.addFOI(mf);
  return;
}

IMapper.prototype.flashMarker=function(fc) {
  flashCount = fc
  window.setTimeout(flashMarker_flasher, 200);
  return;
}

IMapper.prototype.getMapImageURL=function(callback) {
//   mapview.getMapImageURL(callback, "PNG");

  var oms = "http://" + document.location.host + "/mapviewer/omserver";
  var xml = mapview.getMapAsXML("PNG");
  xml = filterImageXml(xml);
  var http = MVUtil.getXMLHttpRequest(true);
  http.open("POST", oms, true);
  http.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  http.send("xml_request=" + encodeURIComponent(xml));
  http.onreadystatechange = function() {
      if( http.readyState == 4 ) {
        if( http.status == 200 ) {
          var txt = http.responseText;
          var pos = txt.indexOf("url=\"");
          if( pos < 0) {
            alert("Error in map response");
            return ;
          }

          var url = txt.substring(pos + 5, txt.indexOf("\"", pos + 5));
          pos = url.indexOf("?");
          if( pos >= 0 ) url = url.substring(0, pos);
          pos = url.indexOf("akbank.infotech.com.tr");
          if( pos >= 0 ) url = url.substring(0, pos) + "maplink20" + url.substring(pos + 6);
          callback(url);
        }
      }
    } // function()

  return;
}

IMapper.prototype.pan=function(typ) {
  var bbox = mapview.getMapWindowBBox();
  var ords = bbox.getOrdinates();
  var minX = ords[0];
  var minY = ords[1];
  var maxX = ords[4];
  var maxY = ords[5];
  var cenX = (minX + maxX) / 2.0;
  var cenY = (minY + maxY) / 2.0;
  var offX = (maxX - minX) / 2.0;
  var offY = (maxY - minY) / 2.0;

  switch( typ ) {
  case 1 : // NORTH
    mapview.setCenter(MVSdoGeometry.createPoint(cenX, cenY + offY, 8307));
    break;
  case 2 : // NORTH-EAST
    mapview.setCenter(MVSdoGeometry.createPoint(cenX + offX, cenY + offY, 8307));
    break;
  case 3 : // EAST
    mapview.setCenter(MVSdoGeometry.createPoint(cenX + offX, cenY, 8307));
    break;
  case 4 : // SOUTH-EAST
    mapview.setCenter(MVSdoGeometry.createPoint(cenX + offX, cenY - offY, 8307));
    break;
  case 5 : // SOUTH
    mapview.setCenter(MVSdoGeometry.createPoint(cenX, cenY - offY, 8307));
    break;
  case 6 : // SOUTH-WEST
    mapview.setCenter(MVSdoGeometry.createPoint(cenX - offX, cenY - offY, 8307));
    break;
  case 7 : // WEST
    mapview.setCenter(MVSdoGeometry.createPoint(cenX - offX, cenY, 8307));
    break;
  case 8 : // NORTH-WEST
    mapview.setCenter(MVSdoGeometry.createPoint(cenX - offX, cenY + offY, 8307));
    break;
  } // switch()

  mapview.display();
  return;
} // pan()

IMapper.prototype.zoomIn=function() {
  mapview.zoomIn();
}

IMapper.prototype.zoomOut=function() {
  mapview.zoomOut();
}

IMapper.prototype.zoomLevel=function(mapZoom) {
  mapview.setZoomLevel(mapZoom);
}

IMapper.prototype.getZoomLevel=function() {
  return mapview.getZoomLevel();
}

IMapper.prototype.getCenterLat=function() {
  return mapview.getCenter().getPointY();
}

IMapper.prototype.getCenterLon=function() {
  return mapview.getCenter().getPointX();
}

IMapper.prototype.createAnalysisTheme=function(typ, mouseclick) {
  var baseQuery;
  var themeXml;

  if( typ == "IL" ) {
    if( ilPieTheme != null ) mapview.removeThemeBasedFOI(ilPieTheme);

    baseQuery = "SELECT GEOLOC,IL_ID FROM IL";
    themeXml  = "<themes><theme name='IL_PIE_JDBC_THEME' >" +
                "<jdbc_query spatial_column='GEOLOC' jdbc_srid='8307' key_column='IL_ID' " +
                "render_style='C.DUMMY' datasource='MAPLINK20'>" + baseQuery +
                "</jdbc_query></theme></themes>" ;
    ilPieTheme = new MVThemeBasedFOI('ilpiejdbctheme', themeXml);
    ilPieTheme.setBringToTopOnMouseOver(true);
    ilPieTheme.enableImageCaching(false);
    if( mouseclick ) ilPieTheme.attachEventListener(MVEvent.MOUSE_CLICK, mouseclick);
    mapview.addThemeBasedFOI(ilPieTheme);

    nsdpInfo = new MVNSDP("defaultNSDP");
    nsdpInfo.setTheme("IL_PIE_JDBC_THEME");
    nsdpInfo.setKeyColumn("IL_ID");
    var xml_data = "<nsdp_xml><table><tr><th>K</th><th>I</th></tr></table></nsdp_xml>";
    var ps = new Object();
    ps["xml"] = xml_data;
    nsdpInfo.setParameters(ps);
    ilPieTheme.setNSDP(nsdpInfo);
    ilPieTheme.refresh();
  }
  else
  if( typ == "ILCE" ) {
    if( ilcePieTheme != null ) mapview.removeThemeBasedFOI(ilcePieTheme);

    baseQuery = "SELECT GEOLOC,ILCE_ID FROM ILCE";
    themeXml  = "<themes><theme name='ILCE_PIE_JDBC_THEME' >" +
                "<jdbc_query spatial_column='GEOLOC' jdbc_srid='8307' key_column='ILCE_ID' " +
                "render_style='C.DUMMY' datasource='MAPLINK20'>" + baseQuery +
                "</jdbc_query></theme></themes>" ;
    ilcePieTheme = new MVThemeBasedFOI('ilcepiejdbctheme', themeXml);
    ilcePieTheme.setBringToTopOnMouseOver(true);
    ilcePieTheme.enableImageCaching(false);
    if( mouseclick ) ilcePieTheme.attachEventListener(MVEvent.MOUSE_CLICK, mouseclick);
    mapview.addThemeBasedFOI(ilcePieTheme);

    nsdpInfo = new MVNSDP("defaultNSDP");
    nsdpInfo.setTheme("ILCE_PIE_JDBC_THEME");
    nsdpInfo.setKeyColumn("ILCE_ID");
    var xml_data = "<nsdp_xml><table><tr><th>K</th><th>I</th></tr></table></nsdp_xml>";
    var ps = new Object();
    ps["xml"] = xml_data;
    nsdpInfo.setParameters(ps);
    ilcePieTheme.setNSDP(nsdpInfo);
    ilcePieTheme.refresh();
  }
  else
  if( typ == "MAHALLE" ) {
    if( mahallePieTheme != null ) mapview.removeThemeBasedFOI(mahallePieTheme);

    baseQuery = "SELECT GEOLOC,MAHALLE_ID FROM MAHALLE";
    themeXml  = "<themes><theme name='MAHALLE_PIE_JDBC_THEME' >" +
                "<jdbc_query spatial_column='GEOLOC' jdbc_srid='8307' key_column='MAHALLE_ID' " +
                "render_style='C.DUMMY' datasource='MAPLINK20'>" + baseQuery +
                "</jdbc_query></theme></themes>" ;
    mahallePieTheme = new MVThemeBasedFOI('mahallepiejdbctheme', themeXml);
    mahallePieTheme.setBringToTopOnMouseOver(true);
    mahallePieTheme.enableImageCaching(false);
    if( mouseclick ) mahallePieTheme.attachEventListener(MVEvent.MOUSE_CLICK, mouseclick);
    mapview.addThemeBasedFOI(mahallePieTheme);

    nsdpInfo = new MVNSDP("defaultNSDP");
    nsdpInfo.setTheme("MAHALLE_PIE_JDBC_THEME");
    nsdpInfo.setKeyColumn("MAHALLE_ID");
    var xml_data = "<nsdp_xml><table><tr><th>K</th><th>I</th></tr></table></nsdp_xml>";
    var ps = new Object();
    ps["xml"] = xml_data;
    nsdpInfo.setParameters(ps);
    mahallePieTheme.setNSDP(nsdpInfo);
    mahallePieTheme.refresh();
  }
  else {
    if( bolgePieTheme != null ) mapview.removeThemeBasedFOI(bolgePieTheme);

    baseQuery = "SELECT GEOLOC,BOLGE_ID FROM BOLGE";
    themeXml  = "<themes><theme name='BOLGE_PIE_JDBC_THEME' >" +
                "<jdbc_query spatial_column='GEOLOC' jdbc_srid='8307' key_column='BOLGE_ID' " +
                "render_style='C.DUMMY' datasource='MAPLINK20'>" + baseQuery +
                "</jdbc_query></theme></themes>" ;
    bolgePieTheme = new MVThemeBasedFOI('bolgepiejdbctheme', themeXml);
    bolgePieTheme.setBringToTopOnMouseOver(true);
    bolgePieTheme.enableImageCaching(false);
    if( mouseclick ) bolgePieTheme.attachEventListener(MVEvent.MOUSE_CLICK, mouseclick);
    mapview.addThemeBasedFOI(bolgePieTheme);

    nsdpInfo = new MVNSDP("defaultNSDP");
    nsdpInfo.setTheme("BOLGE_PIE_JDBC_THEME");
    nsdpInfo.setKeyColumn("BOLGE_ID");
    var xml_data = "<nsdp_xml><table><tr><th>K</th><th>I</th></tr></table></nsdp_xml>";
    var ps = new Object();
    ps["xml"] = xml_data;
    nsdpInfo.setParameters(ps);
    bolgePieTheme.setNSDP(nsdpInfo);
    bolgePieTheme.refresh();
  }

  return;
}

IMapper.prototype.removeAnalysisTheme=function(typ) {
  if( typ == "IL" ) {
    if( ilPieTheme != null ) mapview.removeThemeBasedFOI(ilPieTheme);
  }
  else
  if( typ == "ILCE" ) {
    if( ilcePieTheme != null ) mapview.removeThemeBasedFOI(ilcePieTheme);
  }
  else
  if( typ == "MAHALLE" ) {
    if( mahallePieTheme != null ) mapview.removeThemeBasedFOI(mahallePieTheme);
  }
  else {
    if( bolgePieTheme != null ) mapview.removeThemeBasedFOI(bolgePieTheme);
  }
  return;
}

IMapper.prototype.buildAnalysisPieStyle=function(typ, style) {
  var xmlDef = '<AdvancedStyle><PieChartStyle pieradius="' + style.radius + '">';
  for( var i = 0; i < style.pies.length; i++ ) {
    xmlDef += '<PieSlice name="' + style.pies[i].name + '" color="' + style.pies[i].color + '" />'
  } // for()
  xmlDef += '</PieChartStyle></AdvancedStyle>';

  if( typ == "IL" ) {
    if( ilPieStyle ) ilPieTheme.deleteStyle(ilPieStyle);
    ilPieStyle = new MVXMLStyle("ilpiestyle", xmlDef);
    ilPieTheme.addStyle(ilPieStyle);
    ilPieTheme.setRenderingStyle("ilpiestyle");
  }
  else
  if( typ == "ILCE" ) {
    if( ilcePieStyle ) ilcePieTheme.deleteStyle(ilcePieStyle);
    ilcePieStyle = new MVXMLStyle("ilcepiestyle", xmlDef);
    ilcePieTheme.addStyle(ilcePieStyle);
    ilcePieTheme.setRenderingStyle("ilcepiestyle");
  }
  else
  if( typ == "MAHALLE" ) {
    if( mahallePieStyle ) mahallePieTheme.deleteStyle(mahallePieStyle);
    mahallePieStyle = new MVXMLStyle("mahallepiestyle", xmlDef);
    mahallePieTheme.addStyle(mahallePieStyle);
    mahallePieTheme.setRenderingStyle("mahallepiestyle");
  }
  else {
    if( bolgePieStyle ) bolgePieTheme.deleteStyle(bolgePieStyle);
    bolgePieStyle = new MVXMLStyle("bolgepiestyle", xmlDef);
    bolgePieTheme.addStyle(bolgePieStyle);
    bolgePieTheme.setRenderingStyle("bolgepiestyle");
  }

  return;
}

IMapper.prototype.setAnalysisData=function(typ, xml) {
    var ps = new Object();
    ps["xml"] = "<nsdp_xml>" + xml + "</nsdp_xml>";

    if( typ == "IL" ) {
      var nsdpInfo = new MVNSDP("defaultNSDP");
      nsdpInfo.setTheme("IL_PIE_JDBC_THEME");
      nsdpInfo.setKeyColumn("IL_ID");
      nsdpInfo.setParameters(ps);
      ilPieTheme.setNSDP(nsdpInfo);
      ilPieTheme.refresh();
    }
    else
    if( typ == "ILCE" ) {
      var nsdpInfo = new MVNSDP("defaultNSDP");
      nsdpInfo.setTheme("ILCE_PIE_JDBC_THEME");
      nsdpInfo.setKeyColumn("ILCE_ID");
      nsdpInfo.setParameters(ps);
      ilcePieTheme.setNSDP(nsdpInfo);
      ilcePieTheme.refresh();
    }
    else
    if( typ == "MAHALLE" ) {
      var nsdpInfo = new MVNSDP("defaultNSDP");
      nsdpInfo.setTheme("MAHALLE_PIE_JDBC_THEME");
      nsdpInfo.setKeyColumn("MAHALLE_ID");
      nsdpInfo.setParameters(ps);
      mahallePieTheme.setNSDP(nsdpInfo);
      mahallePieTheme.refresh();
    }
    else {
      var nsdpInfo = new MVNSDP("defaultNSDP");
      nsdpInfo.setTheme("BOLGE_PIE_JDBC_THEME");
      nsdpInfo.setKeyColumn("BOLGE_ID");
      nsdpInfo.setParameters(ps);
      bolgePieTheme.setNSDP(nsdpInfo);
      bolgePieTheme.refresh();
    }

  return;
}

IMapper.prototype.createColoringTheme=function(typ, mouseclick) {
  var baseQuery;
  var themeXml;

  if( typ == "IL" ) {
    if( ilColorTheme != null ) mapview.removeThemeBasedFOI(ilColorTheme);

    baseQuery = "SELECT GEOLOC,IL_ID FROM IL";
    themeXml  = "<themes><theme name='IL_COLOR_JDBC_THEME' >" +
                "<jdbc_query spatial_column='GEOLOC' jdbc_srid='8307' key_column='IL_ID' " +
                "render_style='C.DUMMY' datasource='MAPLINK20'>" + baseQuery +
                "</jdbc_query></theme></themes>" ;
    ilColorTheme = new MVThemeBasedFOI('ilcolorjdbctheme', themeXml);
    ilColorTheme.setBringToTopOnMouseOver(true);
    ilColorTheme.enableImageCaching(false);
    if( mouseclick ) ilColorTheme.attachEventListener(MVEvent.MOUSE_CLICK, mouseclick);
    mapview.addThemeBasedFOI(ilColorTheme);

    nsdpInfo = new MVNSDP("defaultNSDP");
    nsdpInfo.setTheme("IL_COLOR_JDBC_THEME");
    nsdpInfo.setKeyColumn("IL_ID");
    var xml_data = "<nsdp_xml><table><tr><th>K</th><th>C</th></tr></table></nsdp_xml>";
    var ps = new Object();
    ps["xml"] = xml_data;
    nsdpInfo.setParameters(ps);
    ilColorTheme.setNSDP(nsdpInfo);
    ilColorTheme.setRenderingStyle("V.ANALIZ_COLORS");
    ilColorTheme.setVisible(true);
    ilColorTheme.refresh();
  }
  else
  if( typ == "ILCE" ) {
    if( ilceColorTheme != null ) mapview.removeThemeBasedFOI(ilceColorTheme);

    baseQuery = "SELECT GEOLOC,ILCE_ID FROM ILCE";
    themeXml  = "<themes><theme name='ILCE_COLOR_JDBC_THEME' >" +
                "<jdbc_query spatial_column='GEOLOC' jdbc_srid='8307' key_column='ILCE_ID' " +
                "render_style='C.DUMMY' datasource='MAPLINK20'>" + baseQuery +
                "</jdbc_query></theme></themes>" ;
    ilceColorTheme = new MVThemeBasedFOI('ilcecolorjdbctheme', themeXml);
    ilceColorTheme.setBringToTopOnMouseOver(true);
    ilceColorTheme.enableImageCaching(false);
    if( mouseclick ) ilceColorTheme.attachEventListener(MVEvent.MOUSE_CLICK, mouseclick);
    mapview.addThemeBasedFOI(ilceColorTheme);

    nsdpInfo = new MVNSDP("defaultNSDP");
    nsdpInfo.setTheme("ILCE_COLOR_JDBC_THEME");
    nsdpInfo.setKeyColumn("ILCE_ID");
    var xml_data = "<nsdp_xml><table><tr><th>K</th><th>C</th></tr></table></nsdp_xml>";
    var ps = new Object();
    ps["xml"] = xml_data;
    nsdpInfo.setParameters(ps);
    ilceColorTheme.setNSDP(nsdpInfo);
    ilceColorTheme.setRenderingStyle("V.ANALIZ_COLORS");
    ilceColorTheme.setVisible(true);
    ilceColorTheme.refresh();
  }
  else
  if( typ == "MAHALLE" ) {
    if( mahalleColorTheme != null ) mapview.removeThemeBasedFOI(mahalleColorTheme);

    baseQuery = "SELECT GEOLOC,MAHALLE_ID FROM MAHALLE";
    themeXml  = "<themes><theme name='MAHALLE_COLOR_JDBC_THEME' >" +
                "<jdbc_query spatial_column='GEOLOC' jdbc_srid='8307' key_column='MAHALLE_ID' " +
                "render_style='C.DUMMY' datasource='MAPLINK20'>" + baseQuery +
                "</jdbc_query></theme></themes>" ;
    mahalleColorTheme = new MVThemeBasedFOI('mahallecolorjdbctheme', themeXml);
    mahalleColorTheme.setBringToTopOnMouseOver(true);
    mahalleColorTheme.enableImageCaching(false);
    if( mouseclick ) mahalleColorTheme.attachEventListener(MVEvent.MOUSE_CLICK, mouseclick);
    mapview.addThemeBasedFOI(mahalleColorTheme);

    nsdpInfo = new MVNSDP("defaultNSDP");
    nsdpInfo.setTheme("MAHALLE_COLOR_JDBC_THEME");
    nsdpInfo.setKeyColumn("MAHALLE_ID");
    var xml_data = "<nsdp_xml><table><tr><th>K</th><th>C</th></tr></table></nsdp_xml>";
    var ps = new Object();
    ps["xml"] = xml_data;
    nsdpInfo.setParameters(ps);
    mahalleColorTheme.setNSDP(nsdpInfo);
    mahalleColorTheme.setRenderingStyle("V.ANALIZ_COLORS");
    mahalleColorTheme.setVisible(true);
    mahalleColorTheme.refresh();
  }
  else {
    if( bolgeColorTheme != null ) mapview.removeThemeBasedFOI(bolgeColorTheme);

    baseQuery = "SELECT GEOLOC,BOLGE_ID FROM BOLGE";
    themeXml  = "<themes><theme name='BOLGE_COLOR_JDBC_THEME' >" +
                "<jdbc_query spatial_column='GEOLOC' jdbc_srid='8307' key_column='BOLGE_ID' " +
                "render_style='C.DUMMY' datasource='MAPLINK20'>" + baseQuery +
                "</jdbc_query></theme></themes>" ;
    bolgeColorTheme = new MVThemeBasedFOI('bolgecolorjdbctheme', themeXml);
    bolgeColorTheme.setBringToTopOnMouseOver(true);
    bolgeColorTheme.enableImageCaching(false);
    if( mouseclick ) bolgeColorTheme.attachEventListener(MVEvent.MOUSE_CLICK, mouseclick);
    mapview.addThemeBasedFOI(bolgeColorTheme);

    nsdpInfo = new MVNSDP("defaultNSDP");
    nsdpInfo.setTheme("BOLGE_COLOR_JDBC_THEME");
    nsdpInfo.setKeyColumn("BOLGE_ID");
    var xml_data = "<nsdp_xml><table><tr><th>K</th><th>C</th></tr></table></nsdp_xml>";
    var ps = new Object();
    ps["xml"] = xml_data;
    nsdpInfo.setParameters(ps);
    bolgeColorTheme.setNSDP(nsdpInfo);
    bolgeColorTheme.setRenderingStyle("V.ANALIZ_COLORS");
    bolgeColorTheme.setVisible(true);
    bolgeColorTheme.refresh();
  }

  return;
}

IMapper.prototype.removeColoringTheme=function(typ) {
  if( typ == "IL" ) {
    if( ilColorTheme != null ) mapview.removeThemeBasedFOI(ilColorTheme);
  }
  else
  if( typ == "ILCE" ) {
    if( ilceColorTheme != null ) mapview.removeThemeBasedFOI(ilceColorTheme);
  }
  else
  if( typ == "MAHALLE" ) {
    if( mahalleColorTheme != null ) mapview.removeThemeBasedFOI(mahalleColorTheme);
  }
  else {
    if( bolgeColorTheme != null ) mapview.removeThemeBasedFOI(bolgeColorTheme);
  }
  return;
}

IMapper.prototype.setColoringRenderStyle=function(typ, sty) {
  if( typ == "IL" ) {
    ilColorTheme.setRenderingStyle(sty);
    ilColorTheme.refresh();
  }
  else
  if( typ == "ILCE" ) {
    ilceColorTheme.setRenderingStyle(sty);
    ilceColorTheme.refresh();
  }
  else
  if( typ == "MAHALLE" ) {
    mahalleColorTheme.setRenderingStyle(sty);
    mahalleColorTheme.refresh();
  }
  else {
    bolgeColorTheme.setRenderingStyle(sty);
    bolgeColorTheme.refresh();
  }
}

IMapper.prototype.setColoringData=function(typ, xml) {
    var ps = new Object();
    ps["xml"] = "<nsdp_xml>" + xml + "</nsdp_xml>";

    if( typ == "IL" ) {
      var nsdpInfo = new MVNSDP("defaultNSDP");
      nsdpInfo.setTheme("IL_COLOR_JDBC_THEME");
      nsdpInfo.setKeyColumn("IL_ID");
      nsdpInfo.setParameters(ps);
      ilColorTheme.setNSDP(nsdpInfo);
      ilColorTheme.refresh();
    }
    else
    if( typ == "ILCE" ) {
      var nsdpInfo = new MVNSDP("defaultNSDP");
      nsdpInfo.setTheme("ILCE_COLOR_JDBC_THEME");
      nsdpInfo.setKeyColumn("ILCE_ID");
      nsdpInfo.setParameters(ps);
      ilceColorTheme.setNSDP(nsdpInfo);
      ilceColorTheme.refresh();
    }
    else
    if( typ == "MAHALLE" ) {
      var nsdpInfo = new MVNSDP("defaultNSDP");
      nsdpInfo.setTheme("MAHALLE_COLOR_JDBC_THEME");
      nsdpInfo.setKeyColumn("MAHALLE_ID");
      nsdpInfo.setParameters(ps);
      mahalleColorTheme.setNSDP(nsdpInfo);
      mahalleColorTheme.refresh();
    }
    else {
      var nsdpInfo = new MVNSDP("defaultNSDP");
      nsdpInfo.setTheme("BOLGE_COLOR_JDBC_THEME");
      nsdpInfo.setKeyColumn("BOLGE_ID");
      nsdpInfo.setParameters(ps);
      bolgeColorTheme.setNSDP(nsdpInfo);
      bolgeColorTheme.refresh();
    }

  return;
}

IMapper.prototype.createLabelingTheme=function(typ, data) {
  for( var i = 0; i < data.length; i++ ) {
    var dt = data[i];
    var pt = MVSdoGeometry.createPoint(dt.x, dt.y, 8307);
    var html = dt.label;
    if( !html ) continue;

    if( html.substring(0, 1) != "<" ) html = '<div style="color: red; background-color: #EEEEEE; font-family: Arial; font-size: 10px; font-weight: bolder;">' + html + '</div>';
    var mf = MVFOI.createHTMLFOI("lblthm_" + typ + "_" + dt.id, pt, html, -10, -5);
    mapview.addFOI(mf);
  } // for()
  return;
}

IMapper.prototype.removeLabelingTheme=function(typ) {
  var prefix = "lblthm_" + typ + "_";
  var fois = mapview.getAllFOIs();
  for( var i = 0; i < fois.length; i++ ) {
    var foi = fois[i];
    if( foi.id.startsWith(prefix) ) mapview.removeFOI(foi);
  } // for()
  return;
}

IMapper.prototype.addDistanceLabel=function(id, lat, lon, txt) {
  var pt = MVSdoGeometry.createPoint(lon, lat, 8307);
  var foi = mapview.getFOI("distanceLabel_" + id);
  if( foi ) mapview.removeFOI(foi);
  foi = MVFOI.createHTMLFOI('distanceLabel_' + id, pt, '<span class="measurelabel">' + txt.replace(" ", "&nbsp;") + '</span>', 0, 10);
  mapview.addFOI(foi);
  return;
}

//-----------------------------------------------------------------------------

IMapper.prototype.removeAllDistanceLabels=function() {
  for( var i = 0; i < 999; i++ ) {
    var foi = mapview.getFOI("distanceLabel_" + i);
    if( foi == null ) break;

    mapview.removeFOI(foi);
  } // for()
  return;
} // removeAllDistanceLabels()

//-----------------------------------------------------------------------------

function flashMarker_flasher() {
  if( flashCount <= 0 ) return;

  var mf = mapview.getFOI("marker");
  if( mf == null ) return;

  if( mf.isVisible() ) mf.setVisible(false); else mf.setVisible(true);

  flashCount--;
  if( flashCount > 0 ) window.setTimeout(flashMarker_flasher, 200);
  return;
} // flashMarker_flasher()

//-----------------------------------------------------------------------------

function setHourglass(func) {
  var elmMap = document.getElementById("map");
  if( hgElement == null ) {
    hgElement = document.createElement("img");
    hgElement.src = "../jslib/images/hourglass.gif";
    hgElement.style.zIndex = 2001;
    hgElement.style.position = "absolute";
    var width = 0;
    if( hgElement.width ) width = hgElement.width;
    var height = 0;
    if( hgElement.height ) height = hgElement.height;
    hgElement.style.left = parseInt((elmMap.offsetWidth - width) / 2) + "px";
    hgElement.style.top = parseInt((elmMap.offsetHeight - height) / 2) + "px";
    hgElement.style.visibility = 'visible';
    hgElement.onLoad = function() {
                         hgElement.style.left = parseInt((elmMap.offsetWidth - hgElement.width) / 2) + "px";
                         hgElement.style.top = parseInt((elmMap.offsetHeight - hgElemnt.height) / 2) + "px";
                         hgElement.onload = null;
                       };
  }
  elmMap.appendChild(hgElement);
  if( func != null && func != undefined ) self.setTimeout(func, 100);
  return;
} // setHourglass()

function clearHourglass() {
  if( hgElement != null ) {
    document.getElementById("map").removeChild(hgElement);
    hgElement = null;
  }
  return;
} // clearHourglass()

//-----------------------------------------------------------------------------

function toUIDate(ts) {
  if( ts == null ) return "-";

  return ts.substring(8, 10) + "." + ts.substring(5, 7) + "." + ts.substring(0, 4) + " " + ts.substring(11, 16);
} // toUIDate()

function getRequest() {
  var http;
  var browser = navigator.appName;
  if( browser == "Microsoft Internet Explorer")
    http = new ActiveXObject("Microsoft.XMLHTTP");
  else
    http = new XMLHttpRequest();
  http.open("GET", getUrl, false);
  http.send(null);
  if( http.readyState == 4 ) return http.responseText;

  return null;
} // getRequest()

//-----------------------------------------------------------------------------

function trim(txt) {
  var s = "";
  for( var i = 0; i < txt.length; i++ ) {
    var ch = txt.charAt(i);
    switch( ch ) {
      case ' ' : break;
      case '\r' : break;
      case '\n' : break;
      default :
        s += ch;
        break;
    } // switch()
  } // for()
  return s;
} // trim()

//-----------------------------------------------------------------------------

function formatDistance(dist) {
    if( !dist ) return "?m";

    var n = 0;
    if( dist > 1000 ) {
        dist /= 1000;
        n = 1;
    }

    var distStr = "" + dist;
    var pos = distStr.indexOf(".");
    if( pos < 0 ) pos = distStr.indexOf(",");
    if( pos < 0 ) {
      pos = distStr.length;
      distStr += ".00000";
    }

    if( n &&  n > 0 ) pos += (n + 1);
    return distStr.substring(0, pos) + (n == 0 ? "m" : "km");
} // formatDistance()

//-----------------------------------------------------------------------------

function trans2wintrk(txt) {
  var s = "";
  for( var i = 0; i < txt.length; i++ ) {
    var ch = txt.charAt(i);
    if( ch == '~' ) {
      i++;
      ch = txt.charAt(i);
      switch( ch ) {
        case 'C' : ch = 'Ç'; break;
        case 'c' : ch = 'ç'; break;
        case 'S' : ch = 'Þ'; break;
        case 's' : ch = 'þ'; break;
        case 'G' : ch = 'Ð'; break;
        case 'g' : ch = 'ð'; break;
        case 'I' : ch = 'Ý'; break;
        case 'i' : ch = 'ý'; break;
        case 'O' : ch = 'Ö'; break;
        case 'o' : ch = 'ö'; break;
        case 'U' : ch = 'Ü'; break;
        case 'u' : ch = 'ü'; break;
        case 'b' : ch = ' '; break;
        default :
          break;
      }
    }
    s += ch;
  } // for()

  return s;
}

//-----------------------------------------------------------------------------

function trans2ucase(txt) {
  var s = "";
  for( var i = 0; i < txt.length; i++ ) {
    var ch = txt.charAt(i);
    switch( ch ) {
      case 'ç' : s += 'Ç'; break;
      case 'þ' : s += "\xDE"; break;
      case 'Þ' : s += "\xDE"; break;
      case 'ð' : s += "\xD0"; break;
      case 'Ð' : s += "\xD0"; break;
      case 'i' : s += "\xDD"; break;
      case 'Ý' : s += "\xDD"; break;
      case 'ý' : s += 'I'; break;
      case 'ö' : s += 'Ö'; break;
      case 'ü' : s += 'Ü'; break;
      default :
        s += ch.toUpperCase();
        break;
    }
  } // for()
  return s;
}

//-----------------------------------------------------------------------------

function trans2getstr(txt) {
  var s = "";
  for( var i = 0; i < txt.length; i++ ) {
    var ch = txt.charAt(i);
    switch( ch ) {
      case 'Þ' : s += "%DE"; break;
      case 'þ' : s += "%EE"; break;
      case 'Ð' : s += "%D0"; break;
      case 'ð' : s += "%F0"; break;
      case 'Ý' : s += "%DD"; break;
      case 'ý' : s += "%FD"; break;
      default :
        s += ch;
        break;
    }
  } // for()
  return s;
}

//-----------------------------------------------------------------------------

function trans2comp(txt) {
  var s = "";
  for( var i = 0; i < txt.length; i++ ) {
    var ch = txt.charAt(i);
    switch( ch ) {
      case 'Þ' : s += "S"; break;
      case 'þ' : s += "S"; break;
      case 'Ð' : s += "G"; break;
      case 'ð' : s += "G"; break;
      case 'Ý' : s += "I"; break;
      case 'ý' : s += "I"; break;
      case 'Ç' : s += "C"; break;
      case 'ç' : s += "C"; break;
      case 'Ö' : s += "O"; break;
      case 'ö' : s += "O"; break;
      case 'Ü' : s += "U"; break;
      case 'ü' : s += "U"; break;
      default :
        s += ch.toUpperCase();
        break;
    }
  } // for()
  return s;
}

//-----------------------------------------------------------------------------

function dump(elm) {
  s = "";
  var cnt = 0;
  for( property in elm ) {
    if( property.length >= 2 && property.substring(0, 2) == "on" ) continue;

    s += property + ": "+ elm[property] + " \n";
    cnt++;
    if( cnt >= 15 ) {
      alert(s);
      s = "";
      cnt = 0;
    }
  } // for()
  if( cnt > 0 ) alert(s);
  return;
} // dump()

//-----------------------------------------------------------------------------

var posStart = 0;

function filterImageXml(xmlData) {
  var prevArray;
  var paramList;
  var posBeg;
  var posEnd;
  var xml;

  posBeg = 0;
  posEnd = 0;
  posStart = 0;
  prevArray = null;
  while( true ) {
    var array = getPrintThemeData(xmlData, "P_BRAND");
    if( !array ) break;

    prevArray = array;
    if( posBeg == 0 ) {
      posBeg = array[0];
      xml = xmlData.substring(0, posBeg);
      posEnd = array[0] + array[1];
      paramList = array[4];
    }
    else {
      if( posEnd == array[0] )
        posEnd += array[1];
      else {
        xml += xmlData.substring(posEnd, array[0]);
        posBeg = array[0];
        posEnd = array[0] + array[1];
      }
      paramList += ("," + array[4]);
    }
  } // while()
  if( prevArray ) {
    xml += prevArray[5].substring(0, prevArray[2]) + paramList + prevArray[5].substring(prevArray[3]);
    xml += xmlData.substring(prevArray[0] + prevArray[1]);
    xmlData = xml;
  }


  posBeg = 0;
  posEnd = 0;
  posStart = 0;
  prevArray = null;
  while( true ) {
    var array = getPrintThemeData(xmlData, "P_BANKA_SUBE");
    if( !array ) break;

    prevArray = array;
    if( posBeg == 0 ) {
      posBeg = array[0];
      xml = xmlData.substring(0, posBeg);
      posEnd = array[0] + array[1];
      paramList = array[4];
    }
    else {
      if( posEnd == array[0] )
        posEnd += array[1];
      else {
        xml += xmlData.substring(posEnd, array[0]);
        posBeg = array[0];
        posEnd = array[0] + array[1];
      }
      paramList += ("," + array[4]);
    }
  } // while()
  if( prevArray ) {
    xml += prevArray[5].substring(0, prevArray[2]) + paramList + prevArray[5].substring(prevArray[3]);
    xml += xmlData.substring(prevArray[0] + prevArray[1]);
    xmlData = xml;
  }


  posBeg = 0;
  posEnd = 0;
  posStart = 0;
  prevArray = null;
  while( true ) {
    var array = getPrintThemeData(xmlData, "P_BANKA_ATM");
    if( !array ) break;

    prevArray = array;
    if( posBeg == 0 ) {
      posBeg = array[0];
      xml = xmlData.substring(0, posBeg);
      posEnd = array[0] + array[1];
      paramList = array[4];
    }
    else {
      if( posEnd == array[0] )
        posEnd += array[1];
      else {
        xml += xmlData.substring(posEnd, array[0]);
        posBeg = array[0];
        posEnd = array[0] + array[1];
      }
      paramList += ("," + array[4]);
    }
  } // while()
  if( prevArray ) {
    xml += prevArray[5].substring(0, prevArray[2]) + paramList + prevArray[5].substring(prevArray[3]);
    xml += xmlData.substring(prevArray[0] + prevArray[1]);
    xmlData = xml;
  }

  return xmlData;
} // filterImageXml()

//-----------------------------------------------------------------------------

function getPrintThemeData(xmlData, thmName) {
  var posBeg = xmlData.indexOf('<theme name="' + thmName + '"', posStart);
  if( posBeg < 0 ) return null;

  var posEnd =  xmlData.indexOf("</theme>", posBeg);
  if( posEnd < 0 ) return null;

  posEnd += 8;
  posStart = posEnd;
  var length = (posEnd - posBeg);
  var array = new Array(6);
  array[0] = posBeg; // Theme start position
  array[1] = length; // Thene xml length

  var pvalue = "0";
  var data = xmlData.substring(posBeg, posEnd);
  posBeg = data.indexOf('<parameter value="');
  if( posBeg >= 0 ) {
    posBeg += 18;
    posEnd = data.indexOf('"', posBeg);
    pvalue = data.substring(posBeg, posEnd);
  }
  array[2] = posBeg; // Parameter start position
  array[3] = posEnd; // Parameter end position
  array[4] = pvalue; // Parameter itself
  array[5] = data;   // whole theme xml
  return array;
} // getPrintThemeData()

//-----------------------------------------------------------------------------

function setPBrandThemeParameters(xmlPBrand, paramList) {
  var posBeg = xmlPBrand
  return xml;
} // setPBrandThemeParameters()

