var mooScroller = new Class({
	options: {
		resizeScrollButton: true,
		wheelStep: 30
	},
	
	initialize: function(selector, options){
		this.setOptions(options);
		this.initScroller(selector);
	},
	
	initScroller: function(selector){
		if ($type(selector) != "array") {
			return;
		}
		
		// create scroller
		var fn = this;
		selector.each(function(el){
			fn.setupScroller(el);
		});
	},
	
	setupScroller: function(el){
		var fn = this;
		var elHeight = el.getCoordinates().height;
		if(elHeight==0) return true;
		
		// create scroller
		var bar = new Element("div", {
			"class": "smScroller",
			"html": "<p class=\"smScrollUp\"><a href=\"javascript:void(0);\"></a></p><p class=\"smScrollDx\"><a href=\"javascript:void(0);\"></a></p><p class=\"smScrollDn\"><a href=\"javascript:void(0);\"></a></p>"
		}).inject(el, "after");
		// get elements
		
		var scroller = bar.getChildren();
		var upBtn = scroller[0].getFirst();
		var scrollBar = scroller[1];
		var scrollBtn = scroller[1].getFirst();
		var dnBtn = scroller[2].getFirst();
		// set height
		
		bar.set("styles", {"height": elHeight});
		scrollBar.set("styles", {"height": elHeight - upBtn.getCoordinates().height - dnBtn.getCoordinates().height});
		
		// calculate size
		var containerHeight = el.getSize().y;
		var availableScroll = el.getScrollSize().y;
		var scrollBarHeight = scrollBar.getCoordinates().height;
		var scale = scrollBarHeight / availableScroll;
		var maxScroll = availableScroll - containerHeight;
		var totalStep = Math.round(maxScroll / this.options.wheelStep);
		
		// store value to reset scroller
		el.store("maxScroll", maxScroll);
		el.store("currentPos", 0);
		
		// resize scroll button
		/*
		if (this.options.resizeScrollButton == true) {
			scrollBtn.set("styles", {"height": scrollBarHeight * scale,"width": "13px", "margin": "0 0 0 0px"});
		}
		*/
		// if have scroll
		var hasScroll = availableScroll - elHeight;
		if(hasScroll<8) hasScroll=0;
		scrollBtn.set("styles", {
			"display": (!hasScroll) ? "none" : "block"
		});
		bar.set("opacity", (!hasScroll) ? 0 : 1);
		
		el.store("slider", new Slider(scrollBar, scrollBtn, {
			onChange: function(pos){
				el.scrollTo(0, el.retrieve("maxScroll") * pos / totalStep);
				el.store("currentPos", pos);
		    },
			mode: "vertical",
			range: [0, totalStep]
		}).set(0));
		
		// element wheel
		el.scrollTo(0, 0).addEvents({
			"mousewheel": function(e){
				e.stop();
				el.retrieve("slider").set(el.retrieve("currentPos") - e.wheel);
			}
		});
		
		var scrolInterval = null;
		// up button
		upBtn.addEvents({
			"mousedown": function(e){
				scrolInterval = setInterval(function(){
					el.retrieve("slider").set(el.retrieve("currentPos") - 1);
				}, 20);
			},
			"mouseup": function(e){
				clearInterval(scrolInterval);
			},
			"mouseout": function(e){
				clearInterval(scrolInterval);
			}
		});
		
		// down button
		dnBtn.addEvents({
			"mousedown": function(e){
				scrolInterval = setInterval(function(){
					el.retrieve("slider").set(el.retrieve("currentPos") + 1);
				}, 20);
			},
			"mouseup": function(e){
				clearInterval(scrolInterval);
			},
			"mouseout": function(e){
				clearInterval(scrolInterval);
			}
		});
	},
	
	resetScroller: function(el) {
		var scrollBar = el.getNext().getElement("p.smScrollDx");
		var scrollBtn = scrollBar.getFirst();
		var containerHeight = el.getSize().y;
		var availableScroll = el.getScrollSize().y;
		var scrollBarHeight = scrollBar.getCoordinates().height;
		var scale = scrollBarHeight / availableScroll;
		var maxScroll = availableScroll - containerHeight;
		var totalStep = Math.round(maxScroll / this.options.wheelStep);
		
		// store value to reset scroller
		el.store("maxScroll", maxScroll);
		
		// resize scroll button
		if (this.options.resizeScrollButton == true) {
			scrollBtn.set("styles", {"height": scrollBarHeight * scale});
		}
		
		// re create new slider
		el.store("slider", new Slider(scrollBar, scrollBtn, {
			onChange: function(pos){
				el.scrollTo(0, el.retrieve("maxScroll") * pos / totalStep);
				el.store("currentPos", pos);
		    },
			mode: "vertical",
			range: [0, totalStep]
		}).set(el.retrieve("currentPos")));
	}
});
mooScroller.implement(new Events, new Options, new Chain);
var scroller;
window.addEvent("load", function(){
	var slide = $$("div.innerPartnersBlock")[0];
	if (!slide){
		scroller = new mooScroller($$(".smScrollContent"), {});
		}
		else{
			return true;
		}
});
