/**
 *
 *	Rotator								( 2010-01-12 ) 
 *
 *	Vstupni objekt:
 *
 *	config.cover						[HTMLElement] obalovy html element 
 *	config.tagName						[String] jmenu tagu pro vyber elementu 
 *	config.className                    [String] jmeno html tridy k aplikovani na objekty ( divy )
 *	config.simpleLogger					[SimpleLogger] SimpleLogger objekt 
 *	config.infinite						[bool] nekonecne smycka ( pro Prev & Next )
 *	config.fadeEffect					[bool] fade efekt
 *	config.fadeSpeed					[int] rychlost prechodu, 10 .. 10000
 *	config.random    					[bool] pouzivat random pri funkci pri prechodu mezi prvky 
 *	
 *  Metody:
 *	
 *	random								zobrazi random prvek
 *	my       							zobrazi prvek s indexem i
 *	    param i                         index do pole InDivs ( pole rotovanych elementu ) 
 *	next								zobrazi dalsi prvek
 *	prev								zobrazi predchzi prvek 
 *	startAuto							automaticka zmena v danem intervalu
 *		param delay						casova prodleva v milisec.
 *	stopAuto							zastaveni automaticke zmeny
 *	toggleAuto							prepinani mezi start a stop auto.
 *		param delay						casova prodleva v milisec.
 *	
 *  Settery / Gettery:
 *  
 *	isFadeFinished                      [bool] vraci, zda jiz byl fade efekt dokoncen.
 *  setFadeEffect                       nastavi fadeEffect
 *      param val                       [bool] nova hodnota
 *  setFadeSpeed                        nastavi rychlost fadeEffect
 *      param val                       [int] pocet milisekund
 *		
 *  Eventy:                             (pro prepsani, u instance nahradit vlastni funkci)
 *  
 *  onHideStart                         metoda volana pred schovanim elementu
 *      InDivs                          pole rotovanych elementu
 *      Index                           index do prechoziho pole, ukazuje na schovavany element   
 *  onShowStart                         metoda volana pred zobrazenim elementu
 *      InDivs                          pole rotovanych elementu
 *      Index                           index do prechoziho pole, ukazuje na zobrazovany element
 *  onHideFinished                      metoda volana po schovani elementu
 *      InDivs                          pole rotovanych elementu
 *      Index                           index do prechoziho pole, ukazuje na schovavany element   
 *  onShowFinished                      metoda volana po zobrazeni elementu
 *      InDivs                          pole rotovanych elementu
 *      Index                           index do prechoziho pole, ukazuje na zobrazovany element
 *
 */
 
function Rotator(e){if(e==null){throw new Error("Rotator: Neni zadan config objekt!");return}if(e.cover==null){throw new Error("Rotator: Neni zadan obalovy element!");}var f=this;var g=e;var h=new Array();var j=0;var k=(e.simpleLogger)?e.simpleLogger:(window.console)?console:null;var l=e.cover;var m=(e.tagName)?e.tagName:"div";var n=(e.className!=null)?e.className:"rotator-item";var o=(e.infinite)?e.infinite:false;var p=(e.fadeEffect!=null&&e.fadeEffect==true)?true:false;var q=(e.fadeSpeed!=null&&e.fadeSpeed>=10&&e.fadeSpeed<=10000)?e.fadeSpeed:500;var r=true;var s=e.random;var t=null;var u=false;var v=false;var w=-1;function init(){var a=l.getElementsByTagName(m);for(var i=0;i<a.length;i++){if((n!="")?(a[i].className.indexOf(n)!=-1):true){h[h.length]=a[i];a[i].style.display="none"}}k.info("Length: "+h.length,2);if(s==false){p=false;showEl(0);p=g.fadeEffect}else{f.random()}};this.next=function(){k.log("FadeFinished: "+r,2);if(r){if(u){k.log("Post PREV call",2);u=false;f.prev();return}else if(v){k.log("Post NEXT call",2);v=false;f.next();return}else if(w!=-1){k.log("Post MY call",2);f.my(w);w=-1;return}else if((o&&h.length==(j+1))||h.length>(j+1)){hideEl(j);if(h.length>(j+1)){j++}else{j=0}showEl(j)}}else{v=true;k.log("CallNextAfterFade setuped up",2)}};this.prev=function(){if(r){if((o&&j==0)||j>0){hideEl(j);if(j>0){j--}else{j=h.length-1}showEl(j)}}else{u=true}};this.random=function(){k.log("FadeFinished: "+r,2);if(r){hideEl(j);do{i=Math.round(Math.random()*(h.length-1))}while(i==j);j=i;showEl(j)}};this.my=function(a){if(a>-1&&a<h.length){k.log("FadeFinished: "+r,2);if(r){hideEl(j);j=a;showEl(j)}else{w=a}}};this.toggleAuto=function(a){if(t==null){f.startAuto(a)}else{f.stopAuto()}};this.startAuto=function(a){if(s==false){t=window.setInterval(f.next,a)}else{t=window.setInterval(f.random,a)}};this.stopAuto=function(){window.clearInterval(t);t=null};this.onHideFinished=function(a,b){};this.onHideStart=function(a,b){};this.onShowFinished=function(a,b){};this.onShowStart=function(a,b){};function hideEl(a){f.onHideStart(h,j);k.info("Hide Index: "+j,1);if(p){r=false;$(h[a]).fadeOut(q,function(){r=true;f.onHideFinished(h,j)})}else{h[a].style.display='none'}};function showEl(a){f.onShowStart(h,j);k.info("Show Index: "+j,1);if(p){r=false;$(h[a]).fadeIn(q,function(){r=true;f.onShowFinished(h,j)})}else{h[a].style.display=''}};this.isFadeFinished=function(){return r};this.setFadeEffect=function(a){if(a!=null){if(a==true){p=true}else if(a==false){p=false}else{throw new Error("[ROTATOR]: Incorrect value passed to 'setFadeEffect'!");}}else{throw new Error("[ROTATOR]: Incorrect value passed to 'setFadeEffect'!");}};this.setFadeSpeed=function(a){if(a!=null){if(a>=10&&a<=10000){q=a}else{throw new Error("[ROTATOR]: Incorrect value passed to 'setFadeSpeed'!");}}else{throw new Error("[ROTATOR]: Incorrect value passed to 'setFadeSpeed'!");}};this.addEvent=function(a,c,d,b){if(a.addEventListener){a.addEventListener(c,d,b)}else{a.attachEvent("on"+c,d)}};this.removeEvent=function(a,c,d,b){if(a.addEventListener){a.removeEventListener(c,d,b)}else{a.detachEvent("on"+c,d)}};this.stopEvent=function(a){if(navigator.appName!="Microsoft Internet Explorer"){a.stopPropagation();a.preventDefault()}else{a.cancelBubble=true;a.returnValue=false}};init()};
