/**
 * ToolTip
 * Tooltip class based on Element
 */
var ToolTip = Class.create({

	/**
	* init item
	*/
	initialize: function(target, label) {

        if (!target.id) {
            //var myDate = new Date();
            //target.id = 'id' + Math.round(Math.abs(Math.sin(myDate.getTime()))*1000000000)%10000000;
            target.id = 'id' + (Math.random() + 1);
        }

		var objBody = document.getElementsByTagName('body')[0];


		this.toolTip = new Element("div");
		this.toolTip.id = 'tooltip' + target.id;
        this.toolTip.innerHTML = label;
        this.toolTip.hide();
		this.toolTip.style.position = 'absolute';
        this.toolTip.style.zIndex = '302';

        this.offX = 15;
        this.offY = 15;

        objBody.appendChild(this.toolTip);
		
		Event.observe(target, "mouseover", this.start.bind(this));
		Event.observe(target, "mouseout", this.stop.bind(this));

	},
	
	/**
	 * show tooltip
	 */
	start: function(event){
        this.render(event);
		new Effect.Appear(this.toolTip.id, { duration: 0.4, from: 0.0, to: 1.0 });

		var obj = this;
		document.observe('mousemove', this.render.bind(this));
	},
	
	/**
	 * hide tooltip
	 */
	stop: function(event){
		new Effect.Fade(this.toolTip.id, { duration: 0.4});
		document.stopObserving('mousemove', this.render.bind(this));
	},
	
	/**
	 * render tooltip
	 */
	render: function(evt){
		var obj = this.toolTip.style;
		obj.left = (parseInt(this.mouseX(evt))+ this.offX) + 'px';
		obj.top = (parseInt(this.mouseY(evt))+ this.offY) + 'px';
	},
	
	/**
	 * mouse follow xpoisition
	 */
	mouseX: function(evt) {
		if (!evt) {
            evt = window.event;
        }
		if (evt.pageX) {
            return evt.pageX;
        } else if (evt.clientX) {
            return evt.clientX + (document.documentElement.scrollLeft ?  document.documentElement.scrollLeft : document.body.scrollLeft);
        } else {
            return 0;
        }
	},
	
	/**
	 * mouse follow ypoisition
	 */
	mouseY: function(evt) {
		if (!evt) {
            evt = window.event;
        }
		if (evt.pageY) {
            return evt.pageY;
        } else if (evt.clientY) {
            return evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
        } else {
            return 0;
        }
	},

    addClassName: function(className) {
        this.toolTip.addClassName(className);
    }
	
});