/**
 * darmaSlider plugin
 *
 * Copyright (c) 2009 Armelle Coquart (darma.fr)
 *
 */
 
(function($) {
	$.fn.darmaHSlider = function(options) {

	var defaults = {
		slider: '#darmaslider', //element a slider
		width: 100, //largeur visible			
		height: 100, //hauteur element
		controlwidth: 100, //largeur totale controles			
		widthperstep: 10, //largeur a slider au click		
		randomstart: false		
	};


	this.each(function() {
		var obj = $(this);
		var o = $.extend(defaults, options);
		var container = $(o.slider + '-container');
		var controls = $(o.slider + '-controls');
		var moveleft = $(o.slider + '-moveleft');
		var moveright = $(o.slider + '-moveright');
		var dragcontainer = $(o.slider + '-dragcontainer');
		var drag = $(o.slider + '-drag');		
		
		var totalwidth = $(o.slider).outerWidth(); //largeur totale panel
		if(totalwidth < o.width) totalwidth = o.width;
		var btwidth = o.controlwidth * o.width / totalwidth; //largeur du bouton de drag
		var amplitude = o.controlwidth - btwidth; //largeur libre du bouton
		var scale = (totalwidth == o.width) ? 0 : ((totalwidth - o.width) / amplitude); //echelle de déplacement
		var step = (totalwidth == o.width) ? 0 : o.widthperstep / scale; //taille du pas de déplacement

		container.css('overflow', 'hidden');		
		container.height(o.height);
		container.width(o.width);		
		controls.css('display', 'block');
		controls.width(o.controlwidth + moveleft.width() + moveright.width());		
		$(o.slider).width(totalwidth);
		dragcontainer.width(o.controlwidth);		
		drag.width(btwidth);		
		$(o.slider + '-spacer').height($(o.slider + '-spacer').height() - controls.height() + 17);        
        if(scale == 0) drag.css('display', 'none'); 
		
        drag.draggable({
			axis: 'x',
			scroll: false,			
			containment: 'parent',
			drag: function(event, ui){
                listMoveTo(ui.position.left, false, 0);
			}
		});
	    dragcontainer.click(function(e){
            var pos = e.pageX - $(this).offset().left - 0.5*btwidth;		
            listMoveTo(pos, true, 400);		
	    });
	    moveleft.click(function(){
		    var pos = drag.offset().left - dragcontainer.offset().left - step;
            listMoveTo(pos, true, 200);		
	    });
	    moveright.click(function(){
		    var pos = drag.offset().left - dragcontainer.offset().left + step;
            listMoveTo(pos, true, 200);		
	    });
		
		function listMoveTo(pos, fixdrag, speed){
			if(pos < 0) pos = 0;
			if(pos > o.controlwidth - btwidth) pos = o.controlwidth - btwidth;			
			if(fixdrag){	
				drag.css('left', pos + 'px');	
			}
			if(speed == 0){
				$(o.slider).css('marginLeft', - scale*pos + 'px');			
			}else{
				$(o.slider).animate({'marginLeft' : - scale*pos + 'px'}, speed, 'swing');
			}	
		}

		$(o.slider).bind('mousewheel', function(event, delta){
			var pos = $(o.slider).css('marginLeft');
			var a = pos.split('px');
			pos = -a[0]/scale;
			pos = pos - 10*delta;			
			listMoveTo(pos, true, 0);	
			return false;
        });
		
		if(o.randomstart){
		    var max = o.controlwidth - btwidth;
			var x = Math.random() * max;
			listMoveTo(x, true, 2000);
		}		
		
	});
	
}})(jQuery);
