
	var movesMap = new Hash({});//przechowuje id_slidera->[true | false] i oznacza, czy w danym momencie slider jest w trakci ruchu
	var slidersMap = new Hash({});//przechowuje parametry
	var periodicalExecuters = new Hash({}); //przechowuje id_slidera->wartosc zwracana przez setTimeout(), zeby mozna w  dowolnym momencie zatrzymac czasowe przewijanie


	BrowserObject = Class.create();
	BrowserObject.prototype = {
		initialize: function(){
			this.ie = false /*@cc_on || true @*/;
			this.ie7 = this.ie /*@cc_on && window.XMLHttpRequest != null @*/;
			this.ie6 = this.ie && !this.ie7;
			this.opera = self.opera != null;
			this.ff = !this.ie && window.screenLeft == null;
		}
	}
	var bo = new BrowserObject();


	/**
		Oblicza margines dla kazdego elementu panelu znajdujacego sie pomiedzy strzalkami nawigacji.
	*/
	function computePaneItemsMargin(sliderId){
		var items = $(sliderId+'-pane-items').immediateDescendants();
        var margin = 4;
		var itemsWidth = (margin + 2 + items[items.length-1].getWidth()) * items.size();
		var paneWidth = itemsWidth + (items.length - 1) * margin;
		var selectedWidth = 0;
		var selected = $(sliderId +'-pane-items').down('div.selected');
			selectedWidth = selected.getWidth();
		var sizeChange = (selectedWidth > items[items.length-1].getWidth() ? selectedWidth-items[items.length-1].getWidth() : 0);
		paneWidth += sizeChange;
		$(sliderId + '-pane-items').setStyle({width: paneWidth + 'px'});
		items.each(function(obj,i){
			if(i != 0){
				obj.setStyle({'marginLeft' : margin + 'px'});
				obj.setStyle({'marginTop' : sizeChange/2 + 'px'});
			}
		});
	}

	/**
		Funkcja obslugujaca zdarzenia klikniecia na panelu nawigacji. Przykladowo moze chodzic o przewiniecie kilku elementow.
		Moze tez chodzic o przewiniecie jednego. Zatrzymuje przewijanie automatyczne.
	*/
	function onpaneclick(event){
		if(bo.ie7 || bo.ie6){//IE sobie nie radzi ze zmienna this.
			var paneContainer = event.srcElement.up(0);
		} else {
			var paneContainer = this.up(0);
		}
		var sliderId = paneContainer.readAttribute('id').split('-')[0];

		//przewijanie
		if (slidersMap[sliderId+'_animMethod'] == 'przeskakiwanie') {

		    stopMovingByTime(sliderId)

		    var selectedIndex;
		    var clickedIndex;
		    paneContainer.getElementsBySelector('div.pane-item').each(function(obj,i){
			    if(obj.hasClassName('selected')){
				    selectedIndex = i;
			    }
			    if(obj==Event.element(event)){
				    clickedIndex = i;
			    }
		    });

		    //ruch do przodu
		    if(selectedIndex < clickedIndex){
			    //Jesli nie przeskakujemy banerow
			    if (clickedIndex - selectedIndex == 1) {
				    new EffectMove(sliderId, {duration : 500, direction : 'left'});
			    }
			    //Jesli nie przeskakujemy banery
			    else {
				    //Ukrywanie banerow innych niz wyswietlany i docelowy
				    paneContainer.up(0).up(0).getElementsBySelector('div.teaser').each(function(obj,i) {
					    if (i + selectedIndex > selectedIndex && i < clickedIndex - selectedIndex) {
						    obj.style.display='none';
					    }
				    });

				    new EffectMove(sliderId, {duration : 500, direction : 'left', clickedIndex: clickedIndex, selectedIndex: selectedIndex});
			    }
		    }
		    //ruch wstecz
		    else if (selectedIndex > clickedIndex){
			    //Jesli nie przeskakujemy banerow
			    if (selectedIndex - clickedIndex == 1) {
				    new EffectMove(sliderId, {duration : 500, direction : 'right'});
			    }
			    //Jesli nie przeskakujemy banery
			    else {
			    //Ukrywanie banerow innych niz wyswietlany i docelowy
				    var teasers = paneContainer.up(0).up(0).getElementsBySelector('div.teaser');
				    teasers.each(function(obj,i) {
					    if (i > clickedIndex+(teasers.length-selectedIndex)) {
						    obj.style.display='none';
					    }
				    });
				    new EffectMove(sliderId, {duration : 500, direction : 'right', clickedIndex: clickedIndex, selectedIndex: selectedIndex});
		    	    }
		    }
		}
		else if (slidersMap[sliderId+'_animMethod'] == 'przenikanie') {
		    var sliderImgOpacity;
		    if (bo.ie7 || bo.ie6) {
			    sliderImgOpacity = document.getElementById(sliderId+'_image').filters.alpha.opacity;
		    }
		    else {
			    var opacity = document.getElementById(sliderId+'_image').style.opacity;
			    sliderImgOpacity = (opacity == 0)?100:opacity*100;
		    }
		    if (sliderImgOpacity != null && sliderImgOpacity < 100) {
			    return;
		    }

		    var selectedIndex;
		    var clickedIndex;
		    var navigationElements = paneContainer.getElementsBySelector('div.pane-item')
		    navigationElements.each(function(obj,i){
			    if(obj.hasClassName('selected')){
				    selectedIndex = i;
			    }
			    if(obj==Event.element(event)){
				    clickedIndex = i;
			    }
		    });
		    if (selectedIndex == clickedIndex) {
			    return;
		    }
		    stopBlendingByTime(sliderId);

		    blendImage(sliderId, clickedIndex);
		    var selected = navigationElements[selectedIndex];
		    selected.removeClassName('selected');
		    var newlySelected = navigationElements[clickedIndex];
		    newlySelected.addClassName('selected');
		}
	}

	/**
		[Funkcja uzywana tylko gdy metoda animacji to przenikanie]
		Funkcja obslugujaca zdarzenia klikniecia na panelu nawigacji (prawo/lewo): przenikanie do nastepnego/poprzedniego banera.
		Zatrzymuje przenikanie automatyczne.
	*/
	function onnavclick(event){
		if(bo.ie7 || bo.ie6){//IE sobie nie radzi ze zmienna this.
			var paneContainer = event.srcElement.up(0);
			var targetClass = event.srcElement.className;
		} else {
			var paneContainer = this.up(0);
			var targetClass = event.currentTarget.className;
		}

		var sliderId = paneContainer.readAttribute('id').split('-')[0];

		var sliderImgOpacity;
		if (bo.ie7 || bo.ie6) {
			sliderImgOpacity = document.getElementById(sliderId+'_image').filters.alpha.opacity;
		}
		else {
			var opacity = document.getElementById(sliderId+'_image').style.opacity;
			sliderImgOpacity = (opacity == 0)?100:opacity*100;
		}
		if (sliderImgOpacity != null && sliderImgOpacity < 100) {
			return;
		}
		stopBlendingByTime(sliderId);

		var selectedIndex;
		var navigationElements = paneContainer.getElementsBySelector('div.pane-item')
		navigationElements.each(function(obj,i){
			if(obj.hasClassName('selected')){
				selectedIndex = i;
			}
		});
		var bannersCount = slidersMap[sliderId+'_imgs'].length;
		var newIndex;
		if(targetClass.indexOf('navi-right') == 0){
			//ruch do przodu
			newIndex = (selectedIndex+1 > bannersCount-1)?0:selectedIndex + 1;
		} else if (targetClass.indexOf('navi-left') == 0){
			//ruch wstecz
			if (selectedIndex == 0) {
				newIndex = bannersCount-1;
			}
			else {
				newIndex = selectedIndex-1;
			}
		}
		blendImage(sliderId, newIndex);
		var selected = navigationElements[selectedIndex];
		selected.removeClassName('selected');
		var newlySelected = navigationElements[newIndex];
		newlySelected.addClassName('selected');

	 }

 	function onpanemouseover(event){
		if(bo.ie7 || bo.ie6){
			var target = event.srcElement;
	 	} else {
	 		var target = event.currentTarget;
		}
		target.addClassName('highlighted');
	}

	function onpanemouseout(event){
		 if(bo.ie7 || bo.ie6){
		 	var target = event.srcElement;
		 } else {
		 	var target = event.currentTarget;
		}
		target.removeClassName('highlighted');
	}

	function onnavmouseover(event){
	 	if(bo.ie7 || bo.ie6){
	 		var target = event.srcElement;
	 	} else {
	 		var target = event.currentTarget;
		}
		target.className=target.className+'-h';
	}

	function onnavmouseout(event){
		 if(bo.ie7 || bo.ie6){
		 	var target = event.srcElement;
		 } else {
		 	var target = event.currentTarget;
		}
		target.className=target.className.substring(0,target.className.length-2);
	}



	/**
		Zwraca caly panel nawigacyjny przewijaka (<- || || || ->)
	*/
	function getNaviPaneElemenet(sliderId, teasersAmount,hideWhenOne){
		if(hideWhenOne==undefined || hideWhenOne==false){
			var naviPane = document.createElement('div');
			var naviLeft = document.createElement('div');
			var naviRight = document.createElement('div');
			var paneItems = document.createElement('div');

			naviPane.className = 'navi-pane';
			naviPane.id = sliderId + '-navi-pane';

			naviLeft.className = 'navi-left';
			naviLeft.id = sliderId + '-navi-left';

			naviRight.className = 'navi-right';
			naviRight.id = sliderId + '-navi-right';

			paneItems.className = 'pane-items';
			paneItems.id = sliderId + '-pane-items';

			for(i=0; i<teasersAmount; i++){
				var paneItem = document.createElement('div');
				paneItem.id = 'item-'+i;
				paneItem.className = 'pane-item';
				paneItems.appendChild(paneItem);
				///podpinamy sie pod zdarzenie onclick, jesli jest co przewijac
				if(teasersAmount>1)
					Event.observe(paneItem,'click',onpaneclick);
					//Podswietlanie elementow nawigacyjnych
					Event.observe(paneItem,'mouseover', onpanemouseover);
					Event.observe(paneItem,'mouseout', onpanemouseout);
			}

			//podpinamy sie pod zdarzenie onclick, jesli jest co przewijac
			if(teasersAmount>1){

				//Podswietlanie elementow nawigacyjnych
				Event.observe(naviLeft,'mouseover', onnavmouseover);
				Event.observe(naviLeft,'mouseout', onnavmouseout);
				Event.observe(naviRight,'mouseover', onnavmouseover);
				Event.observe(naviRight,'mouseout', onnavmouseout);

				//przewijanie
				if (slidersMap[sliderId+'_animMethod'] == 'przeskakiwanie') {
					Event.observe(naviLeft,'click',function(){
						stopMovingByTime(sliderId);
						new EffectMove(sliderId, {duration : 500, direction : 'right'});
					});
					Event.observe(naviRight, 'click',function(){
						stopMovingByTime(sliderId);
						new EffectMove(sliderId, {duration : 500, direction : 'left'});
					});
				}
				//przenikanie
				else if (slidersMap[sliderId+'_animMethod'] == 'przenikanie') {
					Event.observe(naviLeft,'click',onnavclick);
					Event.observe(naviRight, 'click',onnavclick);
				}
			}

			naviPane.appendChild(naviLeft);
			naviPane.appendChild(naviRight);
			naviPane.appendChild(paneItems);

			return naviPane;
		}
	}




	/**
		Dostosowujemy slidera. Chodzi o zbudowanie panelu nawigacji na podstawie tego, ile teaserkow
		mamy w dokumencie. Teaserki sa pobierane z elementu o id="slider", dlugosc kazdego jest dodawana do
		calkowitej dlugosci slidera (poczatkowo slider ma dlugosc 0, chociaz jest kontenerem teaserkow).
		Dodatkowo dodajemy sobie tutaj obsluge zdarzen na zbudowanym panelu nawigacji
	*/
	function customizeSlider(sliderId, timeIntervals, animMethod, sliderLinks, sliderImgs, hideWhenOne){
			
			var slider = $(sliderId);

			slidersMap[sliderId+'_animMethod'] = animMethod;

			for(i=0; i<timeIntervals.length; i++) {
				slidersMap[sliderId+'_timeInterval'+i] = (timeIntervals[i]*1000);
			}

			var teasers = slider.getElementsBySelector('div.teaser');
			
			
			slider.setStyle({position: 'relative'});
			

			//przewijanie
			if (slidersMap[sliderId+'_animMethod'] == 'przeskakiwanie') {
				slider.down(0).style.display='none';


				slidersMap[sliderId+'_moveCounter'] = 1;


				slider.getElementsBySelector('div.teaser')[0].addClassName('selected');
				if( hideWhenOne != undefined ){
					$$('#' + sliderId + ' .teaser').each(function(obj){
						obj.setStyle({display:'block', height:'226px'});
					});
				} else {
					$$('#' + sliderId + ' .teaser').each(function(obj){
						obj.setStyle({display:'block'});
					});
				}
				
				//for each teaser in slider add its width

				var teasersAmount = teasers.length;


				slidersMap[sliderId+'_teasersAmount'] = teasersAmount;

				if(hideWhenOne==undefined || hideWhenOne==false) {
					var naviPane = getNaviPaneElemenet(sliderId, teasersAmount, hideWhenOne);
					slider.up(0).appendChild(naviPane);

					$(sliderId+'-navi-pane').down('div.pane-item').addClassName('selected');

					computePaneItemsMargin(sliderId);//oblicz i ustaw marginesy elmenetom nawigacji (bez strzalek)
				}


				//Tworzymy sobie konstruktor dla customowego eventu. Event bedzie mial pole przechowujace
				//obiekt MoveEffect zawierajacy wszystkie parametry ruchu.
				CustomEvent.Events.MoveEvent = Class.create();
				CustomEvent.Events.MoveEvent.prototype = {
					initialize : function(slider){
						this.type = "CustomEvent.Events.MoveEvent";
						this.slider = slider;
					}
				};

				//Dodaj funkcje, ktora obsluzy zdarzenie "onMoveEnd"
				EventController.addEventListener(sliderId+"onMoveEnd", onMoveEnd);
				//Uruchamiamy przesuwanie elementow do przodu co 5s, ale tylko w przypadku, gdy sa elementy do przewijania.
				if(teasersAmount >= 1) {
					//Dodajemy wykonanie do Hasha, zeby miec referencje potrzebna do zatrzymania wykonan
					if(teasersAmount > 1) {
						periodicalExecuters[sliderId] = setTimeout(function(){moveByTime(sliderId)}, slidersMap[sliderId+'_timeInterval0']);
					}

					var sliderWidth = 0;
					var sliderHeight = 0;

					//Doladuj obrazki w tle
					if (document.images) {
						preload_image_objects = new Array();
						for(i=0; i<sliderImgs.length; i++) {
							var linkTag = teasers[i].down('a');
							var imgTag = (linkTag!=null)?linkTag.down('img'):teasers[i].down('img');
							preload_image_object = new Image();
							preload_image_object.src = sliderImgs[i];
							preload_image_objects[i] = preload_image_object;
							if (linkTag != null) {
								linkTag.href=sliderLinks[i];
							}
							if (imgTag) {
								imgTag.src=sliderImgs[i];
							}
						}
						//zliczamy teaserki i dodajemy do przewijaka sume ich dlugosci
						teasers.each(function(obj,i){
						teaserHeight=obj.clientHeight;
						if (teaserHeight > sliderHeight) {
							sliderHeight = teaserHeight;
						}
						sliderWidth +=obj.clientWidth;
						if (bo.ie6) { sliderWidth += 2;	}
						});
						slider.setStyle({width: sliderWidth+300+'px'});
						slider.setStyle({height: sliderHeight+'px'});
						}
				}

			}
			//przenikanie
			else if (slidersMap[sliderId+'_animMethod'] == 'przenikanie') {
				slider.down(0).style.display='block';

				slidersMap[sliderId+'_links'] = sliderLinks;
				slidersMap[sliderId+'_imgs'] = sliderImgs;
				slidersMap[sliderId+'_currentImgIndex'] = 1;
				document.getElementById(sliderId+'_image').src=sliderImgs[0];
				document.getElementById(sliderId+'_link').href=sliderLinks[0];
				
				if(hideWhenOne==undefined || hideWhenOne==false) {
					var naviPane = getNaviPaneElemenet(sliderId, sliderImgs.length, hideWhenOne);
					slider.up(0).appendChild(naviPane);

					$(sliderId+'-navi-pane').down('div.pane-item').addClassName('selected');

					computePaneItemsMargin(sliderId);//oblicz i ustaw marginesy elmenetom nawigacji (bez strzalek)
				}
				
				//Uruchamiamy przesuwanie elementow do przodu co 5s, ale tylko w przypadku, gdy sa elementy do przewijania.
				if(sliderImgs.length > 1) {
					//Dodajemy wykonanie do Hasha, zeby miec referencje potrzebna do zatrzymania wykonan
					periodicalExecuters[sliderId] = setTimeout(function(){blendByTime(sliderId)}, slidersMap[sliderId+'_timeInterval0']);

					//Doladuj pozostale obrazki w tle
					if (document.images) {
						preload_image_objects = new Array();
						for(i=0; i<sliderImgs.length; i++) {
							preload_image_object = new Image();
							preload_image_object.src = sliderImgs[i];
							preload_image_objects[i] = preload_image_object;
						}
						slider.setStyle({height: slider.down(0).clientHeight+'px'});
						}
				}
			}
		
		
	}

	/**
		Obslugujemy zdarzenie wystepujace po skonczeniu ruchu. Jesli ruch byl w lewo,
		to przesuwamy element z poczatku slidera (ten, ktory przed momentem schowalismy)
		na koniec listy. Jesli polecenie przesuniecia nie wyszlo od panelu nawigacji
		(wyszlo od strzalki), to nie zmieniamy zaznaczonego elmentu w panelu. Element jest
		zmieniany od razu po kliknieciu. Jesli po odjeciu wykonanego ruchu zostaly jeszcze
		jakies, to je wykonujemy.
	*/
	function onMoveEnd(event){
		if(event.slider == null)
			return;

		var slider = event.slider;

		var displaySliders = new Array();
		var displaySlidersCount = 0;
		if(slider.direction=='left') {
			slider.moveFirst2End();
		}
		//Odkrywanie ukrytych banerow
		slider.element.getElementsBySelector('div.teaser').each(function(obj,i){
			if(obj.style.display=='none') {
				//Dla ruchu w lewo przemiesc najpierw ukryte banery na koniec
				if(slider.direction=='left') {
					if (i < slider.clickedIndex) {
						slider.element.appendChild(obj);
					}
				}
				displaySliders[displaySlidersCount]=obj;
				displaySlidersCount++;
			}
		});
		for(i=0; i<displaySliders.length; i++){
			displaySliders[i].style.display='block';
		}

		slider.changeSelectedTeaser();
		slider.changeSelectedNavi();

		//ruch sie skonczyl, wiec ustawiamy flage w Hashu.
		movesMap[slider.element.readAttribute('id')] = false;
	}


	function isEmpty(value){
		return value==null || value.length == 0;
	}

	/**
		Zwraca wartosc liczbowa atrybuty 'left'. getStyle('left') zwraca nam wartosc z jednostka, wiec jednostke
		obcinamy i parsujemy sobie wynik.
	*/
	function getCssLeft(element){
		var movedLeft = element.getStyle('left');
		if(isEmpty(movedLeft)){
			return 0;
		} else {
			return parseInt(movedLeft.substr(0,movedLeft.length-2));
		}

	}

	/**
		Funkcja odpowiedzialna za ruch.
	*/
	function EffectMove(element, params){
		if(isEmpty(element) || movesMap[element])
			return;

		movesMap[element] = true;

		if(params==null)
			params = {};

		this.element = $(element);
		this.duration = isEmpty(params.duration) ? 500 : params.duration;
		this.direction = isEmpty(params.direction) ? 'left' : params.direction;
		//ile zostalo elementow do przesuniecia
		this.clickedIndex = isEmpty(params.clickedIndex) ? -1 : params.clickedIndex;
		this.selectedIndex = isEmpty(params.selectedIndex) ? -1 : params.selectedIndex;
		//czy polecenie ruchu pochodzi od panelu(true), czy od strzalki (false)
		//co ile wykonujemy kolejne klatki animacji
		this.interval = 35;
		this.navi = $(element + '-navi-pane');
		this.alreadyMovedBy = 0;
		//ta wartoscia sterujemy, czy ruch ma byc w lewo, czy w prawo
		this.factor = this.direction=='left' ? -1 : 1;
		this.oldLeftPosition = 0;
		//Zmieniamy zaznaczona opcje w panelu nawigacyjnym na kolejna/poprzednia.
		this.changeSelectedNavi = function(){
			var selected = this.navi.down('div.selected');
			selected.removeClassName('selected');
			var plainNaviMargin = 0;
			if(this.direction=='left'){
				var next = null;
				if (this.clickedIndex != -1 ) {
					var next = this.navi.getElementsBySelector('div.pane-item')[this.clickedIndex];
				}
				else {
					next = selected.next('div.pane-item',0);
					next = (next == null ? this.navi.down('div.pane-item') : next);
				}
				var plainNaviMargin = next.getStyle('margin-top');
				next.addClassName('selected');
				next.setStyle({'margin-top':0});
			} else {
				var prev = null;
				if (this.clickedIndex != -1 ) {
					prev = this.navi.getElementsBySelector('div.pane-item')[this.clickedIndex];
				}
				else {
					prev = selected.previous('div.pane-item',0);
					prev = (prev == null ? this.navi.getElementsBySelector('div.pane-item').last() : prev);
				}
				var plainNaviMargin = prev.getStyle('margin-top');
				prev.addClassName('selected');
				prev.setStyle({'margin-top':0});
			}
			selected.setStyle({'margin-top':plainNaviMargin});

		}

		//Przesuwa ostatni element z konca na poczatek. Wykonywane przed kazdym ruchem wstecz, poniewaz
		//poczatkiem listy jest zawsze widoczny element.
		this.moveLast2Begin = function(){
			var selected = this.element.down('div.selected');
			var lastChild = this.element.getElementsBySelector('div.teaser').last();
			this.element.insertBefore(lastChild, selected);
			this.element.setStyle({'left': (-1)*lastChild.getWidth() + 'px'});
		}

		//Przesuwamy pierwszy element na koniec listy. Wykonywane po skonczeniu ruchu do przodu.
		this.moveFirst2End = function(){
			var selected = this.element.down('div.selected');
			this.element.appendChild(selected);
		}

		this.changeSelectedTeaser = function(){
			this.selectedTeaser.removeClassName('selected');
			this.element.down('div.teaser').addClassName('selected');
		}

		//Odpalamy animacje. Jesli jest to wstecz, to przesuwamy element z konca na poczatek.
		this.start = function(){
			if(this.direction=='right'){
				if (this.clickedIndex != -1 ) {
					var selected = this.element.down('div.selected');
					var lastChild = this.element.getElementsBySelector('div.teaser').last();

					for(i=0; i<this.selectedIndex - this.clickedIndex; i++) {
						this.element.insertBefore(lastChild, selected);
						this.element.setStyle({'left': (-1)*lastChild.getWidth() + 'px'});
						selected = lastChild;
						lastChild = this.element.getElementsBySelector('div.teaser').last();
					}
				}
				else {
					this.moveLast2Begin();
				}
				this.oldLeftPosition = getCssLeft(this.element);
			}
			this.selectedTeaser = this.element.down('div.selected');
			this.widthToMove = this.selectedTeaser.getWidth();
			this.moveByTurn = this.widthToMove*this.interval/this.duration;
			//ilu iteracji wymaga przesuniecie.
			var iter = this.duration/this.interval;
			for(i=0; i < iter; i++){
				setTimeout(this.move.bind(this), this.interval*i);
			}
		}


		//Funkcja pojedynczego przesuniecia. Jest "pojedyncza klatka" animacji. Jesli przesuniemy wiecej, niz trzeba, to
		//atrybut left ustawiamy na 0 (wyrownujemy do lewej). Na koncu odpalamy zdarzenie konca ruchu.
		this.move = function(){
			var newValue;
			if(!movesMap[this.element.readAttribute('id')])
				return;
			if(this.alreadyMovedBy + this.moveByTurn*2 >= this.widthToMove){
				this.alreadyMovedBy = 0;
				this.element.setStyle({'left': 0 + 'px'});
				var event = new CustomEvent.Events.MoveEvent(this);
				EventController.dispatchEvent(this.element.readAttribute('id')+"onMoveEnd", event);
			} else {
				newValue = this.oldLeftPosition + this.factor*(this.alreadyMovedBy + this.moveByTurn);
				this.alreadyMovedBy += Math.abs(this.factor*this.moveByTurn);
				this.element.setStyle({'left': newValue + 'px'});
			}

		}
		//przesuniecie jednego elementu
		this.start();
	}


	//[Funkcja wykorzystywana tylko w przypadku metody animacji: przewijanie]
	//funkcja odpalona wykonuje ruch, a nastepnie ustawia wykonanie samej siebie po 5000ms. Jesli nie zostanie przerwana, to bedzie sie odpalac
	//w nieskonczonosc.
	function moveByTime(sliderId){
		var teasers = slidersMap[sliderId+'_teasersAmount'];
		var moveCounter = slidersMap[sliderId+'_moveCounter'];
		if (moveCounter%teasers == 0) {
			moveCounter = 0;
		}
		new EffectMove(sliderId, {duration : 500, direction : 'left'});
		periodicalExecuters[sliderId] = setTimeout(function(){moveByTime(sliderId);},slidersMap[sliderId+'_timeInterval'+moveCounter]);
		slidersMap[sliderId+'_moveCounter'] = moveCounter + 1;
	}


	/**
		Zatrzymuje periodical executera.
	*/
	function stopMovingByTime(sliderId){
		var pe = periodicalExecuters[sliderId];
		if(pe==null)
			return;

		clearInterval(pe);
		pe = null;
	}


	function blendImage(sliderId, index) {
		var sliderImgs = slidersMap[sliderId+'_imgs'];
		crossfade(document.getElementById(sliderId+'_image'), sliderImgs[index],1, sliderId);
		var sliderLinks = slidersMap[sliderId+'_links'];
		document.getElementById(sliderId+'_link').href=sliderLinks[index];
	}

	/**
		Funkcja automatycznego przenikania obrazkow co okreslony interwal czasu
	*/
	function blendByTime(sliderId){
		this.element = $(sliderId);
		var currentImgIndex = slidersMap[sliderId+'_currentImgIndex'];
		this.navi = $(sliderId + '-navi-pane');

		//Zmieniamy zaznaczona opcje w panelu nawigacyjnym na kolejna/poprzednia.
		var selected = this.navi.down('div.selected');
		selected.removeClassName('selected');
		var plainNaviMargin = 0;
		var next = selected.next('div.pane-item',0);
		next = (next == null ? this.navi.down('div.pane-item') : next);
		var plainNaviMargin = next.getStyle('margin-top');
		next.addClassName('selected');
		next.setStyle({'margin-top':0});

		selected.setStyle({'margin-top':plainNaviMargin});

		var bannersCount = slidersMap[sliderId+'_imgs'].length;
		blendImage(sliderId, currentImgIndex);
		var timeIntervalIndex=currentImgIndex;
		currentImgIndex++;
		if (currentImgIndex >= bannersCount) {
			currentImgIndex = 0;
		}
		slidersMap[sliderId+'_currentImgIndex'] = currentImgIndex;

		periodicalExecuters[sliderId] = setTimeout(function(){blendByTime(sliderId);},slidersMap[sliderId+'_timeInterval'+timeIntervalIndex]);
	}

	function stopBlendingByTime(sliderId){
			var pe = periodicalExecuters[sliderId];
			if(pe==null)
				return;

			clearInterval(pe);
			pe = null;
	}

