/* jquery easing 1.3 */

// t: current time, b: begInnIng value, c: change In value, d: duration
jQuery.easing['jswing'] = jQuery.easing['swing'];

jQuery.extend( jQuery.easing,
{
    def: 'easeOutQuad',
    swing: function (x, t, b, c, d) {
        //alert(jQuery.easing.default);
        return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
    },
    easeInQuad: function (x, t, b, c, d) {
        return c*(t/=d)*t + b;
    },
    easeOutQuad: function (x, t, b, c, d) {
        return -c *(t/=d)*(t-2) + b;
    },
    easeInOutQuad: function (x, t, b, c, d) {
        if ((t/=d/2) < 1) return c/2*t*t + b;
        return -c/2 * ((--t)*(t-2) - 1) + b;
    },
    easeInCubic: function (x, t, b, c, d) {
        return c*(t/=d)*t*t + b;
    },
    easeOutCubic: function (x, t, b, c, d) {
        return c*((t=t/d-1)*t*t + 1) + b;
    },
    easeInOutCubic: function (x, t, b, c, d) {
        if ((t/=d/2) < 1) return c/2*t*t*t + b;
        return c/2*((t-=2)*t*t + 2) + b;
    },
    easeInQuart: function (x, t, b, c, d) {
        return c*(t/=d)*t*t*t + b;
    },
    easeOutQuart: function (x, t, b, c, d) {
        return -c * ((t=t/d-1)*t*t*t - 1) + b;
    },
    easeInOutQuart: function (x, t, b, c, d) {
        if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
        return -c/2 * ((t-=2)*t*t*t - 2) + b;
    },
    easeInQuint: function (x, t, b, c, d) {
        return c*(t/=d)*t*t*t*t + b;
    },
    easeOutQuint: function (x, t, b, c, d) {
        return c*((t=t/d-1)*t*t*t*t + 1) + b;
    },
    easeInOutQuint: function (x, t, b, c, d) {
        if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
        return c/2*((t-=2)*t*t*t*t + 2) + b;
    },
    easeInSine: function (x, t, b, c, d) {
        return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
    },
    easeOutSine: function (x, t, b, c, d) {
        return c * Math.sin(t/d * (Math.PI/2)) + b;
    },
    easeInOutSine: function (x, t, b, c, d) {
        return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
    },
    easeInExpo: function (x, t, b, c, d) {
        return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
    },
    easeOutExpo: function (x, t, b, c, d) {
        return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
    },
    easeInOutExpo: function (x, t, b, c, d) {
        if (t==0) return b;
        if (t==d) return b+c;
        if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
        return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
    },
    easeInCirc: function (x, t, b, c, d) {
        return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
    },
    easeOutCirc: function (x, t, b, c, d) {
        return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
    },
    easeInOutCirc: function (x, t, b, c, d) {
        if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
        return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
    },
    easeInElastic: function (x, t, b, c, d) {
        var s=1.70158;var p=0;var a=c;
        if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
        if (a < Math.abs(c)) { a=c; var s=p/4; }
        else var s = p/(2*Math.PI) * Math.asin (c/a);
        return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
    },
    easeOutElastic: function (x, t, b, c, d) {
        var s=1.70158;var p=0;var a=c;
        if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
        if (a < Math.abs(c)) { a=c; var s=p/4; }
        else var s = p/(2*Math.PI) * Math.asin (c/a);
        return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
    },
    easeInOutElastic: function (x, t, b, c, d) {
        var s=1.70158;var p=0;var a=c;
        if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
        if (a < Math.abs(c)) { a=c; var s=p/4; }
        else var s = p/(2*Math.PI) * Math.asin (c/a);
        if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
        return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
    },
    easeInBack: function (x, t, b, c, d, s) {
        if (s == undefined) s = 1.70158;
        return c*(t/=d)*t*((s+1)*t - s) + b;
    },
    easeOutBack: function (x, t, b, c, d, s) {
        if (s == undefined) s = 1.70158;
        return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
    },
    easeInOutBack: function (x, t, b, c, d, s) {
        if (s == undefined) s = 1.70158; 
        if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
        return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
    },
    easeInBounce: function (x, t, b, c, d) {
        return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
    },
    easeOutBounce: function (x, t, b, c, d) {
        if ((t/=d) < (1/2.75)) {
            return c*(7.5625*t*t) + b;
        } else if (t < (2/2.75)) {
            return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
        } else if (t < (2.5/2.75)) {
            return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
        } else {
            return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
        }
    },
    easeInOutBounce: function (x, t, b, c, d) {
        if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
        return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
    }
});


