/*
 * ---------------------------------------------------
 * working well in IE6.0 & Mozilla FireFox 0.93
 * all rights reserved today & tomorrow 
 * ShiRongjiu(TryDoFor)[trydofor.com]
 * Sep. 2004 
 * ----------------------------------------------------
 */

function DateBox(){
var blank="   ";
var startYear = 1930;
var dateObjecArray = new Array();

this.isLeapYear = function(year){
    return year >= 1582 ?
        ((year%4 == 0) && ((year%100 != 0) || (year%400 == 0))) : // Gregorian
        (year%4 == 0); // Julian
}

this.getMonthSize = function (year,month){
    if(year==null||month==null)return 31;
    if(month<8){
        if(month%2==1) return 31;
        else if(month!=2) return 30;
        else return this.isLeapYear(year)?29:28;
    }else{
        return (month%2==0)?31:30;
    }
}

/*
 
*/
this.init = function (y,m,d,s,e,i,b){
    var err="";
    var yObj = document.getElementById(y);
    var mObj = document.getElementById(m);
    var dObj = document.getElementById(d);
    if(yObj==null && mObj==null&&dObj==null){yObj=y;mObj=m;dObj=d;}
    if(!yObj||!yObj.options)err+="[yearobject] is not a <select>\n";
    if(!mObj||!mObj.options)err+="[monthobject] is not a <select>\n";
    if(!dObj||!dObj.options)err+="[dateobjcet] is not a <select>\n";
    if(err!=""){alert(err+"\nfix it first, please:)");return;};
    
    dateObjecArray.push(yObj);
    dateObjecArray.push(mObj);
    dateObjecArray.push(dObj);
    if(b)blank = b;
    
    if(s==null||s<=0)s=startYear;
    myDate=new Date();
    cy=(e==null||e=="" ||isNaN(e))?myDate.getFullYear():e;
    //alert("cy: "+cy);
    dy="";dm="";dd="";
    if((i+="").length==8){
        dy=i.substring(0,4);
        dm=i.substring(4,6);
        dd=i.substring(6,8);
    }
    
    removeOptions(yObj);
    removeOptions(mObj);
    removeOptions(dObj);
    
    newElem=document.createElement("OPTION");
    newElem.text=blank;
    newElem.value="";
    yObj.options.add(newElem);
    
    newElem=document.createElement("OPTION");
    newElem.text=blank;
    newElem.value="";
    mObj.options.add(newElem);
    
    newElem=document.createElement("OPTION");
    newElem.text=blank;
    newElem.value="";
    dObj.options.add(newElem);
    
    for(i=cy;i>=s;i--){
        newElem=document.createElement("OPTION");
        newElem.text=i;
        newElem.value=i;
        yObj.options.add(newElem);
    }
    
    for(i=1;i<=12;i++){
        newElem=document.createElement("OPTION");
        newElem.text=(i<10?("0"+i):i);
        newElem.value=(i<10?("0"+i):i);
        mObj.options.add(newElem);
    }    
    
    for(i=1;i<=this.getMonthSize(dy,dm);i++){
        newElem=document.createElement("OPTION");
        newElem.text=(i<10?("0"+i):i);
        newElem.value=(i<10?("0"+i):i);
        dObj.options.add(newElem);
    }
    yObj.value=dy;
    mObj.value=dm;
    dObj.value=dd;
}

this.update = function(xObj){
    var yObj;
    var mObj;
    var dObj;
    for(i=0;i<dateObjecArray.length;i++){
        if(dateObjecArray[i]==xObj){
           os = i%3;
           yObj =  dateObjecArray[i-os];
           mObj =  dateObjecArray[i+1-os];
           dObj =  dateObjecArray[i+2-os];
           break;    
        }
    }
    
    year=yObj.value;
    month=mObj.value;
    cl=dObj.options.length;
    rl=this.getMonthSize(year,month)+1;
    for(i=rl;i<cl;i++){
        dObj.options[rl]=null;
    }
    for(i=cl;i<rl;i++){
        newElem=document.createElement("OPTION");
        newElem.text=i;
        newElem.value=i;
        dObj.options.add(newElem);
    }
}

function removeOptions(selectId){
    cl=selectId.options.length;
    for(i=0;i<cl;i++){
        selectId.options[0]=null;
    }  
}
}

/*
使用方法： 

基本步骤如下
+ (void) init(y,m,d,s,e,i,b);初始化年月日下拉框。
.. y(ear): 年下拉框的id(string) 或 年下拉框本身(object)
.. m(onth): 月下拉框的id(string) 或 月下拉框本身(object)
.. d(ate): 日下拉框的id(string) 或 日下拉框本身(object)
.. s(tart): 年下拉框中的起始年份，默认为1950(int|string)
.. e(nd): 年下拉框中的终止年份，默认为当前年份(int|string)
.. i(nit): 年月日的初始值，格式为yyyymmdd(int|string)
.. b(land): 空白的样式(string)

+ (void) update(obj);更新年月日下拉框。
.. obj:触发更新事件的下拉框本身(object)

+ (boolean) isLeapYear(year);判断是否是闰年。
.. year:要判断的年份

+ (int) getMonthSize(year,month);取得某年月有多少天
.. year:要判断的年份(int)
.. month:要判断的月份(int)


1. 引入DateBox并取得一个DateBox实例。
<script>myDateBox = new DateBox();</script>
2. 在web页面中，我们加入三个基本的下拉框，并如下设置其id和事件。
<select id ="Y" name="Y" onchange=myDateBox.update(this)'></select>年
<select id ="M" name="M" onchange='myDateBox.update(this)'></select>月
<select id="D" name="D"></select>日
[注]在ie中，可以省略id，单一使用name属性。
3. 把控制权交给DateBox的实例，即初始化。
<script>myDateBox.init("Y","M","D","",1980,20020202);</script>


使用实例： 
实例一，使用字符型参数，传递年月日id
<select id ="Y1" name="Y1" onchange=myDateBox.update(this)'></select>年
<select id ="M1" name="M1" onchange='myDateBox.update(this)'></select>月
<select id="D1" name="D1"></select>日
<script>myDateBox.init("Y1","M1","D1","",1980,20020202);</script>
效果如下：
   1980197919781977197619751974197319721971197019691968196719661965196419631962196119601959195819571956195519541953195219511950年    010203040506070809101112月    01020304050607080910111213141516171819202122232425262728293031日 

实例二，使用下拉框本身，传递年月日object
<select id ="Y2" name="Y2" onchange=myDateBox.update(this)'></select>年
<select id ="M2" name="M2" onchange='myDateBox.update(this)'></select>月
<select id="D2" name="D2"></select>日 
<script>
myDateBox.init(
document.getElementById("Y2"),
document.getElementById("M2"),
document.getElementById("D2"),
2000,"",20030303);
</script>

技巧提示： 
1.form表单中使用。
完全类似上面的使用，只不过要在参数前天上form的id，否则浏览器会找不到：） 
2.浏览器的差异。
由于M$的jscsript和javascript的差异，在ie中使用控件时，可以进行简化，如直接使用id等 ，既可以不用document.getElementById();

*/