$( function() {
	$.windows={};
	$.windows.index=[];
    //e=event,el=element,o=object,a=array,d=document|default,p=parent,c=children|coordinate,r=relative,s=string

	//add $.browser method and property
	$.browser.height=function() {return document.documentElement.clientHeight||document.body.clientHeight||window.innerHeight};
	$.browser.width=function() {return document.documentElement.clientWidth||document.body.clientWidth||window.innerWidth};
	$.browser.lang=window.navigator.userLanguage||window.navigator.language;
	$.browser.ie6=$.browser.version.substring(0,1)=="6"&&$.browser.msie;
	$.browser.ie7=$.browser.version.substring(0,1)=="7"&&$.browser.msie;
	$.browser.ltie8=parseInt($.browser.version.substring(0,1))<8&&$.browser.msie;
    //ext jquery method
    $.extend($,{
        ui:{
            'event':{},
            'autocomplet':{}
        },
		isEmptyOrNull:function(_s){
			if(arguments.length<0) throw new Error('$.isEmptyOrNull(_s), need parameter _s');
			if(_s==null) return true;
			else if($.datatype(_s)=='number') return false;
			else if($.datatype(_s)=='string'){
				if(_s=='') return true;
				else return false
			}			
			else throw new Error('$.isEmptyOrNull(_s), data type of _s is not a String/Number');
		},
		deleteArray:function(array,index){
			if($.datatype(array)!='array')
				throw new Error('$.deleteArray(_array,index), data type of _array is not a Array');
			else
				return index<0?array:array.slice(0,index).concat(array.slice(index+1,array.length))
		},
        datatype: function(x) {
            // If x is null, return "null"
            if (x == null)
                return "null";

            // Next try the typeof operator
            var t = typeof x;
            // If the result is not vague, return it
            if (t != "object")
                return t.toLowerCase();

            // Otherwise, x is an object. Use the default toString() method to
            // get the class value of the object.
            var c = Object.prototype.toString.apply(x);  // Returns "[object class]"
            c = c.substring(8, c.length-1);              // Strip off "[object" and "]"

            // If the class is not a vague one, return it.
            if (c != "Object")
                return c.toLowerCase();

            // If we get here, c is "Object".  Check to see if
            // the value x is really just a generic object.
            if (x.constructor == Object)
                return c.toLowerCase();  // Okay the type really is "Object"

            // For user-defined classes, look for a string-valued property named
            // classname, that is inherited from the object's prototype
            if ("classname" in x.constructor.prototype &&  // inherits classname
            typeof x.constructor.prototype.classname == "string") // its a string
                return x.constructor.prototype.classname;

            // If we really can't figure it out say so.
            return "<unknown type>";

        },
        ctrl:{
            'button': function(o) {
                var p={'iconClass':'','cssClass':'','txt':'','target':null},_ctrl='';
                for(var n in o) {
                    p[n]=o[n]
                }
                _ctrl+='<div id="'+p.id+'" class="ui-ctrl ui-btn'+(p.cssClass!=''?' '+p.cssClass:'')+'"><div class="ui-icon'+(p.iconClass!=''?' '+p.iconClass:'')+'"></div><div class="ui-txt">'+p.txt+'</div></div>';
                if(p.target) {
                    p.target.append(_ctrl)
                } else {
                    return _ctrl
                }
            },
            'input': function(o) {
                var p={'id':'','cssClass':'','defaultTxt':'','pwd':false,'target':null,'tips':'',val:''},_ctrl='';
                for(var n in o) {
                    p[n]=o[n]
                }
                _ctrl+='<div id="'+p.id+'" class="ui-ctrl ui-selectarea ui-input'+(p.cssClass!=''?' '+p.cssClass:'')+(p.defaultTxt!=''?' ui-input-defaultTxt':'')+'"><input type="'+(p.pwd?'password':'text')+'" value="'+(p.pwd?p.val:p.defaultTxt)+'" class="ui-stdinput"/><div class="ui-tips ui-input-tips"><div class="ui-icon icon-left-transparent"></div><div class="ui-tips-content">'+p.tips+'</div></div><a style="display:none" class="defaultTxt">'+p.defaultTxt+'</a></div>';
                if(p.target) {
                    p.target.append(_ctrl)
                } else {
                    return _ctrl
                }
            },
            'label': function(o) {
                var p={'iconClass':'','cssClass':'','txt':'','target':null,'title':''},_ctrl='';
                for(var n in o) {
                    p[n]=o[n]
                }
                _ctrl+='<div id="'+p.id+'" title="'+p.title+'" class="ui-ctrl ui-label'+(p.cssClass!=''?' '+p.cssClass:'')+'"><div class="ui-icon'+(p.iconClass!=''?' '+p.iconClass:'')+'"></div><div class="ui-txt">'+p.txt+'</div></div>';
                if(p.target) {
                    p.target.append(_ctrl)
                } else {
                    return _ctrl
                }
            },
            'list': function(o) {
                var p={'list':[],'maxShow':10,'cssClass':'','target':null,'itemTitle':[]},_ctrl='',f;
                for(var n in o) {
                    p[n]=o[n]
                }
                if(p.itemTitle.length==0) {
                    p.itemTitle=p.list
                }
                f=p.list.length==p.itemTitle.length;
                _ctrl+='<ul class="ui-list'+(p.cssClass!=''?' '+p.cssClass:'')+'" maxShow="'+p.maxShow+'">';
                for(var i=0;i<p.list.length;i++) {
                    _ctrl+='<li class="ui-list-item" title="'+(f?p.itemTitle[i]:'')+'">'+p.list[i]+'</li>';
                }
                _ctrl+='</ul>';
                if(p.target) {
                    p.target.append(_ctrl)
                } else {
                    return _ctrl
                }
            },
            'select': function(o) {
                var p={'id':'','cssClass':'','list':[],'maxShow':10,'target':null,'submitBtn':''},_ctrl='';
                for(var n in o) {
                    p[n]=o[n]
                }
                _ctrl+='<div id="'+p.id+'" class="ui-ctrl ui-sel'+(p.cssClass!=''?' '+p.cssClass:'')+'" submitBtn="'+p.submitBtn+'"><div class="ui-val-wrap ui-list-trigger"><div class="ui-txt">'+p.list[0]+'</div><div class="ui-trigger"><div class="ui-icon icon-down"></div></div></div><div class="ui-list-wrap">'+$.ctrl.list({'list':p.list,'maxShow':p.maxShow})+'</div></div>';
                if(p.target) {
                    p.target.append(_ctrl)
                } else {
                    return _ctrl
                }
            },
            'combo': function(o) {
                var p={'id':'','cssClass':'','list':[],'maxShow':8,'target':null,'tips':''},_ctrl='';
                for(var n in o) {
                    p[n]=o[n]
                }
                _ctrl+='<div id="'+p.id+'" class="ui-ctrl ui-combo'+(p.cssClass!=''?' '+p.cssClass:'')+'" submitBtn="'+p.submitBtn+'"><div class="ui-val-wrap"><input type="text" value="'+p.list[0]+'" class="ui-stdinput"/><div class="ui-trigger ui-list-trigger"><div class="ui-icon icon-down"></div></div></div><div class="ui-tips ui-input-tips"><div class="ui-icon icon-left-transparent"></div><div class="ui-tips-content">'+p.tips+'</div></div><div class="ui-list-wrap">'+$.ctrl.list({'list':p.list,'maxShow':p.maxShow})+'</div></div>';
                if(p.target) {
                    p.target.append(_ctrl)
                } else {
                    return _ctrl
                }
            },
            'tree': function(o) {
                var p={'iconClass':'','cssClass':'','txt':'','callback':null,'target':null};
                for(var n in o) {
                    p[n]=o[n]
                }
            },
            'menu': function(o,level) {
				//[{'name':'','id':'','cssClass':'','cssClass':'','title':'','url':'#','items':[]}]
                var p={'cssClass':'vertical-menu','id':'','target':null,'items':'','iconClass':''};			
				var lvl=level||1;	
				for(var n in o){p[n]=o[n]}
				var _ctrl='<ol class="menu-list menu-list-lvl'+lvl+(p.cssClass!=''?' '+p.cssClass:'')+'" id="'+p.id+'">';				
				for(var i=0;i<p.items.length;i++){
					_ctrl+='<li class="menu-item menu-item-lvl'+lvl+'" id="'+p.items[i].id+'"><a href="'+(p.items[i].url=='#'?'javascript:void(0)':p.items[i].url)+'" class="menu-item-txt'+(p.cssClass!=''?' '+p.items[i].cssClass:'')+'" title="'+p.items[i].title+'"><div class="ui-icon'+(p.items[i].iconClass!=''?' '+p.items[i].iconClass:'')+'"></div>'+p.items[i].name+'</a>';
					if(p.items[i].items.length>0){_ctrl+=$.ctrl.menu(p.items[i],lvl+1)}
					_ctrl+='</li>';
				}
				_ctrl+='</ol>';				
				if(p.target) {
                    p.target.append(_ctrl)
                } else {
                    return _ctrl
                }
            }
        },
        datetime: function() {
            var s=arguments[0],now=$.datatype(s)=='date'?s:new Date(),dt={y:now.getFullYear(),m:now.getMonth()+1,d:now.getDate(),hh:$.datatype(s)=='date'?s.getHours():0,mm:$.datatype(s)=='date'?s.getMinutes():0,ss:$.datatype(s)=='date'?s.getSeconds():0,wd:now.getDay(),str:''},regExp={
                datetime:/^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\s(((0?[0-9])|([1-2][0-3]))\:([0-5]?[0-9])((\s)|(\:([0-5]?[0-9])))))?$/,
                time:/((0?[0-9])|([1-2][0-3]))\:([0-5]?[0-9])((\s)|(\:([0-5]?[0-9])))/,
                date:/(\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|(1[0-9])|(2[0-8])))))/
            };
            if($.browser.lang=='zh-CN') {
                if(dt.wd==0) {
                    dt.wd=7
                }
            }
            function dtstr(s) {
                return s<10?('0'+s):s
            }

            function wd(y,m,d) {
                return new Date(y,m-1,d).getDay()
            }

            if(arguments.length>0) {
                switch(s) {
                    case 'today':
                        break;
                    case 'thiswk':
                        dt.d=dt.d-dt.wd+1;
                        dt.wd=wd(dt.y,dt.m,dt.d);
                        break;
                    case 'thismon':
                        dt.d=1;
                        dt.wd=wd(dt.y,dt.m,dt.d);
                        break;
                    default:
                        if(regExp.datetime.test(s)) {
                            dt.y=parseInt(s.substring(0,3));
                            dt.m==parseInt(s.substring(5,6));
                            dt.y==parseInt(s.substring(8,9));
                            if(regExp.time.test(s)) {
                                s=s.match(regExp.time);
                                dt.hh==parseInt(s.substring(0,1));
                                dt.mm==parseInt(s.substring(3,4));
                                dt.ss==parseInt(s.substring(6,7))
                            }
                        }
                        break;
                }
            } else {
                dt.hh=now.getHours();
                dt.mm=now.getMinutes();
                dt.ss=now.getSeconds()
            }
            dt.str=dt.y+'/'+dtstr(dt.m)+'/'+dtstr(dt.d)+' '+dtstr(dt.hh)+':'+dtstr(dt.mm)+':'+dtstr(dt.ss);
            return dt;
        },
        keyMap:{
            BACKSPACE: 8,
            CAPS_LOCK: 20,
            COMMA: 188,
            CONTROL: 17,
            DELETE: 46,
            DOWN: 40,
            END: 35,
            ENTER: 13,
            ESCAPE: 27,
            HOME: 36,
            INSERT: 45,
            LEFT: 37,
            NUMPAD_ADD: 107,
            NUMPAD_DECIMAL: 110,
            NUMPAD_DIVIDE: 111,
            NUMPAD_ENTER: 108,
            NUMPAD_MULTIPLY: 106,
            NUMPAD_SUBTRACT: 109,
            PAGE_DOWN: 34,
            PAGE_UP: 33,
            PERIOD: 190,
            RIGHT: 39,
            SHIFT: 16,
            SPACE: 32,
            TAB: 9,
            UP: 38,
            range_number: function(k) {
                return (k>95&&k<106)||(k>47&&k<58)
            },
            range_letter: function(k) {
                return k>64&&k<91
            },
            range_all: function(k) {
                return k==$.keyMap.BACKSPACE||k==$.keyMap.SPACE||k==$.keyMap.DELETE||$.keyMap.range_number(k)||$.keyMap.range_letter(k)||(k>187&&k<193)||(k>218&&k<223)
            }
        },
        rand:{
            Int: function(s,e) {
                return Number(s+Math.round(Math.random()*(e-s)))
            },
            Float: function(s,e) {
				if(e&&s)
					return Number(s+Math.random()*(e-s));
				else	
					return Math.random()*999999999
            },
            Num: function(l) {
				if(l>1)
					return $.rand.Int(1,9)+$.rand.Str('0123456789',l-1);
				else
					return $.rand.Int(0,9)
            },
            IntStr: function(max) {
                var l=(max+'').length,num=$.rand.Int(1,max);
                for(var i=0;i<l-num.length;i++) {
                    num+='0'+num
                }
                return num
            },
            Str: function(space,l) {
                var i=0,s='';
                while(i<l) {
                    s+=space.charAt(Math.floor(space.length*Math.random()));
                    i++
                };
                return s
            },
            Word: function(min,max) {
                var chars='ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz',n=$.rand.Int(min||3-1,max||12-1);
                return $.rand.Str(chars.split(',')[0],1)+$.rand.Str(chars.split(',')[1],n);
            },
            Paragraph: function(min,max,wmin,wmax) {
                var p=$.rand.Word(wmin,wmax);
                for(var i=0;i<$.rand.Int(min||5,max||40);i++) {
                    p+=' '+$.rand.Str('abcdefghijklmnopqrstuvwxyz',$.rand.Int(wmin||5,wmax||16))
                }
                return p;
            },
            field:{
                datetime: function(s,e) {
                    var y,m,d,hh=$.rand.Int(0,23),mm=$.rand.Int(0,59),ss=$.rand.Int(0,59);
                    y=$.rand.Int(s||new Date().getFullYear()-1,e||new Date().getFullYear());
                    m=$.rand.Int(1,12);
                    if(m==2) {
                        if((y%4==0&&y%100!=0)||y%400==0) {
                            d=$.rand.Int(1,29);
                        } else {
                            d=$.rand.Int(1,28)
                        }
                    } else if(m==1||m==3||m==5||m==7||m==8||m==10||m==12) {
                        d=$.rand.Int(1,31);
                    } else {
                        d=$.rand.Int(1,30);
                    }
                    m=m<10?'0'+m:m;
                    d=d<10?'0'+d:d;
                    hh=hh<10?'0'+hh:hh;
                    mm=mm<10?'0'+mm:mm;
                    ss=ss<10?'0'+ss:ss;
                    return y+'/'+m+'/'+d+' '+hh+':'+mm+':'+ss
                },
                user: function() {
                    return $.rand.Word()
                },
                company: function() {
                    return $.rand.Paragraph(3,6,3,6)
                },
                mail: function() {
                    return $.rand.Word()+'@'+$.rand.Str('abcdefghijklmnopqrstuvwxyz',$.rand.Int(2,5))+'.com'
                },
                tel: function() {
                    return $.rand.Num(3)+'-'+$.rand.Num(8)
                },
                mobile: function() {
                    return ['13'+$.rand.Int(0,9),'15'+$.rand.Str('036789',1),'188','189'][$.rand.Int(0,3)]+$.rand.Num(8)
                },
                qq: function() {
                    return $.rand.Num($.rand.Int(5,11))
                },
                address: function() {
                    return $.rand.Paragraph(3,6,3,8)
                },
                ip: function() {
                    return $.rand.Int(0,255)+'.'+$.rand.Int(0,255)+'.'+$.rand.Int(0,255)+'.'+$.rand.Int(0,255)
                }
            },
            strArray: function(a_l,w_l) {
                var arr=[];
                a_l=a_l||$.rand.Int(1,10);
                for(var i=0;i<a_l;i++) {
                    arr.push($.rand.Word())
                }
                return arr
            },
            floatArray: function(a_l,max) {
                var arr=[];
                a_l=a_l||$.rand.Int(1,10);
                for(var i=0;i<a_l;i++) {
                    arr.push(Math.random()*(max||100))
                }
                return arr
            }
        },
		finNum:function(num,l){
			if($.datatype(num)!='number'){throw Error('finNum(): data type of the function parameter is not a number')}
			var n=num.toFixed(l||2),_intpart=n.split('.')[0],tmp=[],p=_intpart.length%3;
			if(p!=0){
				tmp.push(_intpart.substring(0,p));
				_intpart=_intpart.substring(p,_intpart.length);
			}
			for(var i=0;i<_intpart.length;i++){
				if((i+1)%3==0){
					tmp.push(_intpart.substring(i-2,i+1))
				}
			}			
			return tmp.join(',')+'.'+n.split('.')[1];			
		},
        panel: function(o) {
            var p={
                win:true,//dom embed,win
                target:$('body'),
                container:'window',
                id:'',
                cssClass:'',
                fnBtn:{'close':true,'max':false,'min':false},
                tl:'',
                toolbar:'',
                content:'',
                iframeSrc:'',
                btnbar:'',
                statbar:'',
                model:false,
				winFront:false,
                width:0,
                height:0,
                escKey:true,
                zIndex:60000,
				moveable:true,
				position:'center',
                rewrite:false//true: $.html(); flase: $.append()
            },el;
            for(var n in o) {
                p[n]=o[n]
            };
			//only model window
            if(p.model&&$('#overlay').length>0) {
                return
            }
            if(p.win) {
                if(p.id=='') {
                    p.id='win_'+$('.ui-win').length
                }
            } else {
                p.fnBtn.close=false
            }
			if((p.zIndex<60001||p.zIndex>68999)&&p.win){
				if(p.model) p.zIndex=70000;
				else p.zIndex=60001+$('.ui-win').length;
			}
			if(p.winFront){
				p.zIndex=69000+$('.ui-win-front').length;
			}
            $('div.ui-focus').removeClass('div.ui-focus');
            el=$((p.model&&p.win?'<div id="overlay"></div>':'')+'<div id="'+p.id+'" class="'+(p.cssClass!=''?(p.cssClass+' '):'')+(p.winFront?'ui-win-front ':'')+'ui-panel '+(p.win?'ui-win':'')+'"><div class="ui-panel-tl"><div class="ui-panel-tl-txt">'+p.tl+'</div>'+(p.win?('<div class="ui-panel-tl-btns">'+(p.fnBtn.min?'<div class="fns-btn btn-min ui-icon icon-min"></div>':'')+(p.fnBtn.max?'<div class="fns-btn btn-max ui-icon icon-max"></div>':'<div class="fns-btn btn-close ui-icon icon-close')+''+(p.fnBtn.close?'':' hidden')+'"></div></div>'):'')+'</div><div class="ui-panel-toolbar">'+p.toolbar+'</div><div class="ui-panel-content">'+p.content+'</div><div class="ui-panel-btnbar">'+p.btnbar+'</div><div class="ui-panel-statbar">'+p.statbar+'</div></div>');
            p.rewrite?p.target.html(el):p.target.append(el);
            $('div.ui-focus').removeClass('ui-focus');
            el.focus();
            var win_t=el.find('div.ui-panel-tl'),win_c=el.find('div.ui-panel-content'),win_w=$('#'+p.id),win_btns=win_w.find('div.ui-panel-btnbar');
            if(p.win) {
                if(p.iframeSrc!='') {
                    p.content='<iframe scrolling="no" class="content-iframe" allowtransparency="yes" frameborder="0" src="'+mb.iframeSrc+'"></iframe>';
                    var _ifr=$('iframe.content-iframe',$('#'+p.id));
                    _ifr.height(_ifr.parent().height());
                } else {
                    if(p.width!=0) {
                        if(p.width==-1) {
                            p.width=$.browser.width()
                        }
                        win_w.width(p.width);
                    }
                    if(p.height!=0) {
                        if(p.height==-1) {
                            p.height=$.browser.height()
                        }
                        win_w.height(p.height);
                        win_c.tailor()
                    }
                    $('#overlay').css({
                        'top':0+'px',
                        'left':0+'px',
                        'position':'absolute',
                        'width':$.browser.width()+'px',
                        'height':$.browser.height()+'px',
                        'z-index':69999
                    });
                    win_w.css({
                        'position':'absolute',
                        'z-index':p.zIndex
                    });
					if(p.position=='center'){
						win_w.css({
							'top':($.browser.height()-win_w.outerHeight())/2+'px',
							'left':($.browser.width()-win_w.outerWidth())/2+'px'
						});
					}
					else if($.datatype(p.position)=='array'){
						win_w.css({
							'top':p.position[0]+'px',
							'left':p.position[1]+'px'
						});
					}
                    var btns_w=0;
					if(win_btns.children('div.ui-btn').length>0){
						btns_w=(win_btns.children('div.ui-btn').length-1)*parseFloat(win_btns.children('div.ui-btn:first').css('margin-right'));
					}
                    win_btns.children('div.ui-btn').each( function(e) {
                        btns_w+=$(this).outerWidth()
                    });
                    win_btns.css({'padding-left':(win_btns.width()-btns_w)/2+'px'});
					if(p.moveable){win_w.dragable({'target':win_w,'handle':win_t,'container':p.container})} 
                    win_w.find('div.btn-close').bind('click',{o:el}, function(e) {
                        e.data.o.remove().empty()
                    });
                    if(!p.winFront) {
						$.windows.index.push(p.id);
                    }
                    $(window).bind('resize', function() {
                        $('#overlay').css({'width':$.browser.width()+'px','height':$.browser.height()+'px'})
                    });
                }
            } else {
                if(p.width!=0) {
                    win_w.width(p.width);
                }
                if(p.height!=0) {
                    if(p.height==-1) {
                        p.height=el.parent().height()
                    }
                    win_w.height(p.height);
                    win_c.tailor()
                }
            }
			$.windows[p.id]=$('#'+p.id);
            return $('#'+p.id);
        }
    });
    $.fn.extend({
        txtSelectable: function(bool) {
            if(bool==true) {$.browser.msie?this.unbind("dragstart selectstart"):this.css("-moz-user-select","")
            } else {$.browser.msie?this.bind("dragstart selectstart", function(e) {
                    e.preventDefault()
                }):this.css("-moz-user-select","none")
            }
        },
        tailor: function() {
            var el=$(this),p=el.parent(),h=0;
            el.siblings().each( function(e) {
                h+=$(this).outerHeight(true)
            });
            //if($.browser.ie6){h-=el.height()}
            el.height(p.height()-h)
        },
        // --- right mouse btn menu start ---
        // Cory S.N. LaViska Visit http://abeautifulsite.net/notebook/68 for more information
        rightClick: function(handler) {
            $(this).each( function() {
                $(this).mousedown( function(e) {
                    var evt=e;
                    $(this).mouseup( function() {
                        $(this).unbind('mouseup');
                        if(evt.button==2) {
                            handler.call($(this),evt);
                            return false;
                        } else {
                            return true;
                        }
                    });
                });
                $(this)[0].oncontextmenu= function() {
                    return false;
                }
            });
            return $(this);
        },
        rightMouseDown: function(handler) {
            $(this).each( function() {
                $(this).mousedown( function(e) {
                    if(e.button==2) {
                        handler.call( $(this), e );
                        return false;
                    } else {
                        return true;
                    }
                });
                $(this)[0].oncontextmenu= function() {
                    return false;
                }
            });
            return $(this);
        },
        rightMouseUp: function(handler) {
            $(this).each( function() {
                $(this).mouseup( function(e) {
                    if(e.button==2) {
                        handler.call($(this),e);
                        return false;
                    } else {
                        return true;
                    }
                });
                $(this)[0].oncontextmenu= function() {
                    return false;
                }
            });
            return $(this);
        },
        noContext: function() {
            $(this).each( function() {
                $(this)[0].oncontextmenu= function() {
                    return false;
                }
            });
            return $(this);
        },
        // --- right mouse btn menu end ---
        zoom: function() {
            var el=this,d={'zoom':1,'time':0,'opacity':1},o=arguments[0];
            if(typeof(o)=='object') {
                for(var p in o) {
                    d[p]=o[p]
                };
            }
            el.animate({
                width:el.width()*d.zoom+'px',
                height:el.height()*d.zoom+'px',
                fontSize:parseFloat(el.css('font-size'))*d.zoom+'px',
                lineHeight:parseFloat(el.css('line-height'))*d.zoom+'px',
                borderTopWidth:parseFloat(el.css('border-top-width'))*d.zoom+'px',
                borderRightWidth:parseFloat(el.css('border-right-width'))*d.zoom+'px',
                borderBottomWidth:parseFloat(el.css('border-bottom-width'))*d.zoom+'px',
                borderLeftWidth:parseFloat(el.css('border-left-width'))*d.zoom+'px',
                paddingTop:parseFloat(el.css('padding-top'))*d.zoom+'px',
                paddingRight:parseFloat(el.css('padding-right'))*d.zoom+'px',
                paddingBottom:parseFloat(el.css('padding-bottom'))*d.zoom+'px',
                paddingLeft:parseFloat(el.css('padding-left'))*d.zoom+'px',
                opacity:d.opacity
            },d.time);
        },
        shadow: function() {
            var el=this,d={'opacity':0.5,'zoom':1,'time':0,'offset':el.offset()},s=el.clone().addClass('ui-shadow'),o=arguments[0];
            if(typeof(o)=='object') {
                for(var p in o) {
                    d[p]=o[p]
                };
            }
            $('body').append(s);
            s.zoom(d);
            return s;
        },
        dragable: function() {
            var el=this;
            if(!el.data('drag')) {
                el.data('drag',{'handle':el,'target':el,'shadow':false,'container':el.parent(),'time':0,'dragStartCall': function() {
                    },'dragingCall': function() {
                    },'dragedCall': function() {
                    }})
            }
            var d=el.data('drag'),o=arguments[0];
            if(typeof(o)=='object') {
                for(var p in o) {
                    d[p]=o[p]
                };
                d.target.addClass("ui-dragable");
                if(d.container!==null) {
                    if(d.container=='window') {
                        d.range={top:0,right:$.browser.width()-d.target.outerWidth(),bottom:$.browser.height()-d.target.outerHeight(),left:0};
                    } else {
                        d.range=[d.container.offset().top+parseFloat(d.container.css('border-top-width')),d.container.offset().left+parseFloat(d.container.css('border-left-width')),d.container.innerHeight(),d.container.innerWidth()];
                        d.range={top:d.range[0],right:d.range[1]+d.range[3]-d.target.outerWidth(),bottom:d.range[0]+d.range[2]-d.target.outerHeight(),left:d.range[1]}
                    }
                }

                d.handle.bind("mousedown",d, function(e) {
                    $("body").txtSelectable();
                    e.data.dragStartCall(e.data);
                    if(e.data.shadow) {
                        d.real=d.target;
                        d.target=e.data.target.shadow().css({'left':d.real.offset().left+'px','top':d.real.offset().top+'px'});
                    }
                    e.data.offset=e.data.target.offset();
                    e.data.poz=e.data.target.position();
                    e.data.mouse={x:e.clientX,y:e.clientY};
                    $(document).bind("mousemove",e.data, function(e) {
                        var move={x:e.clientX-e.data.mouse.x,y:e.clientY-e.data.mouse.y},poz=e.data.poz,offset={x:e.data.offset.left+move.x,y:e.data.offset.top+move.y},r=e.data.range;
                        e.data.target.addClass("ui-draging");
                        if(e.data.container!==null) {
                            if(!(offset.x<r.left)&&!(offset.x>r.right)) {
                                e.data.target.css({"left":poz.left+move.x+"px"});
                            }
                            if(!(offset.y<r.top)&&!(offset.y>r.bottom)) {
                                e.data.target.css({"top":poz.top+move.y+"px"});
                            }
                        } else {
                            e.data.target.css({"left":poz.left+move.x+"px","top":poz.top+move.y+"px"});
                        }
                        e.data.dragingCall(e.data);
                    });
                    $(document).bind("mouseup",e.data, function(e) {
                        $("body").txtSelectable(true);
                        e.data.dragedCall(e.data);
                        if(e.data.shadow) {
                            var p=d.real.offsetParent(),offset=p.offset();
                            offset.left=offset.left+parseFloat(p.css('border-left-width'));
                            offset.top=offset.top+parseFloat(p.css('border-top-width'));
                            d.real.animate({'left':d.target.offset().left-offset.left+'px','top':d.target.offset().top-offset.top+'px'},d.time);
                            d.target.remove().empty();
                            d.target=d.real;
                        }
                        e.data.target.removeClass("ui-draging");
                        $(document).unbind("mousemove mouseup");
                    });
                });
            } else if(typeof(o)=='string') {
                switch(o) {
                    case 'disable':
                        d.target.removeClass("ui-dragable");
                        d.handle.unbind("mousedown");
                        break;
                    case 'destroy':
                        d.target.removeClass("ui-dragable");
                        d.handle.unbind("mousedown");
                        el.removedata('drag');
                        break;
                    default:
                        break;
                }
            } else {
                return false
            }
        },
        dropable: function() {
            var el=this;
            if(!el.data('drop')) {
                el.data('drop',{'handle':el,'area':[$('body')],'container':null,'time':0,'preview': function() {
                    },'result': function() {
                    }})
            }
            var d=el.data('drop'),o=arguments[0];
            if(typeof(o)=='object') {
                for(var p in o) {
                    d[p]=o[p]
                };
                d.handle.addClass('ui-dropable');
                for(var i=0;i<d.area.length;i++) {
                    var tr=[d.area[i].offset().top+parseFloat(d.area[i].css('border-top-width')),d.area[i].offset().left+parseFloat(d.area[i].css('border-left-width')),d.area[i].innerHeight(),d.area[i].innerWidth()];
                    d.area[i].data('droparea',{top:tr[0],right:tr[1]+tr[3]-d.handle.outerWidth(),bottom:tr[0]+tr[2]-d.handle.outerHeight(),left:tr[1]});
                }
                d.dragStartCall= function(o) {
                    o.shadow=true;
                    o.target.addClass('ui-dropping');
                };
                d.dragingCall= function(o) {
                    var drogPoz=o.target.offset(),drogarea=o.droparea;
                    o.target.data('prevHTML',o.target.html());
                    for(var i=0;i<o.area.length;i++) {
                        var drogarea=o.area[i].data('droparea');
                        if(!(drogPoz.left<drogarea.left)&&!(drogPoz.left>drogarea.right)&&!(drogPoz.top<drogarea.top)&&!(drogPoz.top>drogarea.bottom)) {
                            o.droped=true;
                            o.areaDroped=o.area[i];
                            for(var j=0;j<o.area.length;j++) {
                                o.area[j].removeClass('ui-drog-inrange');
                            }
                            o.areaDroped.addClass('ui-drog-inrange');
                            o.preview();
                            break;
                        } else {
                            o.droped=false;
                            for(var j=0;j<o.area.length;j++) {
                                o.area[j].removeClass('ui-drog-inrange');
                            }
                            o.target.html(o.target.data('prevHTML'));
                            o.target.removeData('prevHTML');
                            continue;
                        }
                    }
                };
                d.dragedCall= function(o) {
                    o.target.removeClass('ui-dropping');
                    if(o.droped) {
                        o.areaDroped.append(o.real).removeClass('ui-drog-inrange');
                        o.target.remove().empty();
                        o.target=o.real;
                        o.result();
                    } else {
                        var p=o.real.offsetParent(),offset=p.offset(),time=400;
                        offset.left=offset.left+parseFloat(p.css('border-left-width'));
                        offset.top=offset.top+parseFloat(p.css('border-top-width'));
                        o.target.animate({"left":o.real.position().left+offset.left+"px","top":o.real.position().top+offset.top+"px",opacity:0},time);
                        var clearShadow=window.setTimeout( function() {
                            o.target.remove().empty();
                            o.target=o.real;
                            window.clearTimeout(clearShadow);
                        },time);
                    }
                    o.shadow=false;
                };
                d.handle.dragable(d);
            } else if(typeof(o)=='string') {
                switch(o) {
                    case 'disable':
                        d.handle.dragable("disable");
                        break;
                    case 'destroy':
                        d.handle.dragable("disable");
                        el.removedata('drop');
                        break;
                    default:
                        break;
                }
            } else {
                return false
            }
        },
        autocomplet: function (o) {
            //初始化变量
            var self=$(this),s={
                debug:true,//缓存远程数据条数
                keyOpList:true,
                autoFill:false,//激活enter键自动填写
                cacheLength:10,//缓存远程数据条数
                cachedQuery:[],//缓存查询值序列
                data:{},//本地数据源
                url:'',//远程数据源
                delay:10,//键入字符查询间隔
                params:'',//取输入框传递给AJAX的查询参数
                configPost:null,//取本地设置值传递给AJAX的查询参数
                formatMatch:true,
                matchCase:false,//激活大小写敏感
                matchContains:false,//全字符重新匹配或者按照输入顺序进行筛选
                matchSubset:true,//优先查找缓存/本地数据
                maxShow:100,//服务器端获取的数据长
                maxItem:8,//列表显示查询结果长度
                mustMatch:false,//必须从建议中选取结果
                scroll:true,
                scrollHeight:8,//滚动显示最大匹配结果行数对于德高度
                width:self.width()
            };
            for(var n in o) {
                s[n]=o[n]
            }
            if(s.url!=='') {
                s.delay=400
            }
            self.data('config',s).addClass('ui-autocpmlet-input').after('<div class="autocomplet-list-wrap ui-list-wrap'+(s.keyOpList?'':' ui-nokeyborad')+'" style="display:none"></div>');

            //生成自动完成列表
            $.ui.autocomplet.toggleSuggestion= function(type) {
                var list=$.ui.autocomplet.list;
                if(type==0) {
                    list.html('').hide()
                } else {
                    var el=$.ui.autocomplet.input,config=$.ui.autocomplet.input.data('config'),rslt=config.data[$.ui.autocomplet.ref],listHtml='',_suggestion=[],pattern=new RegExp($.ui.autocomplet.ref);
                    if(config.formatMatch) {
                        for(var i=0;i<rslt.length;i++) {
                            _suggestion.push(rslt[i].replace(pattern,'<a class="suggestion">'+$.ui.autocomplet.ref+'</a>'));
                        }
                    }
                    if(rslt) {
                        listHtml=$.ctrl.list({'list':_suggestion,'maxShow':8,'itemTitle':rslt});
                        if(type==-1) {
                            listHtml=$.ctrl.list({'list':['没有相关记录'],'maxShow':8})
                        }
                        if(type!=0) {
                            list.html(listHtml).show().scrollTop(0).width(el.outerWidth(true)).css({'top':el.position().top+el.outerHeight()+2+'px','left':-1+'px','position':'absolute'});
                            list.find('ul.ui-list').show();
                            if(list.find('li.ui-list-item').length>$.ui.autocomplet.input.data('config').maxItem) {
                                list.height(list.find('li.ui-list-item:first').height()*$.ui.autocomplet.input.data('config').maxItem);
                                if($.browser.ltie8) {
                                    list.find('ul.ui-list').width(list.width()-18)
                                }
                            } else {
                                list.height(list.find('ul.ui-list').height())
                            }
                        }
                    }
                }
            };
            //获取输入
            self.bind('focus', function() {
                $.ui.autocomplet.input=$(this);
                $.ui.autocomplet.list=$(this).next('div.autocomplet-list-wrap');
                $.ui.autocomplet.keyBind=function(e) {
                    if($.ui.autocomplet.interval) {
                        window.clearTimeout($.ui.autocomplet.interval)
                    }
                    if($.ui.autocomplet.list.closest('div.ui-ctrl')[0]!=$('div.ui-focus')[0]) {
                        return
                    }
                    //初始化变量
                    var el=$.ui.autocomplet.input,list=$.ui.autocomplet.list,config=$.ui.autocomplet.input.data('config'),
                    ref=el.val(),k=e.keyCode;
                    $.ui.autocomplet.ref=ref;

                    //如果输入框为空则隐藏列表
                    if(ref=='') {
                        list.hide();
                        return
                    }

                    //响应自动完成列表的键盘按键
                    if($.keyMap.range_all(k)&&!e.ctrlKey) {
                        $.ui.autocomplet.interval=window.setTimeout( function() {
                            var config=$.ui.autocomplet.input.data('config'),ref=$.ui.autocomplet.ref;
                            var _p=config.params,_c=config.configPost,_d="{";
                            if($.datatype(_c)=='object') {
                                for(var n in _c) {
                                    _d+=n+':"'+config[_c[n]]+'",';
                                }
                            }
                            _d+=_p+':"'+ref+'"}';

                            //"{"+config.params+":'"+ref+"',"+config.params+":'"+config.maxShow+"'}"

                            if(!config.matchCase) {
                                ref.toLowerCase()
                            }
                            //判断是本地数据还是远程数据，默认读取本地数据
                            if(config.data[ref]) {
                                $.ui.autocomplet.toggleSuggestion(1)
                            } else if(config.url!='') {
                                $.ajax({
                                    type: "POST",
                                    contentType:"application/json;utf-8",
                                    dataType:"json",
                                    url:config.url,
                                    data:_d,
                                    success: function(res) {
                                        if(!$.ui.autocomplet.input.closest('div.ui-ctrl').hasClass('ui-focus')) {
                                            return
                                        }
                                        var config=$.ui.autocomplet.input.data('config'),ref=$.ui.autocomplet.ref;
                                        if(res.d) {
                                            if(config.cachedQuery.length<config.cacheLength) {
                                                config.cachedQuery.push(ref);
                                            } else {
                                                for(var i=0;i<config.cacheLength-1;i++) {
                                                    config.cachedQuery[i]=config.cachedQuery[i+1];
                                                }
                                                delete $.ui.autocomplet.input.data('config').data[config.cachedQuery[config.cacheLength-1]];
                                                config.cachedQuery[config.cacheLength-1]=ref;
                                            }
                                            config.data[ref]=res.d;
                                            $.ui.autocomplet.toggleSuggestion(1)
                                        } else {
                                            if(config.debug) {//没有相关记录
                                                $.ui.autocomplet.toggleSuggestion(-1)
                                            } else {
                                                $.ui.autocomplet.toggleSuggestion(0)
                                            }//显示没有相关记录
                                        }
                                    },
                                    error: function(res) {
                                        if(config.debug) {
                                            alert(res.responseText);
                                        }//查询失败
                                    }
                                });
                            } else {
                                $.ui.autocomplet.toggleSuggestion(0)//显示没有相关记录
                            }
                        },config.delay);
                    }
                };
                $(document).bind('keyup',$.ui.autocomplet.keyBind);
            });
        }
    });

    //---------------- cache bg img ---------------------------------
    if($.browser.ie6) {try {document.execCommand("BackgroundImageCache", false, true);} catch(e) {}}

    //---------------- dom event responser ---------------------------------
    $(document).bind('mousedown mouseup mouseover mouseout click dblclick keydown keyup keypress', function(e) {
        //设定全局自定义控件二级DOM事件响应机制主要是为了避免动态生成DOM对象的时候需要重新绑定新生成对象相关事件，比如生成GRID的时候绑定新生成的大量控件对浏览器开销太大，传统做法是在控件上使用1级DOM事件响应，不过为了更好管理全局控件以及无干扰代码，所以才有此机制
        //备注：
        //1. 所有事件监控只作用于自定义控件(ui-ctrl)
        //2. 全局只有一个自定义控件处于ui-focus状态，和DOM的FOCUS状态类似但有所区别
        //3. 全局只有一个下拉列表处于ui-toggled状态
        //4. 同一个控件只有一个DOM对象处于ui-hover状态，如果ui-hover子节点还有DOM对象需要相应ui-hover事件，则当前ui-hover状态对象转变为ui-actived/或者ui-toggled状态（比如多级菜单）
        //5. ui-actived和ui-toggled都是表示“开关”的状态量，ui-toggled通常伴随着ui-list DOM对象，ui-actived通常伴随着ui-tab DOM对象
        //6. 控制键比如ESC只作用于当前FOCUS控件
        //7. 自定义控件：ui-btn, ui-label, .ui-sel, ui-combo, ui-input, ui-tree, ui-menu, ui-win
        //8. 通用基础自定义控件：ui-list, ui-list-item, ui-icon, ui-txt, ui-input-proto, ui-ctrl, ui-ctrl-wrap

        //初始化基础变量
        var et=e.handleObj.type,/*事件类型*/
        k=e.keyCode,altK=e.altKey,ctrlK=e.ctrlKey,shiftK=e.shiftKey,/*触发按键事件的按键值*/
        el=$(e.target),/*事件触发的DOM对象*/
        ctrl=el.closest('div.ui-ctrl'),
        win=el.closest('div.ui-win');
		//不需要相应键盘事件的自定义控件
        if(ctrl.hasClass('ui-nokeyborad')&&(et=='keydown'||et=='keyup'||et=='keypress')) {return}
		//不需要相应鼠标事件的自定义控件
        if(ctrl.hasClass('ui-nomouse')&&(et=='mousedown'||et=='mouseup'||et=='mouseover'||et=='mouseout'||et=='click'||et=='dblclick')) {return}
		//不需要相应任何事件的自定义控件
        if(ctrl.hasClass('ui-noevent')) {return}
		
		//获取事件响应的【基础自定义控件】类型
        function getEventResponser() {
            if(el.hasClass('ui-stdinput')) {
                return 'input';
            }
            if(el.closest('div.ui-btn').length>0) {
                return 'btn';
            }
            if(el.closest('li.ui-list-item').length>0) {
                return 'li';
            }
            if(el.closest('div.ui-list-trigger').length>0) {
                return 'trigger';
            }
            return 'document';
        }
		//获取事件响应的【标准自定义控件】类型
        function getElementResponser() {
            var er='document';
            if(ctrl.hasClass('ui-btn')) {
                er='btn';
            }
            if(ctrl.hasClass('ui-label')) {
                er='label';
            }
            if(ctrl.hasClass('ui-sel')) {
                er='select';
            }
            if(ctrl.hasClass('ui-combo')) {
                er='combo';
            }
            if(ctrl.hasClass('ui-input')) {
                er='input';
            }
            if(ctrl.hasClass('ui-tree')) {
                er='tree';
            }
            if(ctrl.hasClass('ui-menu')) {
                er='menu';
            }
            return er
        }

        //初始化基本状态量和全局参数
        var _trigger=getEventResponser(),_responser=getElementResponser(),is_win=win.length>0,is_ctrl=ctrl.length>0,_modal=$('#overlay').length>0,_list;
		var is_modal_win=false,is_dead_win=false;
		if(is_win){
			is_modal_win=is_win&&_modal;
			is_dead_win=win.find('.fns-btn.btn-close').css('display')=='none';
		}
		
		

        //1. 判断鼠标按键双击事件
        if(et=='dblclick') {
			if(el.hasClass('ui-icon')&&is_dead_win){
				el.parent('.ui-panel-tl-txt').next().children('.btn-close').click()
			}
		}
		
		//2. 判断鼠标按键弹起事件
        if(et=='mouseup') {
			
		}
		
        //3. 判断鼠标按键按下事件
        if(et=='mousedown') {
            //切换当前窗口
			if(is_win&&!_modal){
				var _winID=win.attr('id');
				$.windows.index=$.grep($.windows.index,function(n,i){
					return n!=_winID;
				});
				$.windows.index.push(_winID);
				$.grep($.windows.index,function(n,i){
					$('#'+$.windows.index[i]).css({'z-index':60001+i})
				});
			}			
			
            //停止自动完成列表功能
            if($.ui.autocomplet.input) {
                if($.ui.autocomplet.input.closest('div.ui-ctrl')[0]!=ctrl[0]) {
                    if($.ui.autocomplet.interval) {
                        window.clearTimeout($.ui.autocomplet.interval)
                    }
                    $(document).unbind('keyup',$.ui.autocomplet.keyBind);
                    $.ui.autocomplet.input.closest('div.ui-ctrl').find('div.ui-list-wrap').hide();
                }
            }
            var fel=$('div.ui-focus');
            if(fel.length>0) {
                if(fel[0]==ctrl[0]) {
                    return
                }
                //清除当前焦点控件的focus状态
                fel.removeClass('ui-focus').css({'z-index':0});
                //恢复输入框默认值
                if(fel.hasClass('ui-input')) {
                    if(fel.find('input').val()=='') {
                        fel.addClass('ui-input-defaultTxt').find('input').val(fel.find('a.defaultTxt').html());
                    }
                }
                //隐藏tips
                if(fel.find('div.ui-tips').length>0) {
                    fel.find('div.ui-tips').hide();
                }
                //隐藏下拉列表
                if(fel[0]!=ctrl[0]) {
                    //如果当前焦点有下拉列表则隐藏该下拉列表
                    fel.find('div.ui-list-wrap').hide().find('li.ui-hover').removeClass('ui-hover');
                }
            } else {
                //
            }
            if(is_ctrl) {
                //给当前自定义控件添加焦点状态
                ctrl.addClass('ui-focus').css({'z-index':'20000'});
            }

            if(_trigger=='input') {
                //处理input默认值
                if(ctrl.find('a.defaultTxt').html()==ctrl.find('input').val()) {
                    ctrl.removeClass('ui-input-defaultTxt').find('input').val('');
                }
                //处理input tips
                if(ctrl.find('div.ui-tips-content').html()!='') {
                    ctrl.find('div.ui-tips').css({'left':ctrl.outerWidth(true)+8+'px'}).show()
                }
				ctrl.find('input').focus();
            }

        }
        //判断鼠标指针移进DOM对象上方
        if(et=='mouseover') {
            //input鼠标划过事件
            if(is_ctrl) {
                el.closest('div.ui-ctrl').addClass('ui-hover');
            }
            //list item鼠标划过事件
            if(_trigger=='li') {
                el.closest('li.ui-list-item').addClass('ui-hover');
            }
        }
        //判断鼠标指针移出DOM对象上方
        if(et=='mouseout') {
            //input鼠标划过事件
            if(is_ctrl) {
                el.closest('div.ui-ctrl').removeClass('ui-hover');
            }
            //list item鼠标划出事件
            if(_trigger=='li') {
                el.closest('li.ui-list-item').removeClass('ui-hover');
            }
        }
        //判断鼠标点击事件
        if(et=='click') {
            //list item鼠标点击事件
            if(_trigger=='li') {
                el.closest('li.ui-list-item').removeClass('ui-hover');
                el.closest('div.ui-ctrl').find('input').val(el.closest('li.ui-list-item').text());
                el.closest('div.ui-ctrl').find('div.ui-val-wrap').find('div.ui-txt').html(el.closest('li.ui-list-item').text());
                el.closest('div.ui-list-wrap').hide();
                el.closest('div.ui-ctrl').find('div.ui-tips').hide();
                var _submitbtn=el.closest('div.ui-ctrl').attr('submitbtn');
                if(_submitbtn!='') {
                    $('#'+_submitbtn).click()
                }
            }
            if(_trigger=='trigger') {
                var _list=el.closest('div.ui-ctrl').find('div.ui-list-wrap');
                if(_list.css('display')=='none') {
                    _list.show().scrollTop(0).css({'width':el.closest('div.ui-ctrl').width()+'px','left':'-1px','top':el.closest('div.ui-ctrl').find('div.ui-val-wrap').outerHeight(true)+2+'px'});
                    if(_list.find('li.ui-list-item').length>_list.find('ul.ui-list').attr('maxshow')) {
                        _list.height(_list.find('li.ui-list-item:first').height()*_list.find('ul.ui-list').attr('maxShow'));
                        if($.browser.ltie8) {
                            _list.find('ul.ui-list').width(_list.width()-18)
                        }
                    } else {
                        _list.height(_list.find('ul.ui-list').height())
                    }
                } else {
                    _list.hide().find('li.ui-hover').removeClass('ui-hover');
                }
            }
        }
        //判断键盘事件
        if(et=='keydown') {
            _list=$('div.ui-focus').find('div.ui-list-wrap');
            if(_list.length>0) {
                var hItem=$('li.ui-hover',_list);
                if(k==$.keyMap.UP) {
                    if(hItem.length>0) {
                        if(hItem.prev().length>0) {
                            hItem.removeClass('ui-hover').prev().addClass('ui-hover');
                            if($('li.ui-list-item',_list).length>_list.find('ul.ui-list').attr('maxShow')&&_list.scrollTop()>0) {
                                _list.scrollTop(_list.scrollTop()-$('li.ui-list-item:first',_list).height())
                            }
                        } else {
                            hItem.removeClass('ui-hover');
                            $('li.ui-list-item:last',_list).addClass('ui-hover');
                            if($('li.ui-list-item',_list).length>_list.find('ul.ui-list').attr('maxShow')) {
                                _list.scrollTop(($('li.ui-list-item',_list).length-_list.find('ul.ui-list').attr('maxShow'))*$('li.ui-list-item:first',_list).height())
                            }
                        }
                    } else {
                        $('li.ui-list-item:last',_list).addClass('ui-hover');
                        if($('li.ui-list-item',_list).length>_list.find('ul.ui-list').attr('maxShow')) {
                            _list.scrollTop(($('li.ui-list-item',_list).length-_list.find('ul.ui-list').attr('maxShow'))*$('li.ui-list-item:first',_list).height())
                        }
                    }
                }
                if(k==$.keyMap.DOWN) {
                    if(hItem.length>0) {
                        if(hItem.next().length>0) {
                            hItem.removeClass('ui-hover').next().addClass('ui-hover');
                            if($('li.ui-list-item',_list).length>_list.find('ul.ui-list').attr('maxShow')&&($('li.ui-hover',_list).prevAll().length+1)>_list.find('ul.ui-list').attr('maxShow')) {
                                _list.scrollTop(_list.scrollTop()+$('li.ui-list-item:first',_list).height())
                            }
                        } else {
                            hItem.removeClass('ui-hover');
                            $('li.ui-list-item:first',_list).addClass('ui-hover');
                            _list.scrollTop(0);
                        }
                    } else {
                        $('li.ui-list-item:first',_list).addClass('ui-hover');
                        _list.scrollTop(0);
                    }
                }
            }
        }
        if(et=='keyup') {
            _list=$('div.ui-focus').find('div.ui-list-wrap');
            if(_list.length>0) {
                if(k==$.keyMap.ENTER) {
                    _list=$('div.ui-focus').find('div.ui-list-wrap'),hItem=$('li.ui-hover',_list),val='';
                    if(hItem.length>0) {
                        val=hItem.text();
                        hItem.removeClass('ui-hover');
                        _list.closest('div.ui-ctrl').find('input').val(val);
                        _list.closest('div.ui-ctrl').find('div.ui-val-wrap').find('div.ui-txt').html(val);
                        _list.hide();
                        var _submitbtn=_list.closest('div.ui-ctrl').attr('submitbtn');
                        if(_submitbtn!='') {
                            $('#'+_submitbtn).click()
                        }
                    }
                }
            }
			if(k==$.keyMap.ESCAPE) {
				if($.windows.index.length<1) return;
				if($('#overlay').length>0&&parseInt($.windows[$.windows.index[$.windows.index.length-1]].css('z-index'))!=70000) return;
				if($('#overlay').length>0&&parseInt($.windows[$.windows.index[$.windows.index.length-1]].css('z-index'))==70000) {$('#overlay').remove().empty()}
				$.windows[$.windows.index[$.windows.index.length-1]].remove().empty();
				delete $.windows[$.windows.index[$.windows.index.length-1]];
				$.windows.index=$.deleteArray($.windows.index,$.windows.index.length-1);
			}
        }

    });
})
