/**
*
* JavaScript knihovna s metodami pro debugování
*
* @package		sllibs3
* @subpackage	jslibs
* @version		$Id: sl.debug.js 4760 2008-09-02 21:06:55Z 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.
*
*/

/// pokud neexistuje jmenný prostor sl. vytvoříme ho
if(!sl) { var sl = {} };

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

	/**
	* Vrací řetězec s detailními informacemi o předaném objektu
	* @param object o němž chceme zjistit detailní informace
	* @param prefix který bude před každým řádkem
	* @param recursive má-li se zobrazit také obsah vnořených objektů (defaultně false)
	* @return string
	*/
	getInfo: function (_object, prefix, recursive) {

		var result = '';

		for (var property in _object) {
			/// pokud je property číslo - půjde zřejmě o index v poli
			if(/^[0-9]+$/.test(property)) {
				var property_value = eval('_object[' + property + ']');
			/// pokud jde o objekt - vracíme jeho info
			} else if(eval('typeof _object.' + property) == 'object') {
				if(recursive) {
					var property_value = '{\n' + sl.debug.getInfo(eval('_object.' + property), prefix + '\t') + prefix + '\t}';
				} else {
					var property_value = '{OBJECT}';
				}
			/// jinak se pousíme dostat surovou hodnotu objektu
			} else {
				var property_value = eval('_object.' + property);
			}

			result += prefix + '\t.' + property + ' = ' + property_value + "\n";
		}

		return result;
	},

	/**
	* Vytiskne detailní informace o předaném objektu
	* @param object o němž chceme zjistit detailní informace
	* @param recursive má-li se zobrazit také obsah vnořených objektů
	*/
	info: function (_object, recursive) {

		var object_name = (_object.name) ? _object.name : '?';
		var object_info = '[' + object_name + '] = {\n' + sl.debug.getInfo(_object, '', recursive) + '}';

		/// protože výsledek zobrazujeme jako HTML, je třeba převést znaky <,> a & na entity
		object_info = object_info.replace('&','&amp;')
		object_info = object_info.replace('<','&lt;')
		object_info = object_info.replace('>','&gt;')

		with(window.open('','infoWindow','scrollbars=yes')) {
			with(document) {
				open();
				write('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\n');
				write('<html>\n');
				write('<head><title>Výpis objektu - ' + object_name + '</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head>\n<body color="#FFF">\n');
				write('<h1>Výpis objektu - ' + object_name + '</h1>');
				write('<pre>' + object_info + '</pre>\n');
				write('</body>\n</html>\n');
				close();
			}
			moveTo(10, 10);
			resizeTo(screen.width - 250, screen.height - 100);
			focus();
		}
	}

}
