function popup_calendar(str_target,str_datetime,dotime)
{
	var arr_months=["January","February","March","April","May","June","July","August","September","October","November","December"];
	var week_days=["Su","Mo","Tu","We","Th","Fr","Sa"];
	var n_weekstart=0;
	var dt_datetime=(str_datetime==null||str_datetime==""?new Date():str2dt(str_datetime,dotime));
	var dt_prev_month=new Date(dt_datetime);dt_prev_month.setMonth(dt_datetime.getMonth()-1);
	var dt_next_month=new Date(dt_datetime);dt_next_month.setMonth(dt_datetime.getMonth()+1);
	var dt_firstday=new Date(dt_datetime);dt_firstday.setDate(1);dt_firstday.setDate(1-(7+dt_firstday.getDay()-n_weekstart)%7);
	var dt_lastday=new Date(dt_next_month);dt_lastday.setDate(0);
	var str_buffer="<html><head><title>Calendar</title></head><body bgcolor=white><form name=cal>"+"<table cellspacing=0 border=0 width='100%'><tr><td bgcolor='#cccccc'>"+"<table cellspacing=1 cellpadding=3 border=0 width='100%'>"+"<tr><td bgcolor=\"#cccccc\"><a href=\"javascript:window.opener.popup_calendar('"+str_target+"','"+dt2dtstr(dt_prev_month)+"'+document.cal.time.value,"+dotime+");\">"+"<img src=\"pic-calendar/prev.gif\" border=0 alt=\"previous month\"></a></td>"+"<td bgcolor=\"#cccccc\" colspan=5>"+"<table width='100%'><tr><td align=left><font color=\"#000000\" face=\"tahoma, verdana\" size=2>"+arr_months[dt_datetime.getMonth()]+"</font></td>"+"<td align=right><input type=text name=year size=2 value=\""+dt_datetime.getFullYear()+"\" onfocus='this.select()' onkeypress=\"if(event.keyCode==13){window.opener.popup_calendar('"+str_target+"',this.value+'-06-01'+document.cal.time.value,"+dotime+")}\"></td></tr></table>"+"<td bgcolor=\"#cccccc\" align=right><a href=\"javascript:window.opener.popup_calendar('"+str_target+"','"+dt2dtstr(dt_next_month)+"'+document.cal.time.value,"+dotime+");\">"+"<img src=\"pic-calendar/next.gif\" border=0 alt=\"next month\"></a></td></tr>\n";
	var dt_current_day=new Date(dt_firstday);
	
	str_buffer+="<tr>\n";
	for(var n=0;n<7;n++)
		str_buffer+="	<td bgcolor=\"#eeeeee\">"+"<font color=\"#000000\" face=\"tahoma, verdana\" size=2>"+week_days[(n_weekstart+n)%7]+"</font></td>\n";
	
	str_buffer+="</tr>";
	
	while(dt_current_day.getMonth()==dt_datetime.getMonth()||dt_current_day.getMonth()==dt_firstday.getMonth())
	{
		str_buffer+="<tr>";
		for(var n_current_wday=0;n_current_wday<7;n_current_wday++)
		{
			if(dt_current_day.getDate()==dt_datetime.getDate()&&dt_current_day.getMonth()==dt_datetime.getMonth())
				str_buffer+="	<td bgcolor=\"#FFB6C1\" align=right>";
			else if(dt_current_day.getDay()==0||dt_current_day.getDay()==6)
				str_buffer+="	<td bgcolor=\"#DBEAF5\" align=right>";
			else 
				str_buffer+="	<td bgcolor=white align=right>";
			
			if(dt_current_day.getMonth()==dt_datetime.getMonth())
				str_buffer+="<a href=\"javascript:window.opener.document."+str_target+".value='"+my_format(dt2dtstr(dt_current_day))+"'+document.cal.time.value; window.close();\">"+"<font color=black face=\"tahoma, verdana\" size=2>";
			else 
				str_buffer+="<a href=\"javascript:window.opener.document."+str_target+".value='"+my_format(dt2dtstr(dt_current_day))+"'+document.cal.time.value; window.close();\">"+"<font color=gray face=\"tahoma, verdana\" size=2>";
			
			str_buffer+=dt_current_day.getDate()+"</font></a></td>";
			dt_current_day.setDate(dt_current_day.getDate()+1);
		}
		str_buffer+="</tr>";
	}
	if(dotime==true)
		str_buffer+="<tr><td colspan=7 bgcolor=\"#eeeeee\">"+"<font color=\"#000000\" face=\"tahoma, verdana\" size=2>"+"Time: <input type=text name=time value=\""+dt2tmstr(dt_datetime)+"\" size=8 maxlength=8></font></td></tr>";
	else 
		str_buffer+="<input type=hidden name=time value=\"\">";
	
	str_buffer+="</table></tr></td></table></form></body></html>";
	var vWinCal=window.open("","Calendar","left=320,top=200,width=200,height=250,status=no,resizable=yes");
	vWinCal.opener=self;
	vWinCal.focus();
	var calc_doc=vWinCal.document;
	calc_doc.write(str_buffer);
	calc_doc.close();
}

function str2dt(str_datetime,dotime)
{
	if(dotime==true)
		var re_date=/^(\d{4})\-(\d+)\-(\d+)\s+(\d+)\:(\d+)$/;
	else 
		var re_date=/^(\d{4})\-(\d+)\-(\d+)$/;
		//var re_date=/^(\d+)\/(\d+)\/(\d{4})$/;

	if(!re_date.exec(str_datetime)||str_datetime=="0000-00-00"||str_datetime=="0000-00-00 00:00")
	{
		//alert("Invalid format. Default to present day.");
		return(new Date());
	}
	if(dotime==true)
		return(new Date(RegExp.$1,RegExp.$2-1,RegExp.$3,RegExp.$4,RegExp.$5,RegExp.$6));
	else 
		return(new Date(RegExp.$1,RegExp.$2-1,RegExp.$3));
}

function dt2dtstr(dt_datetime)
{
	return(new String(dt_datetime.getFullYear()+"-"+fixTime((dt_datetime.getMonth()+1))+"-"+fixTime(dt_datetime.getDate())));
}

function dt2tmstr(dt_datetime)
{
	return(new String(" "+fixTime(dt_datetime.getHours())+":"+dt_datetime.getMinutes()));
}

function fixTime(the_time)
{
	if(the_time<10)
	{
		the_time="0"+the_time;
	}
return the_time;
}

function my_format(str_date)
{
	corect_date = str_date;
	var arr = corect_date.split("-"); //arr[0] = year, arr[1] = mounth, arr[2] = day
	corect_date = arr[2]+"/"+arr[1]+"/"+arr[0];   
	return corect_date; 
}
