/*
 * Copyright (c) 2006 Jonathan Weiss <jw@innerewut.de>
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 */

var Tooltip = Class.create();

Tooltip.prototype = {

  initialize: function(element, tool_tip, nazev, pozemek, cena, stav) {
    var options = Object.extend( {
      default_css:     false,
      delta_x:         5,
      delta_y:         5,
      zindex:          1000
    }, arguments[1] || {});
    this.element   = $(element);
    this.tool_tip  = $(tool_tip);
    this.options   = options;
    this.nazev     = nazev;
    this.pozemek   = pozemek;
    this.cena      = cena;
    this.stav      = stav;
    this.tool_tip.hide();    // hide the tool-tip by default
    this.eventMouseOver = this.showTooltip.bindAsEventListener(this);
    this.eventMouseOut  = this.hideTooltip.bindAsEventListener(this);
    this.registerEvents();
  },


  destroy: function() {
    Event.stopObserving(this.element, "mouseover", this.eventMouseOver);
    Event.stopObserving(this.element, "mouseout", this.eventMouseOut);
  },


  registerEvents: function() {
    Event.observe(this.element, "mouseover", this.eventMouseOver);
    Event.observe(this.element, "mouseout", this.eventMouseOut);
  },


  showTooltip: function(event) {
    Event.stop(event);
    var mouse_x = Event.pointerX(event);
    var mouse_y = Event.pointerY(event);
    var dimensions = Element.getDimensions(this.tool_tip);
    var element_width = dimensions.width;
    var element_height = dimensions.height;
    if ( (element_width + mouse_x) >= ( this.getWindowWidth() - this.options.delta_x) ) {
      mouse_x = mouse_x - element_width - this.options.delta_x;
    } else {
      mouse_x = mouse_x + this.options.delta_x;
    }
    if ( (element_height + mouse_y) >= ( this.getWindowHeight() - this.options.delta_y) ) {
      mouse_y = mouse_y - element_height - this.options.delta_y;
    } else {
      mouse_y = mouse_y + this.options.delta_y;
    } 
    this.setStyles(mouse_x, mouse_y);
    $("nazev").update(this.nazev);
    $("stav").update(this.stav);
    $("pozemek").update(this.pozemek);
    $("cena").update(this.cena);
    new Element.show(this.tool_tip);
  },

  
  setStyles: function(x, y) {
    Element.setStyle(this.tool_tip, {
      position:          'absolute',
      top:               y + "px",
      left:              x + "px",
      zindex:            this.options.zindex
    });
  },


  hideTooltip: function(event) {
    new Element.hide(this.tool_tip);
  },


  getWindowHeight: function() {
    var innerHeight;
    if (navigator.appVersion.indexOf('MSIE')>0) {
      innerHeight = document.body.clientHeight;
    } else {
      innerHeight = window.innerHeight;
    }
    return innerHeight;	
  },

 
  getWindowWidth: function() {
    var innerWidth;
    if (navigator.appVersion.indexOf('MSIE')>0) {
      innerWidth = document.body.clientWidth;
    } else {
      innerWidth = window.innerWidth;
    }
    return innerWidth;
  }

}

