/************************************************************************
*************************************************************************
@Name :      	jScrollbar - jQuery Plugin
@Revison :  1.0
@Date :        21/03/2011
@Author:	 Surrel Mickael - http://www.myjqueryplugins.com
@License :		 Open Source - MIT License : http://www.opensource.org/licenses/mit-license.php
**************************************************************************
*************************************************************************/
(function($) {
    $.fn.jScrollbar= function(op) {
        var defaults = {
            scrollStep : 10,
            allowMouseWheel : false
        };
		
        if(this.length>0)
            return this.each(function() {
			
                /*
			// Vars
			*/
                var
                $this = $(this),
                opts = $.extend(defaults, op),
                js_mask = $this.find('.jScrollbar_mask'),
                js_drag = $this.find('.jScrollbar_draggable a.draggable'),
                js_Parentdrag = $this.find('.jScrollbar_draggable'),
                diff = parseInt(js_mask.innerHeight()) - parseInt($this.height());
			
                /** if mask container is heighter than the main container **/
                if(diff > 0)
                {
                    js_Parentdrag.show();
                    var pxDraggable = parseInt(js_Parentdrag.height()) - parseInt(js_drag.height());
                    ;
                    var pxUpWhenScrollMove = opts.scrollStep;
                    var pxUpWhenMaskMove = pxUpWhenScrollMove * (diff/pxDraggable);

                    js_drag
                    .click(function(e){
                        e.preventDefault();
                    })
                    .draggable({
                        axis:'y',
                        containment: js_Parentdrag,
                        scroll: false,
                        drag: function(event, ui){
                            js_mask.css('top','-'+(ui.position.top * (diff/pxDraggable))+'px');
                        }
                    });
				
				
                    /** if mousewheel allowed **/
                    if(opts.allowMouseWheel)
                        $this.mousewheel(function(objEvent, intDelta) {
                            // mousewheel up (first if)  and mousewheel down (second if)
                            if (intDelta > 0 && parseInt(js_mask.css('top')) < 0){
                                js_drag.stop(true, true).animate({
                                    top:'-='+pxUpWhenScrollMove+'px'
                                    }, 100);
                                js_mask.stop(true, true).animate({
                                    top:'+='+pxUpWhenMaskMove+'px'
                                    },100,function(){
                                    RelativeTop = parseInt(js_mask.css('top'));
                                    if(RelativeTop > 0 ) {
                                        js_drag.animate({
                                            top:'0px'
                                        },150);
                                        js_mask.css({
                                            top:0
                                        });
                                    }
                                });
                            }
                            else if (intDelta < 00 && parseInt(js_mask.css('top')) > -diff) {
                                js_drag.stop(true, true).animate({
                                    top:'+='+pxUpWhenScrollMove+'px'
                                    }, 100);
                                js_mask.stop(true, true).animate({
                                    top:'-='+pxUpWhenMaskMove+'px'
                                    },100,function(){
                                    RelativeTop = parseInt(js_mask.css('top'));
                                    if(RelativeTop < -diff)
                                    {
                                        js_mask.css({
                                            top:-diff
                                            });
                                        js_drag.animate({
                                            top:pxDraggable
                                        },150);
                                    }
                                });
                            }
                        });
                }
            });

    }
})(jQuery);
