/**
 * @fileoverview Pozwala dodać balonik do elementów strony. Alternatywa dla title i alt.
 *
 * @used IE, FF, Opera
 *
 * @example
 *		<a href="#" onmouseover="Tooltip.init('opis linku', true, event);">link</a>
 *		lub
 *		<a href="#" onmouseover="Tooltip.init(document.getElementById('div11'), event);">link</a>
 *		lub
 *		<a href="#" onmouseover="Tooltip.show('div11', event);" onmouseout="Tooltip.hide('div11');">link</a>
 *
 * @version 1.2 2005/08/12
 */

Import('myLib/util/Random.js');
Import('myLib/events/CreatorEvents.js');
Import('myLib/html/Styles.js');
Import('myLib/html/DOMObjects.js');
Import('myLib/data/ArrayMap.js');

/**
 * @constructor
 */
function Tooltip(){};
//new Object();

/**
 * Nazwa zdarzenia usuwającego balonik.
 * @type	String
 * @public
 */
Tooltip.event = 'mouseout';

/**
 * Styl balonika.
 * @type	Array
 * @private
 */
Tooltip.style = { // styl balonika
	color: 'black',
	fontFamily: 'verdana',
	fontSize: '8pt',
	backgroundColor: 'white',
	padding: '3px',
	border: 'black 1px solid',
	zIndex: '1000'
};

/**
 * Ustawia podany styl dla balonika.
 * @public
 * @param	String	(nazwa stylu np.: '.tresc')
 * @return	void
 */
Tooltip.setStyle = function(styleName){
	var style = Styles.getForClass(styleName);
	Tooltip.style = new ArrayMap().mapping(Tooltip.style, style);
};

/**
 * Inicjuje balonik. Ułatwia utworzenie balonika.
 * @public
 * @param	Mixed	(zawartosc balonika, tresc lub objekt)
 * @param	Boolean	(okresla, czy ma być dodane do elementu zdarzenie ukrywajace balonik)
 * @param	Object	(objekt zdarzenia)
 * @return	Object	(objekt reprezentujący balonik)
 */
Tooltip.init = function(content, isHidden, e){
	var id = Random.string(10);
	var element = DOMObjects.appendLayer(id, content);
	if(isHidden){
		var ce = new CreatorEvents(CreatorEvents.getTarget(e));
		ce.add(Tooltip.event, function(e){ Tooltip.destroy(id, e); });
	}
	Tooltip.show(id, e);
	return element;
};

/**
 * Wyświetla podany balonik.
 * @public
 * @param	Mixed	(id elementu lub element jako objekt)
 * @param	Object	(objekt zdarzenia)
 * @return	void
 */
Tooltip.show = function(element, e){
    var tooltip = System.getElement(element);

	var ce = new CreatorEvents(window);
	ce.add('mouseout', function(e){ Tooltip.destroy(element, e); });

	Styles.setStyle(tooltip, Tooltip.style);
	Styles.setStyle(tooltip, {
		position: 'absolute',
		top: document.body.scrollTop + e.clientY, // e.pageY + 5;
		left: document.body.scrollLeft + e.clientX + 15, // e.pageX + 5;
		visibility: 'visible'
	});
};

/**
 * Drop tooltip.
 * @private
 * @param	Mixed	(id element's or reference to a element)
 * @param	Object	(event)
 * @return	void
 */
Tooltip.destroy = function(element, e){
	DOMObjects.remove(element);

	//var e = CreatorEvents.getEvent(e);
	//var target = CreatorEvents.getTarget(e);
	//var ce = new CreatorEvents(target);
    //ce.remove(Tooltip.event, Tooltip.destroy);
};

/**
 * Hide tooltip given it's id.
 * @public
 * @param	String	(id element's)
 * @return	void
 */
Tooltip.hide = function(id){
	DOMObjects.hide(id);
};
