var ProtoFlow=Class.create({initialize:function(elem,opt){opt=opt||{};this.options={startIndex:2,interval:60,slider:true,flex:110,captions:false,autoplay:false,autoplayInterval:5,useReflection:false,enableOnClickScroll:false,enableKeyboard:true,enableMouse:true};Object.extend(this.options,opt);this.options.useReflection=navigator.userAgent.toLowerCase().indexOf('msie 6')!=-1?false:true;this.useCaptions=this.options.captions;this.elem=$(elem);if(!this.elem)return;new Effect.Opacity('pics',{from:1,to:0,duration:0});new Effect.Opacity('pic',{from:1,to:0,duration:0});this.elem.setStyle({overflow:"hidden",position:"relative"});this.imageStack=this.elem.select('img');if(this.options.captions!=false){this.captions=this.imageStack.pluck("alt");this.captionsCount=this.captions.size()}if(this.options.useReflection){this.imageStack.each(function(elem){Reflection.add(elem,{opacity:2/3})}.bind(this));this.stack=this.elem.childElements()}else{this.stack=this.imageStack}this.stackCount=(this.stack).size();if(this.useCaptions){this.captionHolder=new Element('div');this.captionHolder.className="captionHolder";this.captionHolder.setStyle({width:"100%",textAlign:"center",position:'absolute',left:"0px",top:(Element.getHeight(this.elem)-80)+"px",zIndex:200});this.elem.appendChild(this.captionHolder)}this.currPos=this.options.startIndex-1;this.currIndex=this.currPos;if(this.options.slider){this.sliderContainer=new Element('div');this.sliderContainer.setStyle({width:'200px',height:'10px',position:'relative',top:(Element.getHeight(this.elem)-20)+"px",left:(Element.getWidth(this.elem)/2-(137/2))+"px",zIndex:300});this.sliderTrack=new Element('div');this.sliderTrack.className="sliderTrack";this.sliderHandle=new Element('div');this.sliderHandle.className="sliderHandle";msg=new Element('div');msg.className='msg';msg.innerHTML='drag slider to view items';this.sliderTrack.appendChild(this.sliderHandle);this.sliderContainer.appendChild(this.sliderTrack).appendChild(msg);this.elem.appendChild(this.sliderContainer);this.slider=new Control.Slider(this.sliderHandle,this.sliderTrack,{range:$R(0,this.getStackCount()-1),sliderValue:this.getCurrentPos(),onSlide:this.handleSlider.bind(this),onChange:this.handleSlider.bind(this)})}this.timer=0;this.stack.each(function(elem){elem.identify();if(this.options.enableOnClickScroll)elem.observe('click',this.handleClick.bind(this))}.bind(this));if(this.options.enableOnClickScroll){this.disableLinks()}this.goTo(this.currPos,true);this.autoplayer=null;if(this.options.autoplay){this.autoplayer=new PeriodicalExecuter(this.autoPlay.bind(this),this.options.autoplayInterval)}if(this.options.enableKeyboard){document.observe('keyup',(function(e){var code=e.keyCode;if(37==code)this.previous();if(39==code)this.next()}).bind(this))}if(this.options.enableMouse){var eventType=Prototype.Browser.Gecko?"DOMMouseScroll":"mousewheel";Event.observe(this.elem,eventType,(function(e){this.enableMouse(e)}).bind(this),false);if(this.useCaptions){Event.observe(this.captionHolder,eventType,(function(e){this.enableMouse(e)}).bind(this),false)}}},disableLinks:function(){this.elem.select("a").each(function(a){a.observe('click',function(e){e.preventDefault()})})},autoPlay:function(){if((this.currIndex+2)>this.stackCount){this.currIndex=0}this.currIndex=this.currIndex+1;this.goTo(this.currIndex)},handleWheel:function(event){v=Event.wheel(event);q=this.currIndex+v;this.goTo(q);this.slider.setValue(q)},handleSliderChange:function(index){this.goTo(index)},handleSlider:function(index){if(index)this.goTo(index)},handleClick:function(e){var elem=Event.element(e);var v=elem.getAttribute("index");if(!v&&this.options.useReflection){elem=elem.up('a');v=elem.getAttribute("index")}this.currIndex=v;this.goTo(v);this.updateSlider(v)},getCurrentPos:function(){return this.currPos},goTo:function(index,init){this.slideTo(index*this.options.flex*-1);index=Math.round(index);if(this.useCaptions){this.captionHolder.innerHTML=this.captions[index];if(this.imageStack[index]){$('bigpic').src=this.imageStack[index].src.replace(/thumb/,'main');document.ID=this.imageStack[index].id;if($('plus')){$('plus').title='Add "'+document.ID.replace(/_/g,' ')+'" to the Shopping Cart';$('plus').style.background='url('+this.imageStack[index].src+') 0 0 no-repeat'}}}if(init)setTimeout(function(){$('pics').style.visibility='visible';new Effect.Opacity('pics',{from:0,to:1});$('pic').style.visibility='visible';new Effect.Opacity('pic',{from:0,to:1})},750)},updateSlider:function(index){if(this.options.slider)this.slider.setValue(index)},step:function(){if(this.target<this.currPos-1||this.target>this.currPos+1){this.moveTo(this.currPos+(this.target-this.currPos)/5);window.setTimeout(this.step.bind(this),this.options.interval);this.timer=1}else{this.timer=0}},slideTo:function(x){this.target=x;if(this.timer==0){window.setTimeout(this.step.bind(this),this.options.interval);this.timer=1}},moveTo:function(currentPos){var x=currentPos;this.currPos=currentPos;var width=Element.getWidth(this.elem);var height=Element.getHeight(this.elem);var top=this.elem.offsetTop;var size=width*0.49;var biggest=height;var zIndex=this.stackCount;this.stack.each(function(elem,index){Element.absolutize(elem);elem.setAttribute("index",index);if(this.options.useReflection){elem.down(1).setAttribute('index',index)}var z=Math.sqrt(10000+x*x*1)+100;var xs=x/z*size+size;elem.setStyle({left:(xs-40/z*biggest)+"px",top:(30/z*size+0)+"px",width:(100/z*biggest)+"px",height:(100/z*biggest)+"px",textAlign:"center"});elem.style.zIndex=zIndex;if(x<0)zIndex++;else zIndex--;x+=this.options.flex}.bind(this))},getStackCount:function(){return this.stackCount},decreaseIndex:function(e){if(this.currIndex>0)this.currIndex--},increaseIndex:function(e){if(this.currIndex<this.getStackCount()-1)this.currIndex++},previous:function(e){this.decreaseIndex();this.toCurrentIndex()},next:function(e){this.increaseIndex();this.toCurrentIndex()},enableMouse:function(e){Event.wheel(e)<0?this.next():this.previous();Event.stop(e)},toCurrentIndex:function(e){this.goTo(this.currIndex);this.updateSlider(this.currIndex)}});Object.extend(Event,{wheel:function(event){var delta=0;if(!event)event=window.event;if(event.wheelDelta){delta=event.wheelDelta/120;if(window.opera)delta=-delta}else if(event.detail){delta=-event.detail/3}return Math.round(delta)}});