// JavaScript Document
/*  
 *   jQuery.select.js  
 *   Date : 09/03/19  
 *   author : zhangjingwei  
 *   http://www.zhangjingwei.com  
 *   Thanks for 小飞  
 *   Virsion : 1.3.4  
 *   模拟生成select表单。宽度自动。键盘可控。(暂不支持首字符快捷键)  
*/  
  
jQuery.fn.sSelect = function(){   
    var selectId = $(this).attr('id');   
    var selectZindex = $(this).css('z-index');   
    var selectIndex = $('#'+selectId+' > select > option').index($('#'+selectId+' > select > option:selected')[0]);   
    $('#'+selectId).append('<div class="dropselectbox"><h4></h4><span class="FixSelectBrowserSpan"></span><ul style="display:none" mce_style="display:none"><li></li></ul></div>');   
    $('#'+selectId+' > div > h4').empty().append($('#'+selectId+' > select > option:selected').text());   
    $('.dropselectbox').show();   
    var selectWidth = $('#'+selectId+'> select').width(); //取原select的宽度   
    //alert($('#'+selectId+'> select').html());   
    //alert(selectId);   
        
  
    $('.dropselectbox').css("margin-right",selectWidth);   
    $('#'+selectId).css("margin-right",selectWidth);    //修改偏移量   
    $('#'+selectId+' > div > h4').css("width", selectWidth); //将原select的宽度赋值给生成的select（并不是h4的总宽度）   
    var selectUlwidth = selectWidth + parseInt($('#'+selectId+'> div > h4').css("padding-left").replace("px","")) + parseInt($('#'+selectId+'> div > h4').css("padding-right").replace("px","")); //根据用户设置的h4的padding值，计算h4的总宽度   
    $('#'+selectId+' > div > ul').css({width:selectUlwidth}); //将h4的总宽度赋值给Ul   
       
    /*var selectHeight = $('#'+selectId+'> div > h4').height() + parseInt($('#'+selectId+'> div > h4').css("border-top-width").replace("px","")) + parseInt($('#'+selectId+'> div > h4').css("border-bottom-width").replace("px","")); //取用户定义h4的总高度  
    var selectUlHeight = $('#'+selectId+'> div > ul > li').css("height").replace("px","") * 10+"px"; //换算出最高的Ul高度  
    if ($('#'+selectId+' > select > option').length > 10){  
        $('#'+selectId+'> div > ul').css({height:selectUlHeight,overflow:"auto"});  
    }*/  
    $('#'+selectId+' > select').hide();   
    $('#'+selectId+' > div').hover(function(){   
        $('#'+selectId+' > div > h4').addClass("over");   
        $('#'+selectId+' > div > span').addClass("over");   
    },function(){   
        $('#'+selectId+' > div > h4').removeClass("over");   
        $('#'+selectId+' > div > span').removeClass("over");   
    });   
    $('#'+selectId)   
    .bind("focus",function(){   
        __clearSelectMenu();   
        $('#'+selectId+' > div > h4').addClass("over");   
        $('#'+selectId+' > div > span').addClass("over");   
    })   
    .bind("click",function(e){   
        //$('#value2').append('点击：'+selectIndex+'  <br>');   
        if($('#'+selectId+' > div > ul').css("display") == 'block'){   
            __clearSelectMenu();   
            return false;   
        }else{   
            if ($.browser.opera){__clearSelectMenu();}   
            $('#'+selectId+' > div > h4').addClass("current");   
            $('#'+selectId+' > div > span').addClass("over").addClass("current");   
            $('#'+selectId+' > div > ul').show();   
            var selectZindex = $(this).css('z-index');   
/*          if (selectZindex == 0 || selectZindex == 'auto'){  
                selectZindex = 1;  
                $(this).css({'position':'relative','z-index':selectZindex});  
            }else{*/  
                //selectZindex ++;   
            //IE z-index bug?   
            if ($.browser.msie || $.browser.opera){$('.dropdown').css({'position':'relative','z-index':'0'});}   
            $('#'+selectId).css({'position':'relative','z-index':'999'});   
/*          }*/  
            __setSelectValue(selectId);   
            var windowspace = ($(window).scrollTop() + document.documentElement.clientHeight) - $(this).offset().top;   
            var ulspace = $('#'+selectId+' > div > ul').outerHeight(true);   
            var windowspace2 = $(this).offset().top - $(window).scrollTop() - ulspace;   
            if (windowspace < ulspace && windowspace2 > 0) {   
                $('#'+selectId+' > div > ul').css({top:-ulspace});   
            }else{   
                $('#'+selectId+' > div > ul').css({top:$('#'+selectId+' > div > h4').outerHeight(true)});   
            }   
            selectIndex = $('#'+selectId+' > div > ul > li').index($('.selectedli')[0]);   
            $(window).scroll(function(){   
                var windowspace = ($(window).scrollTop() + document.documentElement.clientHeight) - $('#'+selectId).offset().top;   
                var ulspace = $('#'+selectId+' > div > ul').outerHeight(true);   
                if (windowspace < ulspace) {   
                    $('#'+selectId+' > div > ul').css({top:-ulspace});   
                }else{   
                    $('#'+selectId+' > div > ul').css({top:$('#'+selectId+' > div > h4').outerHeight(true)});   
                }   
            });   
            //响应鼠标点击选择   
            $('#'+selectId+' > div > ul > li').click(function(e){                                           
                    selectIndex = $('#'+selectId+' > div > ul > li').index(this);   
                    //$('#value2').append('鼠标点击：'+selectIndex+'  <br>');   
                    $('#'+selectId+'> select')[0].selectedIndex = selectIndex;   
                    $('#'+selectId+' > div > h4').empty().append($('#'+selectId+' > select > option:selected').text());   
                    __clearSelectMenu(selectId,selectZindex);   
                    e.stopPropagation();   
                    e.cancelbubble = true;   
            })   
            .hover(   
                   function(){   
                        $('#'+selectId+' > div > ul > li').removeClass("over");   
                        $(this).addClass("over").addClass("selectedli");   
                        selectIndex = $('#'+selectId+' > div > ul > li').index(this);   
                    },   
                    function(){   
                        $(this).removeClass("over");   
                    }   
            );   
            //End   
        };   
        e.stopPropagation();   
    })   
    .bind("mousewheel",function(){   
        //以后也许支持滚轮     
        /*$('#'+selectId+' > div > ul > li').hover(  
            function(){  
               return false;  
            },  
            function(){  
                return false;  
            }  
        );*/  
    })   
    .bind("dblclick", function(){   
        __clearSelectMenu();   
        return false;   
    })   
    .bind("keydown",function(e){   
        //var hotkeys = e.keyCode;   
        $(this).bind('keydown',function(e){   
            if (e.keyCode == 40 || e.keyCode == 38 || e.keyCode == 35 || e.keyCode == 36){   
                return false;   
            }   
        });   
        switch(e.keyCode){ //设置为true可给定case范围   
            case 9:   
                return true;   
                break;   
            case 13:   
                //enter   
                //$('#value2').append('按回车收到的值：'+selectIndex+'  <br>');   
                __clearSelectMenu();   
                break;   
            case 27:   
                //esc   
                __clearSelectMenu();   
                break;   
            case 33:   
                $('#'+selectId+' > div > ul > li').removeClass("over");   
                selectIndex = 0;   
                __keyDown(selectId,selectIndex);   
                break;   
            case 34:   
                $('#'+selectId+' > div > ul > li').removeClass("over");   
                selectIndex = ($('#'+selectId+' > select > option').length - 1);   
                __keyDown(selectId,selectIndex);   
                break;   
            case 35:   
                $('#'+selectId+' > div > ul > li').removeClass("over");   
                selectIndex = ($('#'+selectId+' > select > option').length - 1);   
                __keyDown(selectId,selectIndex);   
                break;   
            case 36:   
                $('#'+selectId+' > div > ul > li').removeClass("over");   
                selectIndex = 0;   
                __keyDown(selectId,selectIndex);   
                break;   
            case 38:   
                //up   
                //$('#value2').append('原始值：'+selectIndex+'  <br>');   
                $('#'+selectId+' > div > ul > li').removeClass("over");   
                if (selectIndex == 0){   
                    selectIndex = 0;   
                }else{   
                    selectIndex--;   
                };   
                //$('#value2').append('<span style="color:red;" mce_style="color:red;">向上改变的aa值：</span>'+selectIndex+'  ');   
                __keyDown(selectId,selectIndex);   
                break;   
            case 40:   
                //down   
                //$('#value2').append('传递过来的：'+selectIndex+'  ');   
                $('#'+selectId+' > div > ul > li').removeClass("over");   
                if (selectIndex == ($('#'+selectId+' > select > option').length - 1)){   
                    selectIndex = $('#'+selectId+' > select > option').length - 1;   
                }else{   
                    selectIndex ++;   
                };   
                //$('#value2').append('<span style="color:blue;" mce_style="color:blue;">向下改变的aa值：</span>'+selectIndex+'  ');   
                __keyDown(selectId,selectIndex);   
                break;   
            /*case ((hotkeys > 47 && hotkeys < 59) || (hotkeys > 64 && hotkeys < 91) || (hotkeys > 96 && hotkeys < 123)):  
                //首字幕查询预留接口  
                //character = String.fromCharCode(hotkeys).toLowerCase();  
                return false;  
                break;*/  
            default:   
                return false;   
                break;   
        };   
    })   
    .bind("blur",function(){   
        __clearSelectMenu(selectId,selectZindex);   
        return false;   
    });   
    //禁止选择   
    $('.dropselectbox').bind("selectstart",function(){   
            return false;   
    });   
};   
  
