/*****************************************
	DatePullDown [datepulldown.js]
	Version 1.0.0
	(c) 2008 zerohachi co. ltd.
*****************************************/
function DatePullDown(y,m,d){
	var o=new Date();
	this.today={yy:o.getFullYear(),mm:o.getMonth()+1,dd:o.getDate()};
	this.select={yy:parseInt(y)||this.today.yy,mm:parseInt(m)||this.today.mm,dd:parseInt(d)||this.today.dd};
	this.setSelectName();
	this.setYearList();
	this.setDisableFuture(true);
}
DatePullDown.prototype.setSelectName=function(y,m,d){
	this.selectName={yy:y||"year",mm:m||"month",dd:d||"day"};
}
DatePullDown.prototype.setYearList=function(s,e){
	this.yearList={start:s||"-20",end:e||"+10"};
}
DatePullDown.prototype.setDisableFuture=function(v){
	this.disableFuture=v||false;
}
DatePullDown.prototype.writeOption=function(k){
	var v=[];
	switch(k.toString().toLowerCase()){
		case "year":
			v=[this.yearList.start,this.yearList.end,this.select.yy];
			for(var i=0;i<2;i++){
				if(!parseInt(v[i])){v[i]=this.today.yy};
				var m=v[i].toString().substr(0,1);
				v[i]=parseInt(v[i])+((m=="+"||m=="-")?this.today.yy:0);
				if(this.disableFuture&&v[i]>this.today.yy){v[i]=this.today.yy;}
				if(v[i]*[1,-1][i]>this.select.yy*[1,-1][i]){v[i]=this.select.yy;}
			}
			break;
		case "month":
			v=this.isOptionResetList("month");
			break;
		default:
			v=this.isOptionResetList("day");
	}
	var d="";
	for(var i=v[0];i<=v[1];i++){
		var s=(i==v[2])?' selected="selected"':'';
		d+='<option value="'+i+'"'+s+'>'+i+'</option>'+"\n";
	}
	document.write(d);
}
DatePullDown.prototype.isDays=function(y,m){
	y=parseInt(y)||this.select.yy;
	m=parseInt(m)||this.select.mm;
	var d=[31,28,31,30,31,30,31,31,30,31,30,31];
	if(((y%4==0)&&(y%100!=0))||(y%400==0)){d[1]=29;}
	return d[m-1];
}
DatePullDown.prototype.isOptionResetList=function(k){
	var kM=(k.toString().toLowerCase()=="month");
	var v=[];
	v[0]=1;
	v[1]=(kM)?12:this.isDays();
	v[2]=(kM)?this.select.mm:this.select.dd;
	var j1=this.disableFuture;
	var j2=this.select.yy==this.today.yy;
	var j3=(kM)?true:(this.select.mm==this.today.mm);
	if(j1&&j2&&j3){
		v[1]=(kM)?this.today.mm:this.today.dd;
	}
	if(v[1]<((kM)?this.select.mm:this.select.dd)){v[2]=this.select[(kM)?"mm":"dd"]=v[1];}
	return v;
}
DatePullDown.prototype.optionReset=function(o,v){
	o.options.length=0;
	var c=0;
	for(var i=v[0];i<=v[1];i++){
		o.options[c]=new Option(i,i);
		if(i==v[2]){o.options[c].selected=true;}
		c++;
	}
}
DatePullDown.prototype.selectChange=function(o){
	var k=o.name;
	var oa=[];
	while(o.nodeName.toUpperCase()!="FORM"&&o.nodeName.toUpperCase()!=null){
		o=o.parentNode;
		oa.push(o);
	}
	var oF=document[oa[oa.length-1].name];
	var oY=oF[this.selectName.yy];
	var oM=oF[this.selectName.mm];
	var oD=oF[this.selectName.dd];
	this.select={yy:oY.value,mm:oM.value,dd:oD.value};
	if(k==this.selectName.yy){
		var v=this.isOptionResetList("month");
		this.optionReset(oM,v);
	}
	if(k!=this.selectName.dd){
		var v=this.isOptionResetList("day");
		this.optionReset(oD,v);
	}
}
