var sliders = Array();
var init_slider = Array();
var current_slider = "";

function start_scrollBar(typeelement)
{
	if($('c_'+typeelement))
	{

		if(!array_search(typeelement, init_slider))
		{
			init_slider.push(typeelement);
			init_scrollBar(typeelement);
		}

		if ($('c_'+typeelement).scrollHeight > $('c_'+typeelement).offsetHeight) {
			// mozilla
			Event.observe('c_'+typeelement, 'DOMMouseScroll', wheel);
			// IE/Opera
			Event.observe('c_'+typeelement, 'mousewheel', wheel);
			var chide = $('c_hide_'+typeelement);
			chide.style.height="auto";
		}
	}
}

function stop_scrollBar(typeelement)
{
	if($('c_'+typeelement))
	{
 		// mozilla
		Event.stopObserving('c_'+typeelement, 'DOMMouseScroll', wheel);
		// IE/Opera
		Event.stopObserving('c_'+typeelement, 'mousewheel', wheel);
		sliders[typeelement].setDisabled();
 		var chide = $('c_hide_'+typeelement);
		chide.style.height="0px";
	}
}

function init_scrollBar(typeelement)
{
	if($('c_'+typeelement))
	{
		var max_range = 10;
		if($('c_'+typeelement).offsetHeight > 0)
		{
			max_range = Math.round($('c_'+typeelement).scrollHeight / $('c_'+typeelement).offsetHeight) * 2;
		}
 		var slider = new Control.Slider('scroller_handler_'+typeelement, 'track_'+typeelement, {
			axis: 'vertical',
			range: $R(0,max_range),
			onSlide: function(v) { scrollVertical(v, $('c_'+typeelement), slider);  },
			onChange: function(v) { scrollVertical(v, $('c_'+typeelement), slider);}
		});
		sliders[typeelement] = slider;
	}
}

var myrules = {
	'.c_in': function(content){
 		content.onmouseover = function() {
		 	current_slider = content.id.replace("c_","");
 		}
	},

 	'.scroller_btn_top' : function(s_top) {
 		s_top.onclick = function() {
 			var typeelement = s_top.parentNode.id.replace("c_defile_","");
 			sliders[typeelement].setValueBy(-1);
 		}
 	},
 	
 	'.scroller_btn_bottom' : function(s_bottom) {
 		s_bottom.onclick = function() {
 			var typeelement = s_bottom.parentNode.id.replace("c_defile_","");
 			sliders[typeelement].setValueBy(1);
 		}
 	}
};

function scrollHorizontal(value, element) {
	new Effect.Move(element, {x: value, transition: Effect.Transitions.spring, duration:0.5});
}

// scroll the element vertically based on its width and the slider maximum value
function scrollVertical(value, element, slider) {
	element.scrollTop = Math.round(value/slider.maximum*(element.scrollHeight-element.offsetHeight));
}

// mouse wheel code from http://adomas.org/javascript-mouse-wheel/
function handle(delta) {
	sliders[current_slider].setValueBy(delta);
}

/** Event handler for mouse wheel event. */
function wheel(event){
	var delta = 0;
	if (!event) /* For IE. */
		event = window.event;
	if (event.wheelDelta) { /* IE/Opera. */
		delta = event.wheelDelta/120;
		/** In Opera 9, delta differs in sign as compared to IE. */
		delta = delta*-1;
	} else if (event.detail) { /** Mozilla case. */
		/** In Mozilla, sign of delta is different than in IE.
		* Also, delta is multiple of 3.
		*/
		delta = event.detail/3;
	}

	/** If delta is nonzero, handle it.
	* Basically, delta is now positive if wheel was scrolled up,
	* and negative, if wheel was scrolled down.
	*/
/*	for(var i in event)
		alert(i +" - " + event[i]);
		* */
		
	if (delta)
		handle(delta);

	/** Prevent default actions caused by mouse wheel.
	* That might be ugly, but we handle scrolls somehow
	* anyway, so don't bother here..
	*/
	if (event.preventDefault)
		event.preventDefault();
	
	event.returnValue = false;
}
// Enregistrement des regles definies ci dessus dans Behaviour
Behaviour.register(myrules);
