/**
*
* Základní JavaScript knihovna
*
* @package		sllibs3
* @subpackage	jslibs
* @version		$Id: sl.js 16465 2010-04-22 14:24:29Z michal $
* @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: [],


	/**
	* 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
	* @return boolean
	*/
	inArray: function(needle, haystack) {
		try {
			for(var i=0; i<haystack.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() {
		var result = new Object;
		if (navigator.product == 'Gecko') {
			result.width = window.top.innerWidth;
			result.height = window.top.innerHeight;
		} else {
			result.width = window.top.document.documentElement.clientWidth;
			result.height = window.top.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() {
		var result = new Object;
		if (window.pageYOffset) {
			result.x = window.top.pageXOffset;
			result.y = window.top.pageYOffset;
		} else {
			result.x = window.top.document.documentElement.scrollLeft;
			result.y = window.top.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) {
		}
	},


	/**
	* 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;
			}
		}
	}

};


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'));
