DatePicker={
	monthnames:['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'],
	calendar:null,
	getDateValue:function(field) {
		if(field.value=='') return null;
		var retval=new Date(field.value);
		if(isNaN(retval)) retval=null;
		return retval;
	},
	getCalendar:function() {
		if(DatePicker.calendar==undefined) {
			DatePicker.calendar=document.createElement('div');
			DatePicker.calendar.setAttribute('id','datepicker_calendar');
			document.body.appendChild(DatePicker.calendar);
		}
		return DatePicker.calendar;
	},
	cached:[],
	get:function(idx) {
		if(DatePicker.cached[idx]==undefined) {
			DatePicker.cached[idx]={
				idx:idx,
				field:document.getElementById('dpkrf_'+idx+'_field'),
				calendar:DatePicker.getCalendar()
			};
		}
		var retval=DatePicker.cached[idx];
		retval.date=DatePicker.getDateValue(retval.field);
		return retval;
	},
	clickIcon:function(idx) {
		var o=DatePicker.get(idx);
		o.field.focus();
		DatePicker.clickField(idx);
	},
	clickField:function(idx) {
		var o=DatePicker.get(idx);
		o.calendar.style.display='block';
		DatePicker.drawCalendar(o);
		var fpos=findPos(o.field);
		o.calendar.style.left=fpos.x;
		o.calendar.style.top=fpos.y;
	},
	blurField:function(idx) {
		var o=DatePicker.get(idx);
		o.calendar.style.display='none';
		if(o.date==null) {
			o.field.value='';
		} else {
			DatePicker.set(o.idx,o.date.getFullYear(),o.date.getMonth(),o.date.getDate());
		}
	},
	changeCalendar:function(idx,y,m) {
		var o=DatePicker.get(idx);
		var d=new Date(y,m,1);
		DatePicker.drawCalendar(o,d);
	},
	drawCalendar:function(o,date) {
		if(date==null) date=o.date;
		if(date==null) date=new Date();
		var html='<table>';
		html+='<tr>';
		html+='<td><a href="void(0);" onmousedown="DatePicker.changeCalendar('+o.idx+','+(date.getFullYear()-1)+','+date.getMonth()+'); return false;">&laquo;</a></td>';
		html+='<td colspan="5" align="center">'+date.getFullYear()+'</td>';
		html+='<td><a href="void(0);" onmousedown="DatePicker.changeCalendar('+o.idx+','+(date.getFullYear()+1)+','+date.getMonth()+'); return false;">&raquo;</a></td>';
		html+='</tr>';
		html+='<tr>';
		html+='<td><a href="void(0);" onmousedown="DatePicker.changeCalendar('+o.idx+','+date.getFullYear()+','+(date.getMonth()-1)+'); return false;">&laquo;</a></td>';
		html+='<td colspan="5" align="center">'+DatePicker.monthnames[date.getMonth()]+'</td>';
		html+='<td><a href="void(0);" onmousedown="DatePicker.changeCalendar('+o.idx+','+date.getFullYear()+','+(date.getMonth()+1)+'); return false;">&raquo;</a></td>';
		html+='</tr>';
		var d=new Date(date.getFullYear(),date.getMonth(),1);
		html+='<tr>';
		for(var i=0;i<d.getDay();i++) html+='<td>&nbsp;</td>';
		var today=new Date();
		var todaysdate=-1;
		if(today.getFullYear()==date.getFullYear() && today.getMonth()==date.getMonth()) todaysdate=today.getDate();
		do {
			if(d.getDay()==0) html+='</tr><tr>';
			html+='<td';
			if(o.date!=null && d.getDate()==o.date.getDate() && d.getMonth()==o.date.getMonth() && d.getFullYear()==o.date.getFullYear()) {
				html+=' class="sel"';
			} else if(d.getDate()==todaysdate) {
				html+=' class="today"';
			}
			html+='><a onclick="return false;" onmousedown="DatePicker.set('+o.idx+','+d.getFullYear()+','+d.getMonth()+','+d.getDate()+'); return true;">'+d.getDate()+'</a></td>';
			d.setDate(d.getDate()+1);
		} while(d.getDate()>1);
		html+='</tr>';
		html+='</table>';
		o.calendar.innerHTML=html;
	},
	set:function(idx,y,m,d) {
		var o=DatePicker.get(idx);
		o.field.value=d+' '+DatePicker.monthnames[m]+' '+y;
	}
}

