var SlidingBox=Class.create();Object.extend(SlidingBox.prototype,{initialize:function(content_div,slideup,slidedown,options){this.content_div=content_div;this.slideup=slideup;this.slidedown=slidedown;this.options={scroll_increment:3,scroll_increment_for_wheel:20,hold_delay:30,hold_interval:20,init_scroll_to_bottom:false};Object.extend(this.options,options);this.scroll_pos=0;this.setSizes();Event.observe(this.slideup,'mouseover',function(e){this.buttonDown(e,this.scrollUp.bind(this))}.bindAsEventListener(this));Event.observe(this.slidedown,'mouseover',function(e){this.buttonDown(e,this.scrollDown.bind(this))}.bindAsEventListener(this));Event.observe(this.slideup,'mouseout',this.buttonUp.bindAsEventListener(this));Event.observe(this.slidedown,'mouseout',this.buttonUp.bindAsEventListener(this));Event.observe(this.content_div,'mousewheel',this.scrollWheel.bindAsEventListener(this),true);Event.observe(this.content_div,'DOMMouseScroll',this.scrollWheel.bindAsEventListener(this),true)},scrollDown:function(){if(this.scroll_pos<this.scroll_max){this.scrollTo(this.scroll_pos+this.options.scroll_increment<this.scroll_max?this.scroll_pos+this.options.scroll_increment:this.scroll_max);return true}else{return false}},scrollUp:function(){if(this.scroll_pos>0){this.scrollTo(this.scroll_pos>this.options.scroll_increment?this.scroll_pos-this.options.scroll_increment:0);return true}else{return false}},scrollTo:function(new_pos){if(new_pos<0){new_pos=0}if(new_pos>this.scroll_max){new_pos=this.scroll_max}this.content_div.scrollTop=new_pos;this.scroll_pos=new_pos},scrollWheel:function(event){var oldscroll_increment=this.options.scroll_increment;this.options.scroll_increment=this.options.scroll_increment_for_wheel;var scroll_amount=Event.wheel(event);if(scroll_amount>0){for(var i=0;i<Math.ceil(scroll_amount);++i){this.scrollUp()}if(this.scroll_pos>0){Event.stop(event)}}else if(scroll_amount<0){for(var i=0;i>Math.floor(scroll_amount);--i){this.scrollDown()}if(this.scroll_pos<this.scroll_max){Event.stop(event)}}this.options.scroll_increment=oldscroll_increment},buttonDown:function(event,action){action();this.timeout=setTimeout(function(){action();this.timeout=null;if(this.interval){clearInterval(this.interval)}this.interval=setInterval(action,this.options.hold_interval)}.bind(this),this.options.hold_delay);Event.stop(event)},buttonUp:function(event){if(this.timeout){clearTimeout(this.timeout)}if(this.interval){clearInterval(this.interval)}this.timeout=null;this.interval=null;this.down_position=null},setSizes:function(){this.scroll_max=this.content_div.scrollHeight-this.content_div.offsetHeight;if(this.scroll_max<0)this.scroll_max=0;if(typeof(this.options.elementToScroll)!='undefined'){Element.extend(this.options.elementToScroll);var t_ElementsBefore=this.options.elementToScroll.previousSiblings();var totalHeight=this.options.elementToScroll.offsetHeight+parseInt(this.options.elementToScroll.getStyle('marginTop'))+parseInt(this.options.elementToScroll.getStyle('marginBottom'));for(var i=0;i<t_ElementsBefore.length;i++){totalHeight+=t_ElementsBefore[i].offsetHeight+parseInt(t_ElementsBefore[i].getStyle('marginTop'))+parseInt(t_ElementsBefore[i].getStyle('marginBottom'))}var pxToScroll=totalHeight-this.content_div.offsetHeight;if((pxToScroll+parseInt(this.options.elementToScroll.getStyle('marginBottom')))<=this.scroll_max){pxToScroll+=parseInt(this.options.elementToScroll.getStyle('marginBottom'))}if(pxToScroll>0&&pxToScroll<=this.scroll_max)this.scrollTo(pxToScroll)}else if(this.options.init_scroll_to_bottom==true){if(this.scroll_pos!=this.scroll_max){this.scrollTo(this.scroll_max)}}}});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 delta}});
