//fuggosegek: 
if (typeof BROWSERDETECT == "undefined") {
  alert("(HELPLAYER) BROWSERDETECT include missing");
}

if (typeof HIDESELECT == "undefined") {
  alert("(HELPLAYER) HIDESELECT include missing");
}
//tobbszoros include:
if (typeof HELPLAYER != "undefined") {
  alert("HELPLAYER multiple insert!");
}
HELPLAYER=true;


/** Sugo layer-t megvalosito statikus osztaly
  */
function HelpLayer() {
}




/** Ez a metodus feldolgozza a beallitasokat, letrehozza a layert, beregisztralja az esemenykezeloket
  * @param event eger esemeny objektuma
  * @param cfg beallitasok objektuma
  */
HelpLayer.show = function (event,cfg) {
  HelpLayer.setDefaults();
  HelpLayer.readConfig(cfg);
  if (this.node == null) {
    this.moveFunction=function (event) {HelpLayer.mouseMove(event);};
    this.node=document.createElement("div");
    this.node.id="helplayer";
    document.body.appendChild(this.node);        
    this.node.className=this.classes["helplayer"];
 

    if (ieDOM) {
      HideSelect.registerNode(this.node.id,this.node);
    }
  }

  this.node.innerHTML=cfg.text;


  HelpLayer.registerMouseMove();
  HelpLayer.mouseMove(event);

 

  /*
  
  HelpLayer.setVisible(true);
  */
  var helplayer=this;
  window.setTimeout(function() {
      helplayer.setVisible(true);
      },10);
   
}


/** A layer lathatosagat vezerli, timeout miatt kulon fuggvenybe kerult
  * @param boolean true - megjelenites, false - eltuntetes
  */
HelpLayer.setVisible = function (vis) {
  if (vis == true) {
    //show
    this.node.style.visibility="visible";
    if (ieDOM) {
      HideSelect.notifyShow(this.node.id);
    }
  } else {
    //hide
    if (this.node && this.node.style.visibility == "visible") {
      this.node.style.visibility="hidden";

      if (ieDOM) {
        HideSelect.notifyHide(this.node.id,true);
      }
    }
  }
}

/** Alapertelmezett beallitasok
  */
HelpLayer.setDefaults = function () {
  this.classes={helplayer: "helplayer"};
  this.hPosition="CENTER";
  this.vPosition="S";
  this.yOffset=10;
}

/** Konfiguracios beallitasok beolvasasa, ervenyes adatokkal felulirja az alapertelmezett ertekeket
  * @param cfg
  */
HelpLayer.readConfig = function (cfg) {
  if (typeof cfg.classes == "object") {
    this.classes=mergeObject(this.classes,cfg.classes);
  }
  if (typeof cfg.yOffset == "number" && cfg.yOffset >= 0) {
  }
  if (typeof cfg.hPosition == "string" && (cfg.hPosition == "CENTER" || cfg.hPosition == "W" || cfg.hPosition == "E")) {
    this.hPosition=cfg.hPosition;
  }
  if (typeof cfg.vPosition == "string" && (cfg.vPosition == "N" || cfg.vPosition == "S")) {
    this.vPosition=cfg.vPosition;
  }
}

/** Sugo layer eltuntetese, esemenykezelok tiltasa
  * @param event eger esemeny objektuma
  */
HelpLayer.hide = function (event) {
  HelpLayer.unregisterMouseMove();

  var helplayer=this;
  window.setTimeout(function() {
      helplayer.setVisible(false);
      },10);
  /*
  HelpLayer.setVisible(false);
  */

  
  /*
  if (this.node) {
    this.node.style.visibility="hidden";

    HelpLayer.unregisterMouseMove();
    if (ieDOM) {
      HideSelect.notifyHide(this.node.id,true);
    }
  }
  */
}

/** Egermozgatasi esemenyre esemenykezelo beallitasa
  */
HelpLayer.registerMouseMove = function() {
  /*
  //osregi megoldas
  if (ns4 || ie4 || DOM) {
//    if (ns4)  {
//      document.captureEvents(Event.MOUSEMOVE);
//    }
    //itt mehetne addEvent is 
//    document.onmousemove = mouseMove;
  }
  */
  this.mouseRegistered=true;
  addEvent(document,"mousemove",this.moveFunction);
}

/** Egermozgatasi esemenyre esemenykezelo torlese
  */
HelpLayer.unregisterMouseMove = function () {
  /*
  //osregi megoldas
  if (ns4 || ie4 || DOM) {
    if (ns4)  {
      document.releaseEvents(Event.MOUSEMOVE);
    }
    //releaseevent is lehetne
    document.onmousemove = null;
  }
  */
  if (this.mouseRegistered) {
    removeEvent(document,"mousemove",this.moveFunction);
  }
}



/** Egermozgatasi esemenyre esemenykezeloje
  * event eger esemeny objektuma
  */
HelpLayer.mouseMove = function (event) {  
  var pos=getEventPos(event);

  var width=getContentBorderWidth(this.node);
  var height=getContentBorderHeight(this.node);

  if (this.hPosition == "CENTER") {
    pos.left-=Math.round(width/2);
  } else if (this.hPosition == "W") {
    pos.left-=width;
  }

  if (this.vPosition == "S") {
    pos.top+=this.yOffset;
  } else if (this.vPosition == "N") {
    pos.top -= height+this.yOffset;
  }

  var vpDim=getViewportDim();
  //hogy mennyivel log ki, az nem erdekel mindket, fuggolegesen amugy sem allithatjuk, mert akkor eger ala kerulne
  if (pos.top < vpDim.top) {
    //felul kilog
    pos.top+= height+2*this.yOffset;
  } else if (pos.top+height > vpDim.bottom) {
    //alul kilog
    if (pos.top - height - 2*this.yOffset < vpDim.top) {
      //felul kilogna, ezert bekenhagyjuk, hadd logjon alul ki
    } else {
      //felul nem log ki
      pos.top-= height+2*this.yOffset;
    }
  } else {
    //kivetelesen jo
  }
    
  
  //vizszintes
  
  if (pos.left < vpDim.left) {
    //ha balra log
    pos.left=vpDim.left;
  } else if (pos.left + width > vpDim.right) {
    //ha jobbra log
    pos.left=pos.left - ((pos.left + width) - (vpDim.right));
  } else {
    //ha befer
  }

  setPosBorder(this.node,pos);

  if (ieDOM) {
    HideSelect.notifyHide(this.node.id,true);  //legyen true???
    HideSelect.notifyShow(this.node.id);
  }

}


