/*
 * MW Carousel - (c)2010 Markus von der Wehd / mw@inpublica.de
 */
var MWCarouselClass=function(optionsObj){this.animSpeed=500;this.timerEnabled=false;this.timerDelay=3000;this.timerInterval=3000;this.containerSelector="div.mw-carousel-container";this.contentSelector="div.mw-carousel-content";this.directionFirst="right";this.directionPrev="right";this.directionNext="left";this.directionLast="left";this.noDoubleFade=false;this.saveCursor=false;this.saveTimer=false;this.shuffleContent=false;this.directionMap={first:"",prev:"",next:"",last:""};this.preAnimSetupHidden={};this.initCssStylesHidden={};this.animParamAnimate={};this.animLocked=false;this.cursor=0;this.contentObjList=[];this.syncObjList=[];this.syncObjCount=0;this.chainObjList=[];this.chainObjCount=0;this.saveCursorCookie="mw_carousel_cursor";this.saveTimerCookie="mw_carousel_timer";MWCarouselClass.setOptions(this,optionsObj);var carouselObj=this;this.intervalTimer=new MWIntervalClass(function(){carouselObj.intervalTick();},this.timerInterval);this.delayTimer=new MWTimeoutClass(function(){carouselObj.intervalTimer.start();},this.timerDelay);$(document).ready(function(){carouselObj.init();});};MWCarouselClass.setOptions=function(updateObj,optionsObj){if(updateObj===undefined||optionsObj===undefined){return;}for(var optionName in optionsObj){if(optionsObj.hasOwnProperty(optionName)){if(optionsObj[optionName]===undefined){continue;}if(updateObj[optionName]===undefined){continue;}updateObj[optionName]=optionsObj[optionName];}}};MWCarouselClass.prototype.init=function(){var containerObj=$(this.containerSelector).get(0);this.directionMap.first=this.directionFirst;this.directionMap.prev=this.directionPrev;this.directionMap.next=this.directionNext;this.directionMap.last=this.directionLast;var containerObjWidth=$(containerObj).width();var containerObjHeight=$(containerObj).height();this.initCssStylesHidden={left:{position:"absolute",display:"block",left:containerObjWidth,top:0},right:{position:"absolute",display:"block",left:containerObjWidth*-1,top:0},up:{position:"absolute",display:"block",left:0,top:containerObjHeight},down:{position:"absolute",display:"block",left:0,top:containerObjHeight*-1},fade:{position:"absolute",display:"none",left:0,top:0}};this.initCssStylesVisible={all:{position:"absolute",display:"block",left:0,top:0}};this.preAnimSetupHidden={left:{left:containerObjWidth,top:0},right:{left:containerObjWidth*-1,top:0},up:{left:0,top:containerObjHeight},down:{left:0,top:containerObjHeight*-1},fade:{position:"absolute",display:"none",left:0,top:0}};this.animParamAnimate={left:{left:"-="+containerObjWidth},right:{left:"+="+containerObjWidth},up:{top:"-="+containerObjHeight},down:{top:"+="+containerObjHeight}};var i;if(this.saveCursor){i=MWCookie.getInt(this.saveCursorCookie);if(i!==null){this.cursor=i;}}if(this.saveTimer){i=MWCookie.getInt(this.saveTimerCookie);if(i!==null){this.timerEnabled=!!i;}}var tmpList=$(containerObj).children(this.contentSelector).get();if(this.shuffleContent){this.shuffleArray(tmpList);}var lastIndex=tmpList.length-1;if(this.saveCursor&&this.cursor>lastIndex){this.cursor=lastIndex;}var mwCarouselObj=this;var cssStylesHidden=this.initCssStylesHidden[this.directionNext];var cssStylesVisible=this.initCssStylesVisible["all"];$(tmpList).each(function(index){if(index===mwCarouselObj.cursor){$(this).css(cssStylesVisible);}else{$(this).css(cssStylesHidden);}mwCarouselObj.contentObjList.push({first:0,isFirst:(index===0),prev:(index>0)?index-1:lastIndex,next:(index<lastIndex)?index+1:0,last:lastIndex,isLast:(index===lastIndex),index:index,obj:this});});if(this.timerEnabled){this.restartDelay();}};MWCarouselClass.prototype.first=function(directionFirstOverride){if(this.timerEnabled){this.restartDelay();}var directionFirst=directionFirstOverride||"";this.anim("first",directionFirst);};MWCarouselClass.prototype.next=function(directionNextOverride){if(this.timerEnabled){this.restartDelay();}var directionNext=directionNextOverride||"";this.anim("next",directionNext);};MWCarouselClass.prototype.prev=function(directionPrevOverride){if(this.timerEnabled){this.restartDelay();}var directionPrev=directionPrevOverride||"";this.anim("prev",directionPrev);};MWCarouselClass.prototype.last=function(directionLastOverride){if(this.timerEnabled){this.restartDelay();}var directionLast=directionLastOverride||"";this.anim("last",directionLast);};MWCarouselClass.prototype.stop=function(){if(this.timerEnabled){this.timerEnabled=false;this.delayTimer.stop();this.intervalTimer.stop();}if(this.saveTimer){var t=(this.timerEnabled)?"1":"0";MWCookie.set(this.saveTimerCookie,t);}};MWCarouselClass.prototype.play=function(){if(!this.timerEnabled){this.timerEnabled=true;this.delayTimer.stop();this.intervalTimer.start();}if(this.saveTimer){var t=(this.timerEnabled)?"1":"0";MWCookie.set(this.saveTimerCookie,t);}};MWCarouselClass.prototype.anim=function(directionContent,directionAnimationOptional){var mwCarouselObj=this;var visibleItem=this.contentObjList[this.cursor];if(visibleItem.isFirst&&directionContent==="first"){return;}if(visibleItem.isLast&&directionContent==="last"){return;}if(this.animLocked){return;}this.animLocked=true;var hiddenItem=this.contentObjList[visibleItem[directionContent]];var directionAnimationUsed=directionAnimationOptional||this.directionMap[directionContent];var directionAnimationOthers=directionAnimationOptional||"";if(directionAnimationUsed==="fade"){if(hiddenItem.index>visibleItem.index){if(this.noDoubleFade){$(hiddenItem.obj).fadeIn(this.animSpeed,function(){mwCarouselObj.animDone(directionContent,directionAnimationOthers);$(visibleItem.obj).hide();});}else{$(visibleItem.obj).fadeOut(this.animSpeed);$(hiddenItem.obj).fadeIn(this.animSpeed,function(){mwCarouselObj.animDone(directionContent,directionAnimationOthers);});}}else{if(this.noDoubleFade){$(hiddenItem.obj).show();$(visibleItem.obj).fadeOut(this.animSpeed,function(){mwCarouselObj.animDone(directionContent,directionAnimationOthers);});}else{$(hiddenItem.obj).fadeIn(this.animSpeed);$(visibleItem.obj).fadeOut(this.animSpeed,function(){mwCarouselObj.animDone(directionContent,directionAnimationOthers);});}}}else{$(hiddenItem.obj).css(this.preAnimSetupHidden[directionAnimationUsed]);$(visibleItem.obj).animate(this.animParamAnimate[directionAnimationUsed],this.animSpeed);$(hiddenItem.obj).animate(this.animParamAnimate[directionAnimationUsed],this.animSpeed,function(){mwCarouselObj.animDone(directionContent,directionAnimationOthers);});}this.cursor=visibleItem[directionContent];if(this.syncObjCount>0){for(var i=0;i<this.syncObjCount;i+=1){this.syncObjList[i].anim(directionContent,directionAnimationOthers);}}};MWCarouselClass.prototype.animDone=function(directionContent,directionAnimationOptional){this.animLocked=false;if(this.chainObjCount>0){for(var i=0;i<this.chainObjCount;i++){this.chainObjList[i].anim(directionContent,directionAnimationOptional);}}if(this.saveCursor){MWCookie.set(this.saveCursorCookie,this.cursor);}};MWCarouselClass.prototype.restartDelay=function(){this.intervalTimer.stop();this.delayTimer.start();};MWCarouselClass.prototype.intervalTick=function(){this.anim("next");};MWCarouselClass.prototype.sync=function(carouselObj){carouselObj.timerEnabled=false;carouselObj.saveCursor=false;carouselObj.saveTimer=false;this.syncObjList.push(carouselObj);this.syncObjCount=this.syncObjList.length;};MWCarouselClass.prototype.chain=function(carouselObj){carouselObj.timerEnabled=false;carouselObj.saveCursor=false;carouselObj.saveTimer=false;this.chainObjList.push(carouselObj);this.chainObjCount=this.chainObjList.length;};MWCarouselClass.prototype.shuffleArray=function(sortedArray){var arrayLength=sortedArray.length;for(var index=0;index<arrayLength;index++){var randomIndex=Math.floor(Math.random()*arrayLength);var tempVal=sortedArray[index];sortedArray[index]=sortedArray[randomIndex];sortedArray[randomIndex]=tempVal;}};var MWButtonsClass=function(optionsObj){this.buttonContainerSelector="";this.firstButtonSelector="";this.prevButtonSelector="";this.stopButtonSelector="";this.playButtonSelector="";this.nextButtonSelector="";this.lastButtonSelector="";this.firstButtonHoverClass="";this.prevButtonHoverClass="";this.stopButtonHoverClass="";this.playButtonHoverClass="";this.nextButtonHoverClass="";this.lastButtonHoverClass="";this.allButtonsHoverClass="";this.buttonContainerShowHide=false;this.buttonContainerFadeInSpeed=300;this.buttonContainerFadeOutSpeed=600;this.buttonContainerFadeOutDelay=800;this.buttonContainerFadeInTriggerSelector="";this.directionBeginOverride="";this.directionNextOverride="";this.directionPrevOverride="";this.directionEndOverride="";this.buttonContainerObjList=[];this.carouselObj=null;MWButtonsClass.setOptions(this,optionsObj);var buttonsObj=this;if(this.buttonContainerShowHide){this.hideButtonsTimer=new MWTimeoutClass(function(){buttonsObj.hideButtons();},this.buttonContainerFadeOutDelay);}$(document).ready(function(){buttonsObj.init();});};MWButtonsClass.setOptions=function(updateObj,optionsObj){if(updateObj===undefined||optionsObj===undefined){return;}for(var optionName in optionsObj){if(optionsObj.hasOwnProperty(optionName)){if(optionsObj[optionName]===undefined){continue;}if(updateObj[optionName]===undefined){continue;}updateObj[optionName]=optionsObj[optionName];}}};MWButtonsClass.prototype.init=function(){var mwButtonsObj=this;var buttonNames=["first","prev","stop","play","next","last"];$(this.buttonContainerSelector).each(function(containerIndex){var buttonContainerObj=this;if(mwButtonsObj.buttonContainerShowHide){mwButtonsObj.buttonContainerObjList.push(buttonContainerObj);$(buttonContainerObj).hide();}$.each(buttonNames,function(buttonIndex,name){var buttonSelector=mwButtonsObj[name+"ButtonSelector"];if(buttonSelector.length>0){var buttonObj=$(buttonSelector,buttonContainerObj).get(0);if(buttonObj!==undefined){$(buttonObj).click(function(){mwButtonsObj[name+"Clicked"]();});var buttonHoverClass=mwButtonsObj[name+"ButtonHoverClass"]||mwButtonsObj.allButtonsHoverClass;if(buttonHoverClass.length>0){$(buttonObj).hover(function(){$(this).addClass(buttonHoverClass);},function(){$(this).removeClass(buttonHoverClass);});}}}});});if(mwButtonsObj.buttonContainerShowHide){var triggerSelector=this.buttonContainerFadeInTriggerSelector||this.carouselObj.containerSelector;$(triggerSelector).each(function(index){$(this).hover(function(){mwButtonsObj.showButtons();},function(){mwButtonsObj.hideButtonsTimer.start();});});}};MWButtonsClass.prototype.firstClicked=function(){if(this.carouselObj){this.carouselObj.first(this.directionFirstOverride);}};MWButtonsClass.prototype.nextClicked=function(){if(this.carouselObj){this.carouselObj.next(this.directionNextOverride);}};MWButtonsClass.prototype.prevClicked=function(){if(this.carouselObj){this.carouselObj.prev(this.directionPrevOverride);}};MWButtonsClass.prototype.stopClicked=function(){if(this.carouselObj){this.carouselObj.stop();}};MWButtonsClass.prototype.playClicked=function(){if(this.carouselObj){this.carouselObj.play();}};MWButtonsClass.prototype.lastClicked=function(){if(this.carouselObj){this.carouselObj.last(this.directionLastOverride);}};MWButtonsClass.prototype.showButtons=function(){var mwButtonsObj=this;this.hideButtonsTimer.stop();$.each(this.buttonContainerObjList,function(index,buttonContainerObj){if(mwButtonsObj.buttonContainerFadeInSpeed){$(buttonContainerObj).stop(true,true).fadeIn(mwButtonsObj.buttonContainerFadeInSpeed);}else{$(buttonContainerObj).stop(true,true).show();}});};MWButtonsClass.prototype.hideButtons=function(){var mwButtonsObj=this;$.each(this.buttonContainerObjList,function(index,buttonContainerObj){if(mwButtonsObj.buttonContainerFadeOutSpeed){$(buttonContainerObj).fadeOut(mwButtonsObj.buttonContainerFadeOutSpeed);}else{$(buttonContainerObj).hide();}});};MWButtonsClass.prototype.control=function(carouselObj){this.carouselObj=carouselObj;};var MWTimeoutClass=function(callback,timeout){this.callback=callback;this.timeout=timeout;this.timerId=0;};MWTimeoutClass.prototype.start=function(){this.stop();if(this.timeout>0){this.timerId=window.setTimeout(this.callback,this.timeout);}else{this.callback();}};MWTimeoutClass.prototype.stop=function(){if(this.timerId>0){window.clearTimeout(this.timerId);this.timerId=0;}};var MWIntervalClass=function(callback,interval){this.callback=callback;this.interval=interval;this.timerId=0;};MWIntervalClass.prototype.start=function(){this.stop();if(this.interval>0){this.timerId=window.setInterval(this.callback,this.interval);}else{this.callback();}};MWIntervalClass.prototype.stop=function(){if(this.timerId>0){window.clearInterval(this.timerId);this.timerId=0;}};var MWCookie={set:function(name,value,expires){var cookie=name+"="+value;if(expires){var expSec=parseInt(expires,10);if(!isNaN(expSec)){var exp=new Date();var expNew=exp.getTime()+(expires*1000);exp.setTime(expNew);var expStr="; expires="+exp.toGMTString();cookie+=expStr;}}document.cookie=cookie;},get:function(name){if(document.cookie){var re=new RegExp(name+"=([^;]+)","i");var match=document.cookie.match(re);var value=(match!==null)?RegExp.$1:null;return value;}else{return null;}},getInt:function(name){var value=parseInt(MWCookie.get(name),10);return(isNaN(value))?null:value;}};
