/**
 * Event [object]
 *
 * @author Hristo Drumev
 * @package framework
 * @copyright Hristo Drumev [www.hdrumev.com]
 * @version 0.01 / 03.01.2007
 *
 * example:
 * function start() {}
 *
 * Event.add( window, 'load', start );
 */


/** Event [object] */
var Event = new Object();

/**
 * Returns real event object
 *
 * @param Object event - event object
 * @return event object
 */
Event.get = function( event )
{
	return !event ? window.event : event;
}

/**
 * Adds event to element
 *
 * @param DOMElement element - target element
 * @param String type - type of event (load, mouseover, mouseout, etc.)
 * @param Function fn - function to execute
 */
Event.add = function( element, type, fn )
{
	element.addEventListener ? element.addEventListener( type, fn, true ) :	element.attachEvent( 'on' + type, fn );
	//eval( 'element.on' + type + '=fn' );
}

/**
 * Removes attached event from element
 *
 * @param DOMElement element - target element
 * @param String type - type of event (load, mouseover, mouseout, etc.)
 * @param Function fn - function to execute
 */
Event.remove = function( element, type, fn )
{
	element.removeEventListener ?	element.removeEventListener( type, fn ) :	element.detachEvent( 'on' + type, fn );
}

/**
 * Returns DOMElement where event occurs
 *
 * @param Object event - event object
 * @return DOMElement
 */
Event.element = function( event )
{
	event = this.get( event );
	return event.target || event.srcElement;
}

Event.documentXY = function( event )
{
	event = this.get( event );
	var x = event.pageX || ( event.clientX + ( document.documentElement.scrollLeft || document.body.scrollLeft ) );
	var y = event.pageY || ( event.clientY + ( document.documentElement.scrollTop || document.body.scrollTop ) );
	return { x: x, y: y };
}

Event.elementXY = function( event )
{
	event = this.get( event );
	var x = ( event.pageX || event.clientX ) - ( event.offsetX || event.layerX );
	var y = ( event.pageY || event.clientY ) - ( event.offsetY || event.layerY );
	return { x: x, y: y };
}