//自定义滚轮事件
function onWheel(obj1,eFn){//自定义的滚轮事件------参数1：对象，参数2：事件函数
	
    var obj;
	if((typeof obj1) == 'string'){
		obj = document.getElementById(obj1);
	}else{
		obj = obj1;
    }
    if(obj.addEventListener){//判断是不是主流浏览器
        var oDiv = document.createElement('div');
        if(oDiv.onmousewheel === null){//其他主流浏览器
            obj.addEventListener('mousewheel',fn,{passive: false});
        }else{//火狐浏览器
            obj.addEventListener('DOMMouseScroll',fn,{passive: false});
        }
    }else{//ie8及以下
        obj.attachEvent('onmousewheel',fn);
    }
    function fn(e,d){
        e = e || window.event;
        d = e.wheelDelta/120 || -e.detail/3;
        e.cancelBubble = true;
        eFn.call(obj,e,d);
        if(e.preventDefault) //清除默认滚轮事件
            e.preventDefault();
        else
            return false;
    }
}

function listScroll(obj,num){
    //    var box = document.getElementById('box');
    var e = window.event;
    if(!document.getElementById(obj)){
        return;
    }
    $('#'+obj+' ul').css({'top':0});
    var len = $('#'+obj+' li').length;
    var step = parseFloat($('#'+obj+' li').css('height')) + parseFloat($('#'+obj+' li').eq(1).css('margin-top'));
    
    
    var scrollTime = 0;

    if(len <= num){
        $('#'+obj+' .scroll').hide();
        return;
    }
    
    onWheel(obj,boxScroll);
    function boxScroll(e,d){
        var nTop = parseFloat($('#'+obj+' ul').css('top'));

        var boxHeight = parseFloat($('#'+obj).css('height'));
        var ulHeight = parseFloat($('#'+obj+' ul').css('height'));
        var maxTop = boxHeight - ulHeight;

        

        var barHeight = parseFloat($('#'+obj+' .scroll').css('height'));
        var scrollHeight = parseFloat($('#'+obj+' .scroll div').css('height'));
        var scrollStep = (barHeight - scrollHeight)/(len-num);


        if(new Date() - scrollTime >= 200){
            if(d<0){
                if(nTop > maxTop){
                    $('#'+obj+' ul').animate({top:'-='+step+'px'},200)
                    $('#'+obj+' .scroll div').animate({top:'+='+scrollStep+'px'},200)
                }
            }else{
                if(nTop < 0){
                    $('#'+obj+' ul').animate({top:'+='+step+'px'},200)
                    $('#'+obj+' .scroll div').animate({top:'-='+scrollStep+'px'},200)
                }
            }
            scrollTime = new Date();
        }
    }
    $('#'+obj+' .scroll div').on('mousedown',function(e){
        var oTop = parseFloat($('#'+obj+' ul').css('top'));

        var boxHeight = parseFloat($('#'+obj).css('height'));
        var ulHeight = parseFloat($('#'+obj+' ul').css('height'));
        var maxTop = boxHeight - ulHeight;

        var barHeight = parseFloat($('#'+obj+' .scroll').css('height'));
        var scrollHeight = parseFloat($('#'+obj+' .scroll div').css('height'));
        var oscrollTop = parseFloat($('#'+obj+' .scroll div').css('top'))

        var scrollStep = (barHeight - scrollHeight)/(len-num);
        var maxScrollTop = barHeight - scrollHeight;

        var oY = e.clientY;


        function fn(e){
            var nY = e.clientY;
            var dY = nY - oY;
            var dT = 0;

            if(dY<0){
                dT = (oTop - 0) * dY / (0 - oscrollTop);
            }else{
                dT = (oTop - maxTop) * dY / (maxScrollTop - oscrollTop)
            }

            var nscrollTop = oscrollTop + dY;
            var nTop = oTop - dT;
            
            nscrollTop = Math.max(0,nscrollTop);
            nscrollTop = Math.min(maxScrollTop,nscrollTop);
            nTop = Math.max(maxTop,nTop);
            nTop = Math.min(0,nTop)

            $('#'+obj+' .scroll div').css({top:nscrollTop+'px'})
            $('#'+obj+' ul').css({top:nTop+'px'})

            return false;
        }
        $(document).on('mousemove',fn)

        $(document).on('mouseup',function(){
            $(document).off('mousemove',fn);
            $(document).on('mouseup',null);
            return true;
        })
    })
}