var sliders = Array();
var init_slider = Array();
var current_slider = "";

function start_scrollBar(typeelement)
{
	if($('scroll_'+typeelement))
	{
		init_slider.push(typeelement);
		init_scrollBar(typeelement);
	}
}

function stop_scrollBar(typeelement)
{
	if($('scroll_'+typeelement))
	{
 		// mozilla
		Event.stopObserving('scroll_'+typeelement, 'DOMMouseScroll', wheel);
		// IE/Opera
		Event.stopObserving('scroll_'+typeelement, 'mousewheel', wheel);
	}
}

function init_scrollBar(typeelement)
{
	if($('scroll_'+typeelement) && $('scrollcont_'+typeelement))
	{
		stop_scrollBar(typeelement);
		resize_scrollBloc(typeelement);
		if($('track_'+typeelement))
		{
			var h_bloc = $('scroll_'+typeelement).style.height.replace('px','');
			if(h_bloc == '')
			{
				if($('scroll_'+typeelement+'_height'))
				{
					h_bloc = $('scroll_'+typeelement+'_height').value;
				}
				if(h_bloc == '')
					h_bloc = 320;
			}
			var height_track = h_bloc - 20;
			$('track_'+typeelement).style.height = height_track+'px';
		}
		var max_range = 10;
		var o_h = $('scroll_'+typeelement).offsetHeight;
		var s_h = $('scroll_'+typeelement).scrollHeight;
 		// mozilla
 		Event.observe('scroll_'+typeelement, 'DOMMouseScroll', wheel);
 		// IE/Opera
		Event.observe('scroll_'+typeelement, 'mousewheel', wheel);
		if(o_h > 0)
		{
			max_range = Math.round(s_h / o_h) * 3;
		}
 		var slider = new Control.Slider('scroller_handler_'+typeelement, 'track_'+typeelement, {
			axis: 'vertical',
			range: $R(0,max_range),
			onSlide: function(v) { scrollVertical(v, $('scroll_'+typeelement), slider);  },
			onChange: function(v) { scrollVertical(v, $('scroll_'+typeelement), slider);}
		});
		var chide = $('c_hide_'+typeelement);
		sliders[typeelement] = slider;
		if (s_h <= o_h)
		{
			slider.setDisabled();
 			chide.hide();
		}
		else
		{
			chide.style.display="block";
			chide.style.height="auto";
		}
	}
}

function resize_scrollBloc(typeelement)
{
	if(!$('scroll_maxheight_'+typeelement))
		return;
	//Dimensions du bloc
	var bloc = $('scroll_'+typeelement);
	
	var c = $('c_'+typeelement);
	var pb = c.getStyle('padding-bottom').replace('px','');
	var b_marge = parseInt(pb) + 10;
	//Dimensions de mon écran (ICI hauteur fixe donc dimension du bloc - menu)
	//var ovp = document.viewport.getDimensions();
	//var height_final = ovp.height - b_marge;
	var dim_menu = $('menu').getDimensions();
	var ovp_height = 590 - dim_menu.height;
	var marge_menu = $('menu').getStyle('margin-bottom').replace('px','');
	ovp_height -= parseInt(marge_menu);
	var height_final = ovp_height - b_marge;
	//Je set le contenu de mon bloc a la hauteur max
	//bloc.style.height = height_final+'px';
	//Hauteur fixe 485px
	bloc.style.height = '485px';
}

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, current_slider) {
	if(init_slider.in_array(current_slider) !== false)
	{
		sliders[current_slider].setValueBy(delta);
	}
}

/** Event handler for mouse wheel event. */
function wheel(event, element){
	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]);*/
	var typeelement = this.id.replace('scroll_', '');
	if (delta)
		handle(delta, typeelement);

	/** 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;
}

var myrules = {
	'.c_in': function(content){
 		content.onmouseover = function() {
		 	current_slider = content.id.replace("scroll_","");
 		}
	},
	'.c_defile' : function(scroller){
		var typeelement = scroller.id.replace('c_defile_', '');
 		if($('c_'+typeelement))
	 		start_scrollBar(typeelement);
	},
 	'.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);
 		}
 	}
};

// Enregistrement des regles definies ci dessus dans Behaviour
Behaviour.register(myrules);
