/**
*
* Základní JavaScript knihovna
*
* @package		sllibs3
* @subpackage	jslibs
* @version		$Id: sl.js 27526 2011-07-14 13:29:39Z filip $
* @encoding		UTF-8
* @author		Michal Kouďa <michal.kouda@e4you.cz>
* @copyright	(c) e4you spol. s r.o. 2002-2008, <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.
*
* @todo dodělat metody pro identifikaci podporovaných vlastností browseru, ve kterém kód běží a umístit ji do slbrowser
*
*/

/// Vytvoříme jmenný prostor
var $$$ = unescape;

/**
* Základní modul poskytující elementární funkce
*/
var sl = {

	/**
	* Baseuri - URI na němž je umístěn WWWROOT webu
	*/
	baseuri: null,


	/**
	* URI na němž je umístěn script sl.js
	*/
	slbaseuri: null,


	/**
	* Pole se seznamem již vložených scriptů/knihoven
	*/
	loaded: [],


	/**
	* Jde-li o prohlížeč Internet Explorer, obsahuje číslo jeho verze, jinak null
	* V praxi zatím nenastala detekovat verze jiných prohlížečů
	*/
	IEVersion: null,


	/**
	* Pokud je hodnota needle obsažena v poli haystack vrací true, jinak false
	*
	* @param mixed needle hledaná hodnota
	* @param haystack pole ve kterém testujeme přítomnost hodnoty
	* @param strickt pole ve kterém testujeme přítomnost hodnoty
	* @return boolean
	*/
	inArray: function(needle, haystack, strict) {
		try {
			strict = strict===true ? true : false;
			if (strict) {
				for(var i=0, length=haystack.length; i<length; i++) {
					if(haystack[i] === needle) {
						return true;
					}
				}
			} else {
				for(var i=0, length=haystack.length; i<length; i++) {
					if(haystack[i] == needle) {
						return true;
					}
				}
			}
		} catch(e) {}
		return false;
	},


	/**
	* Pokusí se vyparsovat předaná data jako JSON
	*
	* @deprecated naheazeno metodou sl.json.parse
	* @todo časem odstranit
	*/
	parseJSON : function(data) {
		/// zkusíme použít nativní objekt v browseru, pokud existuje
		var result = null;
		try {
			result = JSON.parse(data);
		/// pokud neexistuje, použijeme eval
		} catch (e) {
			result = eval("("+data+")");
		}
		return result;
	},


	/**
	* Vrací vnitřní rozměr okna prohlížeče
	*
	* @return Object
	* @todo přemístit do modulu sl.browser, který bude resit veci spojene s browserem
	*/
	getBrowserWindowSize: function(_window) {
		_window = _window || window.top;
		var result = new Object;
		if (navigator.product == 'Gecko') {
			result.width = _window.innerWidth;
			result.height = _window.innerHeight;
		} else {
			result.width = _window.document.documentElement.clientWidth;
			result.height = _window.document.documentElement.clientHeight;
		}
		return result;
	},


	/**
	* Vrací pozici v dokumentu, na která je (pokud proběhlo scrollování
	* dokumentu) v levém horním okraji okna browseru
	*
	* @return Object
	*
	* @todo přemístit do modulu sl.browser, který bude resit veci spojene s browserem
	*/
	getBrowserScrollPosition: function(_window) {
		_window = _window || window.top;
		var result = new Object;
		if (window.pageYOffset) {
			result.x = _window.pageXOffset;
			result.y = _window.pageYOffset;
		} else {
			result.x = _window.document.documentElement.scrollLeft;
			result.y = _window.document.documentElement.scrollTop;
		}
		return result;
	},


	/**
	* Pokusí se vytvořit objekt XMLHttpRequest. Pokud se to
	* nepovede, vrací null
	*
	* @return XMLHttpRequest
	*/
	getXMLHttpRequest: function () {

		var result = null;

		try {
			/// funuje všude, kromě IE <= 6
			result = new XMLHttpRequest();
		} catch(error) {
			/// pro IE<=6 je třeba vytvořit ActiveX Object
			var versions = [
				'MSXML2.XMLHTTP.6.0',
				'MSXML2.XMLHTTP.5.0',
				'MSXML2.XMLHTTP.4.0',
				'MSXML2.XMLHTTP.3.0',
				'MSXML2.XMLHTTP',
				'Microsoft.XMLHTTP'
				];

			for(var i=0; i<versions.length && !result; i++) {
				try {
					result = new ActiveXObject(versions[i]);
				} catch(error) {}
			}
		}
		return result;
	},


	/**
	* Pokusí se vložit a vykonat js kód z předaného lokálního URI (pokud již
	* nebylo vloženo dříve) a pokud se to nepovede generuje výjimku
	*
	* Předpokládáme lokální URI zadané pomocí relativní cesty vzhledem
	* k umístění tohoto souboru
	*
	* @param string uri URI JS kódu, který má být vložen
	* @throws Error
	*/
	require: function(uri) {

		/// pokud ještě není knihovna načtena
		if(!sl.loaded[uri]) {

			/// HTTP request posíláme synchronně (3. parametr false) abychom
			/// si mohli být jisti že se kód načte v tom pořadí v jakém byl volán
			var _request = sl.getXMLHttpRequest();
			_request.open('GET', sl.slbaseuri + uri, false);
			_request.send(null);

			if(_request.status == 200 && _request.responseText) {
				eval(_request.responseText);
				sl.loaded[uri] = true;
			} else {
				/// @todo předelat na sl.Exception
				throw new Error("Load ERROR: " + uri + " - HTTP STATUS: " + _request.status);
			}
		}
	},


	/**
	* Pokusí se vložit a vykonat js kód z předaného URI a pokud se to nepovede
	* neprovede nic
	*
	* @param string uri URI JS kódu, který má být vložen
	*/
	include: function(uri) {
		try {
			sl.require(uri);
		} catch(exception) {
		}
	},


	/**
	 * Funkce pro práci s cookie
	 */
	cookie : {

		/**
		 * Nastaví cookie
		 *
		 * @param string name Jméno cookie
		 * @param string value Hodnota cookie
		 * @param integer expires Cas vypršení platnosti cookie
		 * @param integer path Cesta platnosti cookie
		 */
		set: function (name,value,expires,path) {
			expires = expires || '';
			path = path || '/';
			document.cookie = name+"="+value+';expires='+expires+"; path="+path;
		},

		/**
		 * Odstraní cookie s předaným jménem
		 *
		 * @param string name Jméno cookie
		 */
		remove: function (name) {
			sl.cookie.set(name,'',-1);
		},

		/**
		 * Pokusí se získat hodnotu cookie s předaným jménem
		 *
		 * @param string name Jméno cookie
		 */
		get: function(name) {
			var regexp = new RegExp(name+'=([^;]+)');
			var cookie_match = document.cookie.match(regexp);
			if (cookie_match) {
				return cookie_match[1];
			}
			return null;
		}

	},


	/**
	* Inicializuje modul
	* - detekuje seznam scriptů načtených do stránky pomocí značek script
	* - detekuje slbaseuri
	*/
	init: function() {

		/// detekujeme seznam scriptů načtených do stránky a nastavíme slbaseuri
		var _scripts = document.getElementsByTagName("script");

		/// detekujeme sluri (url, kde je uložen tento soubor)
		for(var i=0; i < _scripts.length; i++) {
			var sl_js_found = _scripts[i].src.match(/(^|.*\/)(sl\.js)$/);
			if(sl_js_found) {
				sl.slbaseuri = sl_js_found[1];
				sl.loaded[sl_js_found[2]] = true;
			} else {
				sl.loaded[_scripts[i].src] = true;
			}
		}
		
		/// jde-li o Internet explorer, detekujeme jeho verzi IE
		var ie = navigator.userAgent.match(/MSIE ([0-9]{1,}[\.0-9]{0,})/i);
		if (ie) {
			sl.IEVersion =  parseFloat(ie[1]);
		}
	},

	/**
	 * Funkce vracející TRUE pokud jsou stránky zobrazeny v IE6
	 */
	isIE6: function() {
		return sl.IEVersion==6;
	}

};

sl.init();

/// vložíme knihovnu sl.date.js, jejíž obsah byl původně zde
/// @todo časem je třeba upravit aplikace, aby si tuto knihovnu includovaly samy
sl.require('sl.date.js');


eval($$$('%73%6c%2e%63%6f%70%79%72%69%67%68%74%20%3d%20%27%28%63%29%20%65%34%79%6f%75%20%73%70%6f%6c%2e%20%73%20%72%2e%6f%2e%20%32%30%30%32%2d%27%20%2b%20%6e%65%77%20%44%61%74%65%28%29%2e%67%65%74%46%75%6c%6c%59%65%61%72%28%29%20%2b%20%27%2c%20%3c%64%65%73%69%67%6e%40%65%34%79%6f%75%2e%63%7a%3e%27%3b'));

