// pluit-carousel.js v1.0.0

// Copyright (c) 2010 Herryanto Siatono (http://www.pluitsolutions.com)
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
var Pluit={};Pluit.Carousel=Class.create({initialize:function(elCarousel,options){this.initOptions(options);this.initElements(elCarousel);this.initViewport();this.initNavigation();if(this.options.autoPlay){this.play()}},initOptions:function(options){this.options={circular:false,hideAutoNav:false,animDuration:0.5,autoPlay:true,slideDuration:5,viewportClassName:'viewport',navClassName:'nav',prevClassName:'prev',nextClassName:'next',pagesClassName:'pages',pageClassNamePrefix:'page-',activeClassName:'active',delayId:0};Object.extend(this.options,options||{})},initElements:function(elCarousel){this.elCarousel=$(elCarousel);this.elViewport=this.elCarousel.down('.'+this.options.viewportClassName);this.elSlidesPanel=this.elViewport.firstDescendant();this.elSlides=this.elSlidesPanel.childElements();this.elNav=this.elCarousel.down('.'+this.options.navClassName);this.maxPageNo=this.elSlides.length;this.prevPageNo=this.curPageNo=1},initViewport:function(){if(this.elSlides.length===0){return}this.viewportDimension=this.getViewportDimension();this.elCarousel.setStyle({width:this.viewportDimension[0]+'px'});this.elViewport.setStyle({width:this.viewportDimension[0]+'px',height:this.viewportDimension[1]+'px'});this.elViewport.observe('click',this.onViewportClick.bindAsEventListener(this))},initNavigation:function(){this.elNav=this.elCarousel.down('.nav');if((!this.elNav)&&(!this.options.hideAutoNav)){this.elNav=this.buildNavigation();this.elNav=$(this.elNav)}if(!this.elNav){return}this.elNav.observe('click',this.onNavClick.bindAsEventListener(this))},buildNavigation:function(){var elNav=document.createElement('ul');elNav.className='nav';var navHTML='';navHTML+='<li class="'+this.options.prevClassName+'"><a href="#">Prev</a></li>';if(this.maxPageNo>0){navHTML+='<li class="'+this.options.pagesClassName+'"><ul>';for(var i=0;i<this.maxPageNo;i++){navHTML+='<li class="';if(i===0){navHTML+=this.options.activeClassName+' '}navHTML+=this.options.pageClassNamePrefix+(i+1)+'"><a href="#">'+(i+1)+'</a></li>'}navHTML+='</ul></li>'}navHTML+='<li class="'+this.options.nextClassName+'"><a href="#">Next</a></li>';elNav.innerHTML=navHTML;this.elCarousel.insert(elNav);return elNav},getViewportDimension:function(){var firstPage=this.elSlides[0];return[firstPage.getWidth(),firstPage.getHeight()]},onNavClick:function(e){var navItem=e.findElement('li');if(!navItem){return}var className=navItem.className;if(className===this.options.prevClassName){this.movePrevious()}else if(className===this.options.nextClassName){this.moveNext()}else if(className.match(this.options.pageClassNamePrefix)){var pageNo=parseInt(className.split('-')[1],10);this.movePage(pageNo)}e.preventDefault()},onViewportClick:function(e){var parentNode=e.element().parentNode;if(e.element().tagName=='IMG'){if(this.options.autoPlay){clearTimeout(this.options.delayId)}window.location=parentNode.select('a')[0].readAttribute('href')}},moveNext:function(){this.movePage(this.curPageNo+1)},movePrevious:function(){this.movePage(this.curPageNo-1)},movePage:function(pageNo){if(this.onTheMove){return}if(pageNo===this.curPageNo){return}this.replay();pageNo=this.checkPageNo(pageNo,this.curPageNo);var distance=this.getMoveDistance(pageNo,this.curPageNo);this.onTheMove=true;this.activatePageNav(pageNo);var distance_pointer=Math.round(-(distance/664))*166;new Effect.Move('pointer',{x:distance_pointer,y:0,duration:this.options.animDuration,mode:'relative'});new Effect.Move(this.elSlidesPanel,{x:distance,duration:this.options.animDuration,afterFinish:function(){this.onTheMove=false}.bind(this)});this.curPageNo=pageNo},play:function(){this.options.delayId=setTimeout(function(){this.moveNext()}.bind(this),this.options.slideDuration*1000)},replay:function(){if(this.options.autoPlay){clearTimeout(this.options.delayId)}this.play()},isMovePrevious:function(pageNo,curPageNo){if(pageNo<curPageNo){return true}},getMoveDistance:function(pageNo,curPageNo){var distance=0;if(pageNo===curPageNo){return distance}var isPrevious=this.isMovePrevious(pageNo,curPageNo);if(isPrevious){while(pageNo<curPageNo){distance+=this.elSlides[pageNo-1].getWidth();pageNo+=1}return distance}else{while(pageNo>curPageNo){distance+=this.elSlides[pageNo-2].getWidth();pageNo-=1}return-distance}},activatePageNav:function(pageNo){if(!this.elNav){return}var elNavItem=this.elNav.down('.page-'+pageNo);var elCurNavItem=this.elNav.down('.page-'+this.curPageNo);if(!elNavItem&&!elCurNavItem){return}elCurNavItem.removeClassName(this.options.activeClassName);elNavItem.addClassName(this.options.activeClassName)},checkPageNo:function(pageNo,curPageNo){var isPrevious=this.isMovePrevious(pageNo,curPageNo);if(isPrevious){if(pageNo<1){if(this.options.circular){return this.maxPageNo}else{return 1}}}else{if(pageNo>this.maxPageNo){if(this.options.circular){return 1}else{return this.maxPageNo}}}return pageNo}});Pluit.Carousel.init=function(){var cssRules=$A(arguments);var options=null;if(typeof cssRules.last()==='object'){options=cssRules.pop()}if(cssRules.length===0){cssRules=['.pluit-carousel']}document.observe("dom:loaded",function(){$A(cssRules).each(function(cssRule){$$(cssRule).each(function(carousel){new Pluit.Carousel(carousel,options)}.bind(this))})})};
