/* ROLLER
 * autor: Jakub Hruby - WEB&DTP (http://web-dtp.cz)
 * release: 1.0 startovaci verze
 *
 * volani: on[event]="ROLVysunZasun('id');"
 * vysuvnemu elementu je potreba nastavit vlastnost "overflow: hidden" a pocatecni pevnou vysku
 */


/* ----------------------- PARAMETRY ANIMACE - MENIT HODNOTY DLE POTREBY -------------------------- */

//rychlost vysouvani a zasouvani
	var ROLRychlost=20;

//zasouvat ostatni elementy pri vysunuti noveho [true/false]
	var ROLZasouvatOstatni=true;


/* TODO

//zpomalit na konci pohybu [true/false]
	var ROLZpomalit=false

*/


/* ---------------------------- VYKONNY KOD - NEMENIT ----------------------------- */

var ROLVysuvneElementy=new Array();

//vysunuti objektu - inicicacni funkce
function ROLVysunZasun(id,maxH){
			var index;
			var neexistuje=true;

			//hleda v poli existujicich objektu a pripadne zasouva vsechny ostatni objekty
			for(i=0;i<ROLVysuvneElementy.length;i++){
				if(ROLVysuvneElementy[i].id==id){
					index=i;
					neexistuje=false;
				}
				else if(ROLZasouvatOstatni){ROLVysuvneElementy[i].zasouvej();}
			}

			//vyvola novy objekt a ulozi ho do pole vysuvnych elementu
			if(neexistuje){
				ROLVysuvneElementy.push(new ROLVysuvny(id));
				index=ROLVysuvneElementy.length-1;
			}

			var obj=ROLVysuvneElementy[index];

			//nastavi maximalni vysku
			if(maxH && !obj.maxH){obj.maxH=maxH;}
			else if(!obj.maxH){obj.setMaxH();}

			//vyvola zasunuti/vysuuti podle aktualniho stavu elementu
			if(obj.aktH>obj.minH){
				obj.zasouvej();
			}
			else{
				obj.vysouvej();
			}
}

//vytvoreni vysuvneho objektu
function ROLVysuvny(id){
			this.id=id;
			this.el=getROLElement(this.id);
			this.aktH=getROLVyska(this.el);
			if(!this.minH){this.minH=this.aktH;}
			this.maxH;
			this.timerH;
}

/*	VYSOUVANI A ZASOUVANI	*/
			ROLVysuvny.prototype.funkce=function(metoda){
						var thisObj=this;
						return (function(){return(metoda.apply(thisObj));});
			}

			ROLVysuvny.prototype.vysouvej=function(){
						this.aktH+=ROLRychlost;
						clearTimeout(this.timerH);
						if(this.aktH<this.maxH){
							var prikaz=this.funkce(this.vysouvej);
							this.el.style.height=this.aktH+"px";
							this.timerH=setTimeout(prikaz,10);
						}
						else{
							this.aktH=this.maxH;
							this.el.style.height=this.aktH+"px";
						}
			}

			ROLVysuvny.prototype.zasouvej=function(){
						this.aktH-=ROLRychlost;
						clearTimeout(this.timerH);
						if(this.aktH>this.minH){
							var prikaz=this.funkce(this.zasouvej);
							this.el.style.height=this.aktH+"px";
							this.timerH=setTimeout(prikaz,10);
						}
						else{
							this.aktH=this.minH;
							this.el.style.height=this.aktH+"px";
						}
			}


/*  SETTERY */

			//nastavi maximalni vysku elementu
			ROLVysuvny.prototype.setMaxH=function(){
						this.el.style.overflow="visible";
						this.el.style.height="auto";
						this.maxH=getROLVyska(this.el);
						this.el.style.overflow="hidden";
						this.el.style.height=this.aktH+"px";
			}


/*	GETTERY	*/

			//vraci objekt elementu
      function getROLElement(id){return document.getElementById(id);}

			//vraci sirku elementu
			function getROLSirka(el){
						if(window.getComputedStyle){return parseInt(window.getComputedStyle(el,null).getPropertyValue("width"));}
						else{return parseInt(el.offsetWidth);}
			}

			//vraci vysku elementu
			function getROLVyska(el){
						if(window.getComputedStyle){return parseInt(window.getComputedStyle(el,null).getPropertyValue("height"));}
						else{return parseInt(el.offsetHeight);}
			}

