﻿//String.prototype.trim=function(){return this.replace(/(^\s+)|\s+$/g,"")}
var PICKER;
function RegisterCallBack(){//for Page Init
    if(typeof(PICKER)=='undefined') 
        PICKER=new Picker();
    if(typeof(OverridePostBack)=="function") 
        __doPostBack=OverridePostBack;
    if (typeof(PageOnLoad) == "function")
        PageOnLoad();
    if (window.location.href.indexOf('callback=')>0)
    {
        var cb='window.parent.'+UTIL.getUrlParam('callback')+'(window)';
        eval(cb);
    }
    UTIL.dev();
}

////重载 __doPostBack
function OverridePostBack(eventTarget,eventArgument)
{
    if(document.forms.length>0)
    {
        var f = document.forms[0];
        f.__EVENTTARGET.value=eventTarget;
        f.__EVENTARGUMENT.value = eventArgument;
        if(GlobalOnSubmit(eventTarget)){//dispatch
            if(eventTarget.indexOf('$')<0 && eventTarget.indexOf('E8')<0)//GridView事件
                $('#'+eventTarget).not('INPUT').not('SELECT').attr('disabled',true).css({'color':'#cccccc'});            
            f.submit();
        }
    }   
}
function GlobalOnSubmit(srcId)//dom el
{
    if(srcId != ''){//btn_***_D*E*
        if (typeof(PageOnSubmit) == "function" && PageOnSubmit(srcId) == false) return false;
    
        var iD = srcId.lastIndexOf('_D');
        if(iD>0)
            var dataTag=parseInt(srcId.substring(iD+2,iD+3));
        if(isNaN(dataTag)) dataTag=undefined;
        
        if(srcId.indexOf('E0')>-1){//Validate
	        return VALIDATOR.validate(dataTag>0?dataTag:0);
        }
        else if(srcId.indexOf('btn_Del')>-1){
            dataTag=(dataTag>-1)?dataTag:'';
            var sId=UTIL.getId(dataTag);
            if(sId && window.confirm(UTIL.getMessage('CLTMSG_BE_DELETE_ROW'))){
                $('#'+srcId).after('<input type="hidden" name="Id" value="'+ sId +'"/>');
                return true;
            }else
                return false;
        }
    }
    
    return true;
}
//-------------------------UTIL control--------------------------------------
var UTIL = {
    msgEnUs : {'CLTMSG_NO_SELECTED_ROW':'Please select a record first!'
        ,'CLTMSG_BE_DELETE_ROW':'Are you sure to delete?'
        ,'CLTMSG_NO_MASTER_DATA':'Please save master data first!'
        ,'CLTMSG_BE_SAVE_FIRST':'Please save current data first!'
        ,'CLTMSG_BE_LOST_CHANGE':'Are you sure to lost changes?'
        ,'CLTMSG_LOADING':'Loading data,please wait...'
        ,'V_REQUIRED':'\'%FIELDNAME%\' can\'t be empty!'
        ,'V_NUMERIC':'\'%FIELDNAME%\' must be numeric!'
        ,'V_DATETIME':'\'%FIELDNAME%\' must be datetime!'
        ,'V_INVALID':'\'%FIELDNAME%\' is invalid!'},
    msgZhCn:{'CLTMSG_NO_SELECTED_ROW':'请先选择一条记录!'
        ,'CLTMSG_BE_DELETE_ROW':'确定要删除该记录?'
        ,'CLTMSG_NO_MASTER_DATA':'请先保存主数据!'
        ,'CLTMSG_BE_SAVE_FIRST':'请先保存该记录!'
        ,'CLTMSG_BE_LOST_CHANGE':'确定要放弃所做的修改吗?'
        ,'CLTMSG_LOADING':'正在加载数据,请稍候...'
        ,'V_REQUIRED':'\'%FIELDNAME%\' 不能为空!'
        ,'V_NUMERIC':'\'%FIELDNAME%\' 必须为数值型!'
        ,'V_DATETIME':'\'%FIELDNAME%\' 必须为日期型!'
        ,'V_INVALID':'\'%FIELDNAME%\' 值无效!'},
    
    linkString:'<a class="clickA"></a>',
    //getMessage for globalization
    getMessage : function(_msgName)
    {
        if(document.forms[0]){
	        var msgArray=document.forms[0].id=='enUS'?this.msgEnUs:this.msgZhCn;
            var msg = msgArray[_msgName];
        }
        if(!msg) msg = "#"+_msgName+"#";
        
        return msg;
    },
    isPopup:function(target){
        if(!target) target=this;
        return (target.frameElement?(target.frameElement.id?true:false):false);
    },
    getPicker:function(e){
        var picker = e?(e.target?e.target:e):this;
        if(!picker.pickerPad){
            if(picker.tagName=="BUTTON" || picker.tagName=="A"){
                var pad=$(picker).parents('.ui-draggable');//div?
                if(pad.length==0){//iframe
                    var ifm;
                    $('iframe',window.parent.document).each(function(idx,fm){
                        if(fm.contentWindow==window) ifm=fm;
                    });
                    if(ifm) pad=$(ifm).parents('.ui-draggable');
                }
                
                if(pad.length==1)
                    picker=pad.get(0).data;
                else
                    picker=PICKER;
            }
            else
                picker=window.parent.PICKER;
        }
        return picker;
    },
    getUrlParam:function(pName,win){
        if(!win) win=window;
        var sUrl=win.location.search.replace('?','&'); 
        var key='&'+pName+'=';
        var i=sUrl.indexOf(key);
        if(i>-1){
            var j = sUrl.indexOf('&',i+1);//&Key=Val&Key2=...
            if(j<0) j=sUrl.length;
            return sUrl.substring(i+key.length,j);
        }
        return null;
    },
    getAppRoot:function(win){
        if(!win) win=window;
        //not default & main
        if(win.top.location.href.indexOf('efault.aspx')<0 && win.top.location.href.indexOf('ain.aspx')<0)
        {
            if(win.top.opener)
                win=win.top.opener;
        }
        sUrl=win.top.location.href;
        sUrl=sUrl.substring(0,sUrl.indexOf('.aspx'));
        return sUrl.substring(0,sUrl.lastIndexOf('/'));
    },
    initTodoUrl:function(sFormType,grdvIdx,grdv){
        if(!sFormType) sFormType=UTIL.getUrlParam('FormType');
        var cache={};
        $.getJSON(UTIL.getAppRoot()+"/ModDev/GetTodoList.ashx?FormType="+(sFormType?sFormType:''),
            function(data){
                $.each(data, function(i,item){
                    cache[item[0]]=item[1];
                });
                
                if(!grdv) grdv='grdv';
                if(!grdvIdx) grdvIdx=0;
                $('#'+grdv+' tr').each(function(i,tr){
                    var td=$('td:eq('+grdvIdx+')',tr);
                    var id=td.text();
                    if(cache[id])
                        td.attr('url',cache[id]);
                });
            }
        ); 
    },
    getId : function(dataTag,nocheck,idx)
    {
        var s;
        if(idx==undefined) idx=0;
        if(!nocheck && dataTag==-1) nocheck=true;//-1等同于 nocheck
        var isGrid=(dataTag==-2);//-2 仅查找Grid?        
        
        if(dataTag<0)dataTag=undefined;
        if(dataTag==undefined) dataTag='';
        var ctl=$('#txt_Id_'+(dataTag==''?'':('D'+dataTag)));
        if(!isGrid && ctl.length==1)
            s = ctl.val();
        else
            s = $('.selected > td','#grdv'+dataTag).eq(idx).text();//从默认grid取Id,必须是首个TD
            
        if(!nocheck){
            if(s==''){
                alert(UTIL.getMessage('CLTMSG_NO_SELECTED_ROW'));
                return false;
            }
        }
        if(s.length==1 && s.charCodeAt(0)==160) s='';
        
        return s;
    },
    setDisabled : function(_array,_condition,_hide)//_hide: null=disabled, true=hide,false=readonly
    {   
        if(_condition && $('#'+_condition).val()!='')//not null?
            return;
        _array=_array.split(',');//string 'btn_A_,btn_B_'
        for(var i=0;i<_array.length;i++){
            var ctl=$('#'+_array[i]);
            if(ctl.length>0){
                if(_hide==null && (ctl.get(0).tagName=='INPUT' || ctl.get(0).tagName=='TEXTAREA'))
                    _hide=false;//set text to readonly by default.
                    
                if(_hide==true)
                    $('#'+_array[i]).hide();
                else if(_hide==false)
                    $('#'+_array[i]).attr('readOnly','readOnly').addClass('disabled');
                else
                    $('#'+_array[i]).attr('disabled','disabled').addClass('disabled').css('color','#cccccc');
            }
        }            
    },
    convertStrToDate : function(_dateStr)
    {
	    var datePat = /^(\d{4})-(\d{1,2})-(\d{1,2})/; // Like '2005-10-9' pattern; matchArray[1]~3 => year,month,day
	    var matchArray = _dateStr.match(datePat); //date is the format ok?
	    if (matchArray == null) 
	    {
		    //alert(_dateStr + " Date is not in a valid format.")
		    return false;
	    }
	    _year = matchArray[1]; // parse date into variables
	    _month = matchArray[2]-1; //month {0..11}
	    _day = matchArray[3];

	    var timePat = /(\d{1,2}):(\d{1,2})/;  // Like '18:20' pattern; matchArray[1]~2 => hour,minute
	    matchArray = _dateStr.match(timePat); //time is the format ok?
	    if (matchArray == null) 
	    {
		    _hour=0;
		    _minute=0;
	    }
	    else{
		    _hour = matchArray[1]; // parse date into variables
		    _minute = matchArray[2];
	    }
	    return new Date(_year,_month,_day,_hour,_minute);
    },

    //通过设置span/td为els样式(对应style.css),显示内容为tooltip
    showEllipsis : function(e){
        var srcElmt = event.srcElement;
        if (!srcElmt.tagName || !srcElmt.innerText || srcElmt.tagName == 'BODY') return;
        if (srcElmt.offsetWidth < srcElmt.scrollWidth){
            if (!srcElmt.__title){
                if (srcElmt.title == srcElmt.innerText) return;
                if (srcElmt.title) srcElmt.__title = srcElmt.title;
            }
            if (srcElmt.__title)
                srcElmt.title = srcElmt.innerText;
            else
                srcElmt.title = srcElmt.innerText;
        }
        else{
            if (srcElmt.__title ){
                srcElmt.title = srcElmt.__title;
                srcElmt.__title = null;
            }
            else if(srcElmt.title == srcElmt.innerText )
                    srcElmt.title = '';
        }
    },

    //resetByPrefix : reset form elements to default value
    resetByPrefix : function(_prefix,dataTag){
        if(!dataTag || dataTag==-1) dataTag='';
        $('*[id]','#bpQry'+dataTag).each(function(){
            ctl=this;
            if(ctl.id.indexOf(_prefix)==0)
            {
			    if(ctl.type == 'text')
				    ctl.value = '';
			    else
				    if(ctl.type == 'select-one')
					    ctl.selectedIndex = 0;
				    else
					    if(ctl.type == 'checkbox')
						    ctl.checked = false;
		    }
        });
    },
    
    refreshParent : function(){
        _opener=window.top.opener;
	    if(!_opener || _opener.closed){
	        if(window.parent.PICKER.pickerPad)//has PICKER?
	            _opener=window.parent;
	        else
	            return;//parent closed?
	    }
    	
    	_opener=_opener.document;
        if(_opener.getElementById('btn_Search_'))
            _opener.getElementById('btn_Search_').onclick();
        else{
            $('#__EVENTTARGET',_opener).val('');$('#__EVENTARGUMENT',_opener).val('');//防止事件重复提交
            _opener.forms[0].submit();
        }
    },
    closePopup : function(){
        UTIL.refreshParent();
        self.close();
    },
    
    addCssStyle : function(cssUrl){
        var sKey = cssUrl.substring(cssUrl.lastIndexOf('/')+1,cssUrl.lastIndexOf('.'))+cssUrl.length;
        if (!document.getElementById(sKey)){
          var oHead = document.getElementsByTagName('HEAD');
          if (oHead[0]){
            var objCSS = oHead[0].appendChild(document.createElement('link'));
            objCSS.id = sKey;            
            objCSS.href = cssUrl;
            objCSS.rel = 'stylesheet';
            objCSS.type = 'text/css';            
          }
        }
    },
    
    wrapToBottom : function(cfg){
        cfg=cfg||{id:'trv'};//default
        
        var obj=$('#'+cfg.id);
        if(obj.length!=1 || obj.css('display')=='none') return;
        
        var SCROLLER_BAR_WIDTH=19;
        
        var offset=obj.offset();
        //高度
        var oHeight=obj.height();
        var height=cfg.height;//已经指定？
        if(!height){//计算
            var wHeight=$(window).height()+document.body.scrollTop;        
            height=wHeight-offset.top-SCROLLER_BAR_WIDTH;//可用高度
        }
        if(cfg.marginBottom) height=height-cfg.marginBottom;
        //宽度
        if(cfg.hbar=='OUTER' && $(window).width()<500){ cfg.hbar='INNER';}//小窗口显示，滚动条左压
        var width=obj.width();
        if(oHeight>height){//出现垂直滚动条
            switch(cfg.hbar){
                case 'OUTER'://div向右加宽
                    width=width+SCROLLER_BAR_WIDTH; 
                    break;
                case 'INNER'://内部元素向左压缩
                    obj.width(width-SCROLLER_BAR_WIDTH);
                    break;
                default://内部出现横向滚动条
                    break;
            }
        }
        
        if(cfg.addPadding){//table底部添加一个row,高度到与底边齐平
            $('table',obj).parent().parent().hide();//隐藏原有分页条TR

	        var gHeight=height-obj.height()-10;
	        if(gHeight>0)
	            obj.append('<tr><td colspan="20" style="height:'+gHeight+'px;"></td></tr>');
        }
        
        if(obj.get(0).tagName=='IFRAME'){
            obj.css('height',height);            
        }else{
            var s='<div style="overflow:auto;';
            if(height>SCROLLER_BAR_WIDTH) s+='height:'+height+'px;';
            if(width>SCROLLER_BAR_WIDTH) s+='width:'+width+'px;';
            s+='"></div>';
            obj.wrap(s);
        }
        return {height:height,width:width};
    },
    dev:function(){
//        $('.toolbar').dblclick(function(event){   
//            var path=window.location.pathname.substring(1);
//            var ModuleUrl = path.substring(path.indexOf('/'));
//            var file=path.substring(path.indexOf('/')+1);            
//            var newUrl=window.location.pathname.replace(file,'advice/BugManagerInfo.aspx?Module=');            
////            var type=file.substring(file,file.indexOf('.'));            
////            if(type.indexOf('Detail')==type.length-6)
////                type=type.substring(0,type.indexOf('Detail'));
////            type = type.length>20?type.substring(type.length-20):type;
//           var  TmpnewUrl=UTIL.getAppRoot()+"/advice/BugManagerInfo.aspx?Module="+ModuleUrl;
//            WIN.open(TmpnewUrl,800,600);
//        });
    }
}
//-------------------------window control--------------------------------------
var WIN = {
    open : function(_url,_width,_height){//center
	    var winFeature='toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes';
		    winFeature += ',width='+_width  +  ',height='+_height;
		    winFeature += ',left='+(window.screen.availWidth-_width)/2  +  ',top='+(window.screen.availHeight-_height)/2;
	    return window.open(_url,'',winFeature,'');
    },
    
    redirect : function(_url,_dataTag,_target){//redirect, _dataTag=-1等同于不对Id做必须
        var _id = UTIL.getId(_dataTag);
        if(_id||(_dataTag==-1)){
            var oldIdx=_url.indexOf('&Id=');
            if(oldIdx>0) _url=_url.substring(_url,oldIdx);
            else{
                oldIdx=_url.indexOf('?Id=');
                if(oldIdx>0) _url=_url.substring(_url,oldIdx);
            }
            
            if(_id){                
                _url = _url + (_url.indexOf('?')>0?'&':'?') + 'Id=' + _id;
            }
            if(!_target) _target=window;
            _target.location.href=_url;
        }
    },

    openById : function(_url,_width,_height,_dataTag){//center with Id&Ts
	    var _id = UTIL.getId(_dataTag);
	    if(_id||(_dataTag==-1)){
	        _url = _url + (_url.indexOf('?')>0?'&':'?') + 'Id=' + _id;
		    return this.open(_url,_width,_height);
	    }
    },
    
    openAsFull : function(_url)//full & center
    {
        var winFeature='toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes';
		    winFeature += ',width='+(window.screen.availWidth-12)  +  ',height='+(window.screen.availHeight-26);
		    winFeature += ',left=0,top=0';
	    return window.open(_url,'winId',winFeature,'');
    },
    openInFrame : function(_url,_frameName){
        if(_frameName==null) _frameName="main";
        window.parent.frames[_frameName].document.location.replace(_url);
    },    
    showCalendar : function(txt,src){
        PICKER.show(UTIL.getAppRoot()+'/CommonPage/Calendar.htm',null,txt,200,186,src);
    },
    openCalendar : function(src,target){
        if(!src) src=event.srcElement;
        if(!target){
		    if(src.previousSibling.tagName=='INPUT')
		        target=src.previousSibling;
		    else if(src.previousSibling.previousSibling.tagName=='INPUT')
		        target=src.previousSibling.previousSibling;
		}    		    
	    if (target) 
	        PICKER.show(src.src.replace('.ico','.htm'),null,target,200,186);
    }
}