/* Copyright (c) 2009 Brandon Aaron (http://brandonaaron.net)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
 * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
 *
 * Version: 3.0.2
 * 
 * Requires: 1.2.2+
 */
(function(c){var a=["DOMMouseScroll","mousewheel"];c.event.special.mousewheel={setup:function(){if(this.addEventListener){for(var d=a.length;d;){this.addEventListener(a[--d],b,false)}}else{this.onmousewheel=b}},teardown:function(){if(this.removeEventListener){for(var d=a.length;d;){this.removeEventListener(a[--d],b,false)}}else{this.onmousewheel=null}}};c.fn.extend({mousewheel:function(d){return d?this.bind("mousewheel",d):this.trigger("mousewheel")},unmousewheel:function(d){return this.unbind("mousewheel",d)}});function b(f){var d=[].slice.call(arguments,1),g=0,e=true;f=c.event.fix(f||window.event);f.type="mousewheel";if(f.wheelDelta){g=f.wheelDelta/120}if(f.detail){g=-f.detail/3}d.unshift(f,g);return c.event.handle.apply(this,d)}})(jQuery);

/* scrollbar */

/* malihu custom scrollbar plugin - http://manos.malihu.gr */
(function ($) {
$.fn.mCustomScrollbar = function (scrollType,animSpeed,easeType,bottomSpace,draggerDimType,mouseWheelSupport,scrollBtnsSupport,scrollBtnsSpeed){
    var id = $(this).attr("id");
    var $customScrollBox=$("#"+id+" .customScrollBox");
    var $customScrollBox_container=$("#"+id+" .customScrollBox .scb_container");
    var $customScrollBox_content=$("#"+id+" .customScrollBox .scb_content");
    var $dragger_container=$("#"+id+" .dragger_container");
    var $dragger=$("#"+id+" .dragger");
    var $scrollUpBtn=$("#"+id+" .scrollUpBtn");
    var $scrollDownBtn=$("#"+id+" .scrollDownBtn");
    var $customScrollBox_horWrapper=$("#"+id+" .customScrollBox .horWrapper");
    
    //get & store minimum dragger height & width (defined in css)
    if(!$customScrollBox.data("minDraggerHeight")){
        $customScrollBox.data("minDraggerHeight",$dragger.height());
    }
    if(!$customScrollBox.data("minDraggerWidth")){
        $customScrollBox.data("minDraggerWidth",$dragger.width());
    }
    
    //get & store original content height & width
    if(!$customScrollBox.data("contentHeight")){
        $customScrollBox.data("contentHeight",$customScrollBox_container.height());
    }
    if(!$customScrollBox.data("contentWidth")){
        $customScrollBox.data("contentWidth",$customScrollBox_container.width());
    }
    
    CustomScroller();
    
    function CustomScroller(reloadType){
        //horizontal scrolling ------------------------------
        if(scrollType=="horizontal"){
            var visibleWidth=$customScrollBox.width();
            //set content width automatically
            $customScrollBox_horWrapper.css("width",999999); //set a rediculously high width value ;)
            $customScrollBox.data("totalContent",$customScrollBox_container.width()); //get inline div width
            $customScrollBox_horWrapper.css("width",$customScrollBox.data("totalContent")); //set back the proper content width value
            
            if($customScrollBox_container.width()>visibleWidth){ //enable scrollbar if content is long
                $dragger.css("display","block");
                if(reloadType!="resize" && $customScrollBox_container.width()!=$customScrollBox.data("contentWidth")){
                    $dragger.css("left",0);
                    $customScrollBox_container.css("left",0);
                    $customScrollBox.data("contentWidth",$customScrollBox_container.width());
                }
                $dragger_container.css("display","block");
                $scrollDownBtn.css("display","inline-block");
                $scrollUpBtn.css("display","inline-block");
                var totalContent=$customScrollBox_content.width();
                var minDraggerWidth=$customScrollBox.data("minDraggerWidth");
                var draggerContainerWidth=$dragger_container.width();
        
                function AdjustDraggerWidth(){
                    if(draggerDimType=="auto"){
                        var adjDraggerWidth=Math.round(totalContent-((totalContent-visibleWidth)*1.3)); //adjust dragger width analogous to content
                        if(adjDraggerWidth<=minDraggerWidth){ //minimum dragger width
                            $dragger.css("width",minDraggerWidth+"px");
                        } else if(adjDraggerWidth>=draggerContainerWidth){
                            $dragger.css("width",draggerContainerWidth-10+"px");
                        } else {
                            $dragger.css("width",adjDraggerWidth+"px");
                        }
                    }
                }
                AdjustDraggerWidth();
        
                var targX=0;
                var draggerWidth=$dragger.width();
                $dragger.draggable({ 
                    axis: "x", 
                    containment: "parent", 
                    drag: function(event, ui) {
                        ScrollX();
                    }, 
                    stop: function(event, ui) {
                        DraggerRelease();
                    }
                });
            
                $dragger_container.click(function(e) {
                    var $this=$(this);
                    var mouseCoord=(e.pageX - $this.offset().left);
                    if(mouseCoord<$dragger.position().left || mouseCoord>($dragger.position().left+$dragger.width())){
                        var targetPos=mouseCoord+$dragger.width();
                        if(targetPos<$dragger_container.width()){
                            $dragger.css("left",mouseCoord);
                            ScrollX();
                        } else {
                            $dragger.css("left",$dragger_container.width()-$dragger.width());
                            ScrollX();
                        }
                    }
                });

                //mousewheel
                $(function($) {
                    if(mouseWheelSupport=="yes"){
                        $customScrollBox.unbind("mousewheel");
                        $customScrollBox.bind("mousewheel", function(event, delta) {
                            var vel = Math.abs(delta*10);
                            $dragger.css("left", $dragger.position().left-(delta*vel));
                            ScrollX();
                            if($dragger.position().left<0){
                                $dragger.css("left", 0);
                                $customScrollBox_container.stop();
                                ScrollX();
                            }
                            if($dragger.position().left>$dragger_container.width()-$dragger.width()){
                                $dragger.css("left", $dragger_container.width()-$dragger.width());
                                $customScrollBox_container.stop();
                                ScrollX();
                            }
                            return false;
                        });
                    }
                });
                
                //scroll buttons
                if(scrollBtnsSupport=="yes"){
                    $scrollDownBtn.mouseup(function(){
                        BtnsScrollXStop();
                    }).mousedown(function(){
                        BtnsScrollX("down");
                    }).mouseout(function(){
                        BtnsScrollXStop();
                    });
                
                    $scrollUpBtn.mouseup(function(){
                        BtnsScrollXStop();
                    }).mousedown(function(){
                        BtnsScrollX("up");
                    }).mouseout(function(){
                        BtnsScrollXStop();
                    });
                
                    $scrollDownBtn.click(function(e) {
                        e.preventDefault();
                    });
                    $scrollUpBtn.click(function(e) {
                        e.preventDefault();
                    });
                
                    btnsScrollTimerX=0;
                
                    function BtnsScrollX(dir){
                        if(dir=="down"){
                            var btnsScrollTo=$dragger_container.width()-$dragger.width();
                            var scrollSpeed=Math.abs($dragger.position().left-btnsScrollTo)*(100/scrollBtnsSpeed);
                            $dragger.stop().animate({left: btnsScrollTo}, scrollSpeed,"linear");
                        } else {
                            var btnsScrollTo=0;
                            var scrollSpeed=Math.abs($dragger.position().left-btnsScrollTo)*(100/scrollBtnsSpeed);
                            $dragger.stop().animate({left: -btnsScrollTo}, scrollSpeed,"linear");
                        }
                        clearInterval(btnsScrollTimerX);
                        btnsScrollTimerX = setInterval( ScrollX, 20);
                    }
                
                    function BtnsScrollXStop(){
                        clearInterval(btnsScrollTimerX);
                        $dragger.stop();
                    }
                }

                //scroll
                var scrollAmount=(totalContent-visibleWidth)/(draggerContainerWidth-draggerWidth);
                function ScrollX(){
                    var draggerX=$dragger.position().left;
                    var targX=-draggerX*scrollAmount;
                    var thePos=$customScrollBox_container.position().left-targX;
                    $customScrollBox_container.stop().animate({left: "-="+thePos}, animSpeed, easeType);
                }
            } else { //disable scrollbar if content is short
                $dragger.css("left",0).css("display","none"); //reset content scroll
                $customScrollBox_container.css("left",0);
                $dragger_container.css("display","none");
                $scrollDownBtn.css("display","none");
                $scrollUpBtn.css("display","none");
            }
        //vertical scrolling ------------------------------
        } else {
            var visibleHeight=$customScrollBox.height();
            if($customScrollBox_container.height()>visibleHeight){ //enable scrollbar if content is long
                $dragger.css("display","block");
                if(reloadType!="resize" && $customScrollBox_container.height()!=$customScrollBox.data("contentHeight")){
                    $dragger.css("top",0);
                    $customScrollBox_container.css("top",0);
                    $customScrollBox.data("contentHeight",$customScrollBox_container.height());
                }
                $dragger_container.css("display","block");
                $scrollDownBtn.css("display","inline-block");
                $scrollUpBtn.css("display","inline-block");
                var totalContent=$customScrollBox_content.height();
                var minDraggerHeight=$customScrollBox.data("minDraggerHeight");
                var draggerContainerHeight=$dragger_container.height();
        
                function AdjustDraggerHeight(){
                    if(draggerDimType=="auto"){
                        var adjDraggerHeight=Math.round(totalContent-((totalContent-visibleHeight)*1.3)); //adjust dragger height analogous to content
                        if(adjDraggerHeight<=minDraggerHeight){ //minimum dragger height
                            $dragger.css("height",minDraggerHeight+"px").css("line-height",minDraggerHeight+"px");
                        } else if(adjDraggerHeight>=draggerContainerHeight){
                            $dragger.css("height",draggerContainerHeight-10+"px").css("line-height",draggerContainerHeight-10+"px");
                        } else {
                            $dragger.css("height",adjDraggerHeight+"px").css("line-height",adjDraggerHeight+"px");
                        }
                    }
                }
                AdjustDraggerHeight();
        
                var targY=0;
                var draggerHeight=$dragger.height();
                $dragger.draggable({ 
                    axis: "y", 
                    containment: "parent", 
                    drag: function(event, ui) {
                        Scroll();
                    }, 
                    stop: function(event, ui) {
                        DraggerRelease();
                    }
                });
                
                $dragger_container.click(function(e) {
                    var $this=$(this);
                    var mouseCoord=(e.pageY - $this.offset().top);
                    if(mouseCoord<$dragger.position().top || mouseCoord>($dragger.position().top+$dragger.height())){
                        var targetPos=mouseCoord+$dragger.height();
                        if(targetPos<$dragger_container.height()){
                            $dragger.css("top",mouseCoord);
                            Scroll();
                        } else {
                            $dragger.css("top",$dragger_container.height()-$dragger.height());
                            Scroll();
                        }
                    }
                });

                //mousewheel
                $(function($) {
                    if(mouseWheelSupport=="yes"){
                        $customScrollBox.unbind("mousewheel");
                        $customScrollBox.bind("mousewheel", function(event, delta) {
                            var vel = Math.abs(delta*10);
                            $dragger.css("top", $dragger.position().top-(delta*vel));
                            Scroll();
                            if($dragger.position().top<0){
                                $dragger.css("top", 0);
                                $customScrollBox_container.stop();
                                Scroll();
                            }
                            if($dragger.position().top>$dragger_container.height()-$dragger.height()){
                                $dragger.css("top", $dragger_container.height()-$dragger.height());
                                $customScrollBox_container.stop();
                                Scroll();
                            }
                            return false;
                        });
                    }
                });

                //scroll buttons
                if(scrollBtnsSupport=="yes"){
                    $scrollDownBtn.mouseup(function(){
                        BtnsScrollStop();
                    }).mousedown(function(){
                        BtnsScroll("down");
                    }).mouseout(function(){
                        BtnsScrollStop();
                    });
                
                    $scrollUpBtn.mouseup(function(){
                        BtnsScrollStop();
                    }).mousedown(function(){
                        BtnsScroll("up");
                    }).mouseout(function(){
                        BtnsScrollStop();
                    });
                
                    $scrollDownBtn.click(function(e) {
                        e.preventDefault();
                    });
                    $scrollUpBtn.click(function(e) {
                        e.preventDefault();
                    });
                
                    btnsScrollTimer=0;
                
                    function BtnsScroll(dir){
                        if(dir=="down"){
                            var btnsScrollTo=$dragger_container.height()-$dragger.height();
                            var scrollSpeed=Math.abs($dragger.position().top-btnsScrollTo)*(100/scrollBtnsSpeed);
                            $dragger.stop().animate({top: btnsScrollTo}, scrollSpeed,"linear");
                        } else {
                            var btnsScrollTo=0;
                            var scrollSpeed=Math.abs($dragger.position().top-btnsScrollTo)*(100/scrollBtnsSpeed);
                            $dragger.stop().animate({top: -btnsScrollTo}, scrollSpeed,"linear");
                        }
                        clearInterval(btnsScrollTimer);
                        btnsScrollTimer = setInterval( Scroll, 20);
                    }
                
                    function BtnsScrollStop(){
                        clearInterval(btnsScrollTimer);
                        $dragger.stop();
                    }
                }
                
                //scroll
                if(bottomSpace<1){
                    bottomSpace=1; //minimum bottomSpace value is 1
                }
                var scrollAmount=(totalContent-(visibleHeight/bottomSpace))/(draggerContainerHeight-draggerHeight);
                function Scroll(){
                    var draggerY=$dragger.position().top;
                    var targY=-draggerY*scrollAmount;
                    var thePos=$customScrollBox_container.position().top-targY;
                    $customScrollBox_container.stop().animate({top: "-="+thePos}, animSpeed, easeType);
                }
            } else { //disable scrollbar if content is short
                $dragger.css("top",0).css("display","none"); //reset content scroll
                $customScrollBox_container.css("top",0);
                $dragger_container.css("display","none");
                $scrollDownBtn.css("display","none");
                $scrollUpBtn.css("display","none");
            }
        }
        
        $dragger.mouseup(function(){
            DraggerRelease();
        }).mousedown(function(){
            DraggerPress();
        });

        function DraggerPress(){
            $dragger.addClass("dragger_pressed");
        }

        function DraggerRelease(){
            $dragger.removeClass("dragger_pressed");
        }
    }
    
    $(window).resize(function() {
        if(scrollType=="horizontal"){
            if($dragger.position().left>$dragger_container.width()-$dragger.width()){
                $dragger.css("left", $dragger_container.width()-$dragger.width());
            }
        } else {
            if($dragger.position().top>$dragger_container.height()-$dragger.height()){
                $dragger.css("top", $dragger_container.height()-$dragger.height());
            }
        }
        CustomScroller("resize");
    });
};  
})(jQuery);

