/**
*
* JavaScript knihovna pro práci s událostmi
*
* @package		sllibs3
* @subpackage	jslibs
* @version		$Id: sl.event.js 15224 2010-03-11 16:45:33Z michal $
* @encoding		UTF-8
* @author		Michal Kouďa <michal.kouda@e4you.cz>
* @copyright	(c) e4you spol. s r.o. 2002-2010, <design@e4you.cz>
*
* Obsah tohoto souboru je majetkem e4you spol. s r.o. Jeho kopírování,
* pozměňování, šíření a jakékoli další využití je možné výhradně
* se souhlasem e4you spol. s r.o.
*
*/

/// pokud není knihovna označena jako natažená, načteme ji
if(!sl.loaded['sl.event.js']) {

	/// definujeme modul a jeho metody
	sl.event = {

		/**
		* Konstanty pro klávesové kódy
		*/
		KEY_ARROW_LEFT: 	37,
		KEY_ARROW_UP: 		38,
		KEY_ARROW_RIGHT:	39,
		KEY_ARROW_DOWN:		40,
		KEY_ESC:			27,
		KEY_ENTER:			13,
		KEY_BACKSPACE:		8,
		KEY_TAB:			9,
		KEY_PAGE_UP:		33,
		KEY_PAGE_DOWN:		34,
		KEY_HOME:			36,
		KEY_END:			35,
		KEY_SPACE:			32,


		/**
		* Vrátí správný keyCode buď z předaného elementu nebo pro IE z window.event
		*
		* @param event objekt s událostí
		*
		* @return integer keyCode stisknuté klávesy
		*/
		getKeyCode: function(event) {
			var result = null;
			if (event && event.keyCode) {
				result = event.keyCode;
			} else if(window.event && window.event.keyCode) {
				result = window.event.keyCode;
			}
			return result;
		},


		/**
		* Zastaví další propagaci eventu
		*
		* @param event objekt s událostí
		*/
		stopPropagation: function(event) {
			/// pokud je předán objekt události nejsme v IE
			if(event && event.stopPropagation) {
				event.stopPropagation();
			} else {
				try {
					window.event.cancelBubble = true;
				} catch (e) {}
			}
		},


		/**
		* Zabrání defaultní akci spojené s událostí
		*
		* @param event objekt s událostí
		*/
		preventDefault: function(evnt) {
			/// DOM
			if(evnt.preventDefault) {
				evnt.preventDefault();
			/// IE
			} else {
				evnt.returnValue = false;
			}
		},


		/**
		* Přidá objektu ovladač události
		*
		* @param _object objekt, kterému přiřazujeme ovladač události
		* @param _event_name jméno události, pro kterou přiřazujeme ovladač
		* @param _handler funkce s ovladačem dané události
		*/
		addHandler: function (_object, _event_name, _handler) {
			/// DOM model
			if (_object.addEventListener) {
				_object.addEventListener(_event_name, _handler, false);
			/// MS IE model
			} else if (_object.attachEvent) {
				_object.attachEvent('on' + _event_name, _handler);
			}
		},


		/**
		* Odejme objektu ovladač události
		*
		* @param _object objekt, jemuž odebíráme ovladač události
		* @param _event_name jméno události, pro kterou přiřazujeme ovladač
		* @param _handler funkce s ovladačem dané události
		*/
		removeHandler: function(_object, _event_name, _handler) {
			/// DOM model
			if (_object.removeEventListener) {
				_object.removeEventListener(_event_name, _handler, false);
			/// MS IE model
			} else if (_object.detachEvent){
				_object.detachEvent('on' + _event_name, _handler);
			}
		},


		/**
		* Přidá objektu ovladač události - zavrženo
		*
		* @param _object objekt, kterému přiřazujeme ovladač události
		* @param _event_name jméno události, pro kterou přiřazujeme ovladač
		* @param _handler funkce s ovladačem dané události
		* @deprecated místo této funkce je třeba, použít sl.event.addHandler
		*/
		addEvent: function (_object, _event_name, _handler) {
			sl.event.addHandler(_object, _event_name, _handler);
		},


		/**
		* Odejme objektu ovladač události
		*
		* @param _object objekt, jemuž odebíráme ovladač události
		* @param _event_name jméno události, pro kterou přiřazujeme ovladač
		* @param _handler funkce s ovladačem dané události
		* @deprecated místo této funkce je třeba, použít sl.event.removeHandler
		*/
		removeEvent: function(_object, _event_name, _handler) {
			sl.event.removeHandler(_object, _event_name, _handler)
		},


		/**
		* Vrací objekt s událostí
		*
		* @param _event Object Objekt s událostí
		*/
		getEvent: function(_event) {
			/// DOM | Internet Explorer
			return _event || window.event;
		},


		/**
		* Vrací cíl události
		*
		* @param _event Object Objekt s událostí
		*/
		getTarget: function(_event) {
			/// DOM | Internet Explorer
			return _event.target || _event.srcElement;
		}

	}

	/// označíme knihovnu jako načtenou
	sl.loaded['sl.event.js'] = true;
}