//-------------------------Tab control Persistantce--------------------------------------
var TAB = {
    CTL_TAB_IDS:'#txtTabIds',
    select : function(tabIds){
        if(!tabIds) tabIds = $(this.CTL_TAB_IDS).val();
        if(tabIds==undefined) alert('TextBox "txtTabIds" is required!');
        
        ids=tabIds.split(',');        
        for(var i=0;i<ids.length;i++)
            this.selectById(ids[i]);
    },
    selectById : function(id){
        id = id.split('_');
        var tabContainer,tab;
        if(id.length==2){
            tabContainer=id[0];
            tab=id[1];
        }else{
            tabContainer='#tabs';
            tab=id[0];
        }            
        tabIdx=tab.substring(tab.indexOf('tab')+3);
        tabIdx=parseInt(tabIdx);
        
        $(tabContainer+' > ul').tabs().tabs('select', tab).bind('tabsselect',this.onSelect);
    },
    onSelect :function(event, ui){
        var oldIdx = ui.options.selected;
        var oldId= ui.tab.hash.substring(0,ui.tab.hash.length-1)+oldIdx;
        var newId=ui.tab.hash;
        var tabIds = $(TAB.CTL_TAB_IDS).val();

        if(tabIds.indexOf(oldId)>-1)//exist?
            tabIds=tabIds.replace(oldId,newId);
        else{
            if(tabIds.length>0)
                tabIds=tabIds+',';
            tabIds=tabIds+newId;
        }
        //alert(tabIds);
        $(TAB.CTL_TAB_IDS).val(tabIds);//persist to textbox
    }
}
//-------------------------gridview control--------------------------------------
var GRID = {
    grid : null,
    idIdx : 1,
    chkIdx : 0,   
    selectedRow : null,
    oldSelectedClass : null,
    
    setup : function(_idIdx,_chkIdx,_grid){
        if(!_grid) _grid='grdv';//default
        
        this.grid = typeof(_grid)=='string'?document.getElementById(_grid):_grid;
        this.idIdx = (!_idIdx)?1:_idIdx;
        this.chkIdx = (!_chkIdx)?0:_chkIdx;        
    },
    setCheckBoxEnable : function (grdvId){
        if(!grdvId) grdvId='grdv';
        grdvId='#'+grdvId;
        
        var ctlOldIDs = $('#txtOldIDs');
        var _varCheckedIDs='';
        $('input:checkbox',grdvId).each(function(idx,chk){
            var chk=$(chk);
            if(chk.attr('checked'))
                _varCheckedIDs = _varCheckedIDs + ',' + chk.parent().parent().next().text();//td/span/chk
                
            chk.attr('disabled','');
            chk.parent().attr('disabled','');
        });
        
        if(_varCheckedIDs.length>0)// at lease return a char
            _varCheckedIDs=_varCheckedIDs.substring(1);
        ctlOldIDs.val(_varCheckedIDs);
    },

    getChecked : function(grdvId){//gridview,textbox to save ids, id index in grdv, chkbox index in grdv
        if(!grdvId) grdvId='grdv';
        grdvId='#'+grdvId;
        
        var ctlNewIDs = $('#txtIDs');
        var _varCheckedIDs='';
        $('input:checkbox',grdvId).each(function(idx,chk){
            var chk=$(chk);
            if(chk.attr('checked'))
                _varCheckedIDs = _varCheckedIDs + ',' + chk.parent().parent().next().text();
                
            chk.attr('disabled','disabled');
        });
        
        if(_varCheckedIDs.length>0)// at lease return a char
            _varCheckedIDs=_varCheckedIDs.substring(1);
        ctlNewIDs.val(_varCheckedIDs);
    },

    setChecked : function(ctlIDs,idIdx,chkIdx,grid){//set checkbox status by IDs control
        this.setup(idIdx,chkIdx,grid);
        if(ctlIDs==null) ctlIDs = document.getElementById('txtIDs');
        
        var _varIDs=ctlIDs.value;
        if(this.grid && _varIDs.length>1)
        {
            if(_varIDs.indexOf(',')!=0) _varIDs=','+_varIDs;//add first ',' to match each item
                
            for(var i=1;i<this.grid.rows.length;i++){//grid/row/cell/span/checkBox
                if(this.grid.rows[i].cells[this.idIdx] && _varIDs.indexOf(','+this.grid.rows[i].cells[this.idIdx].innerText)>-1){//exists?
                    if(this.grid.rows[i].cells[this.chkIdx].childNodes[0].childNodes[0])//span/checkBox in gridview
                        this.grid.rows[i].cells[this.chkIdx].childNodes[0].childNodes[0].checked=true;
                    else
                        this.grid.rows[i].cells[this.chkIdx].childNodes[0].checked=true;//checkBox in datagrid
                }
            }//end for
        }
    },
    
    deleteRow : function(autoSubmit,grid){
        this.setup(null,null,grid);
        if(this.getCellText()){
	        if (window.confirm(UTIL.getMessage('CLTMSG_BE_DELETE_ROW'))){
		        if(autoSubmit && typeof(__doPostBack)=='function')
		        {
		            event.returnValue=false;
			        __doPostBack('DELETE',this.getCellText()+','+this.getCellText(this.idIdx+1));
			    }
		        return true;
	        }
	    }
	    return false;
    },
    
    select : function(grid){
        if(this.tagName=='TR')
            var tr=$(this);
        else
            var tr=$(this).parent('tr');
        var grid=tr.parents('table');
        $('.selected',grid).removeClass('selected');
        tr.addClass('selected');
    },
    
    bindDrop:function(drp,colIdx,grid){
        var drp=$('#'+drp);
        if(!grid) grid='grdv';
        
        //Cache Drop Items
        var json;
	    if(drp[0]['json']==undefined){//options to json
            json = {};
            $('option',drp).each(function(idx,opt){
                var opt=$(opt);
                json[opt.val()]=opt.text();
            });
            drp[0]['json']=json;
        }else
            json=drp[0]['json'];
        
        //Bind to grid
        var bCustomFormat=(typeof PageFormatGrid == 'function');
	    $('tr','#'+grid).each(function(idx,tr){
	        var td=$('td',tr).eq(colIdx);
	        if(bCustomFormat)
               td.text(PageFormatGrid(json[td.text()],idx,grid));
            else
	            td.text(json[td.text()]);
	    });
    },
    
    getCellText : function(cellIdx,grid){
        this.setup(null,null,grid);
	    if(!cellIdx) cellIdx=this.idIdx;
    	
	    if(this.selectedRow){
	        if(this.selectedRow.cells[cellIdx])
	            return this.selectedRow.cells[cellIdx].innerText;
	    }
	    else{//serverside select event
	        for(var i=0;i<this.grid.rows.length;i++){
		        if(this.grid.rows[i].className == 'selected')
			        return this.grid.rows[i].cells[cellIdx].innerText;
	        }
	    }

	    window.alert(UTIL.getMessage('CLTMSG_NO_SELECTED_ROW'));
	    return null;
    },
    //数据为空时加载模板 --EDITED BY BEE
    setEmptyDataTemp: function(grdv,_array){
        var temp = ''; //
        _array=_array.split(',');
        for(var i=0;i<_array.length;i++){
            temp += "<th>" + _array[i] + "</th>";
        }   
        temp = '<table style="width: 100%; border-collapse: collapse" cellspacing="0" cellpadding="3" border="1"><tr class="header">' + temp + '</tr></table>';  
       
        if($("#" + grdv + " td").text()=='暂无数据'){
            $("#" + grdv + " td").eq(0).html(temp);
            $("#" + grdv).parent().css('overflow','hidden');
        }
	}                            
}

