/************************************************************************
*************************************************************************
@Name :      	jScrollbar - jQuery Plugin
@Revison :  1.0
@Date :        21/03/2011
@Author:	 ALPIXEL - http://www.myjqueryplugins.com - http://www.alpixel.fr
@License :		 Open Source - MIT License : http://www.opensource.org/licenses/mit-license.php
**************************************************************************
*************************************************************************/
(function($) {
	$.fn.dmScrollBar= function(op) {
        var defaults = {
			scrollStep : 10,
			allowMouseWheel : true,
			alturaMascara : 0,
			alturaContenedor : 0,
			contenedor: null
        };

		if(this.length>0)
		return this.each(function() {
			var 
				$this = $(this),
				opts = $.extend(defaults, op),
				contenedor = opts.contenedor;
				js_mask = contenedor.parent(), //cojo su mascara
				js_Parentdrag = contenedor.find('.dmScrollbar_draggable'),
				js_drag = contenedor.find('.dmScrollbar_draggable a.draggable'); //inicializo en blanco

				var diff =  opts.alturaMascara - opts.alturaContenedor;
			
			if (opts.alturaMascara > opts.alturaContenedor){
				js_Parentdrag.show();
			} else {
				js_Parentdrag.hide();	
			}
			
			var pxDraggable = parseInt(opts.alturaContenedor) - parseInt(js_drag.height()); //  lo que mide el contenedor (dinámico)
			var pxUpWhenScrollMove = opts.scrollStep;
			var pxUpWhenMaskMove = pxUpWhenScrollMove * (diff/pxDraggable);
			var porcentajeRecorrido;
			
			 js_drag
			.click(function(e){e.preventDefault();})
			.draggable({
					axis:'y',
					containment: js_mask,
					scroll: true,
					drag: function(event, ui){
						porcentajeRecorrido = ui.position.top / pxDraggable; //entre 0 y 1
						distancia = -1 * diff * porcentajeRecorrido;
						contenedor.find('div:eq(0)').css("margin-top", distancia + 'px');
						}
					});
				
			/** mousewheel**/

			var pxUpWhenScrollMove = 10;
			var pxUpWhenMaskMove = 2;
			
			$miElementoGeneral = $this.find(".contenido_galeria");

			$miElementoGeneral.each(function() {
				$(this).mousewheel(function(objEvent, intDelta) {
				
					$miElemento = $(this);
					
					var alturaElemento = parseInt(opts.alturaContenedor) - parseInt($miElemento.height());
					$barra = $miElemento.parent().find('.dmScrollbar_draggable a.draggable'); //inicializo en blanco
					
					var porcentajeRecorrido = parseInt($miElemento.css("margin-top"))/alturaElemento ;
					if (porcentajeRecorrido <0) porcentajeRecorrido=0; else if (porcentajeRecorrido>100) porcentajeRecorrido =100;
					var posBarra = porcentajeRecorrido*(-diff);
					
					//console.log(diff + ' :: '+ porcentajeRecorrido);
					
					$barra.stop(true, true).animate({"top": posBarra+'px'}, 100);
					
					RelativeTop = parseInt($miElemento.css("margin-top"));					

					if (intDelta > 0 && parseInt($miElemento.css("margin-top")) < 0){ //works ok, para arriba
						$miElemento.stop(true, true).animate({"margin-top":'+='+pxUpWhenMaskMove+'px'},100,function(){
							if(RelativeTop > 0 ) {
								$miElemento.css({"margin-top":0});
								$barra.animate({"top":0},150);
							}
						});
						
					} else if (intDelta < 0 && parseInt($miElemento.css("margin-top")) > alturaElemento) {
						$miElemento.stop(true, true).animate({"margin-top":'-='+pxUpWhenMaskMove+'px'},100,function(){
							if(RelativeTop <= alturaElemento)
							{
								var maxBarra = $this.height() ;
								//console.log($barra.css("top") + " :: " + alturaElemento + ' :: ' + maxBarra);
								$miElemento.css({"margin-top":alturaElemento+"px"});
								//console.log(-diff);
								$barra.css({"top":(-diff)+"px"});
							}
						});
					}
				});
			});
		});
	}
})(jQuery);
