/*

Rozdil mezi display: none (zde class "invisible") a visibility: hidden
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

visibility: hidden to nevyrve z normal flow - ten objekt se stale vytvari.
Na to se musi dat pozor. To co chci ja, je blizsi tomu display: none. 
Ovsem visibility: hidden ma vyhodu v tom, ze je porad spravne vyplneny
clientHeight a vim, jak to ma bejt velky, coz muze bejt problem kdyz chci aby 
ten objekt byl od zacatku collapsovany (viz komentar u do_inital_collapse() ).

Jinak obe metody jsou stejny v tom smyslu, ze Firefox nenajde text, ktery je
schovany tou ci onou metodou.

*/


function toggle_collapse(id, collapse_symb)
{
//	return toggle_collapse_simple(id, collapse_symb);
//	return toggle_collapse_simple_hidden(id);
	return toggle_collapse_effect(id, collapse_symb);
//	return toggle_collapse_effect__hidden(id);
}



/* kdyz se tahle funkce zavola primo, a ne z window.onload, tak tam ani
   ten necollapsovany objekt neproblikne. Kdyby to nahodou delalo problem,
   a muselo se uz primo v dokumentu mu na zacatku dat display: none (invisible),
   a to by byl problem zjistit sirku - pak by se to muselo udelat tak, ze by 
   se to tady v javascriptu vyrvalo z normal flow (napriklad pomoci 
   position: absolute), dal by se tomu attribut hidden, zjistila by se vejska
   a vratilo by se to do puvodniho stavu.
   
  */
function do_initial_collapse(id, collapsed_state, collapse_symb)
{
	var div2toggle = document.getElementById(id);

	div2toggle.full_height = div2toggle.clientHeight;
	div2toggle.old_className = div2toggle.className;
	div2toggle.className = "invisible";
//	div2toggle.style.visibility = "hidden";
	div2toggle.style.height = 0;

	div2toggle.collapsedState = collapsed_state;
	if (div2toggle.collapsedState != "expanded")
		div2toggle.collapsedState = "collapsed";

/*	alert(
		'height before = ' + height_before +
		'height now = ' + div2toggle.clientHeight
	);
*/
	if (collapse_symb) {
		collapse_symb.collapsed_state = div2toggle.collapsedState;
		collapse_symb.change_collapse_symbol(div2toggle.collapsedState);
	}
}


function toggle_collapse_effect(id, collapse_symb)
{
	var div2toggle = document.getElementById(id);
	var cur_height = div2toggle.clientHeight;
		// aktualni vnitrni sirka (teda vyska)
	var step_time = 5; // miliseconds
	var max_steps = 50; 
	var delay_next_click = 10; // delay v ms, za jak dlouho po 
		// poslednim kroku expandu/collapsu bude povolen dalsi klik.
		// Je to z duvodu rezervy, aby bylo opravdu jisty ze uz
		// vsechny predchozi kroky probehly.

	if (div2toggle.collapsedState == 'working')
		return;
		

	/* !! POZOR !! I pri pouziti metody snizeni vysky je potreba
	  nastavit collapsovany objekt na invisible, aby se treba pri vyhledavani
	  na strance tam nehledalo! Aby to proste browser vedel, ze to je
	  neviditelny! 
	*/
	if (div2toggle.collapsedState == 'collapsed') { // budeme naopak expandovat
		no_steps = Math.min(max_steps, div2toggle.full_height);
		step = div2toggle.full_height / no_steps;
		div2toggle.collapsedState = 'working';
		div2toggle.className = div2toggle.old_className;
		if (collapse_symb) {
			collapse_symb.collapsed_state = 'expanded';
			collapse_symb.change_collapse_symbol(collapse_symb.collapsed_state);
		}
		setTimeout('document.getElementById("' + id + '").collapsedState = "expanded"', step_time * no_steps + delay_next_click);
	}
	else { // collapsovat budeme
		div2toggle.full_height = cur_height;
		no_steps = Math.min(max_steps, div2toggle.full_height);
		step = - cur_height / no_steps;
		div2toggle.collapsedState = 'working';
		div2toggle.old_className = div2toggle.className;
		if (collapse_symb) {
			collapse_symb.collapsed_state = 'collapsed';
			collapse_symb.change_collapse_symbol(collapse_symb.collapsed_state);
		}
		setTimeout(
			'document.getElementById("' + id + '").className = "invisible";' +
			'document.getElementById("' + id + '").collapsedState = "collapsed"', 
			step_time * no_steps + delay_next_click);
	}
	
	/* 
	klicova vec pro overflow: hidden a collapsing margins:
	"... Vertical margins of elements with 'overflow' other than 'visible' do not collapse with their in-flow children. "
	- proto to delalo brikule, ze se ta vyska zvysila kdyz se udelalo overflow: hidden
	*/

	div2toggle.style.overflow = 'hidden';
	//div2toggle.style.height = "50%";
	//div2toggle.style.height = cur_height + "px";
	//return;
	//alert('ahoj '  + div2toggle.clientHeight);
	//div2toggle.style.height = "8px";
	for (i = 1; i <= no_steps; i++) {
		//document.write('style.height = ' + (cur_height - cur_height * i / no_steps) + ', ' + i * 10 + '<br>');
		//setTimeout('document.getElementById("' + id + '").style.height = "' + (no_steps - i) + '%"', i * step_time);
		setTimeout('document.getElementById("' + id + '").style.height = "' + Math.round(cur_height + step * i) + 'px"', i * 2);
	}
}