//-------------------------treeview control--------------------------------------
var TREE = {
//selectedId:设置当前节点父节点；drpSelectedId：设置当前选中节点
    createOptions : function(drpId,trvId,selectedId,drpSelectedId){
        if(!drpId) alert('Select control is required!');
        if(!trvId) trvId='trv';
        
        var drpCached={};        
        var drp = $('#'+drpId).get(0);
        
        $('.trv_0','#'+trvId).each(function(i,ohref){
            if(!ohref.href) return;
            
            var shref=ohref.href.substring(32,ohref.href.length-2);//javascript:__doPostBack('trv','s
            var nodes=shref.split('\\\\');
            if(nodes[0].length<10)
                nodes[0]='';
            
            //取得多级缩进
            var sHirachy='';
            var sHirachyText='';
            var i=0;
            while(i<nodes.length)
            {
                if(nodes[i])
                {
                    sHirachy+='| - ';
                    if(i<nodes.length-1 && drpCached[nodes[i]])//not current node.
                        sHirachyText+=drpCached[nodes[i]].nodeText+'/';
                }
                i++;
            }
            //添加选项
            var opt = document.createElement('OPTION');
            if(nodes.length>1)
                opt.parentId=nodes[nodes.length-2];
            opt.value=nodes[nodes.length-1];
            opt.text=sHirachy+ohref.innerHTML;
            opt.nodeText=ohref.innerHTML;//可直接访问文本
            opt.nodePath=sHirachyText+opt.nodeText;//层级文本
           
            drpCached[opt.value]=opt;
            drp.options.add(opt);
            
            //title=9 表示无权限的节点
            if(ohref.title=='9'){//set unselectable.
                $(ohref).css({'color':'#000000'}).attr({'href':'javascript:void(0);','onclick':'return false;'}).removeAttr('title');
            }
        });
        
        //设定为当前节点父节点
        var sId=selectedId;
        if(sId){
            if(!drpCached[sId]) alert('Selected value is not found in select control.');
            else if(drpCached[sId].parentId)
                drpCached[drpCached[sId].parentId].selected='selected';
        }else if(drpSelectedId){//设定为当前节点
            if(!drpCached[drpSelectedId]) alert('Dropdown Selected value is not found in select control.');
            else drpCached[drpSelectedId].selected='selected';
        }
        else{//由树节点设置
            var node = $('.trv_1','#'+trvId).get(0);
            if(node){
                var nodes=node.href.split('\\\\');
                if(nodes.length>1){
                    sId = nodes[nodes.length-1].substring(0,nodes[nodes.length-1].length-2);//当前树选中节点
                    var editModeId=UTIL.getId(-1);
                    if(editModeId && editModeId==sId){//录入编辑状态，当前选中应是父节点
                        if(drpCached[sId].parentId!=null) sId=drpCached[sId].parentId;
                    }
                    
                    drpCached[sId].selected='selected';
                }
            }
        }
        drp.cache = drpCached;
    },
    isCirculated:function(drpId,sId){//当前选中的Id，是当前节点的子节点，构成循环引用？
        if(!sId)
            sId = UTIL.getId(-1);
	    if(sId){
	        if(!drpId) drpId='drp_Parent_V8';
	        var drp = $('#'+drpId);
	        var selectedId=drp.val();
	        var drpCache=drp.get(0).cache;
	        var bCirculated=false;
	        while(drpCache[selectedId]){
	            if(selectedId==sId){
	                bCirculated=true; 
	                break;
	            }
	            selectedId=drpCache[selectedId].parentId;
        	    
	            if(!selectedId) break;
	        }
	        if(bCirculated)
	            return "\'%FIELDNAME%\'设置为循环引用,请重新设置!";
	    }
    },
    currentNode:null,
    
    setup : function(){
        this.attachNodeEvent();
    },
    attachNodeEvent : function()//Add event when Node click
    {
        var nodes = document.getElementsByTagName('A');
        for(var i=0;i<nodes.length;i++)
        {
            if(nodes[i].id.indexOf('trvt')==0 && nodes[i].href)
            {
                nodes[i].onclick=this.selectedNodeChanged;
            }
        }
    },
    
    selectedNodeChanged : function(src)//when node click, do something
    {
        if(!src) src=event.srcElement;
        src.className='trv_1';
        if(this.currentNode && src!=this.currentNode)
            this.currentNode.className='trv_0';
        this.currentNode = src;
        
        if (typeof(OnNodeChanged) == "function")
            OnNodeChanged(event,event.srcElement.href.substring(11,event.srcElement.href.length));//11= length of "javascript:"
         
        return false;//break from href
    },
    
    //将制定对象，添加div包裹到特定的长度，宽度
    wrapScroller:function(cfg){//{id:'trv',height:null,width:null,margin-bottom:20,margin-right:20}
    }
}

