<!--
/*
版本:1.0 
最后修改日期:2007-1-29
一个自定义对象
日历表格对象，能在页面中创建一个以月为分界的日历表格，具备翻越月份，年份的功能
在使用此对象之前必须将需要用到的新对象实例名声明为全局变量
在使用此对象之前必须先有一个table对象作为画出日历表格的容器
在使用次对象之前必须有一个对应的文本框用来显示格式化的日期
注意！应该在页面onload事件发生后再创建对象的实例
示例

var biao1对象实例名

<input readonly="true" id="start"> 文本框 对应对象的input属性
<table  border="0" cellspacing="1" cellpadding="1" id="aa"> 对应对象的pObj属性
</table>
*/
//构造器开始
/*
pObjName 装载新对象内容的表格
className 突出显示的单元格的样式名称
objName 本对象的实例名称,用于新日历对象的翻月和翻年的按钮调用本对象的方法
dat 对象范围内的日期变量
style 显示日期号的单元格的样式
inputName 用来显示选中日期的文本输入框的ID
*/
function dateObj(pObjName,className,objName,style,inputName){
this.dat =new Date()//内建的日期对象
this.fdat = new Date()//用来作为月份列表滚动时参照的日期对象，每一次日历重画后该对象复位
this.fdat.setDate(1)
this.yue
this.year
this.objName=objName
this.className=className
this.style=style
this.pObj=document.getElementById(pObjName)//TABLE对象 
this.input=document.getElementById(inputName)//用来显示格式化日期的文本框对象
this.init=init
this.setDat=setDat
this.getDates=getDates
this.getXingqi=getXingqi
this.reDate=reDate
this.output=output
this.reMonth=reMonth
this.createList=createList
this.setDates=setDates
this.init()
//this.setDates
//this.list=eval("document.all."+this.objName+"list")
}
//构造器结束
//成员方法开始***********************
//根据对象的dat属性的值重画表格
function init(){  
  this.getXingqi()
  var obj
  obj=this.pObj
  if(document.all)
   obj.innerText=""
  else
   obj.textContent=""
  var tr=obj.insertRow(-1)
  var td=tr.insertCell(-1)
  td.bgColor="#999999"
  td.height="20"
  td.innerHTML="<div align='center' style='cursor: pointer;z-index:8' onclick='"+this.objName+".reMonth(-1)'><font color='#FFFFFF'><strong>&lt;&lt;</strong></font></div>"
  td=tr.insertCell(-1)
  td.colSpan="5"  
  td.bgColor="#999999"
  //var width=td.clientWidth
  td.innerHTML="<div id='"+this.objName+"list' style='visibility: hidden ;position:absolute; width:auto; z-index:8; background-color: #FFFFFF; layer-background-color: #FFFFFF; border: 1px none #000000;'><table onMouseOver='document.getElementById(\""+this.objName+"list\").style.visibility=\"visible\"' onMouseOut='document.getElementById(\""+this.objName+"list\").style.visibility=\"hidden\"' width='100%' border='0' cellspacing='1' cellpadding='1' id='"+this.objName+"l' bgcolor='#FFFFFF'></table></div><div align='center' onclick='document.getElementById(\""+this.objName+"list\").style.visibility=\"visible\"' style='cursor: pointer;'><font color='#FFFFFF'><strong>"+(this.dat.getMonth()+1)+"月&nbsp;"+this.dat.getFullYear()+"</strong></font></div>"
  td=tr.insertCell(-1)
  td.bgColor="#999999"
  td.innerHTML="<div align='center' style='cursor: pointer;' onclick='"+this.objName+".reMonth(1)'><font color='#FFFFFF'><strong>&gt;&gt;</strong></font></div>"  
  //tr=obj.insertRow(-1)
  //td=tr.insertCell(-1)
  //td.colSpan="7"
  //td.innerHTML="<select id='"+this.objName+"1' onChange='"+this.objName+".setDat(this.value,\"\",\"\")'></select>月&nbsp;<select id='"+this.objName+"2' size='1' onChange='"+this.objName+".setDat(\"\",this.value,\"\")'></select>年&nbsp;<a onclick='"+this.objName+".reDate()' style='cursor: pointer;'>复位</a>"
  tr=obj.insertRow(-1)
  var xq=new Array("日","一","二","三","四","五","六")
  for(var i=0;i<xq.length;i++){
    var td=tr.insertCell(-1)
    td.className=this.className
	if(document.all)
	 td.innerText=xq[i]
	else
     td.textContent=xq[i]
  }  
  this.yue=document.getElementById(this.objName+"1")
  this.year=document.getElementById(this.objName+"2")
 /* 
 for(i=0;i<12;i++){
    var op=document.createElement("option")
	op.value=i
	op.text=i+1
	this.yue.add(op)
	if(this.dat.getMonth()==i)
	  op.selected=true	
  }
  */
  this.createList(0)
  var tianshu=this.getDates(this.dat.getFullYear(),this.dat.getMonth())//指定月份的最大天数
  var xing=this.getXingqi()//每月1号的星期数
  var rqi=0//号数
  var hang//行数
  if(xing>=5&&tianshu>=30)
    hang=6
  else
    hang=5
  for(b=1;b<=hang;b++){
    tr=obj.insertRow(-1)
	for(i=0;i<7;i++){

	  td=tr.insertCell(-1)
	  td.className=this.style
	  if((xing==i||rqi>0)&&rqi<tianshu){
	    rqi++
		td.innerHTML="<div onclick='"+this.objName+".setDat(\"\",\"\","+rqi+");"+this.objName+".output()'>"+rqi+"</div>"
		if(rqi==this.dat.getDate())
		  td.className=this.className
	  }else{
	    td.innerHTML="&nbsp;"
	  }
	}
  }
  tr=obj.insertRow(-1)
  td=tr.insertCell(-1)
  td.className="fuwei"
  td.colSpan="7"

  td.innerHTML="<div align='center'><u><a class='re' onclick='"+this.objName+".reDate()' style='cursor: pointer;' title='复位'>复位</a></u></div>"  
  
document.getElementById(this.objName+"list")
//alert()
document.getElementById(this.objName+"list").style.width=(document.getElementById(this.objName+"list")).parentNode.clientWidth+"px"
}
//创建和滚动月份列表的方法
function createList(v){
  var list=document.getElementById(this.objName+"l")
    //list.innerText=""
	if(v==0){
    tr=list.insertRow(-1)
	td=tr.insertCell(-1)
	td.style.cursor="pointer"
	td.innerHTML="<div align='center' style='' onclick='"+this.objName+".createList(-1)'>∧</div>"
	td.onmouseover=function (){
	  this.bgColor='#EFEFEF'
	}
	td.onmouseout=function (){
	  this.bgColor='#FFFFFF'
	}	
	}

  this.fdat.setMonth(eval(this.fdat.getMonth()-3))
  for(i=1;i<=5;i++){
    this.fdat.setMonth(eval(this.fdat.getMonth()+1))
	if(v==0){
     tr=list.insertRow(-1)
	 td=tr.insertCell(-1)
	}else{
     tr=list.rows[i]
	 td=tr.cells[0]	 
	}
	td.style.cursor="pointer"
	td.innerHTML="<div align='center' onclick='"+this.objName+".setDat("+this.fdat.getMonth()+","+this.fdat.getFullYear()+",\"\")'>"+eval(this.fdat.getMonth()+1)+"月&nbsp;"+this.fdat.getFullYear()+"</div>"
	td.onmouseover=function (){
	  this.bgColor='#EFEFEF'
	}
	td.onmouseout=function (){
	  this.bgColor='#FFFFFF'
	}
  }
  this.fdat.setMonth(eval(this.fdat.getMonth()-2))
  this.fdat.setMonth(eval(this.fdat.getMonth()+v))
  //alert(eval(this.fdat.getMonth()+1)+"月"+this.fdat.getDate()+"日")
  if(v==0){
    tr=list.insertRow(-1)
	td=tr.insertCell(-1)
	td.style.cursor="pointer"
	td.innerHTML="<div align='center' style='' onclick='"+this.objName+".createList(1)'>∨</div>"
	td.onmouseover=function (){
	  this.bgColor='#EFEFEF'
	}
	td.onmouseout=function (){
	  this.bgColor='#FFFFFF'
	}  
   }
}
//加、减月份
function reMonth(v){
 
 var h=this.dat.getDate()//当前号数  
 var m 
 m=this.getDates(this.dat.getFullYear(),eval(this.dat.getMonth()+v))//目标月天数
	//alert("当前号:"+h+"目标月:"+(eval(this.dat.getMonth()+v))+"目标天数:"+m)
 if(h>m)
    this.dat.setDate(m) 
 var nd=new Date(this.dat)
 nd.setMonth(eval(this.dat.getMonth()+v))
 //alert(nd.getFullYear()+"年"+(eval(nd.getMonth())+1)+"月"+nd.getDate()+"号")
 this.setDat(nd.getMonth(),nd.getFullYear(),"")
}

