
/* pole casovacu */
var cb_timer = new Array();
/* pole priznaku prolinani */
var cb_play = new Array();


/*
 * inicializuje prolinani prvku v boxu
 * 
 * element musi byt tridy .changebox a musi obsahovat elementy
 * tridy .item, ktere se budou prolinat mezi sebou.
 *
 * @param <string>	id identifikator boxu
 * @param <array>	params parametry prolinani
 * @return <void>
 **/
function cb_init(id, params)
{
	cb_element = $("#" + id);
	
	/* pokud nema nosny element tridu .changebox, nechat byt */
	if (! cb_element.hasClass('changebox'))
		return false;

	/* zobrazit ovladaci prvky? */
	if (params['arrows'] || params['numbers'])
	{
		control_cont = $("<div>", {'class' : 'controls'}).hide();

		/* zobrazit cisilka */
		if (params['numbers'])
		{
			$("#" + id + " .item").each(function(j, cb_item){				
				/* pro kazdy .item vytvorime cisilko */
				control_cont.append($("<a>", {
					'class' : 'number' + (!j ? ' act' : ''),
					'href' : '#',
					'text' : (j + 1),
					click : function(){
						if (! $(this).hasClass('act'))
						{
							cb_stop(id);
							cb_change(id, j);
						}
						
						return false;
					}
				}));
			});
		}

		/* zobrazit sipku prev a next */
		if (params['arrows'])
		{
			control_cont.append($("<a>", {
				'class' : 'prev',
				'href' : '#',
				'text' : '',
				click : function(){
					/* zastavit automaticke prolinani a
					 * prehodit na predchozi .item */
					cb_stop(id);
					cb_change(id, 'prev');
					return false;
				}
			}));
			
			control_cont.append($("<a>", {
				'class' : 'next',
				'href' : '#',
				'text' : '',
				click : function(){
					cb_stop(id);
					cb_change(id, 'next');
					return false;
				}
			}));
		}

		cb_element.prepend(control_cont);
		$("#" + id + " .controls").fadeIn('slow');
	}

	/* skryt vsecky .itemy krome prvniho */
	cb_element.children(".item").hide();
	cb_element.children(".item:first").show();

	/* prvni item je pri initu aktivni */
	$("#" + id + " .item:first").addClass("act");

	cb_play[id] = false;
	
	/* prolinat automaticky? */
	if (params['time'] && cb_element.children(".item").length > 1)
	{
		/* prolinani zacit se spozdenim */
		setTimeout(function(){
			cb_roll(id, params['time'] * 1);
		}, params['delay'] * 1);

		/* pri prejeti mysi zastavit prolinani */
		cb_element.children(".item").hover(function(){
			cb_stop(id);
		}, function(){
			cb_roll(id, params['time']);
		});
	}
		
}

/*
 * prolina prvky v boxu #id
 *
 * @param <string> id	identifikator boxu
 * @param <mixed> to	index itemu (pocitano od nuly)
 *						nebo 'next' nebo 'prev'
 * @return <void>
 **/
function cb_change(id, to)
{
	/* ziskame aktualni item a aktualni cisilko */
	act_item = $("#" + id + " .item.act");
	act_ctl = $("#" + id + " .number.act");

	/* skryt vsechny viditelne itemy */
	visible = $("#" + id + " .item:visible");
	visible.fadeOut('slow');
	visible.removeClass('act');

	/* odaktivnit aktivni cisilko */
	act_ctl.removeClass('act');

	/* prepnout na dalsi item */
	if (to == 'next')
	{
		to_element = act_item.next("#" + id + " .item");
		ctl = act_ctl.next("#" + id + " .number");

		if (! to_element.length)
		{
			to_element = $("#" + id + " .item:first");
			ctl = $("#" + id + " .number:first");
		}
		ctl.addClass('act');
	}
	/* prepnout na predchozi item */
	else if (to == 'prev')
	{
		to_element = act_item.prev("#" + id + " .item");
		ctl = act_ctl.prev("#" + id + " .number");

		if (! to_element.length)
		{
			to_element = $("#" + id + " .item:last");
			ctl = $("#" + id + " .number:last");
		}
		ctl.addClass('act');
	}
	/* prepnout na n-ty item (pocitano od nuly) */
	else
	{
		to_element = $("#" + id + " .item:eq(" + to + ")");

		$("#" + id + " .controls .number:eq(" + to + ")").addClass('act');
	}
	
	/* zobrazit pozadovany item a zaktivnit ho */
	to_element.fadeIn('slow');
	to_element.addClass('act');

}

/*
 * automaticky prolina itemy
 *
 * @param <string> id	identifikator prolinacky
 * @param <int> time	trvani kazdeho kroku v milisekundach
 * @return <void>
 **/
function cb_roll(id, time)
{
	if (! cb_play[id])
	{
		cb_play[id] = true;

		cb_timer[id] = window.setInterval(function(){
			cb_change(id, 'next');
		}, time);
	}
}

/*
 * zastavi prolinani
 *
 * @param <string> id	identifikator prolinacky
 * @return <void>
 **/
function cb_stop(id)
{
	if (cb_timer[id])
	{
		window.clearInterval(cb_timer[id]);
	}
	cb_play[id] = false;
}

/*
 * ajaxem nacte obsah boxu, nastavi defaultni
 * parametry a initne prolinacku
 *
 * @param <array>	params parametry pro init
 *						id : <string> identifikator boxu prolinacky (povinny)
 *						time : <int> milisekund trvani kroku (nepovinny)
 *						delay : <int> milisekund spozdeni od nacteni stranky (nepovinny)
 *						arrows : <boolean> zobrazit ovladaci sipky (nepovinny)
 *						numbers : <boolean> zobrazit ovladaci ciselne zalozky (nepovinny)
 *						load : <string> url pro nacteni dat ajaxem (nepovinny)
 * @return <void>
 **/
function cb_load(params)
{
	var id;
	
	/* id je povinny parametr */
	if (! params['id'])
		return false;
	else
		id = params['id'];

	
	/* nastaveni defaultnich hodnot parametru */
	if (params['arrows'] === undefined)
		params['arrows'] = true;

	if (params['numbers'] === undefined)
		params['numbers'] = true;

	if (params['time'] === undefined)
		params['time'] = 5000;

	if (params['delay'] === undefined)
		params['delay'] = 0;


	/* pokud se maji ajaxem preloadovat data */
	if (params['load'])
	{
		$('#' + id).load(params['load'], function(){
			return cb_init(id, params);
		});
	}
	else
	{
		return cb_init(id, params);
	}
}