//-------------------------validate control--------------------------------------
var VALIDATOR = {
    JS_VALIDATORS:null,
    JS_VALIDATORS_ERROR:null,
    V_REGEX:new RegExp("V(\\d{1,2})"),
    //PUBLIC
    setup : function(dataTag)
    {        
	    this.JS_VALIDATORS=new Array();
	    var ctlValObj = new RegExp("\\w{3,5}?_(\\w*)_((\\w\\d{1,2})*)$");
	    
	    if(dataTag<1) dataTag='';
	    var ctn='#bpEdit'+dataTag;
	    if($(ctn).length<1) ctn='.bpEdit'+dataTag;
	    
	    var ctlTypes=['input','select','textarea'];
	    for(var i=0;i<ctlTypes.length;i++)
	    {
	        $(ctlTypes[i],ctn).each(function(VAL){
	            ctl=this;
	            m = ctl.id.match(ctlValObj);
                if(m && m[2] && m[2].indexOf('V')>-1)
                    VAL.JS_VALIDATORS.push(VAL.initControl(ctl,m[1],m[2]));
	        },[this]);
	    }
    },
    //init each control 
    initControl : function(control,dataField,actionFlag) {
	    //var dataTag=actionFlag.indexOf('D')<0 ? 0 : actionFlag.substring(actionFlag.indexOf('D')+1,actionFlag.indexOf('D')+2);
	    //control.dataField=dataField;
	    //control.dataTag=dataTag;
	    var mV=actionFlag.match(this.V_REGEX);
	    if(mV || mV.length>1){ 
	        var validateTag=mV[1];	    
	        control.validateTag=validateTag;
    	    
	        control.displayText=$(control).attr('T');//T
	        control.rule=$(control).attr('rule');//regex
	        control.ruleMsg=$(control).attr('ruleMsg');//error msg
	        control.ruleFunc=$(control).attr('ruleFunc');//eval
	        if(!control.displayText) control.displayText=$(control).parent().prev().text();//prev TD
            if(!control.displayText || control.displayText.length==0) control.displayText=dataField;//DataField Name
    	}
	    return control;
    },
    //every ajax refresh,obj ref should be refresh
    ajaxRefresh : function()
    {
        temp_JS_VALIDATORS=new Array();
        if(this.JS_VALIDATORS.length>0 && this.JS_VALIDATORS[0].parentElement) return;
        var oldCtl = this.JS_VALIDATORS.pop()
        while(oldCtl)
        {
            var newCtl = document.getElementById(oldCtl.id);
            newCtl.dataField=oldCtl.dataField;
            newCtl.dataTag=oldCtl.dataTag;
            newCtl.validateTag=oldCtl.validateTag;
            newCtl.displayText=oldCtl.displayText;
            temp_JS_VALIDATORS.push(newCtl);
            oldCtl = this.JS_VALIDATORS.pop()
        }
        this.JS_VALIDATORS=temp_JS_VALIDATORS;
    },
    //PUBLIC 按钮触发:校验
    validate : function(iDataTag,bAlert)
    {
	    if(bAlert==null) bAlert=true;
	    if(iDataTag==null) iDataTag=0;
	    	
    	this.setup(iDataTag);
	    //this.ajaxRefresh();
	    this.JS_VALIDATORS_ERROR='';
	    for(var i=0;i<this.JS_VALIDATORS.length;i++)
	    {
		    //if(iDataTag==0 || (this.JS_VALIDATORS[i].dataTag&iDataTag)>0)
			    this.recheck(this.JS_VALIDATORS[i]);
	    }
    	
	    if(this.JS_VALIDATORS_ERROR.length==0)
	        return true;
	    else if(bAlert)
	        alert(this.JS_VALIDATORS_ERROR);
        return false;
    },

    recheck : function(control)
    {
        this.resetError(control);

	    if((control.validateTag&1)>0 && !this.checkRegex('V_REQUIRED',control))
		    this.raiseError(control,UTIL.getMessage('V_REQUIRED'));

        if(control.value.length==0) return;
    			
	    if((control.validateTag&2)>0 && !this.checkRegex('V_NUMERIC',control))
	        this.raiseError(control,UTIL.getMessage('V_NUMERIC'));
    	
	    if((control.validateTag&4)>0 && !this.checkRegex('V_DATETIME',control))
	        this.raiseError(control,UTIL.getMessage('V_DATETIME'));    	
	    
	    if((control.validateTag&8)>0){
            if(control.rule && !this.checkRegex(control.rule,control))
                 this.raiseError(control,control.ruleMsg?control.ruleMsg:UTIL.getMessage('V_INVALID'));
            else if(control.ruleFunc){
                var msg=eval(control.ruleFunc);
                if(msg) this.raiseError(control,msg);
            }
            if(typeof(PageOnValidate) == "function")//custom per page validate
	            if(PageOnValidate(control)===true) return;//if true, just skip other validation
	    }
    },
    checkRegex : function(valType,control){
        switch(valType)
        {
            case 'V_REQUIRED':
                control.value=control.value.replace(/(^\s+)|\s+$/g,'');
                if(control.tagName=='SELECT' && control.value=='0') return false;//ENUM TYPE?
                return (control.value.length>0);// /.+/
                break;
            case 'V_NUMERIC':
                return (!isNaN(control.value));// /^[-\+]?\d+(\.\d+)?$/
                break;
            case 'V_DATETIME':
                return (/^\d{4}-\d{1,2}-\d{1,2}( \d{1,2}:\d{1,2}){0,1}$/).test(control.value);
                break;
            default:
                var regex = new RegExp(valType,'g');
                return regex.test(control.value);
                break;
        }
    },    
    resetError : function(control){
        if(control.error=='1')
        {
            control.error='0';
            $(control).next().remove();
        }
    },
    //PUBLIC
    raiseError : function(control,resource){
        this.JS_VALIDATORS_ERROR=this.JS_VALIDATORS_ERROR+'- '+resource.replace('%FIELDNAME%',control.displayText)+'\n';
        if(control.error!='1')
        {
            control.error='1';
            $(control).after("<SPAN style='color:red;'>*</SPAN>");
	    }
    }
}
//-------------------------Grid Pager ---------------------------------
GridPager=function(cfg){
    //配置项:{id,height,callback,filterId,title}
    cfg.callback=cfg.callback||__doPostBack;//回调函数    
    
    var PageInfo=null;
	function wrap(cfg){
	    grid=$('#'+cfg.id);
	    
	    cfg.marginBottom=32;//Pager的高度
	    cfg.hbar='INNER';//垂直滚动条出现，内容压缩
	    cfg.addPadding=true;//底部增加到底的TR
	    var dim=UTIL.wrapToBottom(cfg);

	    var div=grid.parent();
	    div.after('<div class="pPager"><div>');	    
	    PageInfo=getPageInfo(grid);
	    createPager(div.next());
    
	    return grid;	    
	}
	function getPageInfo(grid){//jqgrid
	    var trInfo=grid.attr('info');
	    var iPageIndex=1,iPageCount=1,iPageSize=0,iRecordCount=0;
	    if(trInfo){	        
            var c=trInfo.split(',');//注意：此处和服务端关联！
            if(c && c.length==4){
                iRecordCount=c[0];
                iPageCount=c[1];
                iPageSize=c[2];
                iPageIndex=c[3];

	            iRecordCount=parseInt(iRecordCount);
	            iPageIndex=parseInt(iPageIndex);
	            iPageCount=parseInt(iPageCount);
	            iPageSize=parseInt(iPageSize);
	            if(iRecordCount==0)//grid无数据
	                iPageIndex=iPageCount=0;
	            if(iPageCount>0 && iRecordCount%iPageSize==0)//总页数计算过度
	                iPageCount--;
	        }
	    }
	    return {PageIndex:iPageIndex,PageCount:iPageCount,PageSize:iPageSize,RecordCount:iRecordCount};
	}
	function createPager(pagerBar){
	    var sPager='<div class="pDiv"><div class="pDLeft">'
	        +'<div class="pGroup pSetting">&nbsp;每页显示<select id="pPageSize" name="pPageSize" style="width:50px"><option value="5">5  <option value="10">10  </option><option value="15">15  </option><option value="20">20  </option><option value="25">25  </option><option value="40">40  </option><option value="50">50  </option></select>条</div>'
	        +'<div class="btnseparator"/></div> <div class="pGroup pPageStat"><span class="pPageInfo"></span></div> <div class="pDRight">'
	        +'<div class="btnseparator"/> <div class="pGroup"> <div class="pFirst pButton"><span/></div><div class="pPrev pButton"><span/></div> </div> <div class="btnseparator"/> <div class="pGroup"> <div class="pNext pButton"><span/></div><div class="pLast pButton"><span/></div> </div> '
	        +'<div class="btnseparator"/> <div class="pGroup"><div style="float:left;">第<input type="text" style="width:25px" name="pPageIndex"/>页</div><div class="pReload pButton" title="跳转"><span/></div> </div>'
	        +'<div class="btnseparator"/> <div class="pGroup"> <span class="pPageStat"></span></div>'
	        +'</div><div style="clear: both;"></div></div>';
	    pagerBar.wrapInner(sPager);
	    
	    if(PageInfo.PageSize<5) PageInfo.PageSize=10;
	    $('select option',pagerBar).each(function(idx,opt){
		    if(opt.value==PageInfo.PageSize)
		        opt.selected=true;
		});
		$('input',pagerBar).val(PageInfo.PageIndex);
		$('.pPageInfo',pagerBar).text("共 "+PageInfo.PageCount+" 页,"+PageInfo.RecordCount+"条记录");
		centerAlign(pagerBar);//caculate margin
		
	    $('.pReload',pagerBar).click(function(){changePage('reload');});
		$('.pFirst',pagerBar).click(function(){changePage('first');});
		$('.pPrev',pagerBar).click(function(){changePage('prev');});
		$('.pNext',pagerBar).click(function(){changePage('next');});
		$('.pLast',pagerBar).click(function(){changePage('last');});
		$('#pPageSize',pagerBar).change(function(){changePage('reload');});
	}
	function centerAlign(pagerBar){
	    var bar={wleft:115,wcenter:95,wright:222};//width of inner div
	    var SCROLLER_BAR_WIDTH=19;
	    var width=pagerBar.width();
	    var margin=(width-bar.wleft-bar.wright-bar.wcenter-SCROLLER_BAR_WIDTH)/2-6;
	    if(margin>10){//enough margin?
	        $('.pDLeft',pagerBar).width(bar.wleft+margin);
	        $('.pPageStat',pagerBar).width(bar.wcenter+margin);
	        $('.pDRight',pagerBar).width(bar.wright);
	    }
	}
	function changePage(sType){
	    switch(sType){
	        case 'first':
	            if(PageInfo.PageIndex>1)
	                cfg.callback(cfg.id,'Page$First');
	            break;
	        case 'last':
	            if(PageInfo.PageIndex<PageInfo.PageCount)
	                cfg.callback(cfg.id,'Page$Last');
	            break;
	        case 'next':
	            if(PageInfo.PageIndex<PageInfo.PageCount)
	                cfg.callback(cfg.id,'Page$Next');
	            break;
	        case 'prev':
	            if(PageInfo.PageIndex>1)
	                cfg.callback(cfg.id,'Page$Prev');
	            break;
	        case 'reload':
	            if(cfg.btnSearch)
	                cfg.callback(cfg.btnSearch,'');
	            break;
	    }
	}
	
	//new GridFilter(cfg);
	return wrap(cfg);
}
GridFilter=function(cfg){
    //配置项:{filterId,title}
    //查询区显示头
    cfg.title=cfg.title||'查询条件';
    function wrap(cfg){
        var bp=$('#'+cfg.filterId);
        
        var sFilter='<div class="pFilter" align="center">'
		    +'<div class="handle"><img src="../images/grid/magnifier.png" align="absmiddle" />&nbsp;<span class="title">'+cfg.title+'</span> [已隐藏]<br/></div>'
		    +'<div class="content">'
			+'<fieldset align="center">'
			+'    <div class="hcontent"><img src="../images/grid/magnifier.png" align="absmiddle" />&nbsp;<span class="title">'+cfg.title+'</span> [已显示]</div>'
		    +'</fieldset> </div> </div>';
		bp.before(sFilter);
		var filter=bp.prev();
		filter.find('fieldset').append(bp);
		
		$('.handle',filter).click(function(){
		    $(this).hide();
		    $('.content',filter).show();
		});
		$('.hcontent',filter).click(function(){
		    $('.content',filter).hide();
		    $('.handle',filter).show();
		});
    };
    
    wrap(cfg);
}
//-------------------------Tree Checker-------------------------------------
TreeChecker=function(cfg){
    var tree;
    //配置项:{id,type,clientSelect,level}
    //type: 限定可选Node类型,null则为全部。 对应服务端Node 的 ToolTip属性.
    //level: null,0,1,...返回节点上级文字的级别
    cfg.clientSelect=(cfg.clientSelect==false)?false:true;//是否客户端选定事件
    
    function init(cfg){
        tree=$('#'+cfg.id);
        cfg.hasCheckbox=($(':checkbox',tree).length>0);
        
        $('.'+cfg.id+'_0',tree).each(function(i,n){//为checkbox设置sName和sId,子结点容器sNode,节点类型sType(服务端ToolTip)
            var node = $(n);
            var chk=node.prev(':checkbox');            
            
            var id=node.attr('href');
            if(id){
                if(cfg.clientSelect)
                    node.attr({'href':'javascript:void(0);','onclick':'return false;'});
                if(!cfg.hasCheckbox)
                    chk=node;
                    
                id=id.substring(32,id.length-2);//javascript:__doPostBack('trv','s
                chk.attr('sId',id.substring(id.lastIndexOf('\\')+1))
                .attr('sName',node.text());
                
                var sType=node.attr('title');//设置节点类型sType
                if(sType && sType.length==1){
                    node.removeAttr('title');
                    chk.removeAttr('title');//都拥有相同的title
                    chk.attr('sType',sType);
                    
                    //title=9 表示无权限的节点
                    if(sType=='9')
                        node.css({'color':'#000000'}).attr({'href':'javascript:void(0);','onclick':'return false;'});
                }
            }
            
            if(cfg.hasCheckbox)//记录子节点id容器在sNode
                chk.attr('sNode','#'+chk.attr('id').replace('CheckBox','Nodes'));
	    });
	    
	    if(cfg.clientSelect)
	        clientSelect();
	    if(cfg.hasCheckbox)
	        syncClick();
    }
    function syncClick(){
       $(':checkbox',tree).click(function(e){
	        var chk=$(this);
	        if(cfg.type && chk.attr('sType')==cfg.type) return true;//bug todo：忽略子结点选择，提高性能
	        var bChecked= chk.attr('checked');
	        $(chk.attr('sNode')+' :checkbox').attr('checked',bChecked);//同步子节点
	        
	        return true;//bug todo：忽略子结点选择，提高性能
	        while((chk=chk.parents('div:eq(0)')) && chk.length>0){//同步父节点
	            $('#'+chk.attr('id').replace('Nodes','CheckBox'),tree)
	                .attr('checked',
	                $(':checked',chk).length==$(':checkbox',chk).length);//子已经全选?
	        }
	    });
    }
    function clientSelect(){
        if(typeof pick!='function') pick=function(){};
        $('.'+cfg.id+'_0').click(function(){
            $('.'+cfg.id+'_1').removeClass(cfg.id+'_1');
	        $(this).addClass(cfg.id+'_1');
        }).dblclick(pick);
    }

    init(cfg);
    
    return{
        get : function(){//取得选中节点obj:{id:'11,22',name:'aa,bb'}
           var s={id:'',name:''};
           if(cfg.hasCheckbox)
               $(':checked',tree).each(function(idx,chk){
                    chk=$(chk);
                    if((cfg.type==null || cfg.type==chk.attr('sType')) && chk.attr('sId')){
                        s.id+=','+chk.attr('sId');                        
                        s.name+=','
                            +(isNaN(cfg.level)?'':chk.parents('div:eq('+cfg.level+')').prev().find('a').text())
                            +chk.attr('sName');                        
                    }
               });
           else{
                var node = $('.'+cfg.id+'_1');
                if(cfg.type==null || cfg.type==node.attr('sType')){
                    s.id=','+node.attr('sId');
                    s.name=','+node.attr('sName');
                }else
                    alert('选定了无效的值!');
           }
                
           s.id=s.id.substring(1);//trim ','
           s.name=s.name.substring(1);
           if(s.id=='undefined'){ s.id='';s.name='';}
           return s;
        }
    }
}
//-------------------------pop up control--------------------------------------
Picker=function(cfg){
    var pickerPad;
    var source,targetID,targetName;

    this.pickerPad=null;
    this.targetID=null;
    this.targetName=null;    
    
    function addPickerPad(){
        var ctlPickerPad=document.createElement("DIV");
            ctlPickerPad.style.cssText='position:absolute;display:none;z-index:89;';
            ctlPickerPad.innerHTML='<div class="p_h"><u class="corner"><u class="l1"></u><u class="l2"></u><u class="l3"></u><u class="l4"></u></u>'
                +'<div class="p_cb"><ul><li title="关闭"><a href="javascript:void(0);" id="p_Close"></a></li>'
                +'<li title="刷新"><a href="javascript:void(0);" id="p_Refresh"></a></li>'
                +'<li title="返回"><a href="javascript:void(0);" id="p_Select"></a></li></ul><div style="clear:both;"></div> </div></div>'
                +'<div class="p_c"><iframe id="p_frm" name="p_frm" scrolling="auto" frameBorder="0"></iframe></div>';
       $(window.document.forms).append(ctlPickerPad);
       
       pickerPad=ctlPickerPad;
    }
    
    function setDragable(){
        $(pickerPad).draggable();
    }

   function setPosition(source){
        if(source==null || source==window){
            if(source==null) source=window;
            var win=$(source);
            pad=$(pickerPad);
            var calTop=(win.height()-pad.height())/2+document.body.scrollTop,calLeft=(win.width()-pad.width())/2+document.body.scrollLeft;
        }else{
            var offset=$(source).offset();
            var avail={top:offset.top-document.body.scrollTop,left:offset.left-document.body.scrollLeft};//可见区域
            var calTop=0,calLeft=0;

            if((avail.top+pickerPad.height)>document.body.clientHeight){//下方空间无法放Picker?
                if(avail.top-pickerPad.height<10)//上方也无法放Picker
                    calTop=offset.top+10;//下方撑开
                else
                    calTop=offset.top-pickerPad.height-10;
            }else
                calTop=offset.top+10;//下方可放下

            if((avail.left+pickerPad.width)>document.body.clientWidth){//右方空间无法放Picker?
                var srcWidth=$(source).width();
                if(avail.left+srcWidth-pickerPad.width<1)//左方也无法放Picker
                    calLeft=offset.left;//右方撑开
                else
                    calLeft=offset.left+srcWidth-pickerPad.width;
            }else
                calLeft=offset.left;//右方可放下
        }

        $(pickerPad).css({top: calTop, left: calLeft});
        pickerPad.style.display="block";
    }
    
    function setup(){
        UTIL.addCssStyle(UTIL.getAppRoot()+'/App_Themes/Popup/popup.css');
        addPickerPad();
    }
    
    ///show(string defaultURL,string/input tID,string/input tName,
    /// int width,int height,string/input source,function callback)
    function show(defaultURL,tID,tName,width,height,source,callback){
        if(!pickerPad) setup();//Init on first load
        if(pickerPad.style.display!="none") { this.hide();return false;}//Toggle picker
        if(callback) pickerPad.callback=callback;
        //if(!targetName && !source && !targetID) { alert("Receiver control should be setted!"); return false;}//Verify
        
        targetName=null;targetID=null; //reset first    
        if(tName){targetName=typeof(tName)=='string'?document.getElementById(tName):tName;
            if(!targetName) alert("[Name] control can't be found.");
        }
        if(tID){targetID=typeof(tID)=='string'?document.getElementById(tID):tID;
            if(!targetID) alert("[ID] control can't be found.");
        }
        if(source){source=typeof(source)=='string'?document.getElementById(source):source;
            if(!source) alert("[source] control can't be found.");
        }
        else if(targetName)
                source=targetName;
            else source=targetID;
   	    //URL rewrite
   	    pickerFrm=$('#p_frm',pickerPad);

   	    var bClearOldChecked=targetID?true:false;//是否是Picker.pick弹出
   	    if(typeof(defaultURL)=='string' && defaultURL.lastIndexOf('.')>0){//Url string
   	        if(defaultURL.indexOf('postback=1')>0 && targetID)//传递参数
   	            defaultURL = defaultURL+'&TID='+targetID.value;

            if(pickerFrm.get(0).tagName!='IFRAME'){
                pickerFrm.replaceWith('<iframe id="p_frm" scrolling="auto" frameBorder="0"></iframe>');
                pickerFrm=$('#p_frm',pickerPad);//div=>ifm
            }
            var ifm=pickerFrm.get(0);
            var subUrl=defaultURL.substring(2);
	        var i=ifm.src.indexOf(subUrl);
	        if(i<0 || ifm.src.length-i>subUrl.length){//url不同
	            ifm.src=defaultURL;
	            bClearOldChecked=false;//页面已经重载
	        }
	            
            //ifm.src="about:blank";
            pickerPad['type']='1';//标志它已经启用
	    }else{
	        pickerFrm.replaceWith('<div id="p_frm" style="overflow:hidden;"/>');
	        pickerFrm=$('#p_frm',pickerPad);//ifm=>div
	        if(typeof(defaultURL)=='string'){
	            defaultURL=$('#'+defaultURL,window.document).show();//find by id	        
	        }
	        pickerFrm.append(defaultURL);
	        pickerPad['type']='2';//标志它已经启用
	    }
	    //清除已有选定
	    if(bClearOldChecked)
	        $("input:checked",pickerPad['type']=='1'?pickerFrm.get(0).contentWindow.document:pickerFrm).attr('checked',false);
	    
	    if(width && height){
	        pickerPad.width=width;
		    pickerPad.height=height;
    		
		    pickerFrm.width(width);
		    pickerFrm.height(height);
		    
		    setPosition(source);//show picker
	    }        
        setDragable();
        
        $('#p_Close',pickerPad).click(hide);
        $('#p_Refresh',pickerPad).click(refresh);
        $('#p_Select',pickerPad).click(select);
        this.pickerPad=pickerPad;
        this.pickerPad.data=this;
        this.targetID=targetID;
        this.targetName=targetName;
        return this;
      }
      
     function pick(vID,vName,e){
        var picker = UTIL.getPicker(e||this);
            
        if(picker.pickerPad){
            if(vID!=null &&picker.targetID){picker.targetID.value=vID; $(picker.targetID).change();//fireEvent
                picker.targetID.title=vName;}
            if(vName!=null &&picker.targetName){ picker.targetName.value=vName;  $(picker.targetName).change();}
            
            if(typeof picker.pickerPad.callback=='function') picker.pickerPad.callback(vID,vName);
            picker.hide();
        }else
            alert("Returning window not found!");
      }
      
      function hide(e){
        var picker = UTIL.getPicker(e||this);
        if(!picker) return;
        
        if(picker.pickerPad){//已经启用
            if(picker.pickerPad['type']=='2'){//div,hide时将内容重新保存回body,防止其他Picker导致它丢失
                var ifm=$('#p_frm',picker.pickerPad);
                $(window.document.forms).append(ifm.contents().hide());
            }
            picker.pickerPad.style.display="none";
            picker.pickerPad.data=null;//clear
        }
     }
      
      function refresh(e){
            var picker = UTIL.getPicker(e||this);
            
            if(picker.pickerPad){//已经启用
                if(picker.pickerPad['type']=='1'){
                    var ifm=$('#p_frm',picker.pickerPad).get(0);
                    var _opener=ifm.contentWindow.document;
                    if(!$(_opener.forms[0]).hasClass('norefresh')){//form 具有norefresh样式，则禁用刷新功能
                        $('#__EVENTTARGET',_opener).val('');$('#__EVENTARGUMENT',_opener).val('');//防止事件重复提交
                        _opener.forms[0].submit();
                    }
                }else
                    picker.hide();
            }
      }
      function select(e){
            var picker = UTIL.getPicker(e||this);
            
            if(picker.pickerPad){//已经启用
                if(picker.pickerPad['type']=='1'){
                    var ifm=$('#p_frm',picker.pickerPad).get(0);
                    if(typeof ifm.contentWindow.pick == 'function')
                        ifm.contentWindow.pick(e);
                    else
                        picker.hide();
                }else
                    picker.hide();
            }
      }
      
      this.show=show;
      this.hide=hide;
      this.pick=pick;
}


