﻿
//-----------------------------------------公共配置-------------------------------------------------------

var SiteConfig={
    SiteRoot:'/',
    SiteDomain:''
    }
    
    
///<summary>
///名称：SelectsDataSource
///功能：下拉框数据源类
///备注：
/*--
    属性命名分为两种：1、普通名称，2、Sync_+普通名称
        1、普通名称其数值会保存于客户端；
        2、以Sync_开头的命名其数据会实时与服务端同步且等待服务端返回数据集。、
    属性类型分为三种：1、Hash类型，2、方法体，3、服务程序
        1、Hash类型为固定值运行过程中不可变更；
        2、方法体可以据参数和处理过程生成Hash类型数据或文本路径；
        3、服务程序为可以返回有效JSON格式结果的服务端处理页面路径。
--*/
///</summary>
var SelectsDataSource={};





//-----------------------------------------公共函数-------------------------------------------------------
///<summary>
//获取节点
///</summary>
function E$()
{
  var elements = new Array();

  for (var i = 0; i < arguments.length; i++) {
    var element = arguments[i];
    if (typeof(element) == 'string')
    {
      element = document.getElementById(element);
    }

    if (arguments.length == 1)
    {
      return element;
    }

    elements.push(element);
    
  }

  return elements;
}

///<summary>
//绑写方法，为解决不同浏览器中方法不统一的问题
///</summary>
function EBM$(element)
{
    if(typeof(element)== 'string')
    {
        element=E$(element);
    }
    if(element&&(element!=null))
    {

        element['setStyle']=function(styleText)
        {
            if( element.style['setAttribute'])
            { 
                element.style.setAttribute("cssText", styleText ); 
            }
            else
            { 
                element.setAttribute("style", styleText );
            } 
        };
        element['setClass']=function(ClassName)
        {
            element.setAttribute("className", ClassName);
        };        
        element['addEvent']=function(sEvent,func)
        {
            if(element['attachEvent'])
            {        
                element.attachEvent('on'+sEvent,func); 
            }
            else
            {
                element.addEventListener(sEvent,func,false); 
            }
        };  
        element['removeEvent']=function(sEvent,func)
        {
            if(element['attachEvent'])
            {        
                element.detachEvent('on'+sEvent,func); 
            }
            else
            {
                element.removeEventListener(sEvent,func,false); 
            }
        };
        element['insertHTML'] = function(where, html)
        {
        
            if(Br$('ff')||Br$('sf'))
            {
                var e = this.ownerDocument.createRange();
                e.setStartBefore(this);
                e = e.createContextualFragment(html);
                switch (where)
                {
                    case 'beforeBegin' :
                        this.parentNode.insertBefore(e, this);
                        break;
                    case 'afterBegin' :
                        this.insertBefore(e, this.firstChild);
                        break;
                    case 'beforeEnd' :
                        this.appendChild(e);
                        break;
                    case 'afterEnd' :
                        if( ! this.nextSibling)
                            this.parentNode.appendChild(e);
                        else 
                            this.parentNode.insertBefore(e, this.nextSibling);
                        break;
                }
            }
            else
            {
                element.insertAdjacentHTML(where, html);
            }
            
            
        };
        ///<summary>
        //添加outerHTML方法
        ///</summary>
        !element["outerHTML"]&&(element["outerHTML"]=function(sHTML){
            var r=this.ownerDocument.createRange();
            r.setStartBefore(this);
            var df=r.createContextualFragment(sHTML);
            this.parentNode.replaceChild(df,this);
            return sHTML;
        });

        
    }
    return element;
}
///<summary>
//追加this修改器，让对象的成员，在控件的事件中同样能够以this.成员 的形式访问
///</summary>
function EBD$(_Fun)
{
    _Fun.bind = function(obj) {  var method = this; return function() { return method.apply(obj,arguments);  }; }
    return _Fun;
}
///<summary>
//判断浏览器
///</summary>
function Br$(_BrType)
{
    var bString = navigator.userAgent.toLowerCase();
    switch(_BrType)
    {
        case 'ie':
            return (/msie ([\d.]+)/i.test(bString));
            break;
        case 'ff':
            return (/firefox\/([\d.]+)/i.test(bString));
            break;
        case 'cm':
            return (/chrome\/([\d.]+)/i.test(bString));
            break;
        case 'op':
            return (/opera.([\d.]+)/i.test(bString));
            break;
		case 'sf':
            return (/version\/([\d.]+).*safari/i.test(bString));
            break;
        default:
            return false;
            break;			
    }
}
///<summary>
//求出指定对象的绝对位置
//e：需要求的对象
///</summary>
function ELC$(e)
{
    var Result=[0,0];
    if(typeof(e) == 'string')
    {
        e=E$(e);
    }
    if(e&&e!=null)
    {
        var t=e.offsetTop;  
        var l=e.offsetLeft;  
        while(e=e.offsetParent) 
        {  
          t+=e.offsetTop;  
          l+=e.offsetLeft;  
        }
        Result=[l,t];
    }    
    return Result;
}
///<summary>
//从事件中取得节点
//evt：事件对象
///</summary>
function EEG$(evt)
{
    var evtobj=(window.event?window.event:evt);
    var Cobj=(window.event?event.srcElement:evtobj.target);
    return Cobj;
}


///<summary>
//取消事件，取消A对象的HREF事件等
//evt：需要取消的事件对象
///</summary>
function EEC$(evt){
if(arguments[1]){
  if(window.event){
    evt.returnValue=true;
  }
  return true;
}else {
  if(window.event){
    evt.returnValue=false;
  }else {
    evt.preventDefault();
  }
  return false;
}
};


///------------------------以F开头的都是对Ifarme中的对象进行操作----------------------------------
/// 
//


///<summary>
///从Ifarme中得到对象
///_Ifarme：帧名
///_Element：对象名
///</summary>
function FE$(_Ifarme,_Element)
{
    if(typeof(_Ifarme) == 'string')
    {
        _Ifarme=E$(_Ifarme);
    }
    if(_Ifarme&&(_Ifarme!=null))
    {
        return _Ifarme.contentWindow.document.getElementById(_Element);
    }    
}

///<summary>
///从Ifarme中得到绑定事件
///</summary>
function FEBM$(_Ifarme,_Element)
{
    return EBM$(FE$(_Ifarme,_Element));
}

///<summary>
///从Ifarme中得取得事件触发对象
///</summary>
function FEEG$(_Ifarme,evt)
{
    _Ifarme=E$(_Ifarme);
    var evtobj=(_Ifarme.contentWindow.event?_Ifarme.contentWindow.event:evt);
    var Cobj=(_Ifarme.contentWindow.event?_Ifarme.contentWindow.event.srcElement:evtobj.target);
    return Cobj;
}

///<summary>
///从Ifarme中得到取消事件
///</summary>
function FEEC$(_Ifarme,evt)
{
    _Ifarme=E$(_Ifarme);
    if(arguments[2]){
      if(_Ifarme.contentWindow.event){
        evt.returnValue=true;
      }
      return true;
    }else {
      if(_Ifarme.contentWindow.event){
        evt.returnValue=false;
      }else {
        evt.preventDefault();
      }
      return false;
    }
}

///


///<summary>
///哈希类
///注：依赖EBD$
///</summary>
function Hash$(){
  this.Key;
  this.Value;
  this.Init=function(){
    this.Key=new Array();
    this.Value=new Array();
  };
  this.Set=function(_key,_value){
    if(_key!=""&&_value!=""){
      var Ti=this.GetValue(_key,1);
      if(Ti==undefined){
        this.Key.push(_key);
        this.Value.push(_value);
      }else {
        this.Value[Ti]=_value;
      }
    }
  };
  this.Del=function(_key){
    if(_key){
      var Ti=this.GetValue(_key,1);
      if(Ti!=undefined){
        this.Key.splice(Ti,1);
        this.Value.splice(Ti,1);
      }
    }else {
      this.Init();
    }
  };
  this.GetValue=function(_key){
    if(this.Key){
      for(var i=0;i<this.Key.length;i++){
        if(_key==this.Key[i]){
          if(arguments[1]){
            return i;
          }else {
            return this.Value[i];
          }
        }
      }
    }
  };
  this.Each=function(_fun,_obj){
    if(_fun&&this.Key){
    
        if(_obj)
        {
            EBD$(_fun);        
            _fun=_fun.bind(_obj);
        }
        for(var i=0;i<this.Key.length;i++)
        {
            _fun(this.Key[i],this.Value[i]);        
        }
    }
  }
  this.Length=function(){
    return this.Key.length;
  };
  this.GetKeys=function(){
    return this.Key;
  };
  this.GetValues=function(){
    return this.Value;
  };
  this.Init();
};
///<summary>
///为字符添加处理方法
///</summary>
function Str$(_Str){
    var _StrObj={};
    _StrObj['Trim']=function(){
        if(_Str){
        _Str=_Str.replace(/\s*$/,'');
        _Str=_Str.replace(/^\s*/,'');
        }
        return _Str;
    }
    _StrObj['RTrim']=function(){
        if(_Str){
        _Str=_Str.replace(/\s*$/,'');
        }
        return _Str;
    }
    _StrObj['toString']=function(){
        return _Str;
    }
    _StrObj['toNumber']=function(){
        return parseInt(_Str);
    }    
    return _StrObj;
}
///<summary>
///格式化字串
///</summary>
function StrFt$(){
    if( arguments.length == 0 ) 
        return null; 

    var str = arguments[0]; 
    for(var i=1;i<arguments.length;i++) { 
        var re = new RegExp('\\{' + (i-1) + '\\}','gm'); 
        str = str.replace(re, arguments[i]); 
    } 
    return str; 
};
///<summary>
///测试字符
///</summary>
function Test$(_Str){
    var _StrObj={};
    _StrObj['isNum']=function(){     
        return /^\d+$/.test(_Str);
    }
}