function toggle_collapse_simple(id, collapse_symb)
{
	var div2toggle = document.getElementById(id);
	
	if (div2toggle.className == "invisible") {
		div2toggle.className = div2toggle.old_className;
		if (collapse_symb) {
			collapse_symb.collapsed_state = 'expanded';
			collapse_symb.change_collapse_symbol(collapse_symb.collapsed_state);
		}
	}
	else {
		div2toggle.old_className = div2toggle.className;
		div2toggle.className = "invisible";
		if (collapse_symb) {
			collapse_symb.collapsed_state = 'collapsed';
			collapse_symb.change_collapse_symbol(collapse_symb.collapsed_state);
		}
	}
}

function toggle_collapse_simple_hidden(id)
{
	var div2toggle = document.getElementById(id);
	
	if (div2toggle.style.visibility == "hidden") 
		div2toggle.style.visibility = "visible";
	else {
		div2toggle.style.visibility = "hidden";
	}
}












// =========

/* totez co toggle_collapse_effect(), ale pouzitim hidden */
/* funguje, ale zatim nepouzivam */
/* !!! pozor, uz nepouzivat!!! v te funkci toggle_collapse_effect() uz byly
   provedeny jine zmeny, musely by se primergeovat */
function toggle_collapse_effect__hidden(id)
{
	var div2toggle = document.getElementById(id);
	var cur_height = div2toggle.clientHeight;
		// aktualni vnitrni sirka (teda vyska)
	var step_time = 5; // miliseconds
	var max_steps = 50; 

	if (div2toggle.collapsedState == 'working')
		return;
		

	/* !! POZOR !! I pri pouziti metody snizeni vysky je potreba
	  nastavit collapsovany objekt na invisible, aby se treba pri vyhledavani
	  na strance tam nehledalo! Aby to proste browser vedel, ze to je
	  neviditelny! 
	*/
	if (div2toggle.collapsedState == 'collapsed') { // budeme naopak expandovat
		no_steps = Math.min(max_steps, div2toggle.full_height);
		step = div2toggle.full_height / no_steps;
		div2toggle.collapsedState = 'working';
		div2toggle.className = div2toggle.old_className;
		div2toggle.style.visibility = "visible";
		setTimeout('document.getElementById("' + id + '").collapsedState = "expanded"', step_time * no_steps + 150);
			// + 400ms - aby byla nejaka rezerva pro jistotu ...
	}
	else { // collapsovat budeme
		div2toggle.full_height = cur_height;
		no_steps = Math.min(max_steps, div2toggle.full_height);
		step = - cur_height / no_steps;
		div2toggle.collapsedState = 'working';
		div2toggle.old_className = div2toggle.className;
		setTimeout(
			'document.getElementById("' + id + '").style.visibility = "hidden";' +
			'document.getElementById("' + id + '").collapsedState = "collapsed"', 
			step_time * no_steps + 150);
			// + 400ms - aby byla nejaka rezerva pro jistotu ...
	}
	
	/* 
	klicova vec pro overflow: hidden a collapsing margins:
	"... Vertical margins of elements with 'overflow' other than 'visible' do not collapse with their in-flow children. "
	- proto to delalo brikule, ze se ta vyska zvysila kdyz se udelalo overflow: hidden
	*/

	div2toggle.style.overflow = 'hidden';
	//div2toggle.style.height = "50%";
	//div2toggle.style.height = cur_height + "px";
	//return;
	//alert('ahoj '  + div2toggle.clientHeight);
	//div2toggle.style.height = "8px";
	for (i = 1; i <= no_steps; i++) {
		//document.write('style.height = ' + (cur_height - cur_height * i / no_steps) + ', ' + i * 10 + '<br>');
		//setTimeout('document.getElementById("' + id + '").style.height = "' + (no_steps - i) + '%"', i * step_time);
		setTimeout('document.getElementById("' + id + '").style.height = "' + Math.round(cur_height + step * i) + 'px"', i * 2);
	}
}