// -------------------------------------Toolbar---------------------------------------
function setToolbar(imgPath,btnFilter){
    function getButtonKey(id){
        return id.toString().split('_')[1];
    }
    var tItem = {name:'',cls:''};
    function getButton(btnKey,getCls){
        switch(btnKey){
            case "Signature":tItem.name='盖章';tItem.cls= "Ico_Stamp";break;
            case "SignatureHand":tItem.name='签章';tItem.cls= "Ico_Sign_L";break;
            case "New":tItem.name='新增';tItem.cls='Ico_Add';break;
            case "Original":tItem.name='查看原始信息';tItem.cls='Ico_Diary';break;
            case "Attachment":tItem.name='附件管理';tItem.cls='Ico_Upload';break;
            case "NextCase":tItem.name='续接案件';tItem.cls='Ico_Borrow';break;
            case "Del":tItem.name='删除';tItem.cls='Ico_Del';break;
            case "Edit":tItem.name='编辑';tItem.cls='Ico_Edit';break;
            case "Submit":tItem.name='提交';tItem.cls='Ico_Submit';break;
            case "Save":tItem.name='保存';tItem.cls='Ico_Save';break;
            case "Filter":tItem.name='搜索';tItem.cls='Ico_Filter';break;
            case "Cut":tItem.name='剪切';tItem.cls='Ico_Cut';break;
            case "Close":tItem.name='关闭';tItem.cls='Ico_Return';break;
            case "Return":tItem.name='返回';tItem.cls='Ico_Return';break;
            case "Select":tItem.name='选择';tItem.cls='Ico_Sign_L';break;
            case "ViewSelected":tItem.name='查看选中';tItem.cls='Ico_Exam';break;
            case "ComeIntoBegin":tItem.name='生成借阅申请单';tItem.cls='Ico_Slip';break;
            case "Reject":tItem.name='退回';tItem.cls='Ico_Back';break;
            case "Reply":tItem.name='回复';tItem.cls='Ico_Reply';break;
            case "Send":tItem.name='发送';tItem.cls='Ico_Send';break;
            case "Revert":tItem.name='还原';tItem.cls='Ico_Reback';break;
            case "Transfer":tItem.name='转发';tItem.cls='Ico_Repeat';break;
            case "Hold":tItem.name='暂存';tItem.cls='Ico_Hold';break;
            case "BorrowBook":tItem.name='借出';tItem.cls='Ico_BorrowBook';break;
            case "ReturnBook":tItem.name='归还';tItem.cls='Ico_ReturnBook';break;
            case "LockedBy":tItem.name='签收';tItem.cls='Ico_LockedBy';break;
            case "Accept":tItem.name='提交';tItem.cls='Ico_Submit';break;
            case "Print":tItem.name='打印';tItem.cls='Ico_Print';break;
            case "UpFile":tItem.name='上传';tItem.cls='Ico_Upload';break;
            case "Cancel":tItem.name='撤回';tItem.cls='Ico_Slip_Del';break;
            case "ShowLog":tItem.name='日志';tItem.cls='Ico_Diary';break;
            case "EventShowLog":tItem.name='日志';tItem.cls='Ico_Diary';break;
            case "ExportWord":tItem.name='导出文档';tItem.cls='Ico_De_Word';break;
            case "NewEmail":tItem.name='新邮件';tItem.cls='Ico_New';break;
            case "btn_Transfer":tItem.name='转发';tItem.cls='Ico_Repeat';break; 
            case "Move":tItem.name='导出Word';tItem.cls="Ico_Del";break;
            case "Erase":tItem.name='彻底删除';tItem.cls="Ico_Del";break;
            case "Sadve":tItem.name='保存';tItem.cls= "Ico_Save";break;
            case "Query":tItem.name='查询';tItem.cls= "Ico_File_S";break;
			case "Search":tItem.name='查询';tItem.cls= "Ico_File_S";break;
            case "Read":tItem.name='阅读';tItem.cls= "Ico_Readed";break;
            case "Temp":tItem.name='模板';tItem.cls= "Ico_Save";break;
            case "Lock":tItem.name='签收';tItem.cls= "Ico_Re_Sign";break;
            case "Cancel":tItem.name='取消';tItem.cls= "Ico_Withdraw";break;
            case "ExportExcel":tItem.name='导出表格';tItem.cls= "Ico_De_Excel";break;
            case "Export":tItem.name='导出';tItem.cls= "Ico_De_Excel";break;
            case "Excel":tItem.name='导出表格';tItem.cls= "Ico_De_Excel";break;
            case "ExportWord":tItem.name='导出文档';tItem.cls= "Ico_De_Word";break;
            case "Word":tItem.name='导出Word';tItem.cls= "Ico_De_Word";break;
            case "Reset":tItem.name='重置';tItem.cls= "Ico_Clear";break;
            case "TopTopic":tItem.name='置顶';tItem.cls= "Ico_Upload";break;
            case "TopTopic2":tItem.name='取消置顶';tItem.cls= "Ico_Upload";break;
            case "AccecptUseCarShip":tItem.name='通过';tItem.cls= "Submit";break;
            case "Select":tItem.name='选择';tItem.cls= "Ico_Submit";break;
            case "Drawback":tItem.name='抽取';tItem.cls= "Ico_Withdraw";break;
            case "TemplateDesign":tItem.name='模板设计';tItem.cls= "Ico_Workflow";break;
            case "WorkFlowDesign":tItem.name='工作流设计';tItem.cls= "Ico_Workflow";break;
            case "Open":tItem.name='打开';tItem.cls= "Ico_Revision";break;
            case "SavePwd":tItem.name='保存密码';tItem.cls= "Ico_Reset";break;
            case "ResetPwd":tItem.name='重置密码';tItem.cls= "Ico_Reset";break;
            case "ViewLog":tItem.name='日志';tItem.cls= "Ico_Diary";break; 
            case "Week":tItem.name='周日程';tItem.cls= "Ico_Calendar";break; 
            case "Month":tItem.name='月日程';tItem.cls= "Ico_Calendar";break;
            case "Last":tItem.name='上周';tItem.cls= "Ico_Last";break;
            case "Next":tItem.name='下周';tItem.cls= "Ico_Next";break;                        
            default:tItem.name='';tItem.cls='Ico_Spatial';break;
        }
        //弹出窗口自动隐藏返回
        if(UTIL.getUrlParam("showReBackButton")!=null){
          $("#btn_Return_").hide(); 
        }
        return !getCls?tItem.name:tItem.cls;
    }
    
    function getButtonIcon(imgPath,key,imgType){
        return imgType!=null ? imgPath + key + "." + imgType : imgPath + key + ".ico";
    }
    
    if(!imgPath) imgPath=UTIL.getAppRoot()+'/images/';
    
    var divFilter=$('#bpQry');//查询区
    if(divFilter.length==0) divFilter=$(".filter");
    
    if(!btnFilter) btnFilter='btn_Filter_';//默认显示查询区按钮
    btnFilter=$("#" + btnFilter);
    if(btnFilter.length==0 && divFilter.css('display')!='hidden'){//如果toobar上显示查询按钮不存在，自动添加
        divFilter.before('<button type="button" id="btn_Filter_"></button>');
        btnFilter=$("#btn_Filter_");
    }
    btnFilter.click(function(){divFilter.slideToggle("slow");});
    
    $(".toolbar button").each(function(i){
        var key = getButtonKey($(this).attr("id"));
        
        var btnText=$(this).text();//默认取button内文本
        if(!btnText) btnText=getButton(key);
        
        var btnImg=$('img',this);
        if(btnImg.length>0){
            var btnIcon=$('img',this).attr('src');//默认取button内图片
            if(!btnIcon) btnIcon=getButtonIcon(imgPath,key,$(this).attr("imgType"));
            $(this).html("<img align='absMiddle' src='" + btnIcon + "'>" + "<label>" + btnText + "</label>"); 
        }else if($('div',this).length==0){
            $(this).html('<div style="float:right;line-height:20px;">'+btnText+'</div><div style="float:right;" class="'+getButton(key,1)+'"></div>');
        }
        $(this).mouseover(function(){$(this).css("border","solid 1px #768ebf");}).mouseout(function(){$(this).css("border","solid 0px #768ebf");});
        $(this).width(13*btnText.length+23 );
    });
    var split = "<img class='splitImg'/>";
    $(".toolbar .split").each(function(){$(this).html(split)});
    UTIL.wrapToBottom({id:'trv',hbar:'OUTER'});//扩展，所有树添加Div垂直滚动控制,水平无滚动
}