function __clearSelectMenu(selectId,selectZindex){   
    //$('#value2').append('移除焦点：'+selectIndex+'  <br>');   
    $('.dropselectbox > ul').empty().hide();   
    $('.dropselectbox > h4').removeClass("over").removeClass("current");   
    $('.dropselectbox > span').removeClass("over");   
    $('#'+selectId).css({'z-index':selectZindex});   
}   
  
function __setSelectValue(sID){   
    $('#'+sID+' > div > ul').empty();   
    $.each($('#'+sID+' > select > option'), function(i){   
        $('#'+sID+' > div > ul').append("<li class='FixSelectBrowser'>"+$(this).text()+"</li>");   
    });   
    $('#'+sID+' > div > h4').empty().append($('#'+sID+' > select option:selected').text());   
    $('#'+sID+' > div > ul > li').eq($('#'+sID+'> select')[0].selectedIndex).addClass("over").addClass("selectedli");   
}   
  
function __keyDown(sID,selectIndex){   
    $('#'+sID+'> select')[0].selectedIndex = selectIndex;   
    $('#'+sID+' > div > ul > li:eq('+selectIndex+')').toggleClass("over");   
    $('#'+sID+' > div > h4').empty().append($('#'+sID+' > select option:selected').text());   
}   
  
/* 自动调用 */  
$(document).ready(function(){   
    var s = new Array();   
    var t = document.getElementsByTagName('select');   
    var j = 0;   
    for(var i=0;i<t.length;i++){   
        if(t[i].className=='commonselect'){   
            s[j] = t[i];   
            j++;   
        }   
    }   
    if(j==0)return;   
  
    var k = m = null;   
    for(var i=0;i<s.length;i++){   
        k = s[i].parentNode;   
        m = createDiv(k, i);   
        //s[i].replaceNode(m);   
        s[i].className = '';   
        k.replaceChild(m,s[i])   
        m.appendChild(s[i]);   
        //alert($('#selectbox'+ i).width());   
        $('#selectbox'+ i).sSelect();   
    }      
  
    function createDiv(p, i){   
        var div = document.createElement('div');   
        div.className = 'dropdown';   
        div.id = 'selectbox' + i;   
        div.innerHTML = ' ';   
        p.appendChild(div);   
        return div;    
    }   
})  
