var Slider = {
    bindSlider: function(element) {
        
        //element variables
        element = $(element)[0];
        element.sliderTimeout = null;
        element.sliderMoving = false;
        
        //other variables
        var parent = $(element).parent().parent();
        var parentHeight = $(parent).height() - 5;
        var parentSubHeight = parentHeight / 3;
        var input = $(parent).prev("input");
        
        //bind input events
        $(input).click(function(){
            if(sliderShown != null) {
                 $(sliderShown).stop(true, true).slideUp(function(){
                    sliderShown = null;    
                 });
            } 
            
            $(parent).slideDown(function(){ sliderShown = parent; }); 
            $(element).css({ top: 0 });   
        });
        
        //bind element events
        $(element).children("a").click(function(){
            $(input).val($(this).text());
        });
        
        //bind parent events
        $(parent).mousemove(function(e){
            var y = e.pageY - $(this).offset().top;
            var speed = 0, direction = 0;
            var height = $(element).height();
            
            if(y <= parentSubHeight) {
                speed = (parentSubHeight - y) / (parentHeight / 5);    
                direction = 1;
            } else if(y >= (parentHeight - parentSubHeight) && y <= parentHeight) {
                speed = (y - (parentHeight - parentSubHeight)) / (parentHeight / 5);   
                var direction = 0;
            } 
            
            if(speed) {
                element.sliderMoving = true;
                element.moveSlider(direction, speed, parentHeight);
            } else {
                element.sliderMoving = false;
                if(element.sliderTimeout != null) clearTimeout(element.sliderTimeout);
            }
        }).mouseleave(function(){
            element.sliderMoving = false;
            if(element.sliderTimeout != null) clearTimeout(element.sliderTimeout);
        });
        
        
        element.moveSlider = function(direction, speed, parentHeight) {
            var element = this;
            if(!element.sliderMoving) return false;
            
            var top = $(element).position().top;
            var height = $(element).height() - parentHeight + 10;
            
            if(direction) {
                if(top < 0) {
                    $(element).css({ top: top + speed});
                    sliderTimeout = setTimeout(function(){ element.moveSlider(direction, speed, parentHeight); }, 75);
                }
            } else {
                if(top > -height) {
                    $(element).css({ top: top - speed});
                    sliderTimeout = setTimeout(function(){ element.moveSlider(direction, speed, parentHeight); }, 75);
                }
            }
        }    
    }
}
