// globalne konstanty
/////////////////////////////////////////////////////////////
var ADV_SEARCH_TEXT_SHOW = "Zobrazit rozšířené vyhledávání";
var ADV_SEARCH_TEXT_HIDE = "Skrýt rozšířené vyhledávání";
var ADV_SEARCH_CLASS_NAME_UP = "up";
var ADV_SEARCH_CLASS_NAME_DOWN = "down";

// parametre animacie
var ANIMATION_TIME_STEP = 10;
var ANIMATION_TIME_LENGTH = 500;

// globalne premenne
////////////////////////////
var obj = new Array();
var startTime = new Array();
var timerID = new Array();
var initHeight = new Array();
var isRunning = new Array();
var direction = new Array();

var adv_serach_link_direction;

// vlozenie linku na prepinanie medzi zaklanym a rozsirenycm vyhladavanim
/////////////////////////////////////////////////////////////////////////
function writeLinkAdvSearch(direction){
	var linkTitle;
	var linkClassName;
	
	// titulok odkazu podla smeru sipky, ktora je dana pouzitou classou
	if (direction == 'up') {
		linkTitle = ADV_SEARCH_TEXT_HIDE;
		linkClassName = ADV_SEARCH_CLASS_NAME_UP;
	} else {
		linkTitle = ADV_SEARCH_TEXT_SHOW;
		linkClassName = ADV_SEARCH_CLASS_NAME_DOWN;
	}
	
	// odpamatanie vychodzieho smeru
	adv_serach_link_direction = direction;
		
	// vlozenie odkazu na rozsirene vyhladavanie
	document.write('<a id="linkAdvSearch" class="' + linkClassName + '" href="javascript:;" title="' + linkTitle + '"onclick="startSlide(\'adv_search\');">Rozšířené vyhledávání</a>');
}

// vlozenie zaciatku objektu zabezpecujuceho animaciu
/////////////////////////////////////////////////////
function initAdvSearch(height){
	var display;
	
	// inicializacia podla vychodzieho smeru	
	if (adv_serach_link_direction == 'up') {
		display = 'block';
	} else {
		display = 'none';
	}
	
	var objAdvSearch = document.getElementById("adv_search");
	objAdvSearch.style.display = display;
	objAdvSearch.style.height = height;
}

// spustenie animacie
/////////////////////
function startSlide(objName){
	// odchod ak je pohyb		
  if(isRunning[objName]) return;
		
	if (document.getElementById(objName).style.display != "none"){
		// pohyb smerom hore - zbalovanie
  	isRunning[objName] = true;
    direction[objName] = "up";
  } else {
  	// pohyb smerom dole - rozbalovanie
    isRunning[objName] = true;
    direction[objName] = "down";
  }
  				
  // odpamatenie vychodzich hodnot slidu
	obj[objName] = document.getElementById(objName); //nazov objektu
	startTime[objName] = (new Date()).getTime(); //cas zaciatku pohybu
	
	if (obj[objName].style.height == "") {
		// ak je udaj o vyske neznamy (vypnute CSS), tak sa nastavi natvrdo
		initHeight[objName] = 65;
	} else { 
		initHeight[objName] = parseInt(obj[objName].style.height); 
	}
		
  if (direction[objName] == "down") {
  	// horna vychodzia poloha
    obj[objName].style.height = "0px";
  	obj[objName].style.display = "block";
  }
  
  // spustenie jednotlivych krokov animacie cez timer
	timerID[objName] = setInterval("slideTick('" + objName + "');", ANIMATION_TIME_STEP);
	
	return;
}

// krok animacie
////////////////////////////
function slideTick(objName){
	// cas trvania do zaciatku pohybu	
	var elapsed = (new Date()).getTime() - startTime[objName];
	
	if (elapsed > ANIMATION_TIME_LENGTH) {
		// ak je cas trvania pohybu vacsi ako dlzka animacia, tak koniec
		endSlide(objName);
	} else {
		// inak sa animuje pohyb zbalenia/rozbalenia			
		var actHeight = Math.round((elapsed / ANIMATION_TIME_LENGTH) * initHeight[objName]);
    if(direction[objName] == "up") {
    	// ak sa ide hore, tak invertovat
			actHeight = initHeight[objName] - actHeight;
		}
		// nastavenie aktualnej vysky
    obj[objName].style.height = actHeight + "px";
	}
	
	return;
}

// ukoncenie animacie
////////////////////////////////
function endSlide(objName){
	var title;
	var className;
	var	advSearchSign;	
				
	// zastavenie timera
	clearInterval(timerID[objName]);
	
	if(direction[objName] == "up") {
		// horna poloha
		obj[objName].style.display = "none";
		// nastavenie vychodzich hodnot v ComboBox-och
		document.getElementById("comboCategory").selectedIndex = 0;
		document.getElementById("comboTown").selectedIndex = 0;
		
		title = ADV_SEARCH_TEXT_SHOW;
		className = ADV_SEARCH_CLASS_NAME_DOWN;
		advSearchSign = "down";
	} else {
		// dolna poloha
		obj[objName].style.display = "block";
	
		title = ADV_SEARCH_TEXT_HIDE;
		className = ADV_SEARCH_CLASS_NAME_UP;
		advSearchSign = "up";
	}
	
	// zmena linky rozsirene hladanie
	var objLinkAdvSearch = document.getElementById("linkAdvSearch");
	objLinkAdvSearch.title = title;
	objLinkAdvSearch.className = className;
	
	// setnutie priznaku do inputu na prenos stavu zobrazenia rozsireneho vyhladavania
	document.getElementById("inputAdvSearchSign").value = advSearchSign;
	
	// nastavenie inicialnej vysky
	obj[objName].style.height = initHeight[objName] + "px";
	
	// destroy premenych
	delete(isRunning[objName]);
	delete(timerID[objName]);
	delete(startTime[objName]);
	delete(initHeight[objName]);
	delete(obj[objName]);
	delete(direction[objName]);
	
	return;
}

