var mapview;
var dynamicTheme;
var customerPointsTheme;
var lyrTheme = new Array(32);
var circleTool;
var rectangleTool;

var cSavedLon;
var cSavedLat;

var hgElement = null;

var ilPieTheme = null;
var ilcePieTheme = null;
var bolgePieTheme = null;
var ilColorTheme = null;
var ilceColorTheme = null;
var bolgeColorTheme = null;

var ilPieStyle = null;
var ilcePieStyle = 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;2010 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.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);
  mapview.display();
  return;
}

IMapper.prototype.showMapBB=function(minX, minY, maxX, maxY) {
  mapview.zoomToRectangle(MVSdoGeometry.createRectangle(minX, minY, maxX, maxY, 8307));
  mapview.display();
  return;
}

IMapper.prototype.showMap=function(mapZoom) {
  mapview.setZoomLevel(mapZoom);
  return;
}

IMapper.prototype.addMouseRClickFunction=function(mc) {
  mapview.setEventListener("mouse_right_click", mc);
  return;
}

IMapper.prototype.addZoomLevelChangeFunction=function(before, after) {
  mapview.setEventListener("before_zoom_level_change", before);
  mapview.setEventListener("zoom_level_change", after);
  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);
  if( mouseclick ) lyrTheme[index].setEventListener('mouse_click', mouseclick);
  if( mouseclick ) lyrTheme[index].setEventListener('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.setCircleTool=function(getOrdinates, getCircle) {
  if( circleTool != null ) {
    circleTool.init();
    return;
  }

  circleTool = new MVCircleTool("MAPLINK20.L.REDLINE");
  mapview.addCircleTool(circleTool);
  if( getOrdinates != null ) circleTool.setEventListener("on_start", getOrdinates);
  if( getCircle != null ) circleTool.setEventListener("on_finish", getCircle);
  circleTool.init();
  return;
}

IMapper.prototype.clearCircleTool=function() {
  if( circleTool != null ) circleTool.clear();
  return;
}

IMapper.prototype.setRectangleTool=function(getOrdinates, getRectangle) {
  if( rectangleTool != null ) {
    rectangleTool.init();
    return;
  }

  rectangleTool = new MVRectangleTool("MAPLINK20.L.REDLINE");
  mapview.addRectangleTool(rectangleTool);
  if( getOrdinates != null ) rectangleTool.setEventListener("on_start", getOrdinates);
  if( getRectangle != null ) rectangleTool.setEventListener("on_finish", getRectangle);
  rectangleTool.init();
  return;
}

IMapper.prototype.clearRectangleTool=function() {
  if( rectangleTool != null ) rectangleTool.clear();
  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);
  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.setEventListener('mouse_click', mouseclick);
  customerPointsTheme.setEventListener('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.clearCustomerPoints=function() {
  for( var i = 0; i <= 999; i++ ) {
    var mf = mapview.getFOI("cpts_" + i);
    if( mf == null ) break;
    
    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 != null && mclick != "undefined" ) mf.setEventListener("mouse_click", mclick);
    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);
  mapview.addFOI(mf);
  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.setEventListener("mouse_click", mclick);
  }
  mapview.addFOI(mf);
  return;
}

IMapper.prototype.flashMarker=function(fc) {
  flashCount = fc
  window.setTimeout(flashMarker_flasher, 200);
  return;
}

IMapper.prototype.getMapImageURL=function(callback) {
  var oms = "http://" + document.location.host + "/mapviewer/omserver";
  var xml = mapview.getMapAsXML("PNG");
  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);
          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);
  mapview.display();
}

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.setEventListener('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.setEventListener('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( 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.setEventListener('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( 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( 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 {
      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.setEventListener('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.LOGO_COLORS");
    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.setEventListener('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.LOGO_COLORS");
    ilceColorTheme.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.setEventListener('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.LOGO_COLORS");
    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( 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 {
    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 {
      var nsdpInfo = new MVNSDP("defaultNSDP");
      nsdpInfo.setTheme("BOLGE_COLOR_JDBC_THEME");
      nsdpInfo.setKeyColumn("BOLGE_ID");
      nsdpInfo.setParameters(ps);
      bolgeColorTheme.setNSDP(nsdpInfo); 
      bolgeColorTheme.refresh();
    }
    
  return;
}

//-----------------------------------------------------------------------------

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 = (elmMap.offsetWidth - width) / 2;
    hgElement.style.top = (elmMap.offsetHeight - height) / 2;
    hgElement.style.visibility = 'visible';
    hgElement.onLoad = function() {
                         hgElement.style.left = (elmMap.offsetWidth - hgElement.width) / 2;
                         hgElement.style.top = (elmMap.offsetHeight - hgElemnt.height) / 2;
                         hgElement.onload = null;
                       };
  }
  elmMap.appendChild(hgElement);
  if( func != null && func != undefined ) self.setTimeout(func, 100);
  return;
} // setHourglass()

function clearHourglass(func) {
  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 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()

