
/* pole casovacu */
var cb_timer = new Array();
/* pole priznaku prolinani */
var cb_play = new Array();

/* priznak, zda je animace spustena, nebo pozastavena */
var playStop = false;

function cb_change_elem(id,what,time)
{
  cb_stop(id);
  cb_change(id,what);
  if (playStop)
  {
    cb_roll(id, time);
  }
  return false;
}

function changePlay(id,elem,time,button)
{
  if (elem.className == 'control_play play')
  {
// prechazim do stavu play, zobrazim tlacitko pro stop
    elem.className = 'control_play stop';
    elem.title = 'pozastav';
    cb_roll(id, time);
    if (button == 1)
      playStop = !playStop
  }
  else
  {
// prechazim do stavu stop, zobrazim tlacitko pro play
    elem.className = 'control_play play';
    elem.title = 'spusť';
    cb_stop(id);
    if (button == 1)
      playStop = !playStop
  }
}

/*
 * 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'])
	{
    var control_cont = document.createElement('div');
    control_cont.className = 'controls';
    var control_ul = document.createElement('ul');
		/* zobrazit sipku prev */
		var elem_li = document.createElement('li');
    var odkaz1 = document.createElement('a');
    odkaz1.className = 'prev';
    odkaz1.href = '#';
    odkaz1.title = '<';
    odkaz1.appendChild(document.createTextNode("<"));
    odkaz1.onclick = function (){return cb_change_elem(id,'prev',params['time']);};
    elem_li.appendChild(odkaz1);
    control_ul.appendChild(elem_li);

		/* zobrazit cisilka */
    var odkaz2 = null;
		$("#" + id + " .item").each(function(j, cb_item){				
		  elem_li = document.createElement('li');
      odkaz2 = document.createElement('a');
      odkaz2.className = 'number' + (!j ? ' act' : '');
      odkaz2.href = '#';
      odkaz2.appendChild(document.createTextNode(j + 1));
      odkaz2.onclick = function (){ if (!$(this).hasClass('act'))return cb_change_elem(id,j,params['time']);else return false;};
      elem_li.appendChild(odkaz2);
      control_ul.appendChild(elem_li);
		});

    var odkaz3 = document.createElement('a');
	  elem_li = document.createElement('li');
    odkaz3.className = 'next';
    odkaz3.href = '#';
    odkaz3.title = '>';
    odkaz3.appendChild(document.createTextNode(">"));
    odkaz3.onclick = function (){return cb_change_elem(id,'next',params['time']);};
    elem_li.appendChild(odkaz3);
    control_ul.appendChild(elem_li);

    var odkaz4 = document.createElement('a');
	  elem_li = document.createElement('li');
    odkaz4.className = 'control_play stop';
    odkaz4.href = '#';
    odkaz4.title = 'pozastav';
    odkaz4.appendChild(document.createTextNode(" "));
    odkaz4.onclick = function(){changePlay(id,this,params['time'],1);return false;}
    elem_li.appendChild(odkaz4);
    control_ul.appendChild(elem_li);

    control_cont.appendChild(control_ul);
		document.getElementById(id).appendChild(control_cont);
	}

	/* 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)
	{
    playStop = true;
		/* 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(){
      if(playStop)
      {
        changePlay(id,odkaz4,params['time']);
      }
		}, function(){
      if (playStop)
      {
        changePlay(id,odkaz4,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 */
	var act_item = $("#" + id + " .item.act");
	var act_ctl = $("#" + id + " a.number.act");

	/* skryt vsechny viditelne itemy */
	var visible = $("#" + id + " .item:visible");
	visible.fadeOut('slow');
	visible.removeClass('act');

	/* odaktivnit aktivni cisilko */
	act_ctl.removeClass('act');

	/* prepnout na dalsi item */
	if (to == 'next')
	{
		var to_element = act_item.next();
    var ctl = act_ctl.parent().next().children();

		if (!to_element.hasClass('item') || !ctl.hasClass('number'))
		{
			to_element = $("#" + id + " .item:first");
			ctl = $("#" + id + " .number:first");
		}

		ctl.addClass('act');
	}
	/* prepnout na predchozi item */
	else if (to == 'prev')
	{
		var to_element = act_item.prev();
		var ctl = act_ctl.parent().prev().children();

		if (! to_element.length || !ctl.hasClass('number'))
		{
			to_element = $("#" + id + " .item:last");
			ctl = $("#" + id + " .number:last");
		}
		ctl.addClass('act');
	}
	/* prepnout na n-ty item (pocitano od nuly) */
	else
	{
		var 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'] = 6000;

	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);
	}
}

