var cmap;
var mymarkers;
var async_counter;
var myhilighted;
var cicon_red;
var cicon_green;
var zoomLevel = 8;

function CMarkerProperties(o) {
  var p, cx, cy;
  switch (getObjectClass(o)) {
    case 'Object':
      cx = o.x;
      cy = o.y;
      p = {
        x: cx,
        y: cy,
        key: cx + ':' + cy,
        point: new CEOVPoint(parseInt(cx), parseInt(cy)),
        title: o.title + '<br/>' + o.address + '<br/>' + o.phone
      };
      break;
    default:
      cx = o.point.x;
      cy = o.point.y;
      p = {
        x: cx,
        y: cy,
        key: cx + ':' + cy,
        point: o.point,
        title: o.address
      };
      break;
  }
  ivy.dom.apply(this, p);
}

function createCMarker(p, icon) {
  var markerOptions = { icon: (icon ? icon : cicon_red) };
  var marker = new CMarker(p.point, markerOptions);
  marker.p = p;
  mymarkers.add(p.key, marker);
  cmap.addMarker(marker);
  marker.title = p.title;
  marker.addListener('mouseover', showCLabel);
  marker.addListener('mouseout', hideCLabel);
  return marker;
}

function showCLabel() {
  this.openLabelHTML(this.title, true, { maxwidth: 200 });
}

function hideCLabel() {
  this.removeLabel();
}

function setCMarkers(o, icon) {
  if (o.length == 0) return;
  mymarkers = new DummyHash();
  async_counter = o.length;
  for (var i = 0; i < o.length; i++) {
    switch (typeof o[i]) {
      case 'string':
        myMapGeoCoder.getPoint(o[i], setCMarkersCallback);
        break;
      case 'object':
        setCMarkersCallback(o[i], icon);
        break;
    }
  }
}

function setCMarkersCallback(o, icon) {
  var p = new CMarkerProperties(o);
  var m = createCMarker(p, icon);
  async_counter--;
  if (async_counter == 0) {
    var keys = mymarkers.keys();
    if (keys.length > 1) {
      var points = new Array();
      for (var i = 0; i < keys.length; i++) points[points.length] = mymarkers.getItem(keys[i]).getPosition();
      var boundary = new CBoundary(points);
      cmap.zoomToRect(boundary);
    } else {
      cmap.moveTo(m.getPosition());
    }
  }
}

function setMyCenter(o) {
  var h2 = ivy.dom.previousSibling(cmap.divMap.parentNode.parentNode.parentNode);
  if (h2 != null && h2.tagName && h2.tagName.toLowerCase() == 'h2') h2.scrollIntoView(true);
  var p = new CMarkerProperties(o);
  cmap.moveTo(p.point);
  if (cmap.getZoomLevel() < zoomLevel) cmap.zoomTo(p.point, zoomLevel);
  if (mymarkers && mymarkers.exists(p.key)) {
    if (myhilighted != null) myhilighted.setIcon(cicon_red);
    var marker = mymarkers.getItem(p.key);
    marker.setIcon(cicon_green);
    myhilighted = marker;
  }
}

function setMyCityCenter(name, zoomlevel) {
  zoomLevel = zoomlevel || 8;
  myMapGeoCoder.getPoint(name, setMyCenter);
}


function showPostOffices(town) {
  var data = '<form-action><town>' + town + '</town></form-action>';
  ivy.http.post('/xslt/posta-search-postoffice.xslt?pageloader.parsecontent=true&cmd=result-only', data, showPostOfficesCallback);
}

function showPostOfficesCallback(wr) {
  var script = 'setCMarkers(' + wr.requester.responseText + ', cicon_green)';
  eval(script);
}

function pageZipResults(o, target) {
  var e = ivy.dom.childNodes(o.parentNode);
  var t = ivy.dom.childNodes(document.getElementById(target));
  for (var i = 0; i < e.length; i++) {
    e[i].style.fontWeight = 'normal';
    if (i % 2 == 0) t[parseInt(e[i].innerHTML) - 1].style.display = 'none';
  }
  o.style.fontWeight = 'bold';
  t[o.innerHTML - 1].style.display = 'block';
}

function initializeCMap(id, points) {
  cicon_red = new CIcon('/kepek/gmaps_pin_red.png', { imagesize: new CSize(32, 32), imagehotpoint: new CPoint(2, 19) });
  cicon_green = new CIcon('/kepek/gmaps_pin_green.png', { imagesize: new CSize(32, 32), imagehotpoint: new CPoint(2, 19) });
  cmap = new CMyMap(id, { radian: 7000, hasMinimap: false, showControls: true, showRatiometer: false });
  cmap.setWheelMode(false);
  setCMarkers(points);
}