// scroll the element vertically based on its width and the slider maximum value
function scrollVertical(value, slider) {
	var element = $(slider.options.scrollContent);
	element.scrollTop = Math.round(value/slider.maximum*(element.scrollHeight-element.offsetHeight));
}

// scroll the element horizontally based on its width and the slider maximum value
function scrollHorizontal(value, slider) {
	var element = $(slider.options.scrollContent);
	element.scrollLeft = Math.round(value/slider.maximum*(element.scrollWidth-element.offsetWidth));
}
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); //Safari Round
	}
});

var sliders = new Array();
var sliderContentIds = new Array();
var sliderIndex = new Array();
var scrollAmount = 40;
function initilizeSlider(){
	Event.observe(document,"dom:loaded",new function(){prepareSliders();});
}
function wheel(event){
	for(var i=0;i<sliderContentIds.length;i++){
		if(sliderContentIds[i] == this.id){
			var content = (event.currentTarget!=null?event.currentTarget:this);
			if(content != null && content.offsetHeight+scrollAmount < content.scrollHeight){
				sliders[i].setValueBy(-Event.wheel(event)*scrollAmount/(parseInt(content.scrollHeight)-parseInt(content.offsetHeight)));
				if (event.preventDefault)
					event.preventDefault();
				event.returnValue = false;
			}
		}
	}
}
function prepareSliders(){
	prepareHorizontalSliders();
	prepareVerticalSliders();
}
function prepareHorizontalSliders(){
	var elements = $$('.h-scrollbar');
	var el,elBody;
	if(elements.size()>0){
		sliders = new Array(elements.size());
		sliderContentIds = new Array(elements.size());
		for(var i=0;i<elements.size();i++){
			var el = elements[i];
			sliderContentIds[i] = el.readAttribute('content');
			var scrollBarBodys = el.getElementsByClassName('h-scrollbar-body');
			if(sliderContentIds[i] != null && scrollBarBodys.length>0){
				var content = $(sliderContentIds[i]);
				content.style.overflow = 'hidden';

				el.style.left = - content.offsetWidth;
				el.style.top = content.offsetHeight+1;
				el.style.width = content.offsetWidth;

				scrollBarBodys[0].style.width = el.clientWidth;
				var scrollBarHandles = scrollBarBodys[0].getElementsByClassName('h-scrollbar-handle');
				if(scrollBarHandles.length>0){
					var idScrollbarBody = 'h-scrollbar-body-'+i;
					var idScrollbarHandle = 'h-scrollbar-handle-'+i;
					
					scrollBarBodys[0].id = idScrollbarBody;
					scrollBarHandles[0].id = idScrollbarHandle;
					var contentId = sliderContentIds[i];
					sliders[i] = new Control.Slider(idScrollbarHandle, idScrollbarBody, {
						axis: 'horizontal',
						scrollContent:sliderContentIds[i],
						onSlide: function(v,o) { scrollHorizontal(v, o);  },
						onChange: function(v,o) { scrollHorizontal(v, o); }
					});

					if ($(sliderContentIds[i]).scrollWidth <= $(sliderContentIds[i]).offsetWidth) {
						sliders[i].setDisabled();
						el.hide();
					}
				}
			}
		}
	}	
}
function prepareVerticalSliders(){
	var elements = $$('.v-scrollbar');
	var el,elBody;
	if(elements.size()>0){
		sliders = new Array(elements.size());
		sliderContentIds = new Array(elements.size());
		for(var i=0;i<elements.size();i++){
			var el = elements[i];
			sliderContentIds[i] = el.readAttribute('content');
			var scrollBarBodys = el.getElementsByClassName('v-scrollbar-body');
			if(sliderContentIds[i] != null && scrollBarBodys.length>0){
				var content = $(sliderContentIds[i]);
				content.style.overflow = 'hidden';
				el.style.height = (content.offsetHeight - 17) +'px';
				scrollBarBodys[0].style.height = el.style.height;
				var scrollBarHandles = scrollBarBodys[0].getElementsByClassName('v-scrollbar-handle');
				if(scrollBarHandles.length>0){
					var idScrollbarBody = 'v-scrollbar-body-'+i;
					var idScrollbarHandle = 'v-scrollbar-handle-'+i;

					scrollBarBodys[0].id = idScrollbarBody;
					scrollBarHandles[0].id = idScrollbarHandle;
					var contentId = sliderContentIds[i];
					sliders[i] = new Control.Slider(idScrollbarHandle, idScrollbarBody, {
						axis: 'vertical',
						scrollContent:sliderContentIds[i],
						onSlide: function(v,o) { scrollVertical(v, o);  },
						onChange: function(v,o) { scrollVertical(v, o); }
					});

					if ($(sliderContentIds[i]).scrollHeight <= $(sliderContentIds[i]).offsetHeight) {
						sliders[i].setDisabled();
						el.hide();
					}
				}
				//mouse wheel event
				Event.observe(content, "mousewheel", wheel, false);
				Event.observe(content, "DOMMouseScroll", wheel, false);
			}
		}
	}	
}

Event.observe(window, 'load', initilizeSlider, false);