//获得当月1号是星期几的方法
function getXingqi(){
var day=new Date(this.dat.getFullYear(),this.dat.getMonth(),1)
//alert(day.getDay())
return day.getDay()
}
//将当前日期格式化的填入显示日期的文本框 this.input
function output(){
  this.input.value=this.dat.getFullYear()+"-"+(this.dat.getMonth()+1)+"-"+this.dat.getDate()
}
//根据参数设置对象的日期属性，并调用重画表格的方法
function setDat(month,year,date){
  if(date!=""){
    this.dat.setDate(date)
	this.init()
	this.output()
	return
  }
  //如果当前日期号数大于目标月的最大天数，则先将日期对象的号数调整为最后一天
  var h=this.dat.getDate()//当前号数  
  var m
  //alert(month)
  //if(month!=""){
    m=this.getDates(year,month)//目标月天数
	//alert("当前号:"+h+"目标月:"+(eval(month)+1)+"目标天数:"+m)
	if(h>m)
	  this.dat.setDate(m)
	
    this.dat.setMonth(month)
	//}
  //if(year!=""){
    //m=this.getDates(year,this.dat.getMonth())//目标月天数
	//if(this.dat.getDate()>m)
	  //this.dat.setDate(m)	
    this.dat.setYear(year)
    //}
  //alert("当前号:"+h+"目标月:"+(this.dat.getMonth()+1)+"目标天数:"+m)
  //if(h>)
	//this.dat.setDate(this.getDates(this.dat.getFullYear(),this.dat.getMonth()))
  this.init()
  this.output()
}
//获得指定年份月份的最大天数
function getDates(year,month){
//alert(month)
var d= new Date(year,(eval(month)+1),0)
//alert(d.getFullYear()+"年"+(d.getMonth()+1)+"月")
return d.getDate()
}
//将日历表重置为当前系统日期状态
function reDate(){
 this.dat=new Date()
 this.fdat = new Date()//用来作为月份列表滚动时参照的日期对象，每一次日历重画后该对象复位
 this.fdat.setDate(1) 
 this.init()
 this.input.value=""
}

//从外部指定日期生成面板
function setDates(d){
 //alert(d)
 this.dat= d
 this.fdat = d//用来作为月份列表滚动时参照的日期对象，每一次日历重画后该对象复位
 this.fdat.setDate(1) 
 this.init()
 this.input.value=""
}

var rl1,rl2
function jiba(){
rl1=new dateObj("bbb","dd","rl1","r","ff")
rl2=new dateObj("bbb2","dd","rl2","r","ff2")
}
//成员方法结束***********************
-->