兼容多浏览器日期控件

// JScript 文件
var dpcfg = {};
dpcfg.skin = "default";  
dpcfg.dateFmt = "%Y-%M-%D";
dpcfg.showTime = true; 
dpcfg.highLineWeekDay = true;
dpcfg.minDate = "1900-1-1";
dpcfg.maxDate = "2099-12-30";
dpcfg.errDealMode = 0;
dpcfg.errAlertMsg = "不合法的日期格式或者日期超出限定范围,需要撤销吗?";
dpcfg.aWeekStr = ["日","一","二","三","四","五","六"];
dpcfg.aMonStr = ["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一","十二"];
dpcfg.todayStr = "今天";
dpcfg.okStr = "确定";
dpcfg.timeStr = "时间";
dpcfg.monthStr = "月份";
dpcfg.yearStr = "年份";
var $d=null;
function __sb()
{
    this.s=new Array();
    this.i=0;
    this.a=function(t)
    {
        this.s[this.i++]=t;
    };
    this.j=function()
    {
        return this.s.join('');
    };
}

function WdatePicker(el,dateFmt,showTime,skin)
{
    this.win=window;
    this.top=window;
    while(this.top.parent.document!=this.top.document&&this.top.parent.document.getElementsByTagName("frameset").length==0)
    {
        this.top=this.top.parent;
    }
    this.q=new Date();
    this.aa=this.q.getFullYear();
    this.p=this.q.getMonth()+1;
    this.z=this.q.getDate();
    this.be=this.q.getHours();
    this.as=this.q.getMinutes();
    this.bj=this.q.getSeconds();
    this.eCont=(typeof el=='string')?document.getElementById(el):el;
    this.dateFmt=(dateFmt==null)?dpcfg.dateFmt:dateFmt;
    this.showTime=(showTime!=dpcfg.showTime)?showTime:dpcfg.showTime;
    this.skin=(skin==null)?dpcfg.skin:skin;
    var c=this.eCont.getAttribute("MINDATE");
    if(c==null)
    {
        c=dpcfg.minDate;
    }
    if(c.substring(0,1)=='$')
    {
        c=document.getElementById(c.substring(1));
        if(c)
        {
            if(c.getAttribute("REALVALUE")==null||c.getAttribute("REALVALUE")=="")
            {
                c=c.value;
            }
            else
            {
            c=c.getAttribute("REALVALUE");
            }
        }
        else
        {
            c=null
        };
        if(c==null||c=='')
        {
        c=dpcfg.minDate;
        }
    }
    c=c.replace(/#Today/,this.aa+'/'+this.p+'/'+this.z);
    this.minDate=this.aw(c);
    c=this.eCont.getAttribute("MAXDATE");
    if(c==undefined)
    {
        c=dpcfg.maxDate;
    }
    if(c.substring(0,1)=='$')
    {
        c=document.getElementById(c.substring(1));
        if(c)
        {
            if(c.getAttribute("REALVALUE")==null||c.getAttribute("REALVALUE")=="")
            {
                c=c.value;
            }
            else
            {
                c=c.getAttribute("REALVALUE");
            }
        }
        else
        {
            c=null
        };
        if(c==null||c=='')
        {
            c=dpcfg.maxDate;
        }
    }
    c=c.replace(/#Today/,this.aa+'/'+this.p+'/'+this.z);
    this.maxDate=this.aw(c);
    if(this.top.document.dateDiv&&this.top.document.dateDiv.obj.eCont==this.eCont)
    {
        $d=this.top.document.dateDiv;
    }
    else
    {
        this.top.document.dateDiv=null;
    }
    this.cssPath='default/datepicker.css';
    this.highLineWeekDay=dpcfg.highLineWeekDay;
    this.aWeekStr=dpcfg.aWeekStr;
    this.aMonStr=dpcfg.aMonStr;
    this.todayStr=dpcfg.todayStr;
    this.okStr=dpcfg.okStr;
    this.timeStr=dpcfg.timeStr;
    this.bo();
    this.bc(this.eCont.value,this.dateFmt);
    if(this.eCont.value!=''&&this.eCont.getAttribute("REALVALUE")==null&&this.l(this.eCont.value))
    {
        this.am();
    }
    this.bt=this.year;
    this.bq=this.month;
    this.bs=this.date;
    if(this.top.document.dateDiv==undefined)
    {
        this.dd=this.top.document.createElement("DIV");
        this.dd.style.cssText='position:absolute;z-index:197;width:180px;';
        this.dd.obj=this;
        this.dd.className="WdateDiv";
        this.dd.innerHTML=this.aq();
        var bv=this.top.document.createElement('iframe');
        this.dd.ifr=bv;
        var w=this.dd.getElementsByTagName('input');
        this.dd.mInput=w[0];
        this.dd.yInput=w[1];
        var ap=this.dd.getElementsByTagName('div');
        this.dd.mDiv=ap[2];
        this.dd.yDiv=ap[4];
        this.dd.dDiv=ap[5];
        this.dd.tDiv=ap[6].firstChild;
        this.dd.dDiv.innerHTML=this.u();
        this.o=function()
        {
            var evt=$d.obj.top.event;
            var k=(evt.which==undefined)?evt.keyCode:evt.which;
            if(!((k>=48&&k<=57)||(k>=96&&k<=105)||k==8||k==46||k==37||k==39))
            {
                evt.returnValue=false;
            }
        };
        this.dd.mInput.attachEvent('onkeydown',this.o);
        this.dd.yInput.attachEvent('onkeydown',this.o);
        this.dd.yInput.οnblur=function()
        {
            if(parseInt(this.value)!=$d.obj.year)
            {
                $d.obj.redraw();
            }
            this.className='yminput';
        };
        this.dd.mInput.οnblur=function()
        {
            if(this.value>12)
            {
                this.value='12';
            }
            else if(this.value<1)
                {
                this.value='1';
                }
                else if(parseInt(this.value)!=$d.obj.month)
                {
                $d.obj.redraw();
                }
                this.className='yminput';
        };
        this.dd.mInput.οnfοcus=function()
        {
            this.className='yminputfocus';
            this.select();
            $d.obj._fillmonth();
            $d.mDiv.style.display='block';
        };
        this.dd.yInput.οnfοcus=function()
        {
            this.className='yminputfocus';
            this.select();
            $d.obj._fillyear();
            $d.yDiv.style.display='block';
        };
        this.dd.hhInput=w[2];
        this.dd.mmInput=w[4];
        this.dd.ssInput=w[6];
        this.dd.okInput=w[7];
        this.dd.hhInput.οnfοcus=this.dd.mmInput.οnfοcus=this.dd.ssInput.οnfοcus=function()
        {
            this.select();
            $d.obj.currFocus=this;
        };
        this.dd.hhInput.οnblur=function()
        {
            if(parseInt(this.value)>23)
            {
                this.value='23';
            }
            else if(parseInt(this.value)<0)
            {
                this.value='0';
            }
        };
        this.dd.mmInput.οnblur=this.dd.ssInput.οnblur=function()
        {
            if(parseInt(this.value)>59)
            {this.value='59';}
            else if(parseInt(this.value)<0)
            {this.value='0';}
        };
        this.dd.hhInput.attachEvent('onkeydown',this.o);
        this.dd.mmInput.attachEvent('onkeydown',this.o);
        this.dd.ssInput.attachEvent('onkeydown',this.o);
        var bn=this.dd.getElementsByTagName('button');
        this.dd.upButton=bn[0];
        this.dd.downButton=bn[1];
        this.dd.upButton.οnclick=function()
        {
            if($d.obj.currFocus==undefined)
            {$d.obj.currFocus=$d.mmInput;}
            if(($d.obj.currFocus==$d.hhInput&&parseInt($d.obj.currFocus.value)<23)||($d.obj.currFocus!=$d.hhInput&&parseInt($d.obj.currFocus.value)<59))
            {$d.obj.currFocus.value=parseInt($d.obj.currFocus.value)+1;}
            $d.obj.currFocus.focus();
        };
        this.dd.downButton.οnclick=function()
        {
            if($d.obj.currFocus==undefined)
            {
                $d.obj.currFocus=$d.mmInput;
            }
            if(parseInt($d.obj.currFocus.value)>0)
            {
                $d.obj.currFocus.value=parseInt($d.obj.currFocus.value)-1;
            }
            $d.obj.currFocus.focus();
        };
        this.top.document.body.insertAdjacentElement('afterBegin',this.dd);
        this.top.document.body.insertAdjacentElement('beforeEnd',this.dd.ifr);
        this.top.document.dateDiv=this.dd;this.eCont.getValue=function()
        {
            if(this.value=='')
            {
                return '';
            }
            else
            {
                return this.getAttribute("REALVALUE");
            }
        };
        this.eCont.attachEvent('onkeydown',function()
        {
            if($d.style.display!='none')
            {
                var evt=$d.obj.top.event;
                var k=(evt.which==undefined)?evt.keyCode:evt.which;
                if(k==9)
                {evt.returnValue=false;}
            }
        }
        );
    }
    else
    {
        this.dd=this.top.document.dateDiv;
        this.dd.obj.win=this.win;
        this.dd.obj.top=this.top;
        this.dd.obj.eCont=this.eCont;
        this.dd.obj.showTime=this.showTime;
        this.dd.obj.dateFmt=this.dateFmt;
        this.dd.style.display='';
        this.dd.mInput.value=this.month;
        this.dd.yInput.value=this.year;
        this.dd.dDiv.innerHTML=this.u();
        if(this.showTime)
        {
            this.dd.tDiv.style.display='block';
            this.dd.hhInput.value=this.hour;
            this.dd.mmInput.value=this.minute;
            this.dd.ssInput.value=this.sec;
        }
        else
        {
            this.dd.tDiv.style.display='none';
        }
    }
    this.bm();
    this._setOkInput();
    var bp=this.eCont.getBoundingClientRect();
    var mm=$getAbsM(this.top);
    var ar=$getClientWidthHeight(this.top);
    var bd=mm.topM+bp.bottom;
    var br=mm.leftM+bp.left;
    if((bd+parseInt(this.dd.offsetHeight)<(ar.height))||(bd-this.eCont.offsetHeight<this.dd.offsetWidth*0.8))
    {
        this.dd.style.top=(this.top.document.body.scrollTop+bd+1)+'px';
    }
    else
    {
        this.dd.style.top=(this.top.document.body.scrollTop+bd-parseInt(this.dd.offsetHeight)-this.eCont.offsetHeight-3)+'px';
    }
    this.dd.style.left=-1+this.top.document.body.scrollLeft+Math.min(br,ar.width-parseInt(this.dd.offsetWidth)-5)+'px';
    this.dd.ifr.style.cssText='top:'+this.dd.style.top+';left:'+(this.dd.style.left)+';width:'+Math.min(180,(this.dd.offsetWidth-1))+'px;height:'+(this.dd.offsetHeight-1)+'px;position:absolute;z-index:196;overflow:hidden;border:0px;filter:alpha(opacity=0);';
}
   
    WdatePicker.prototype.ba=function()
    {
        var path='';
        var i;
        var scripts=document.getElementsByTagName("script");
        for(i=0;i<scripts.length;i++)
        {
            if(scripts[i].src.substring(scripts[i].src.length-14).toLowerCase()=='wdatepicker.js')
            {
                path=scripts[i].src.substring(0,scripts[i].src.length-14);
                break;
            }
        }
        if(path.indexOf('://')==-1)
        {
            var a=this.top.location.href.toLowerCase();
            var b=location.href.toLowerCase();
            var al='',bl='',bls='';var j,s='';
            for(i=0;i<Math.max(a.length,b.length);i++)
            {
                if(a.charAt(i)!=b.charAt(i))
                {
                j=i;
                while(a.charAt(j)!='/'){if(j==0){break;}j-=1;}
                al=a.substring(j+1,a.length);
                al=al.substring(0,al.indexOf('/'));
                bl=b.substring(j+1,b.length);
                bl=bl.substring(0,bl.indexOf('/'));
                break;
                }
            }
            if(al!='')
            {
                for(i=0;i<al.split('/').length;i++)
                {s+="../";}
            }
            if(bl!='')
            {
                bls=bl.split('/');
                for(i=0;i<bls.length;i++){s+=bls[i]+'/';}
            }
            path=s+path;
        }
        this.cssPath=path+this.skin.toLowerCase()+'/datepicker.css';
    };
   
    WdatePicker.prototype.bo=function()
    {
        if(!$d||($d&&$d.obj.skin!=this.skin))
        {
            if($d){$d.obj.skin=this.skin;}
            this.ba();
            var ay=true;
            for(var i=this.top.document.styleSheets.length-1;i>=0;i--)
            {
                tempStyle=this.top.document.styleSheets[i];
                if(tempStyle.href.substring(tempStyle.href.lastIndexOf('/')+1).toLowerCase()=='datepicker.css')
                {
                    if(tempStyle.href.toLowerCase()==this.cssPath.toLowerCase())
                    {
                        ay=false;
                        tempStyle.disabled=false;continue;
                    }
                    else
                    {
                        tempStyle.disabled=true;
                    }
                }
            }
            if(ay)
            {
                this.top.document.createStyleSheet(this.cssPath);
            }
        }
    };
   
    WdatePicker.prototype.bc=function(str,fmt)
    {
        this.year=this.month=this.date=this.hour=this.minute=this.sec=-1;
        var v=str.split(//W+/);
        var f=fmt.match(/%./g);
        for(var i=0;i<f.length;i++)
        {
            if(v[i])
            {
                if(f[i].toLowerCase()=='%y')
                {
                    this.year=parseInt(v[i],10);
                    if(isNaN(this.year))
                    {
                        this.year=this.aa;
                    }
                }
                else if(f[i]=='%M')
                {
                    this.month=parseInt(v[i],10);
                    if(isNaN(this.month))
                    {
                        this.month=this.p;
                    }
                }
                else if(f[i].toLowerCase()=='%d')
                {
                    this.date=parseInt(v[i],10);
                    if(isNaN(this.date))
                    {
                        this.date=this.z;
                    }
                }
                else if(f[i].toLowerCase()=='%h')
                {
                    this.hour=parseInt(v[i],10);
                    if(isNaN(this.hour)){this.hour=this.be;}
                }
                else if(f[i]=='%m')
                {
                    this.minute=parseInt(v[i],10);
                    if(isNaN(this.minute)){this.minute=this.as;}
                }
                else if(f[i].toLowerCase()=='%s')
                {
                    this.sec=parseInt(v[i],10);
                    if(isNaN(this.sec)){this.sec=this.bj;}
                }
            }
        }
        if(!this.az(this.year+'-'+this.month+'-'+this.date))
        {
            this.year=this.aa;
            this.month=this.p;
            this.date=this.z;
        }
        if((this.hour<0)||(this.hour>23))
        {
            this.hour=this.be;
        }
        if((this.minute<0)||(this.minute>59))
        {
            this.minute=this.as;
        }
        if((this.sec<0)||(this.sec>59))
        {
            this.sec=this.bj;
        }
    };
    WdatePicker.prototype._fillmonth=function()
    {
        var s=new __sb();
        s.a("<table cellspacing=0 cellpadding=2 border=0>");
        var i,n=0,v=parseInt(this.dd.mInput.value);
        var at=new Array(12);
        var t=new Array(12);
        for(i=0;i<11;i++)
        {
            if(i+1==v)
            {
                n=1;
            }
            at[i]=this.aMonStr[n+i];
            t[i]=n+i+1;
        }
        this.year=parseInt(this.dd.yInput.value);
        var af=this.year==this.minDate.year;
        var ae=this.year==this.maxDate.year;
        var mmmy97=af&&ae;
        var ax=(this.year>this.minDate.year&& this.year<this.maxDate.year);
        var ac;
        for(i=0;i<6;i++)
        {
            s.a("<tr><td ");
            ac=(ax)||(!mmmy97&&((af&&t[i]>=this.minDate.month)||(ae&& t[i]<=this.maxDate.month)))||(mmmy97&&(t[i]>=this.minDate.month&& t[i]<=this.maxDate.month));
            s.a((ac)?"class='Wym' οnmοuseοver=/"this.className='WdayOn'/" οnmοuseοut=/"this.className='Wym'/" οnmοusedοwn=/"$d.mInput.value='"+t[i]+"';$d.mDiv.style.display='none';$d.mInput.blur();/"":"class='Winvalidym'");
            s.a(">"+at[i]+"</td>");
            if(i==5)
            {
                break;
            };
            s.a("<td ");
            ac=(ax)||(!mmmy97&&((af&&t[i+6]>=this.minDate.month)||(ae&&t[i+6]<=this.maxDate.month)))||(mmmy97&&(t[i+6]>=this.minDate.month&& t[i+6]<=this.maxDate.month));
            s.a((ac)?"class='Wym' οnmοuseοver=/"this.className='WymOn'/" οnmοuseοut=/"this.className='Wym'/" οnmοusedοwn=/"$d.mInput.value='"+t[i+6]+"';$d.mDiv.style.display='none';$d.mInput.blur();/"":"class='Winvalidym'");
            s.a(">"+at[i+6]+"</td></tr>");
        }
        s.a("<td align=center οnmοuseοver=/"this.className='WymOn'/" οnmοuseοut=/"this.className='Wym'/" οnmοusedοwn=/"$d.mDiv.style.display='none';/">×</td</tr>");
        s.a("</table>");
        this.dd.mDiv.innerHTML=s.j();
    };
    WdatePicker.prototype._fillyear=function(ao,au)
    {
        if(ao==null||au==null)
        {
            var v=parseInt(this.dd.yInput.value);
            ao=v-5;
            au=v+4;
        }
        var i;
        var a=new Array(au-ao);
        for(i=ao;i<=au;i++)
        {
            a[i-ao]=i;
        }
        var n=(a.length/2);
        var s=new __sb();
        var ah;
        s.a("<table cellspacing=0 cellpadding=2 border=0>");
        for(i=0;i<n;i++)
        {
            ah=(a[i]>=this.minDate.year&& a[i]<=this.maxDate.year);
            s.a("<tr><td ");
            s.a((ah)?"class='Wym' οnmοuseοver=/"this.className='WymOn'/" οnmοuseοut=/"this.className='Wym'/" οnmοusedοwn=/"$d.yInput.value='"+a[i]+"';$d.yDiv.style.display='none';$d.yInput.blur();/"":"class='Winvalidym'");
            s.a(">"+a[i]+"</td><td ");
            ah=(a[i+n]>=this.minDate.year&& a[i+n]<=this.maxDate.year);
            s.a((ah)?"class='Wym' οnmοuseοver=/"this.className='WymOn'/" οnmοuseοut=/"this.className='Wym'/" οnmοusedοwn=/"$d.yInput.value='"+a[i+n]+"';$d.yDiv.style.display='none';$d.yInput.blur();/"":"class='Winvalidym'");
            s.a(">"+a[i+n]+"</td></tr>");
        }
        s.a("</table>");
        s.a("<table cellspacing=0 cellpadding=3 border=0><tr><td ");
        s.a((this.minDate.year<ao)?"class='Wym' οnmοuseοver=/"this.className='WymOn'/" οnmοuseοut=/"this.className='Wym'/" οnmοusedοwn='$d.obj._fillyear("+(ao-10)+","+(au-10)+")'":"class='Winvalidym'");
        s.a(">←</td><td class='Wym' οnmοuseοver=/"this.className='WymOn'/" οnmοuseοut=/"this.className='Wym'/" οnmοusedοwn=/"$d.yDiv.style.display='none';$d.yInput.blur();/">×</td><td ");
        s.a((this.maxDate.year>au)?"class='Wym' οnmοuseοver=/"this.className='WymOn'/" οnmοuseοut=/"this.className='Wym'/" οnmοusedοwn='$d.obj._fillyear("+(ao+10)+","+(au+10)+")'":"class='Winvalidym'");
        s.a(">→</td></tr></table>");
        this.dd.yDiv.innerHTML=s.j();
    };
    WdatePicker.prototype._returnDateStr=function(Y,M,D,h,m,s,fmt)
    {
        if(Y==null){Y=this.year;}
        if(M==null){M=this.month;}
        if(D==null){D=this.date;}
        if(h==null){h=this.hour;}
        if(m==null){m=this.minute;}
        if(s==null){s=this.sec;}
        if(fmt==null){fmt=this.dateFmt;}
        var ab=fmt.replace(/%[Yy]/,this.ad(Y,4)).replace(/%[M]/,this.ad(M,2)).replace(/%[Dd]/,this.ad(D,2));
        if(this.showTime)
        {
            ab=ab.replace(/%[Hh]/,this.ad(h,2)).replace(/%[m]/,this.ad(m,2)).replace(/%[Ss]/,this.ad(s,2));
        }
        return ab;
    };
    WdatePicker.prototype.ad=function(s,len)
    {
        s=s+'';
        for(var i=s.length;i<len;i++)
        {s='0'+s;}
        return s;
    };
    WdatePicker.prototype.aw=function(ab)
    {
        if(ab.indexOf(' ')!=-1)
        {
            ab=ab.substring(0,ab.indexOf(' '));
        }
        var s=ab.split(//W+/);
        if(s.length>=3&&this.az(s[0]+'/'+s[1]+'/'+s[2]))
        {
            return{'year':parseInt(s[0],10),'month':parseInt(s[1],10),'date':parseInt(s[2],10)};
        }
        else
        {
            alert("日期范围格式错误/nInvalid MINDATE or MAXDATE/nFormat:YYYY-MM-DD or YYYY/MM/DD");
            return;
        }
    };
    WdatePicker.prototype.am=function(Y,M,D,h,m,s)
    {
        if(this.showTime)
        {
            this.eCont.setAttribute("REALVALUE",this._returnDateStr(Y,M,D,h,m,s,'%Y-%M-%D %h:%m:%s'));
        }
        else
        {
            this.eCont.setAttribute("REALVALUE",this._returnDateStr(Y,M,D,null,null,null,'%Y-%M-%D'));
        }
    };
    WdatePicker.prototype.az=function(ab)
    {
        return ab.match(/^((/d{2}(([02468][048])|([13579][26]))[/-///s]?((((0?[13578])|(1[02]))[/-///s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[/-///s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[/-///s]?((0?[1-9])|([1-2][0-9])))))|(/d{2}(([02468][1235679])|([13579][01345789]))[/-///s]?((((0?[13578])|(1[02]))[/-///s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[/-///s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[/-///s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(/s(((0?[0-9])|([1-2][0-3]))/:([0-5]?[0-9])((/s)|(/:([0-5]?[0-9])))))?$/);
    };
    WdatePicker.prototype.l=function(sDateTime)
    {
        var Y,M,D,h,m,s;
        var v=sDateTime.split(//W+/);
        var f=this.dateFmt.match(/%./g);
        for(var i=0;i<f.length;i++)
        {
            if(f[i].toLowerCase()=='%y')
            {
                Y=Number(v[i]);
                if(isNaN(Y))
                {
                    return false;
                }
            }
            else if(f[i]=='%M')
            {
                M=Number(v[i]);
                if(isNaN(M))
                {
                    return false;
                }
            }
            else if(f[i].toLowerCase()=='%d')
            {
                D=Number(v[i]);
                if(isNaN(D)){return false;}
            }
            else if(f[i].toLowerCase()=='%h')
            {
                h=Number(v[i]);
                if(isNaN(h)){return false;}
            }else if(f[i]=='%m')
            {
                m=Number(v[i]);
                if(isNaN(m)){return false;}
            }else if(f[i].toLowerCase()=='%s')
            {
                s=Number(v[i]);
                if(isNaN(s)){return false;}
            }
        }
        Y=(Y==undefined)?'2000':Y;
        M=(M==undefined)?'1':M;
        D=(D==undefined)?'1':D;
        if(this.az(Y+'-'+M+'-'+D)&&(h==undefined||(h>=0)&&(h<=23))&&(s==undefined||(m>=0)&&(h<=59))&&(s==undefined||(s>=0)&&(s<=59)))
        {
            this.eCont.value=this._returnDateStr(Y,M,D,h,m,s);
            if(((Y*10000+M*100+D*1)>=(this.minDate.year*10000+this.minDate.month*100+this.minDate.date*1))&&((Y*10000+M*100+D*1)<=(this.maxDate.year*10000+this.maxDate.month*100+this.maxDate.date*1)))
            {
                return true;
            }
        }
        return false;
    };
    WdatePicker.prototype.aq=function()
    {
        var s=new __sb();
        s.a("<div id=dpTitle>");
        s.a("<div style='float:left;margin:2px'><div class='ymsel'></div>"+dpcfg.monthStr+"<input class='yminput' style='width:40px;' maxlength=2 value="+this.month+"></div>");
        s.a("<div style='float:right;margin:2px'><div class='ymsel'></div>"+dpcfg.yearStr+"<input class='yminput' style='width:50px;' maxlength=4 value="+this.year+"></div></div>");
        s.a("<div></div>");
        s.a("<div>");
        s.a(this.av());
        s.a("</div>");
        return s.j();
    };
    WdatePicker.prototype.av=function()
    {
        var s=new __sb();
        s.a("<div id=dpTime style='"+((this.showTime)?'':'display:none;')+"float:left;margin-top:3px'><table cellspacing=0 cellpadding=0 border=0><tr><td rowspan=2><span id=dpTimeStr>"+this.timeStr+"</span>");
        s.a(" <input class=tB maxlength=2 value="+this.hour+"><input value=':' class=tm readonly>");
        s.a("<input class=tE maxlength=2 value="+this.minute+"><input value=':' class=tm readonly>");
        s.a("<input class=tE maxlength=2 value="+this.sec+"></td><td>");
        s.a("<button id=dpTimeUp></button></td></tr><tr><td><button id=dpTimeDown></button></td></tr></table></div>");
        s.a("<div style='float:right;margin-top:3px;text-align:right'>");
        s.a("<input id=dpOkInput type=button style='height:20px;width:90%'></input>");
        s.a("</div>");return s.j();
    };
    WdatePicker.prototype._setOkInput=function()
    {
        var d=$d.obj;
        if(d.eCont.value=="")
        {
            if(((this.aa*10000+this.p*100+this.z*1)>=(this.minDate.year*10000+this.minDate.month*100+this.minDate.date*1))&&((this.aa*10000+this.p*100+this.z*1)<=(this.maxDate.year*10000+this.maxDate.month*100+this.maxDate.date*1)))
            {
                $d.okInput.οnclick=function()
                {
                    var d=$d.obj;
                    d.pickDate(d.aa,d.p,d.z,d.be,d.as,d.bj);
                };
            }
            else
            {
                $d.okInput.disabled="disabled";
            }
            $d.okInput.value=d.todayStr+((d.showTime)?"":(" "+d.ad(d.aa,4)+'-'+d.ad(d.p,2)+'-'+d.ad(d.z,2)));
        }
        else
        {
            $d.okInput.οnclick=function()
            {
                $d.obj.pickDate();
            };
            $d.okInput.value=d.okStr;
        }
    };
    WdatePicker.prototype.u=function()
    {
        var e,tempMonth;
        if((this.year*100+this.month*1)<(this.minDate.year*100+this.minDate.month*1))
        {
            this.dd.yInput.value=e=this.minDate.year;
            this.dd.mInput.value=tempMonth=this.minDate.month;
        }
        else if((this.year*100+this.month*1)>(this.maxDate.year*100+this.maxDate.month*1))
        {
            this.dd.yInput.value=e=this.maxDate.year;
            this.dd.mInput.value=tempMonth=this.maxDate.month;
        }
        else
        {
            e=this.year;tempMonth=this.month;
        }
        var bg,bb,lastDay,lastDate;
        var s=new __sb();
        var i,j,k;
        bg=new Date(e,tempMonth-1,1).getDay();
        bb=1-bg;
        lastDay=new Date(e,tempMonth,0).getDay();
        lastDate=new Date(e,tempMonth,0).getDate();
        s.a("<table id=dpDayTable width=100% border=0 cellspacing=0 cellpadding=0>");
        s.a("<tr id=dpWeekTitle align=center>");
        var ss=new Array();
        for(i=0;i<7;i++)
        {
            s.a("<td>"+this.aWeekStr[i]+"</td>");
        }
        var ag='';
        var bu='';
        var bi=((e==this.aa)&&(tempMonth==this.p));
        var bk=((e==this.bt)&&(tempMonth==this.bq));
        var aj=((e*100+tempMonth*1)==(this.minDate.year*100+this.minDate.month));
        var ai=((e*100+tempMonth*1)==(this.maxDate.year*100+this.maxDate.month));
        var ccmy97 = aj&&ai;
        var bh=!aj&&!ai;
        for(i=1,j=bb;i<7;i++)
        {
            s.a("<tr>");
            for(k=0;k<7;k++)
            {
                if(j>=1&&j<=lastDate)
                {
                    if(bk&&(j==this.bs))
                    {
                        ag='Wselday';
                    }
                    else if(bi&&(j==this.z))
                    {
                        ag='Wtoday';
                    }
                    else
                    {
                        ag=((this.highLineWeekDay&&(k==0||k==6))?'Wwday':'Wday');
                    }
                    classOnStr=((this.highLineWeekDay&&(k==0||k==6))?'WwdayOn':'WdayOn');
                    s.a("<td align=center ");
                    if(bh||(!ccmy97&&((aj&&j>=this.minDate.date)||(ai&&j<=this.maxDate.date)))||(ccmy97&&(j>=this.minDate.date)&&(j<=this.maxDate.date)))
                    {
                        s.a("οnclick=/"$d.obj.pickDate(null,null,"+j+");/" ");
                        s.a("οnmοuseοver=/"this.className='"+classOnStr+"'/" ");
                        s.a("οnmοuseοut=/"this.className='"+ag+"'/" ");
                    }
                    else
                    {
                        ag='WinvalidDay';
                    }
                    s.a("class="+ag);
                    s.a("><span>"+j+"</span>");
                }
                else
                {
                    s.a("<td><span></span>");
                }
                j++;s.a("</td>");
            }
            s.a("</tr>");
        }
        s.a("</table>");
        return s.j();
    };
    WdatePicker.prototype.bm=function()
    {
        this.top.$d=this.top.document.dateDiv;
        $d=this.top.$d;
    };
    WdatePicker.prototype.redraw=function()
    {
        this.year=this.dd.yInput.value;
        this.month=this.dd.mInput.value;
        this.dd.dDiv.innerHTML=this.u();
    };
    WdatePicker.prototype.pickDate=function(Y,M,D,h,m,s)
    {
        if(Y==null)
        {
            Y=this.dd.yInput.value;
        }
        if(M==null){M=this.dd.mInput.value;}
        if(D==null){D=this.date;}
        this.year=Y;
        this.month=M;
        this.date=D;
        if(this.showTime)
        {
            if(h==null){h=this.dd.hhInput.value;}
            if(m==null){m=this.dd.mmInput.value;}
            if(s==null){s=this.dd.ssInput.value;}
            this.hour=h;
            this.minute=m;
            this.sec=s;
            this.eCont.value=this._returnDateStr(Y,M,D,h,m,s);
        }
        else
        {
            this.eCont.value=this._returnDateStr(Y,M,D);
        }
        this.am(Y,M,D,h,m,s);
        $d.obj._markValue(true);
        this.dd.style.display='none';
        this.dd.ifr.style.display='none';
    };
    WdatePicker.prototype._markValue=function(bValue)
    {
        if(bValue)
        {
            this.eCont.className=this.eCont.className.replace(/ WdateFmtErr/,'');
        }
        else
        {
            var bf=dpcfg.errDealMode;
            while(true)
            {
                switch(bf)
                {
                    case 0:
                    if(!confirm(dpcfg.errAlertMsg))
                    {
                        bf=2;
                        continue;
                    }
                   
                    case 1:
                    if(this.eCont.getAttribute("REALVALUE"))
                    {
                        this.l(this.eCont.getAttribute("REALVALUE"))
                    }
                    else
                    {
                        this.eCont.value="";
                    }
                    this.eCont.className=this.eCont.className.replace(/ WdateFmtErr/,'');
                    break;
                   
                    case 2:
                    this.eCont.className=this.eCont.className.replace(/ WdateFmtErr/,'');
                    this.eCont.className=this.eCont.className.replace(/Wdate/,'Wdate WdateFmtErr');
                    break;
                }
                break;
            }
        }
    };
    if(navigator.product=='Gecko')
    {
        Window.prototype.__defineGetter__("screenLeft",function(){return this.screenX+(this.outerWidth-this.innerWidth);});
        Window.prototype.__defineGetter__("screenTop",function(){return screenY+(window.outerHeight-window.innerHeight);});
        Document.prototype.attachEvent=function(sType,fHandler){var ak=sType.replace(/on/,"");
        fHandler._ieEmuEventHandler=function(e){window.event=e;return fHandler();};
        this.addEventListener(ak,fHandler._ieEmuEventHandler,false);
    };
    Document.prototype.createStyleSheet=function(cssPath)
    {
        var head=document.getElementsByTagName('HEAD').item(0);
        var style=document.createElement('link');
        style.href=cssPath;style.rel='stylesheet';
        style.type='text/css';head.appendChild(style);
    };
    Event.prototype.__defineSetter__("returnValue",function(value){if(!value){this.preventDefault();}return value;});
    Event.prototype.__defineGetter__("srcElement",function(){var node=this.target;while(node.nodeType!=1){node=node.parentNode;}return node;});
    Node.prototype.replaceNode=function(Node){this.parentNode.replaceChild(Node,this);};
    Node.prototype.removeNode=function(removeChildren)
        {
            if(removeChildren)
            {
                return this.parentNode.removeChild(this);
            }
            else
            {
                var range=document.createRange();
                range.selectNodeContents(this);
                return this.parentNode.replaceChild(range.extractContents(),this);
            }
        };
    HTMLElement.prototype.__defineSetter__("outerHTML",function(sHTML){var r=this.ownerDocument.createRange();r.setStartBefore(this);var df=r.createContextualFragment(sHTML);this.parentNode.replaceChild(df,this);return sHTML;});
    HTMLElement.prototype.__defineGetter__("outerHTML",function(){var attr;var attrs=this.attributes;var str="<"+this.tagName;for(var i=0;i<attrs.length;i++){attr=attrs[i];if(attr.specified){str+=" "+attr.name+'="'+attr.value+'"';}}if(!this.canHaveChildren){return str+">";}return str+">"+this.innerHTML+"</"+this.tagName+">";});HTMLElement.prototype.__defineGetter__("parentElement",function(){if(this.parentNode==this.ownerDocument){return null;}return this.parentNode;});
    HTMLElement.prototype.attachEvent=function(sType,fHandler)
    {
        var ak=sType.replace(/on/,"");
        fHandler._ieEmuEventHandler=function(e){window.event=e;return fHandler();};
        this.addEventListener(ak,fHandler._ieEmuEventHandler,false);
    };
    HTMLElement.prototype.insertAdjacentElement=function(where,parsedNode)
    {
        switch(where)
        {
            case "beforeBegin":
            this.parentNode.insertBefore(parsedNode,this);
            break;
            case "afterBegin":
            this.insertBefore(parsedNode,this.firstChild);
            break;
            case "beforeEnd":
            this.appendChild(parsedNode);
            break;
            case "afterEnd":
            if(this.nextSibling)this.parentNode.insertBefore(parsedNode,this.nextSibling);
            else this.parentNode.appendChild(parsedNode);
            break;
        }
    };
    HTMLElement.prototype.getBoundingClientRect=function()
    {
        var obj=this;
        var top=obj.offsetTop
        ;var left=obj.offsetLeft;
        var right=obj.offsetWidth;
        var bottom=obj.offsetHeight;
        while(obj=obj.offsetParent)
        {
            if(obj.style.position=='absolute'||obj.style.position=='relative'||(obj.style.overflow!='visible'&&obj.style.overflow!=''))
            {
                break;
            }
            top+=obj.offsetTop;left+=obj.offsetLeft;
        }
        left-=document.body.scrollLeft;
        top-=document.body.scrollTop;
        right+=left;
        bottom+=top;
        return{'left':left,'top':top,'right':right,'bottom':bottom};
    };
    HTMLIFrameElement.prototype.__defineGetter__("Document",function(){return this.contentDocument});
}

function $getClientWidthHeight(win)
{
    var cw=win.document.body.clientWidth;
    var ch=win.document.body.clientHeight;
    return{'width':cw,'height':ch};
}

function $getAbsM(topWin)
{
    if(topWin==null)
    {
        topWin=top;
    }
    var leftM=0;
    var topM=0;
    var an=window;
    while(an!=topWin)
    {
        var ifs=an.parent.document.getElementsByTagName('iframe');
        for(var i=0;i<ifs.length;i++)
        {
            try
            {
                if(ifs[i].Document==an.document)
                {
                    var rc=ifs[i].getBoundingClientRect();
                    leftM+=rc.left;
                    topM+=rc.top;
                    break;
                }
            }
            catch(e)
            {
                continue;
            }
        }
        an=an.parent;
    }
    return{'leftM':leftM,'topM':topM};
}

function disposeDatePicker()
{
    if($d!=undefined&&$d.obj!=undefined&&$d.obj.eCont!=window.event.srcElement&&$d.style.display!='none')
    {
        var x=event.clientX;
        var y=event.clientY;
        var rc=$d.getBoundingClientRect();
        if(x<rc.left||x>rc.right||y<rc.top||y>rc.bottom)
        {
            if($d.obj.eCont.value==''||$d.obj.l($d.obj.eCont.value))
            {
                $d.obj._markValue(true);
                if($d.obj.eCont.value!='')
                {
                    $d.obj.bc($d.obj.eCont.value,$d.obj.dateFmt);
                    $d.obj.am();
                }
                else
                {
                    $d.obj.eCont.setAttribute("REALVALUE","");
                }
            }
            else
            {
                $d.obj._markValue(false);
            }
            $d.yDiv.style.display=$d.mDiv.style.display='none';
            $d.ifr.style.display='none';
            $d.style.display='none';
        }
        else
        {
            $d.yDiv.style.display=$d.mDiv.style.display='none';
        }
    }
}

document.attachEvent('onmousedown',disposeDatePicker);

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值