/**
*
* JavaScript knihovna pro moduly CMS
*
* @package		slModules
* @subpackage	cms-core-public
* @version		$Id: sl.cms.js 26278 2011-05-19 12:37:14Z filip $
* @encoding		utf-8
* @author		Filip Zach <filip.zach@e4you.cz>
* @author		Jakub Kratina <jakub.kratina@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.
*
* @todo - přejmenovat objekt sl.cms tak, aby jeho název nekolidoval s objektem stejného jméno používaným v administraci
*/

sl.require('sl.imageview.js');
sl.require('sl.form.js');

/**
 * Definice modulu specifického pro CMS
 */
sl.cms = {

	/**
	 * Regulární výraz, který nastaví které obrázky budou zvětšovány
	 */
	zoomable_exp_reg : '(thumbs)',

	/**
	 * Handler zpracovávající události po načtení stránky
	 */
	onLoadHandler : function() {
		sl.cms.initImages();
		sl.cms.initPolls();
	},

	/**
	 * Pokusí se na stránce nalézt objekt s detailem článku nebo sekce, v něm
	 * obrázky z adresáře thumb a jim přiřadí na onclick otevření
	 * plné velikosti obrázku
	 */
	initImages : function() {
		try {
			/// uložíme do polí adresy obrázků a popisy
			var photos_array = new Array();
			var description_array = new Array();
			var photos = sl.dom.getElement('intext').getElementsByTagName('IMG');
			/// nastavíme regulární výraz pro vyhledávání obrázků
			var reg_exp = new RegExp(sl.cms.zoomable_exp_reg+'\/([a-zA-Z0-9-_]+)\.(jpg|png|gif)$');
			for (var i=0,length=photos.length; i<length; i++) {
				var match_result = photos[i].src.match(reg_exp);
				if(sl.dom.getClass(photos[i])!='article_image'
				   && (! sl.dom.hasClass(photos[i].parentNode,'compact_gallery_image'))
				   && match_result
				) {
					sl.event.addHandler(photos[i],'click',sl.cms.imageHandler);
					sl.dom.addClass(photos[i],'sl_imageview_zoomable');
					photos_array.push( photos[i].src.replace(match_result['1'],'full-size') );
					description_array.push(photos[i].alt);
				}
			}
			sl.imageview.init(photos_array,description_array);
		} catch (e) {}
	},

	/**
	 * Inicializuje fotografie pro zobrazení lightboxu
	 */
	imageHandler : function(event) {
		/// vyhledáme fotografii, na kterou uživatel kliknul
		var target = sl.event.getTarget(sl.event.getEvent(event));
		/// pokud nadřazeným prvkem není odkaz
		if ( ! target.parentNode.href && ! target.parentNode.parentNode.href ) {
			/// zkontrolujeme url
			var match_result = target.src.match(/([a-zA-Z0-9-_]+)\/([a-zA-Z0-9-_]+)\.(jpg|png|gif)$/);
			if (match_result) {
				/// zobrazíme obrázek
				sl.imageview.show(target.src.replace(match_result[1],'full-size'));
			}
		}
	},

	/**
	 * Handler kliknutí na tlačítko pro odeslání ankety
	 *
	 * @param Object evnt Objekt s událostí s
	*/
	submitPoll : function(evnt) {

		/// detekujeme událost a cílový objekt
		var event = sl.event.getEvent(evnt);
		var target = sl.event.getTarget(event);

		/// zabráníme odeslání formuláře
		sl.event.stopPropagation(event);
		sl.event.preventDefault(event);

		if (target.form) {

			/// zkontrolujeme, jestli je zvolena nějaká možnost
			var inputs = target.form.getElementsByTagName('input');
			var checked = false;
			for (var i=0, length=inputs.length; i<length; i++) {
				if (inputs[i].type == 'radio' && inputs[i].checked) {
					checked = true;
					break;
				}
			}

			/// je-li něco zvoleno
			if (checked) {


				/// zobrazíme "točící kolečko"
				new sl.effect_factory(target.form);
				target.form.effect_factory.showProcessingInfo();

		
				/// odešleme na pozadí formulář s anketou
				sl.http.post_request(
					target.form.action,
					function(_data) {
						if (_data=='true') {
						/// po vykonání akce zavoláme funkci která znovu načte obsah ankety
							sl.cms.reloadPoll(target.form);
						}
					},
					sl.form.serialize(target.form)	
				)		
			}
		}
	},

	/**
	 * Vrací HTML kód ankety s požadovaným id
	 *
	 * @param Object _form Objekt s formulářem obsahující anketu
	*/
	reloadPoll : function(_form) {

		sl.http.post_request(
			/// pošleme dotaz na data ankety
			sl.baseuri+'poll/get/?poll_id='+_form['poll_id'].value,
			function(_data) {
				try {
					/// vytvoříme z přijatých dat HTML element
					var tmp_element = document.createElement('span');
					tmp_element.innerHTML = _data;
					/// získáme z nich objekt s formulářem obsahujícím anketu
					var new_form = sl.dom.getFirstChildByTagName(tmp_element,'form');
					/// nahradíme stávající anketu
					_form.parentNode.replaceChild(new_form,_form)
					/// nastavíme handlery (což může být potřeba, pokud anketa umožňuje vícenásobné hlasování)
					sl.cms.initPolls();
				} catch (e) {
					alert (e);
				}
			}
		)					

	},

	/**
	 * Inicializuje handlery pro odeslání ankety na pozadí
	*/	
	initPolls : function() {
		sl.event.addHandlerByClass('cms_poll_vote_button','click',sl.cms.submitPoll);
	}

}

/// inicializujeme handler, zpracovávající události po zobrazení stránky
sl.event.addHandler(window,'load',sl.cms.onLoadHandler);