//showdiv不要乱改
var t = null;
var source =null;
var _url=null;
var x =0;
var y =0;
var tr;
var timer;
 function showDiv(div,__url,_x,_y,_tr) {
        if(tr && tr!=_tr && timer)
        {
            clearInterval(timer);
        }
        source=div;                
        _url=__url;
        x=_x;
        y=_y;           
        tr=_tr;
        if(t==null)
        {
            t = new Date();
            timer=setInterval('xSleep()',3000);
        }
    }
    
    function xSleep()
    {
            var v = new Date(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds()+3);

            if(v<t) return;
            clearInterval(timer);
            
            var sH = document.body.offsetHeight; //窗口的高度
            var sW = document.body.scrollWidth; //窗口的宽度
            
            x=50;
            source.style.display='block';
            source.innerHTML=$.ajax({
            url:_url,
            async:false
            }).responseText;
            
            if(source.offsetHeight>=sH)
            {
                y+=10;
            }
            else if((y + source.offsetHeight) >= sH) //当鼠标点击时的y坐标的值加上div的高度大于窗口的高度
            {
                y=sH-source.offsetHeight-10;
            }
            else
            {
                y+=10;
            }
            y=document.body.scrollTop+y; //鼠标Y轴的值
            source.style.position='absolute';              
            source.style.left=x + "px";
            source.style.top=y + "px"; 
            t = null;                 
   };