///<summary>
///DOM准备完成后触发回调
///</summary>
function DOMReady$(_CallBack){    
    var _Dom =window.document;
    var _Done = false;    
    if (_Dom.addEventListener){ 
        _Dom.addEventListener("DOMContentLoaded", init, false);                
    }else{        
        readState();
    }
    _Dom.onreadystatechange = function(){    
        if (_Dom.readyState == 'complete') {    
             _Dom.onreadystatechange = null;    
             init();    
         }    
    }; 
    function init() {    
        if (!_Done) {    
             _Done = true;
             _CallBack&&_CallBack();    
        }    
    };
    function readState(){    
        try{
            _Dom.documentElement.doScroll('left');    
         } catch (e){    
            setTimeout(arguments.callee, 50);    
            return;    
         }
         init();    
    }
}   









///
///类名：AJAXBasic
///功能：同步或异步进行数据请求
///依赖方法：
/*
    E$,Br$
*/
///
if(!AJAXBasic){
    var AJAXBasic=function(){
        
        this.Url=(arguments[0]||'');        
        this.Parameter=arguments[1];
        this.CallBack=arguments[2];
        this.Type=(arguments[3]||0);//0=GET/1=POST//获取或设置请求类型      
        this.Async=(arguments[4]||true);//是否异步请求  
        
        this.SiteRoot=SiteConfig.SiteRoot;
        this.User=null;//获取或设置请求帐号
        this.Password=null;        
        this.Cache=false;
        this.RHeaders=null;
        this.ResultType=2;//0=body/1=stream/2=text /3=xml//获取或设置返回数据类型

        this.ResultData=null;
        this.OutTime=8000;//超时时间
        this.Timer=null;
        this.CharSet='UTF-8';
        this.State=0;
        this.SaftMode=true;
        
        var _AjaxObj=null;
        var _AObjType=0;//0=XMLHTTP/1=XMLHttpRequest//返回对象类型
        var _ResultData=null;
        var _ResultType=this.ResultType;
        var _RParameter='';
        var _Rpmlen=0;
        var _RType='GET';
        var _Rurl=this.Url;
        var _Self=this; 
        var _XmlHttpVer=new Array('MSXML2.XMLHTTP.7.0','MSXML2.XMLHTTP.6.0' ,'MSXML2.XMLHTTP.5.0' ,'MSXML2.XMLHTTP.4.0' ,'MSXML2.XMLHTTP.3.0' ,'MSXML2.XMLHTTP' ,'MSXML.XMLHTTP','Microsoft.XMLHTTP' );
        
        ///<summary>
        ///初始化环境
        ///</summary>
        this.Init=function(Prms){       
            this.Url=(Prms[0]||this.Url);
            this.Parameter=(Prms[1]||this.Parameter);
            this.CallBack=(Prms[2]||this.CallBack);
            this.Type=(Prms[3]||this.Type); 
            this.Async=(Prms[4]||this.Async);            
            this.Url.indexOf('/')==0&&!(/^http:\/\//i.test(this.Url))&&(this.Url=this.SiteRoot+this.Url);
            _ResultType=this.ResultType;
            _RParameter=convertObjTOStr(this.Parameter);
            _RType=(this.Type==0?'GET':'POST');
            _Rurl=this.Url;
            var _Tstr=(_Rurl.indexOf('?')==-1?'?':'&');
            if(!this.Cache){
                _Rurl+=_Tstr+'DateTime='+new Date().getTime();
            }else{
                _Rurl+=_Tstr+'?DateTime=2009';
            }
            (this.Type==0)&&_RParameter&&(_Rurl+='&'+_RParameter);
            _AjaxObj=this.CreateAjaxObj();
            _AjaxObj.onreadystatechange=this.RequestCallBack;
        }
        
        ///<summary>
        ///创建异步访问对象
        ///</summary>
        this.CreateAjaxObj=function(){
            var _Ajax=null;
            for(var i=0;i<_XmlHttpVer.length;i++){
                try{
                    _Ajax=new ActiveXObject(_XmlHttpVer[i]);
                    _AObjType=0;
                    break;
                }catch(e){
                    _Ajax=null;
                }
            }            
            if(!_Ajax && typeof XMLHttpRequest != "undefined"){
                 _Ajax= new XMLHttpRequest();
                 _AObjType=1;
            }  
            return  _Ajax;
        }
        
        ///<summary>
        ///状态更新事件
        ///</summary>
        this.RequestCallBack=function(e){
            if(!_AjaxObj){return;}
            if(_AjaxObj.readyState == 0){
                //描述一种"未初始化"状态；此时，已经创建一个XMLHttpRequest对象，但是还没有初始化。
            }else if(_AjaxObj.readyState == 1){
                //描述一种"发送"状态；此时，代码已经调用了XMLHttpRequest open()方法并且XMLHttpRequest已经准备好把一个请求发送到服务器。 
            }else if(_AjaxObj.readyState == 2){
                //描述一种"发送"状态；此时，已经通过send()方法把一个请求发送到服务器端，但是还没有收到一个响应。
            }else if(_AjaxObj.readyState == 3){
                //描述一种"正在接收"状态；此时，已经接收到HTTP响应头部信息，但是消息体部分还没有完全接收结束。 
            }else if(_AjaxObj.readyState == 4&&_Self.State==1){
                //描述一种"已加载"状态；此时，响应已经被完全接收。                
                if(_AjaxObj.status==200){                
                    _Self.Async&&_Self.GetReturn();                  
                }else{                    
                    window.clearTimeout(_Self.Timer); 
                    alert(returnError(_AjaxObj.status));
                }
            }
            
        }
        this.GetReturn=function(){            
            window.clearTimeout(_Self.Timer); 
            _ResultType==0&&(_ResultData=_AjaxObj.responseBody);
            _ResultType==1&&(_ResultData=_AjaxObj.responseStream);
            _ResultType==2&&(_ResultData=_AjaxObj.responseText);
            _ResultType==3&&(_ResultData=_AjaxObj.responseXML);    
            if(_ResultType==2&&_Self.SeftMode){
                _ResultData=_ResultData.replace(/src=\"\//ig,'src=\"'+_Self.SiteRoot)
                _ResultData=_ResultData.replace(/href=\"\//ig,'href=\"'+_Self.SiteRoot); 
                _ResultData=_ResultData.replace(/^(.|\n)*?\<body(.|\n)*?\>/ig,''); //删除无用内容
                _ResultData=_ResultData.replace(/\<\/body\>(.|\n)*?$/ig,'');
            }            
            _Self.ResultData=_ResultData;
            _Self.State=2;
            _Self.CallBack&&_Self.CallBack(_ResultData);
            _Self=null;            
        }
  

        ///<summary>
        ///运行访问对象
        ///</summary>
        this.RunAjax=function(){ 
            if(!_Rurl){return;}
            if(Br$('ie')){
                _Self.Timer=window.setTimeout('AJAXBasic.RunTimeOut', this.OutTime);
            }else{
                _Self.Timer=window.setTimeout(AJAXBasic.RunTimeOut, this.OutTime);
            }              
            this.State=1;
            
            _AjaxObj.open(_RType,_Rurl,this.Async,this.User,this.Password); 
            _AjaxObj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset='+this.CharSet);
            _AjaxObj.setRequestHeader("Content-Length",_RParameter.length);
            _AjaxObj.setRequestHeader("Cache-Control", "no-cache"); 
            _AjaxObj.send((_AObjType==0?null:_RParameter));   
            !this.Async&&this.GetReturn();          
        }
        
        ///<summary>
        ///结束访问对象
        ///</summary>
        this.EndAjax=function(){
            _Self.CallBack=null;
            _AjaxObj=null;
            _Self=null;
        }
        
        ///<summary>
        ///开始执行
        ///</summary>
        this.Run=function(){
            this.Init(arguments);
            this.RunAjax();
        }
        
        ///<summary>
        ///超时处理
        ///</summary>
        AJAXBasic.RunTimeOut=function(){
            var _OP=confirm(_Self.Url+"载入已经超时，是否重新加载?");
            this.State=0;
            if(_OP){
                _Self.RunAjax();
            }else{
                _Self.EndAjax();
            }            
        }

        ///<summary>
        ///转换参数对象为&分隔文本
        ///</summary>
        function convertObjTOStr(obj){
            var Pmstr='';
            if(obj){
                for(var PName in obj){
                    Pmstr+=(Pmstr!=''?'&':'')+PName+'='+encodeURIComponent(obj[PName]);
                }
             }
            return Pmstr;
        }
        ///<summary>
        ///转换请求代码
        ///</summary>
        function returnError(errNum){
            var errInfo='';
            switch(errNum){
                case 200:
                    errInfo='OK 一切正常，对GET和POST请求的应答文档跟在后面。。';
                    break;
                case 400:
                    errInfo='Bad Request \n请求出现语法错误。';
                    break;
                case 403:
                    errInfo='Forbidden \n资源不可用。';
                    break;
                case 404:
                    errInfo='Not Found \n无法找到指定位置的资源。';
                    break;
                case 405:
                    errInfo='Method Not Allowed \n请求方法（GET、POST、HEAD、DELETE、PUT、TRACE等）对指定的资源不适用。';
                    break;
                case 500:
                    errInfo='Internal Server Error \n服务器遇到了意料不到的情况，不能完成客户的请求';
                    break;
                case 503:
                    errInfo='Service Unavailable \n服务器由于维护或者负载过重未能应答。';
                    break;
                default:
                    errInfo='Unknown Error \n非常规错误。';
                    break;
            }
            return errInfo;
        }
         
        
        
    }
}



///
///类名：AjaxRequest
///功能：同步或异步进行数据请求
///依赖方法：
///*
//    E$,Br$
//*/
///
if(!AJAXRequest){
    var AJAXRequest=new function(){
        this.Open=function(){
           var t= new AJAXBasic();
           //t.ResultType=1;
           t.Async=false;///Handler1.ashx
//           t.Run('/Handler1.ashx',null,function(value){
//               alert(value);
//               var _JsonObj=eval(value);
//               var _Dlist=new Hash$();
//               for(var i=0;i<_JsonObj.length;i++)
//               {
//                   _Dlist.Set(_JsonObj[i]['name'],_JsonObj[i]['key']);
//               }
//               DataSource['Name']=_Dlist;
//              
//            });
        }    
    }
}






//--------------------------------------------控件类----------------------------------------------------
///<summary>
//下拉类
//用于在文档中创建一个IFRAME对象，并向其它写入内容
///</summary>
if(Receptacle==null)
{
    var Receptacle=new function()
    {
        this.Create=function(_Name,_Parameter,_Links,_Scripts,_AddStyle)
        {//Receptacle.Create
            var _TIfarme=EBM$(_Name);
            var Stylestr='position:absolute;';
            if(_Parameter)
            {                             
                Stylestr+='width:'+(typeof(_Parameter['width'])!='undefined'?_Parameter['width']:_TIfarme.style.width)+'px;';
                Stylestr+='height:'+(typeof(_Parameter['height'])!='undefined'?_Parameter['height']:_TIfarme.style.height)+'px;';
                Stylestr+='left:'+(typeof(_Parameter['left'])!='undefined'?_Parameter['left']:_TIfarme.style.left)+'px;';
                Stylestr+='top:'+(typeof(_Parameter['top'])!='undefined'?_Parameter['top']:_TIfarme.style.top)+'px;';
                Stylestr+='display:'+(typeof(_Parameter['display'])!='undefined'?_Parameter['display']:_TIfarme.style.display)+'px;';
            }            
            
            if(_TIfarme)
            {
                _TIfarme.setStyle(Stylestr);
            }
            else
            {
                var FHtml='<iframe id="'+_Name+'" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" border="0" style="'+Stylestr+'"></iframe>';            
	            EBM$(document.body).insertHTML("beforeEnd",FHtml);
	        }
	        return this.Load(_Name,_Parameter['outhtml'],_Links,_Scripts,_AddStyle);
        }
        this.Load=function(_Name,_OutHtml,_Links,_Scripts,_AddStyle)
        {//Receptacle.Load
            var _TIfarme=E$(_Name);
	        if(_TIfarme)
	        {
	            var oh='';                
                oh+=('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');
                oh+=('<html xmlns="http://www.w3.org/1999/xhtml" ><html><head>');
                if(_Links&&_Links.length!=0){for(var i=0;i<_Links.length;i++){oh+=('<link rel="stylesheet" type="text/css" href="'+_Links[i]+'">');}};
                if(_Scripts&&_Scripts.length!=0){for(var i=0;i<_Scripts.length;i++){oh+=('<script src="'+_Scripts[i]+'"></script>');}};
                if(_AddStyle){oh+='<style  type="text/css">'+_AddStyle+'</style>'}
                oh+=('</head><body>'+_OutHtml+'</body></html>');
	            var IfHtml = _TIfarme.contentWindow;
	            
                IfHtml.document.open();
                IfHtml.document.writeln(oh);
                IfHtml.document.close();
                //_TIfarme.style.height=IfHtml.document.body.offsetHeight;
                IfHtml=null;
                return oh;
            }	
            
        }
        
    }
}

///<summary>
///名称：SelectsDataSource
///功能：下拉框数据源类
///依赖方法：
/*--
    Hash$
--*/
///备注：
/*--
    属性命名分为两种：1、普通名称，2、Sync_+普通名称
        1、普通名称其数值会保存于客户端；
        2、以Sync_开头的命名其数据会实时与服务端同步且等待服务端返回数据集。、
    属性类型分为三种：1、Hash类型，2、方法体，3、服务程序
        1、Hash类型为固定值运行过程中不可变更；
        2、方法体可以据参数和处理过程生成Hash类型数据或文本路径；
        3、服务程序为可以返回有效JSON格式结果的服务端处理页面路径。
--*/
///</summary>


///<summary>
///
///依赖：
/*--
AJAXBasic,Hash$,ELC$,E$
EBM$,StrFt$,FE$,EBM$,FEBM$
Br$,FEEG$,FEEC$,ELC$,FEBM$
--*/
///</summary>
if(JDropdownlist==null)
{
    var JDropdownlist=new function()
    {
        
        var _TEvent=null;
        var _TLEvent=null;
        var _self=this;
        this.SitePath=SiteConfig.SiteRoot;//站点目录的位置，用于定位背景图片文件
        this.BlurTimer=null;
        this.Id='DDList';
        this.Selects=true;
        this.SelectBtState=false;
        this.Left=0;
        this.Top=0;
        this.Width=0;
        this.Height=0;
        this.State=true;
        this.OutTimer=200;
        this.ListData=null;
        this.ListCount=0;//项数量
        this.ListPageSize=8;//页数量
        this.ListPage=true;//是否分页
        this.ListPageCount=0;//页数量
        this.ListCpage=1;//当前页
        this.ListCItem=1;//当前项
        this.ListCSItem=0;//当前页开始记录
        this.ListCEitem=0;//当前页结束记录
        this.ListShowTool=true;
        this.ListDataArray=null;
        this.ListValueArray=null;        
        this.BindObj;     
        this.BindObjs='';   
        this.NewBindObj=null;//联动对象
        this.DependObj=null;//联动依赖对象
        this.CallBack=null;//确定选择后的回调操作
        ///<summary>
        ///
        ///</summary>    
        this.Init=function(){
            this.BlurTimer&&window.clearTimeout(this.BlurTimer);
            this.ListDataArray=this.ListData.GetKeys();
            this.ListValueArray=this.ListData.GetValues();
            this.ListCount=this.ListDataArray.length;   
            var _ReObj=E$(this.BindObj);
            var _Loc=ELC$(_ReObj);
            _Loc[1]+=_ReObj.offsetHeight+1;   
            this.Left=_Loc[0];
            this.Top=_Loc[1];
            this.Width=_ReObj.offsetWidth+2;
            this.Width=(this.Width<85&&this.ListCount>this.ListPageSize?85:this.Width);
             var _AS='';            
            _AS+='*{margin: 0;padding: 0;}';
            _AS+='body{background-color: Transparent;color: #A2190F;font-family: "宋体";font-size: 12px;width:'+(this.Width-4)+'px}';
            _AS+='a{color: #000000;text-decoration: none;}';
            _AS+='.DL_YBorder{background-color: #FFFFFF;border: 1px solid #D5D5D5;display:table;width: 100%;}';//left: 60px;position: absolute;top: 175px;
            _AS+='.DL_LBorder{border-bottom: 1px solid #898989;border-right: 1px solid #898989;display:table;width: 100%;}';
            _AS+='.DL_Body{display:table;list-style-type: none;width: 100%;margin: 0 auto;}';
            _AS+='.DL_Body li{border-bottom: #EBEBEB 1px solid;height: 19px;line-height: 19px;text-align: center;width:'+(this.Width-6)+'px;margin: 0 auto;}';
            _AS+='.DL_Body li a{display:block;height: 19px;line-height: 19px;margin: 0 auto;width: 100%;overflow:hidden;}';
            _AS+='.DL_Body li a:hover{background-color: #BFB99B;color: #FFFFFF;}';//background-image: url('+this.SitePath+'Scripts/JBox/Source/dbg.gif);
            _AS+='.DL_Body li.s a{background-color: #BFB99B;color: #FFFFFF;}';
            _AS+='.DL_Body li.s a:hover{background-color: #EBEBEB;background-image: none;color: #FFFFFF;}';
            _AS+='.DL_Tools{height: 15px;line-height: 15px;width: 100%;background-color: #F9F9F9;}';
            _AS+='.DL_Tools ul{display:block;height: 15px;line-height: 15px;margin: 0 auto;width: 75px;}';
            _AS+='.DL_Tools li{display:block;float: left;height: 15px;line-height: 15px;text-align: center;width: 15px;}';
            _AS+='.DL_Tools li a{display:block;height: 15px;line-height: 15px;width: 100%;color: #666666;}';
            _AS+='.DL_Tools li a.e{color:#CCCCCC;}';
            this.AddStyle=_AS;
            this.WinShowStateButton=false;
            this.WinFloat=true;
            _Loc=null;
            return (this.ListData!=null&&this.ListCount!=0);
        };


        ///<summary>
        ///载入路径数据
        ///</summary>
        this.LoadItemData=function(_BindObjId,_DataSource,_TAsync,_Tinit){
            if(!SelectsDataSource){return;}
            _self.ListData=null;//清空历史数据	 
            var _TDataSource=SelectsDataSource[_DataSource];
            var _Obj=E$(_BindObjId);
            if(_Tinit&&!SelectsDataSource[_BindObjId+'_Ds']&&_Obj['tagName']=='SELECT'){
                var _Ds= new Hash$();
                for(var i=0; i<_Obj.options.length; i++){//取原数据
                    var _Iobj=(_Obj.options.item(i)||_Obj.options[i]);
                    var _key=(_Iobj.innerText||_Iobj.textContent);
                    var _value=(_Iobj.value||_key);
                    _Ds.Set(_key,_value);                    
                }
                SelectsDataSource[_BindObjId+'_Ds']=_Ds;
                _Ds=null;
            }  
            if(!_Tinit){
                if(typeof(_TDataSource)=='function'){                
                    _TDataSource=_TDataSource(_BindObjId);                
                }                 
                if(typeof(_TDataSource)=='object'){
                    _self.ListData=_TDataSource;
                }else if(typeof(_TDataSource)=='string'){                    
                    var _ReadData= new AJAXBasic();
                    _ReadData.Async=_TAsync;
                    var _AddClassName=' LoginData ';//载入过程中样式
                    _Obj.className+=_AddClassName;
                    _ReadData.Run(_TDataSource,null,function(value){                        
                       var _JsonObj=null;
                       try{
                        _JsonObj=eval(value);
                       }catch(e){}
                       if(_JsonObj&&typeof(_JsonObj)=='object'){                                   
                           var _Dlist=new Hash$();
                           for(var i=0;i<_JsonObj.length;i++){
                               _Dlist.Set(_JsonObj[i]['Key'],_JsonObj[i]['Value']);
                           }                                             
                           _Obj.className=_Obj.className.replace(_AddClassName,''); 
                           if(_DataSource.indexOf('Sync_')==-1){  
                                SelectsDataSource[_DataSource]=_Dlist;//在客户端保存数据                             
                                _TAsync&&JDropdownlist.Show(_BindObjId,_DataSource,_self.NewBindObj,_self.ListPage);   
                           }else{
                                SelectsDataSource['Temp']=_Dlist;
                                _TAsync&&JDropdownlist.Show(_BindObjId,'Temp',_self.NewBindObj,_self.ListPage);   
                           }
                           _self.ListData=_Dlist; 
                                                                      
                       }                   
                    });
                    _ReadData=null; 
                }                 
                    
               

            }
            //_Obj=null;
            _TDataSource=null
        }
        

        ///<summary>
        ///替换原控件形态
        ///</summary>
        this.Replace=function(_ObjId,_DataSource,_NewBindObj,_ListPage){
            var _Obj=E$(_ObjId);
            var _Width=_Obj.offsetWidth;
            var _Height=_Obj.offsetHeight;
            var _Style=_Obj.style.cssText;
            var _Class=_Obj.className;
            var _ButTop=2;//parseInt(_Height/2)-6;            
            if(_Obj){
                //预备外部和SELECT对象提供的数据
                _DataSource=(_DataSource||_Obj['datasource']||(_ObjId+'_Ds'));
                _self.NewBindObj=_NewBindObj;
                _self.LoadItemData(_ObjId,_DataSource,true,true);
                var _Dstyle='padding:0;margin:1px 0;height:'+(_Height+2)+'px;line-height:'+_Height+'px;position:relative;display:inline-block;';
                var _Istyle='display:inline-block;position:relative;line-height:'+_Height+'px;'+_Style;
                var _Sstyle='margin:0;padding:0;background-repeat:no-repeat;cursor:pointer;display:block;overflow:hidden;position:absolute;text-decoration:none;right:2px;top:15%;';                
                var _outerHtml='<span id="{0}_div" class="DSelect_div" style="'+_Dstyle+'">';
                _outerHtml+='<input id="{0}_Hd" name="{0}_Hd" type="hidden" value="{1}"/><input id="{0}" name="{0}" type="text" value="{1}" class="'+_Class+'" style="'+_Istyle+'"  readonly="true" key="-1" datasource="{2}" next="{3}"  onclick="JDropdownlist.Show(\'{0}\',\'{2}\',\'{3}\');"/>';// 
                _outerHtml+='<span class="DSelect_span" style="'+_Sstyle+'" onclick="JDropdownlist.Show(\'{0}\',\'{2}\',\'{3}\',{4});" onblur="JDropdownlist.Blur()"></span></span>';                
                _outerHtml=StrFt$(_outerHtml,_ObjId,'请选择',(_DataSource||''),(_NewBindObj||''),(_ListPage||'null'));               
                if(_Obj.outerHTML){                    
                    _Obj.outerHTML=_outerHtml;
                }else{
                    _Obj=EBM$(_ObjId);
                    _Obj.outerHTML(_outerHtml);
                }
            }      
            _Obj=null;      
        }
        
        ///<summary>
        ///显示列表
        ///</summary>
        this.Show=function(_BindObj,_DataSource,_NewBindObj,_ListPage){     
      
            var _ListFrame=E$(_self.Id);
            var _BindObjId=(_BindObj['id']||_BindObj);
            _self.NewBindObj=_NewBindObj;
            _self.ListPage=(_ListPage||_self.ListPage);
            _self.LoadItemData(_BindObjId,_DataSource,false);
            if(_self.ListData){
                if(!_ListFrame){
                    _self.BindObj=_BindObjId;
                    _self.Create();                
                }else{
                    _self.ListCpage=1;//当前页
                    if(_self.BindObj==_BindObjId){
                        _self.ReBuildWinListItem();
                    }
                    else{
                        _self.BindObj=_BindObjId;
                        _self.Create(); 
                    }
                    _self.State=true;             
                }
            }
            _self.BindEvents();
            _ListFrame=null;
        }
        ///<summary>
        ///创建主体
        ///</summary>
        this.Create=function(){//JDropdownlist.Create();                            
            var _ListObj=E$(this.Id);
            this.Init();            
            var _Parameter={};                 
            _Parameter['outhtml']=this.BuildWinBody();  
            _Parameter['width']=this.Width;
            _Parameter['height']=this.Height;
            _Parameter['left']=this.Left;
            _Parameter['top']=this.Top;
            _Parameter['display']='block';
            Receptacle.Create(this.Id,_Parameter,null,null,this.AddStyle);//创建下拉框
            _Parameter=null; 
            _ListObj=null;                   
        }
        
        ///<summary>
        ///生成列表项目  
        ///</summary>
        this.BuildWinListItem=function(){    
              var _WinListLiFormat='<li id="'+this.Id+'_Item_{2}" value="{3}" {1}><a href="" onclick="return false;">{0}</a></li>\n';
              var _WinListContent="";
              var _SItem=0;
              var _EItem=this.ListCount-1;
              var PageCountY=this.ListCount%this.ListPageSize;
              this.ListPageCount=(PageCountY==0?this.ListCount/this.ListPageSize:parseInt(this.ListCount/this.ListPageSize)+1);
              if(this.ListCpage<=this.ListPageCount&&this.ListCpage>0){
                if(this.ListPage){
                  _SItem=((this.ListCpage-1)*this.ListPageSize);
                  var _Titem=(this.ListCpage*this.ListPageSize);
                  _EItem=(_Titem>this.ListCount?this.ListCount:_Titem)-1;
                }
                this.ListCSItem=_SItem;//当前页开始记录
                this.ListCEitem=_EItem;//当前页结束记录
                this.Height=((_EItem-_SItem)==0?1:(_EItem-_SItem+1))*20+(this.ListCpage>this.ListPageCount?18:2);
                var i=1;
                if(this.ListDataArray&&this.ListValueArray&&this.ListDataArray.length!=0&&this.ListValueArray.length!=0){
                    for(var j=_SItem;j<=_EItem;j++){
                      _WinListContent+=StrFt$(_WinListLiFormat,this.ListDataArray[j],(i==this.ListCItem?'class="s"':''),i,this.ListValueArray[j]);
                      i++;
                    }
                }
              }
           
            return _WinListContent;
        };     
        ///<summary>
        ///重新构建窗体列表
        ///</summary>
        this.ReBuildWinListItem=function(){            
            var _ListBody=FE$(this.Id,this.Id+'_Body');
            var _ListFrame=E$(this.Id);
            if(_ListFrame&&_ListBody){     
                var _ReObj=E$(this.BindObj);
                var _Loc=ELC$(_ReObj);
                _Loc[1]+=_ReObj.offsetHeight+1;         
                _ListBody.innerHTML=this.BuildWinListItem();
                _ListFrame.style.left=_Loc[0]+'px';
                _ListFrame.style.top=_Loc[1]+'px';
		        _ListFrame.style.height=this.Height+'px';	
		        _ListFrame.style.display='block'; 	        
            }
            _ListBody=null;
            _ListFrame=null;
        }   
        ///<summary>
        ///构建窗体列表
        ///</summary>
        this.BuildWinBody=function(){
            var _BodyFormat='<div id="{1}" class="DL_YBorder"><div class="DL_LBorder">\n{0}</div></div>';
            var _WinListContent='<ul id="'+this.Id+'_Body'+'" class="DL_Body">\n'+this.BuildWinListItem()+'</ul>\n'; 
            var _ButtonLiFormat='<li><a id="{1}" href="" onfocus="this.blur();">{0}</a></li>\n';            
            if(this.ListPage&&this.ListShowTool&&this.ListCount>this.ListPageSize){ //
              var _Buttons=new Array('\u300a','\u3008','S','\u3009','\u300b');//\u300a\u3008\u3009\u300b            
              var _List='';
              for(var _Tli=0;_Tli<_Buttons.length;_Tli++){
                _List+=StrFt$(_ButtonLiFormat,_Buttons[_Tli],this.Id+'_ToolsButton_'+_Tli);
              }
              _WinListContent+='<div class="DL_Tools"><ul>\n'+_List+'</ul></div>\n';              
              _Buttons=null;
              _ButtonEvents=null;              
            } 
            return StrFt$(_BodyFormat,_WinListContent,this.Id);  
         };
        ///<summary>
        ///
        ///</summary>
        this.ChangeSelect=function(_OleItem){       
            var _OleObj=FEBM$(this.Id,this.Id+'_Item_'+_OleItem);     
            var _NewObj=FEBM$(this.Id,this.Id+'_Item_'+this.ListCItem);
            _OleObj&&_OleObj.setClass('');
            _NewObj&&_NewObj.setClass('s');
            _OleObj=null;
            _NewObj=null;            
       }
        ///<summary>
        ///
        ///</summary>
       this.SureSelect=function(){
            var _LBObj=E$(_self.BindObj);
            var _LBObj_Hd=E$(_self.BindObj+'_Hd');
            //alert(_self.BindObj);
            var _ValueObj=FE$(_self.Id,_self.Id+'_Item_'+_self.ListCItem);
            var _Value=Str$(_ValueObj.innerText||_ValueObj.textContent).Trim();
          
            if(_LBObj&&_ValueObj){
                _LBObj.attributes["key"].value=_ValueObj.attributes["value"].value;
                _LBObj.attributes["value"].value=_Value;
                _LBObj_Hd.attributes["value"].value=_ValueObj.attributes["value"].value;
                
            }            

            if(_LBObj.attributes["next"].value){//激活下一个对象
                var _Tobj=E$(_LBObj.attributes["next"].value);
                var _Tobj_Hd=E$(_LBObj.attributes["next"].value+'_Hd');
                
                this.Close();
                if(_Tobj){
                    _Tobj.attributes["value"].value='请选择';
                    _Tobj.attributes["key"].value='-1';
                    _Tobj_Hd.attributes["value"].value='-1';
                    if(document.all){
                        _Tobj.fireEvent("onclick"); 
                    } else { 
                        var _Tevent=document.createEvent('MouseEvent');
                        _Tevent.initEvent('click',false,false); 
                        _Tobj.dispatchEvent(_Tevent); 
                        _Tevent=null;
                    } 

                }
                _Tobj=null;                
            }else{
                this.Close();
            }
            _LBObj=null;
            _ValueObj=null;
      }
      ///<summary>
      ///绑写控制栏按钮事件
      ///</summary>
      this.BindEvents=function(){  
            if(this.BindObjs.indexOf('|'+this.BindObj+'|')==-1){
                this.BindObjs+=(this.BindObjs==''?'|':'')+this.BindObj+'|';
            }else{
                return;
            }
            _TLEvent=this.ToolEvent;
            for(var i=0;i<5;i++){
                var _TBObj=FEBM$(this.Id,this.Id+'_ToolsButton_'+i);                
                _TBObj&&_TBObj.addEvent('click',_TLEvent); 
                
                _TBObj=null;               
            }         
            var _LBObj=EBM$(this.BindObj);
            _TEvent=this.MoveEvent;
            if(_LBObj){
                _LBObj.addEvent('keydown',_TEvent); 
                _LBObj.addEvent('blur',_TEvent); 
            }
            _LBObj=null;
            var _LBody=FEBM$(this.Id,this.Id+'_Body');
            if(_LBody){
                _LBody.addEvent('mouseover',_TEvent); 
                _LBody.addEvent('click',_TEvent); 
            } 
            _LBody=null;           
       }
        ///<summary>
        ///取消事件绑定
        ///</summary>
       this.RemoveEvents=function(){
            if(_self.BindObjs.indexOf('|'+_self.BindObj+'|')!=-1){
                _self.BindObjs=_self.BindObjs.replace('|'+_self.BindObj+'|','|');
            }
            for(var i=0;i<5;i++){
                var _TBObj=FEBM$(_self.Id,_self.Id+'_ToolsButton_'+i);                
                _TBObj&&_TBObj.removeEvent('click',_TLEvent); 
                _TBObj=null;               
            } 
            var _LBObj=EBM$(_self.BindObj);
            if(_LBObj){
                _LBObj.removeEvent('keydown',_TEvent); 
                _LBObj.removeEvent('blur',_TEvent); 
            } 
            var _LBody=FEBM$(_self.Id,_self.Id+'_Body');
            if(_LBody){
                _LBody.removeEvent('mouseover',_TEvent); 
                _LBody.removeEvent('click',_TEvent); 
            } 
            _LBObj=null;
       }
       this.Close=function(_Name){
            var _ListFrame=E$(_Name||_self.Id);
		    _ListFrame&&(_ListFrame.style.display='none');		  
		    _ListFrame=null; 
		    _self.State=false;
		    _self.ListData=null;//清空历史数据		    
            _self.NewBindObj='';
		    window.clearTimeout(_self.BlurTimer);
		    _self.RemoveEvents();	 
		    if(Br$('ie')){CollectGarbage(); }
        }
       this.Blur=function(){        
          if(Br$('ie')){
            _self.BlurTimer=window.setTimeout('JDropdownlist.Close("'+_self.Id+'")',_self.OutTimer);
          }else{
            _self.BlurTimer=window.setTimeout(JDropdownlist.Close,_self.OutTimer,_self.Id);
          }          
       }
        ///<summary>
        ///绑定方向键事件
        ///</summary>
       this.MoveEvent=function(evt){
          var _InputNum=evt.keyCode;
          var _t=_self.ListCEitem-_self.ListCSItem+1;
          var OleItem=_self.ListCItem;          
          if(evt.type=='click'){
              var _Obj=(evt.srcElement||evt.target);
              _Obj&&(_Obj=(_Obj.parentElement||_Obj.parentNode));
              if(_Obj&&_Obj.id.indexOf('_Item_')!=-1){
                var _TId=_Obj.id.replace(/.+_Item_/,"");
                _self.ListCItem=_TId;
                _self.ChangeSelect(OleItem);
                var _LBObj=FEBM$(_self.Id,_self.BindObj);
                _LBObj&&_LBObj.focus();
                _self.SureSelect();
              }
          }
          else if(evt.type=='blur'){
            _self.Blur();
          }
          else if(evt.type=='mouseover'){
            _self.ListCItem=0;
            _self.ChangeSelect(OleItem);
            window.clearTimeout(_self.BlurTimer);
          }
          else if(evt.type=='keydown'){
              if(_InputNum==38)
              {//向上
                _self.ListCItem--;
                _self.ListCItem=(_self.ListCItem<1?_t:_self.ListCItem);
                _self.ChangeSelect(OleItem);
                if(!_self.State){
                    _self.ReBuildWinListItem();
                }
              }
              else if(_InputNum==40)
              {//向下
                _self.ListCItem++;            
                _self.ListCItem=(_self.ListCItem>_t?1:_self.ListCItem);
                _self.ChangeSelect(OleItem);
                if(!_self.State){
                    _self.ReBuildWinListItem();
                }
              }
              else if(_InputNum==13)
              {//回车
                _self.SureSelect();
              }
          }
        }
        ///<summary>
        ///控制栏按钮事件处理方法
        ///</summary>
        this.ToolEvent=function(e){
          window.clearTimeout(_self.BlurTimer);       
          var evtobj=FEEG$(_self.Id,e);
          var Cobj=evtobj["id"];                      
          if(Cobj){
            var _TNum=Cobj.replace(/.+_ToolsButton_/,"");
            switch(_TNum){
            case "0":
              _self.ListCpage=1;
              break ;
            case "1":
              if(_self.ListCpage-1>0){
                _self.ListCpage--;
              }
              break ;
            case "2":
              //Cobj.toggleClass("Bt3B");
              _self.SelectBtState=!_self.SelectBtState;
              break ;
            case "3":
              if(_self.ListCpage+1<=_self.ListPageCount){
                _self.ListCpage++;
              }
              break ;
            case "4":
              _self.ListCpage=_self.ListPageCount;
              break ;
            }
          }
          _self.ReBuildWinListItem();
          evtobj=null;
          Cobj=null;
          FEEC$(_self.Id,e);//取消事件
        };              
        
        
    }
    
}


///<summary>
/*
日历制作思路：
1。调用Receptacle（下拉类）的静态方法，在BODY里插入一个IFARME，将样式表、日历的操作控件部分和星期拼构成HTML字串写入IFARME
2。然后通过已知的年月或当天年月求出当月的第一天是星期几，最后一天是星期几，然后分别在当月的第一天前和最后一天后加上对应个数的<li>，以占位的形式将当月的第一天挤到对应的星期几
比如(以0为占位，当月第一天星期2,当月共有28天)：0,0,1,2,3...28,0,0;
把当月的日和占位符（其实都为LI只是样式不同，没有内容而已）拼构成字串写入IFARME指定DIV中；
3。当前月和年的修改都会重复第2个步骤
注：日历名中不能有下划线
*/
///</summary>

function Calendar()
{ 
    Calendar.Timer;
    Calendar.SitePath=SiteConfig.SiteRoot;//站点目录的位置，用于定位背景图片文件
	var _Today = new Date();
	var _CDay = _Today.getDate();
	var _CWeek=_Today.getDay();		
	var _self=this;
	var dayNames = ['\u65e5','\u4e00','\u4e8c','\u4e09','\u56db','\u4e94','\u516d'];//对中的中文星期日到星期六
	var ev_Mousover=null;
	var ev_Mousout=null;		
	var ev_ChangeValue=null;
	
	
	this.Name='CalendarDt';
	this.Year=_Today.getYear();
	this.Month=_Today.getMonth();
	this.Day=_CDay;
	this.BHistory=true;//如果赋假值则在日历盘中历史日期无法选择
	this.CallBack=null;//当选择一个正常的日期后所做的操作
	this.Left=0;
	this.Top=0;
	this.Width=137;
	this.Height=135;
	this.CDate=_Today;//用于暂存当前的年月
	this.NM_BM_P='C_IMonth_P';
	this.NM_BM_N='C_IMonth_N';
	this.NM_IY='C_IYear';
	this.NM_IM='C_IMonth';
	this.NM_Body='C_Body';
	this.ReObjId='';		
	this.OutTimer=200;
	this.AddStyle='';
    

    ///<summary>
    ///给指定的方法对象绑定bind方法，拼构样式表
    ///</summary>
	this.Init=function(){
	    Calendar.Timer&&window.clearTimeout(Calendar.Timer)        
        ev_Mousover=this.Emousover;
        ev_Mousout=this.Emousout;		
        ev_ChangeValue=this.ChangeValue;
        var _AS='';
        _AS+='*{margin: 0;padding: 0;}';
        _AS+='body{background-color: Transparent;font-size: 12px;font-family: "宋体";}';
        _AS+='.Calendar{width: 134px;border: #D6D6D6 solid 1px;display: table;background-image: url('+Calendar.SitePath+'Scripts/Source/cbg.gif);}';//界面上的亮色在些修改，这里默认是蓝色
        _AS+='.Calendar li{width: 18px;height: 18px;display: block;float: left;list-style-type: none;line-height: 18px;text-align: center;margin-left: 1px;}';
        _AS+='.Calendar ul{width: 134px;display: table;color: #FFFFFF;}';
        _AS+='.Calendar .Nav{border-bottom: none;padding-top: 1px;border-right: #898989 solid 1px;}';
        _AS+='.Calendar .Nav a{color: #FFFFFF;text-decoration: none;text-align: center;display: block;width: 100%;height: 18px;}';
        _AS+='.Calendar .Nav a: hover{color: #E7E3DB;}';
        _AS+='.Calendar .Nav input{padding: 0;border: solid 1px #CCCCCC;text-align: center;color: #4D4D4D;height: 13px;font-size: 12px;font-family: "宋体";filter: alpha(opacity=80);/*IE*/-moz-opacity: 0.8;/*MOZ , FF*/opacity: 0.8;/*CSS3, FF1.5*/}';
        _AS+='.Calendar .Nav li.Nav_IY{width: 36px;}';
        _AS+='.Calendar .Nav li.Nav_IY input{width: 30px;}';
        _AS+='.Calendar .Nav li.Nav_IM input{width: 16px;}';
        _AS+='.Calendar .WNav{border-right: #898989 solid 1px;}';
        _AS+='.Calendar .WNav li{margin: 0;padding: 0;margin-left: 1px;}';
        _AS+='.Calendar .DNav{border-bottom: #898989 solid 1px;border-right: #898989 solid 1px;background-color: #FFFFFF;}';
        _AS+='.Calendar .DNav li{border-top: #EBEBEB solid 1px;border-left: #EBEBEB solid 1px;margin: 0;background-color: #FFFFFF;color: #6C6C6C;cursor: pointer;display: block;float: left;position: relative;}';
        _AS+='.Calendar .DNav li.C{border-top: #B5B5B5 solid 1px;border-left: #B5B5B5 solid 1px;background-color: #EBEBEB;color: #464646;cursor: pointer;}';
        _AS+='.Calendar .DNav li.H{color: #CCCCCC;cursor: default;}';
        _AS+='.Calendar .DNav li.N{cursor: default;}';
        this.AddStyle=_AS;
	}
    ///<summary>
	//创建日历面板
	//_y:年
	//_m:月
	//功能：拼构日历的操作区和星期区，并写入一个IFRAME对象中
    ///</summary>
	this.Create=function(_y,_m){
	    this.Init();
	    var outHtml='';
        outHtml+='<div id="'+this.Name+'" class="Calendar">';
        outHtml+='<ul class="Nav">';
        outHtml+='<li class="Nav_P"><a id="'+this.NM_BM_P+'" href="#"><</a></li>';
        outHtml+='<li class="Nav_IY"><input id="'+this.NM_IY+'" type="text" value="" maxlength="4" /></li>';
        outHtml+='<li class="Nav_TY">年</li>';
        outHtml+='<li class="Nav_IM"><input id="'+this.NM_IM+'" type="text" value="" maxlength="2"/></li>';
        outHtml+='<li class="Nav_TY">月</li>';
        outHtml+='<li class="Nav_N"><a id="'+this.NM_BM_N+'" href="#">></a></li>';
        outHtml+='</ul>';
        outHtml+='<ul class="WNav">';
        outHtml+='<li>'+dayNames.join('</li><li>')+'</li>';//生成星期标题
        outHtml+='</ul>';
        outHtml+='</div> ';
        var _Parameter={};
        _Parameter['width']=this.Width;
        _Parameter['height']=this.Height;
        _Parameter['left']=this.Left;
        _Parameter['top']=this.Top;
        _Parameter['display']='block';
        _Parameter['outhtml']=outHtml;   
        _y&&(this.Year=_y);
        _m&&(this.Month=_m);                     
        Receptacle.Create(this.Name,_Parameter,null,null,this.AddStyle);//创建下拉框            
        this.GenerateBody(this.Name,this.Year,this.Month);
        this.BindOpEvent();      
        outHtml=null;
	}
    ///<summary>
    //生成日期盘
    ///</summary>
	this.GenerateBody=function(_Name,_Year,_Month){
	    var _TCalendar=FEBM$(_Name,_Name);		    
	    var _CIYear=FE$(_Name,this.NM_IY);
	    var _CIMonth=FE$(_Name,this.NM_IM);		    
	    if(_TCalendar){
	    	var _TDate=getDate();//当前日期，不含时间
	        var _CDate=this.CDate;//取出当前月日并写入控件
	        !_Year&&(_Year=_CDate.getYear());//当改变年份时用-1代月
	        _Month==-1&&(_Month=_CDate.getMonth());//当改变年份时用-1代月
	        _CIYear&&(_CIYear.value=getYear(_Year,1));
	        _CIMonth&&(_CIMonth.value=_Month+1);		        
	        this.CDate=new Date(getYear(_Year,1),_Month);//自定义日期对象是不同浏览器的参数同为正常日期格式
	        var outCalenderHtml='';
	        var _NDays=monthDayCount(_Year,_Month);//当月共有多少天
	        var _SWeek=getWeek(_Year,_Month);//当月的1号星期几
		    var _EWeek=getWeek(_Year,_Month,_NDays);//当月最后一天星期几
	        var _EDayCount=6-_EWeek;//日期未尾应该生成几个空格		        
	        var _CBody=FE$(_Name,this.NM_Body);		        
	        _CBody&&_TCalendar.removeChild(_CBody);//如果日历盘存在则删除，FireFox中用innerHTML插入的LI不支持 FLOAT，只有将对象删除后再创建，对象才能正确应用样式
	        outCalenderHtml+='<ul id="'+this.NM_Body+'" class="DNav">';
	        for(var t=1;t<=_SWeek;t++){outCalenderHtml+='<li class="N" ></li>';}//月前占位
	        for(var i=1;i<=_NDays;i++){
	            var _IDate=new Date(_Year,_Month,i);		            
	            var _Style=(this.BHistory&&_IDate<_TDate)?'class="H"':((_IDate.toString()==_TDate.toString())?'class="C"':'');
	            outCalenderHtml+='<li '+_Style+'>'+i+'</li>';
	        }//日期					
	        for(var j=0;j<_EDayCount;j++){outCalenderHtml+='<li class="N"></li>';}//月尾占位
	        outCalenderHtml+='</ul>';	
	        _TCalendar.insertHTML("beforeEnd",outCalenderHtml);
	        _CBody=FEBM$(_Name,this.NM_Body);
            _CBody&&_CBody.addEvent('click',this.BodyClick);   
            var _TIfarme=E$(_Name);_TIfarme&&(_TIfarme.style.height=((_SWeek+_NDays+_EDayCount)>35?154:135)+'px');//据内容改变列表高度
	        _TIfarme=null;         
		    _TDate=null;	
		    _CDate=null;
		    _CBody=null;	    
		}
	    _CIYear=null;
	    _CIMonth=null;
	    _TCalendar=null;
	}
/*------*/
    ///<summary>
	//滚轮、控制按钮修改当前日期
    ///</summary>
	this.ChangeValue=function(evt,value){		
	    window.clearTimeout(Calendar.Timer);
        var _value=(evt.wheelDelta||value);            
        var _Name=_self.Name;
        var _Ope=FEEG$(_Name,evt);
        var _TCalendar=FE$(_Name,_Name);
        var _CIYear=FE$(_Name,_self.NM_IY);
        var _CIMonth=FE$(_Name,_self.NM_IM);
        var _AYear=0;//追加年份
        var _CDate=_self.CDate;//getCDate(_TCalendar.getAttribute('CDate'));//取出当前月日并写入控件
        var _month=_CDate.getMonth();
        var _year=_CDate.getYear();


        if(evt.type=='change'){
            _year=getYear(parseInt(_CIYear.value));
            _month=parseInt(_CIMonth.value)-1;
        }            
        
        if(_Ope.id.indexOf('_IMonth')!=-1){//则用操作控件中都包括特点字符的共性来区别操作                
            if(_value){if(_value>= 120){_month++;}else if (_value<= -120){_month--;}};
            if(_month>11){_month=0;_AYear=1;}else if(_month<0){_month=11;_AYear=-1;}
            _year+=_AYear;                     
            _self.GenerateBody(_Name,_year,_month);//重新生成日期
        }           
        if(_Ope.id.indexOf('_IYear')!=-1){                	                                
            if(_value){if (_value>= 120){_year++;}else if (_value<= -120){_year--;}};
            var _Tyear=getYear(_year,1);//变为正常格式
            (_Tyear<1900)&&(_Tyear=1900);
            (_Tyear>3000)&&(_Tyear=3000);
            _year=getYear(_Tyear);//还原系统格式
            _self.GenerateBody(_Name,_year,-1);//重新生成日期
        }            
        _Ope=null;   
        _CIYear=null;
	    _CIMonth=null;
	    FEEC$(_Name,evt);//取消滚动事件
    }
    ///<summary>
    //当鼠标滑过日历盘时
    ///</summary>
    this.Emousover=function(evt){
        window.clearTimeout(Calendar.Timer);
    }
    ///<summary>
    //当鼠标离开日历盘时
    ///</summary>
    this.Emousout=function(evt){
        window.clearTimeout(Calendar.Timer);
        var _Reg=new RegExp(_self.NM_BM_P+'|'+_self.NM_BM_N+'|'+_self.NM_IY+'|'+_self.NM_IM);
        var _Aid=document.activeElement.id;
        if(_Aid!=_self.ReObjId&&_Aid!=_self.Name&&!_Reg.test(_Aid)){
            if(Br$('ie')){
                Calendar.Timer=window.setTimeout('Calendar.Close("'+_self.Name+'")', _self.OutTimer);
            }else{
                Calendar.Timer=window.setTimeout(Calendar.Close, _self.OutTimer,_self.Name);
            }
        }            
    }
    ///<summary>
    //关闭日历
    ///</summary>
    this.Eclose=function(){
        Calendar.Close(_self.Name);
    }
    ///<summary>
	//关闭
    ///</summary>
	Calendar.Close=function(_Name){
        var _FCaendar=EBM$(_Name);
	    _FCaendar.style.display='none';		  
	    _FCaendar=null; 
	    ev_Mousover=null;
        ev_Mousout=null;		
        ev_ChangeValue=null;
	    if(Br$('ie')){CollectGarbage(); }
    }
    ///<summary>
	//从字符中分析日期
    ///</summary>
	 Calendar.getCDate=function(_sdate){
	    var _Reg=/\d{4}-(1[0-2]{1}|[1-9]{1})-(3[0-1]{1}|[1-2]{1}[0-9]{1}|[1-9]{1})/i;
	    if(_sdate&&_Reg.test(_sdate)){var _Ds=_sdate.split('-');return new Date(getYear(parseInt(_Ds[0]),1),parseInt(_Ds[1])-1,parseInt(_Ds[2]));}
	    return new Date();
	}
    ///<summary>
	//绑定操作按钮事件，包括单击、滚动修改操作区时日期的向前向后
    ///</summary>
	this.BindOpEvent=function(){
	    var _CIFarme=EBM$(this.Name);
	    var _Reobj=EBM$(this.ReObjId);
	    var _CP=FEBM$(this.Name,this.NM_BM_P);
	    var _CN=FEBM$(this.Name,this.NM_BM_N);		    
	    var _CIYear=FEBM$(this.Name,this.NM_IY);
	    var _CIMonth=FEBM$(this.Name,this.NM_IM);
        _CP&&_CP.addEvent('click',this.PClick);
        _CP&&_CN.addEvent('click',this.NClick);	        
     
        if(_CIFarme){_CIFarme.addEvent('mouseover',ev_Mousover);_CIFarme.addEvent('mouseout',ev_Mousout);}
        if(_Reobj){_Reobj.addEvent('blur',ev_Mousout)}
        if(_CIYear)
        {
            _CIYear.addEvent('mousewheel',ev_ChangeValue);
            _CIYear.addEvent('keydown',this.CheckValue);
            _CIYear.addEvent('change',ev_ChangeValue);
        }
        if(_CIMonth)
        {
            _CIMonth.addEvent('mousewheel',ev_ChangeValue);
            _CIMonth.addEvent('keydown',this.CheckValue);
            _CIMonth.addEvent('change',ev_ChangeValue);
        }
	    _CP=null;
	    _CN=null;
	    _CIYear=null;
	    _CIMonth=null;
	}	
/*------*/
    ///<summary>
	//单击日期后的操作
    ///</summary>
	this.BodyClick=function(evt){            
        var _Name=_self.Name;
        var _Tobj=FEEG$(_Name,evt);//得到事件触发对象
        var _CIYear=FE$(_Name,_self.NM_IY); 
        var _CIMonth=FE$(_Name,_self.NM_IM);                        
        var _Ty=getYear(parseInt(_CIYear.value));
        var _Tm=parseInt(_CIMonth.value)-1;
        var _CToDay=parseInt(_Tobj.innerHTML);//当前选择日
        var _TCDate=getDate();//系统日期，不包含时间
        var _TSDate=new Date(_Ty,_Tm,_CToDay);//面板日期 
        if(_CToDay&&!(_TSDate<_TCDate&&_self.BHistory))
        {
            if(_self.CallBack){_self.CallBack(getYear(_Ty,1),(++_Tm)<10?'0'+_Tm:_Tm,_CToDay<10?'0'+_CToDay:_CToDay);}
            Calendar.Close(_Name);                     
        }
        _Tobj=null;
        _TCDate=null;
        _TSDate=null;
        _CIYear=null;
        _CIMonth=null;
    }
    ///<summary>
    //单击日期后退
    ///</summary>
	this.PClick=function(evt){
	    _self.ChangeValue(evt,-120);//调用方法本为滚轮设计，这里模拟滚轮共用方法，模拟向前
        FEEC$(_self.Name,evt,false);
	}
    ///<summary>
	//单击日期前进
    ///</summary>
	this.NClick=function(evt){
        _self.ChangeValue(evt,120);//模拟向后
        FEEC$(_self.Name,evt,false);
	}
	///检查录入，非数字字符则放弃
	this.CheckValue=function(evt){
        var _InputNum=evt.keyCode;
        var _Value=String.fromCharCode?String.fromCharCode(_InputNum):"";                
        if(!_Value.match(/[0-9]/))
        {
            _InputNum!=8&&_InputNum!=46&&FEEC$(_self.Name,evt,false);
        }		    
	}
    ///<summary>
	///得到名称
    ///</summary>
	function getName(e){
	    var _id='';
	    if(e&&typeof(e) == 'object')
	    {
	    	_id=e.id;
	        if(!_id)
	        {
	            _id=getName(e.parentElement||e.parentNode);
	        }
	        _id.indexOf('_')!=-1&&(_id=_id.substr(0,_id.indexOf('_')));		        	        
	    }
	    return _id;
	}
    ///<summary>
	//每月天数计数
    ///</summary>
	function monthDayCount(_year,_month){			
	    var monthDays =[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
	    _year=getYear(_year,1);//变以正常格式求闰年
		if (((_year % 4 == 0) && (_year % 100 != 0)) || (_year % 400 == 0))
		{//得到闰年二月的天数
			monthDays[1] = 29;
		}
		if(typeof(_month) == 'number'&&_month>=0&&_month<13)
		{
			return monthDays[_month];
		}
		else
		{
			return 0;
		}
	}

    ///<summary>
	//得到星期
    ///</summary>
	function getWeek(_year,_month,_day){
	    var Tdate=new Date(getYear(_year,1),_month,(_day?_day:1));//
	    return Tdate.getDay();
	}
    ///<summary>
	//得到系统年,T为真时返回正常格式
    ///</summary>
	function getYear(_y,_t){
	   var Tdate=new Date();
	    if(Tdate.getYear()>999||_t)
	    {//如果系统日期基于1900		        
	        _y=(_y>999?_y:_y +1900);//ie
	    }
	    else
	    {
	        _y=(_y>999?_y-1900:_y);//ff
	    }
	   return _y;
	}

    ///<summary>
	///得到统一的日期,无时间
    ///</summary>
    function getDate(_y,_m,_d){
      var Tdate=new Date();
      if(_y&&Tdate.getYear()>999){
        //如果系统日期基于1900
        _y=(_y>999?_y:_y+1900);
        //ie
      }else {
        _y=(_y>999?_y-1900:_y);
        //ff
      }
      if(_y&&_m&&_d){
        return new Date(_y,_m,_d);
      }else {
        if(_y&&_m){
          return new Date(_y,_m);
        }else {
          return new Date(Tdate.getYear(),Tdate.getMonth(),Tdate.getDate());
        }
      }
    } 
}	 
/*------*/
///<summary>
///日历类的静态方法，如果页面中同时只出现一个日历可以用此方法
///<summary>
Calendar.Show=function(_ReObj,_CallBack){
    var _Name='CalendarDt';
    var _Loc=ELC$(_ReObj);
    _Loc[1]+=_ReObj.offsetHeight;    
    var Tc=new Calendar();
    Tc.Name=_Name;
    Tc.Left=_Loc[0];
    Tc.Top=_Loc[1];
    Tc.ReObjId=_ReObj.id;
    Tc.BHistory=(arguments[2]||true);
    Tc.CallBack=function(y,m,d){
        _ReObj.value=y+'-'+m+'-'+d;
        _CallBack&&_CallBack(y,m,d);//如果调用SHOW方法的时间传递了回调方法则执行

    }
    var _SDate=Calendar.getCDate((arguments[3]||_ReObj.value));
    Tc.Create(_SDate.getYear(),_SDate.getMonth());
    Tc=null;        
    return true;
}
///<summary>
///联动方式显示日历
///<summary>
Calendar.ShowByLinkage=function(_ReObj,_ReObj2Id){
  var _CallBack=function()
  {        
    var _ReObj2=E$(_ReObj2Id);
    _ReObj2&&_ReObj2.focus();
  }
  Calendar.Show(_ReObj,_CallBack);
  return true;
}
///<summary>
///
///<summary>
Calendar.ShowCss=function(_ReObj,_ReObj2Id,_AA)
{
    var Objs=_AA.split(',');
    Objs[0]=E$(Objs[0]);
    Objs[1]=E$(Objs[1]);
    Objs[2]=E$(Objs[2]);
    var CDate='';
    Objs[0]&&Objs[1]&&Objs[2]&&(CDate=Objs[0].value+'-'+Objs[1].value+'-'+Objs[2].value);        
    var _CallBack=function(y,m,d){
        _ReObj.value=y+'-'+m+'-'+d;
        Objs[0]&&(Objs[0].value=y);
        Objs[1]&&(Objs[1].value=m);
        Objs[2]&&(Objs[2].value=d);
        var _ReObj2=E$(_ReObj2Id);
       _ReObj2&&_ReObj2.focus();
    }
    Calendar.Show(_ReObj,_CallBack,false,CDate);
  return true;
} 



//------------------------------------------------------------------------------------------------



