/**
 * GMap2.createZMarker()  method. Creates a GMarker with special behaviour
 * @param {Object} opt_options GMarker options plus {hoverImage: ,visitedImage:}
 * @return {GMarker} 
 * Author: Esa 2006, 2007, 2008, ver1.2
 */
// A property  that contains the number of zIndexProcess function recursions
GMap2.prototype.zMarkerIndexReference = 1;
// A method that returns the the z-index offset for the next zIndexProcess recursion
GMap2.prototype.getZMarkerIndexOffset = function(koeff){
  this.zMarkerIndexReference++;
  koeff = koeff||1000000;
  this.zMarkerIndexOffset = this.zMarkerIndexReference * koeff  ;
  return this.zMarkerIndexOffset;
}
GMap2.prototype.createZMarker = function (point,opt_options) {
  var zMarker = {};
  var opts = opt_options||{};
  var map_ = this;
  var zIndex;
  function sendBack(marker,b) {
    zIndex = GOverlay.getZIndex(point.lat());
    if(!zMarker.isOverlayed){
      return zIndex;
    }
    if(map_.getInfoWindow().isHidden()){
      zIndex = zIndex-map_.getZMarkerIndexOffset();
      return zIndex;
    }
    zIndex = zIndex+map_.getZMarkerIndexOffset();
    return zIndex;
  }
  opts.zIndexProcess = sendBack;
  zMarker.isOverlayed = false;
  zMarker = new GMarker(point,opts);
  map_.addOverlay(zMarker);
  zMarker.isOverlayed = true;
  if(opts.idleImage)zMarker.setImage(opts.idleImage);
  zMarker.visited = opts.visited||false;
  //var idleImage = zMarker.getIcon().image;
  //var hoverImage = opts.hoverImage||DEFAULT_ZMARKER_HOVER_IMAGE;
  //var visitedImage = opts.visitedImage||DEFAULT_ZMARKER_VISITED_IMAGE;
  GEvent.addListener(zMarker, "infowindowclose", function() {
    zMarker.visited = true;
    zMarker.infoIsOpen = false;
    GEvent.trigger(zMarker,"mouseout");
  });
  /*
  GEvent.addListener(zMarker, "click", function() {
    //zMarker.setImage(hoverImage);
    zMarker.infoIsOpen = true;
  });
  GEvent.addListener(zMarker,'mouseover',function(){
    //if(hoverImage){
    //  zMarker.setImage(hoverImage);
    //}
  });
  */  
  GEvent.addListener(zMarker,'mouseout',function(){
    if(!this.infoIsOpen){
      if(zMarker.visited){
        //if(visitedImage)zMarker.setImage(visitedImage);
      }else{
        //zMarker.setImage(idleImage);
      }
    }
  });
  return zMarker;
}


