// Tooltips Class
// A superclass to work with simple CSS selectors
var Tooltips = Class.create();
Tooltips.prototype = {
initialize: function(selector, options) {
var tooltips = $$(selector);
tooltips.each( function(tooltip) {
new Tooltip(tooltip, options);
});
}
};
// Tooltip Class
var Tooltip = Class.create();
Tooltip.prototype = {
initialize: function(el, options) {
this.el = $(el);

this.initialized = false;
this.setOptions(options);
 
// Event handlers
this.showEvent = this.show.bindAsEventListener(this);
this.hideEvent = this.hide.bindAsEventListener(this);
this.updateEvent = this.update.bindAsEventListener(this);
//Event.observe(this.el, "mouseover", this.showEvent );
//Event.observe(this.el, "mouseout", this.hideEvent );
Event.observe(this.el, "mouseenter", this.showEvent );
Event.observe(this.el, "mouseleave", this.hideEvent );
 
// Removing title from DOM element to avoid showing it
//this.content = this.el.title.stripScripts().strip();
//this.content = this.el.title.stripScripts().strip();
//this.content = document.getElementById(this.el.id).nextSibling;

var tipID = this.el.id+"tip";

this.content = $(tipID).innerHTML;

this.el.title = "";
 
// If descendant elements has 'alt' attribute defined, clear it
this.el.descendants().each(function(el){
if(Element.readAttribute(el, 'alt'))
el.alt = "";
});
},
setOptions: function(options) {
this.options = {
backgroundColor: '#999', // Default background color
borderColor: '#666', // Default border color
textColor: '', // Default text color (use CSS value)
textShadowColor: '', // Default text shadow color (use CSS value)
maxWidth: 250, // Default tooltip width
align: "left", // Default align
delay: 250, // Default delay before tooltip appears in ms
mouseFollow: true, // Tooltips follows the mouse moving
opacity: .75, // Default tooltips opacity
appearDuration: .25, // Default appear duration in sec
hideDuration: .25 // Default disappear duration in sec
};
Object.extend(this.options, options || {});
},
show: function(e) {
this.xCord = Event.pointerX(e);
this.yCord = Event.pointerY(e);
if(!this.initialized)
this.timeout = window.setTimeout(this.appear.bind(this), this.options.delay);
},
hide: function(e) {
if(this.initialized) {
this.appearingFX.cancel();
if(this.options.mouseFollow)
Event.stopObserving(this.el, "mousemove", this.updateEvent);
new Effect.Fade(this.tooltip, {duration: this.options.hideDuration, afterFinish: function() { Element.remove(this.tooltip) }.bind(this) });
}
this._clearTimeout(this.timeout);
 
this.initialized = false;
},
update: function(e){
this.xCord = Event.pointerX(e);
this.yCord = Event.pointerY(e);
this.setup();
},
appear: function() {
// Building tooltip container
this.tooltip = new Element("div", { className: "tool-tip", style: "display: none" });
 
 
var top = new Element("div", { className: "tool-title" })
 
var bottom = new Element("div", { className: "tool-text" })

var content = new Element("div", { className: "tool-text", style: "background-position:center;" }).update(this.content);
 
// Building and injecting tooltip into DOM
this.tooltip.insert(top).insert(content).insert(bottom);
$(document.body).insert({'top':this.tooltip});
 
 
Element.extend(this.tooltip); // IE needs element to be manually extended
this.options.width = this.tooltip.getWidth() + 1; // Quick fix for Firefox 3
this.tooltip.style.width = this.options.width + 'px'; // IE7 needs width to be defined
 
this.setup();
 
if(this.options.mouseFollow)
Event.observe(this.el, "mousemove", this.updateEvent);
 
this.initialized = true;
this.appearingFX = new Effect.Appear(this.tooltip, {duration: this.options.appearDuration, to: this.options.opacity });
},
setup: function(){
// If content width is more then allowed max width, set width to max
if(this.options.width > this.options.maxWidth) {
this.options.width = this.options.maxWidth;
this.tooltip.style.width = this.options.width + 'px';
}
 
// Tooltip doesn't fit the current document dimensions
if(this.xCord + this.options.width >= Element.getWidth(document.body)) {
this.options.align = "right";
this.xCord = this.xCord - this.options.width + 20;
} else {
this.options.align = "left";
}

//var kartenOffset = $("kartenKontainer").cumulativeOffset();

var offset = this.el.cumulativeOffset();

this.tooltip.style.left = offset.left-27+"px";
this.tooltip.style.top = offset.top+25+"px";

//this.tooltip.style.left = this.xCord - 43 + "px";
//this.tooltip.style.top = this.yCord + 27 + "px";
}, 
_clearTimeout: function(timer) {
clearTimeout(timer);
clearInterval(timer);
return null;
}
};