// JavaScript Document
// general
function createSelectedList(hiddenSelected,obj){
	hiddenSelected.value = "";
	for(var i in obj.selected){
		if(obj.selected[i]==true){
			hiddenSelected.value += ((hiddenSelected.value.length>0)?",":"") + i;
		}
	}
	if(hiddenSelected.value == "" && obj.emptyvalue){
		hiddenSelected.value = obj.emptyvalue;
	}
}

function allowSelect(selSelected,obj,err){
	if(obj.maxopts){
		var maxopts = parseInt(obj.maxopts.nr);
		if(selSelected.options.length == 1 && selSelected.options[0].value == "") maxopts++;
		if(selSelected.options.length >= maxopts){
			if(err && obj.maxopts.label != "") alert(obj.maxopts.label);
			return false;
		}
	}
	return true;
}

// Parent - Child selects
function writeChildren(selParent,selChildren,obj){
	var i,aChild,txt,pid = selParent.options[selParent.selectedIndex].value;
	var before="",after="";
	if(obj.surround){
		after = obj.surround.after;
		before = obj.surround.before;
	}
	selChildren.length = 0;
	if(aChild = obj.parents[pid]){
		for(i=0;i<aChild.length;i++){
			if(!obj.selected[aChild[i]]==true && obj.children[aChild[i]]){
				if(pid==aChild[i])txt = before + obj.children[aChild[i]] + after;
				else txt = obj.children[aChild[i]];
				selChildren.options[selChildren.length] = new Option(txt,aChild[i],false,false);
			}
		}
	}
	else if((pid=="") && (txt = obj.parentlabel) && txt.length>0) selChildren.options[0] = new Option(txt,"",false,false);
}
function selectChild(selParent,selChildren,selSelected,hiddenSelected,obj){
	var bDeleteFirst = (selSelected.options.length == 1 && selSelected.options[0].value == "");
	var bTransfer = false;
	var bError = true;
	var bParent = false;
	var aChild;
	for(var i=0;i<selChildren.options.length;i++){
		if(selChildren.options[i].value=="") selChildren.options[i].selected = false;
		else if(selChildren.options[i].selected){
			if(allowSelect(selSelected,obj,bError)){
				if(obj.replaceparent && selParent.options[selParent.selectedIndex].value==selChildren.options[i].value){
					bParent = true;
				}
				selSelected.options[selSelected.options.length] = new Option(obj.children[selChildren.options[i].value],selChildren.options[i].value,false,false);
				obj.selected[selChildren.options[i].value] = true;
				selChildren.options[i--] = null;
				bTransfer = true;
			}
			else bError = false;
		}
	}
	if(bTransfer){
		createSelectedList(hiddenSelected,obj);
		if(bDeleteFirst){
			selSelected.options[0] = null;
		}
		var bDelete = false
		if(bParent){
			// delete children
			if(aChild = obj.parents[selParent.options[selParent.selectedIndex].value]){
				var s = "";
				for(i=1;i<aChild.length;i++){
					s += ((s.length!=0)?"|":"") + aChild[i];
				}
				s = '^(' + s + ')$';
				var r = new RegExp(s)
				for(i=0;i<selSelected.options.length;i++){
					if(r.test(selSelected.options[i].value)){
						bDelete = true;
						selSelected.options[i].selected = true;
					}
					else{
						selSelected.options[i].selected = false;
					}
				}
			}
		}
		else if(obj.replaceparent){
			// delete parent
			for(i=0;i<selSelected.options.length;i++){
				if(selSelected.options[i].value==selParent.options[selParent.selectedIndex].value){
					bDelete = true;
					selSelected.options[i].selected = true;
				}
				else{
					selSelected.options[i].selected = false;
				}
			}
		}
		if(bDelete){
			deleteChild(selParent,selChildren,selSelected,hiddenSelected,obj);
		}
	}
}
function deleteChild(selParent,selChildren,selSelected,hiddenSelected,obj){
	var bTransfer = false;
	if(obj.maxopts){
		var maxopts = parseInt(obj.maxopts.nr);
		if(maxopts==1 && selSelected.options.length > 0) selSelected.options[0].selected = true;
	}
	for(var i=0;i<selSelected.options.length;i++){
		if(selSelected.options[i].selected){
			obj.selected[selSelected.options[i].value] = false;
			selSelected.options[i--] = null;
			bTransfer = true;
		}
	}
	if(bTransfer){
		writeChildren(selParent,selChildren,obj);
		createSelectedList(hiddenSelected,obj);
		if(obj.label.length>0 && selSelected.options.length==0){
			selSelected.options[0] = new Option(obj.label,"",false,false);
		}
	}
}
function initParentChild(selParent,selChildren,selSelected,hiddenSelected,obj){
	selSelected.length = 0;
	hiddenSelected.value = "";
	for(var i in obj.selected){
		if(obj.selected[i]==true){
			if(obj.children[i] && allowSelect(selSelected,obj,false)){
				selSelected.options[selSelected.length] = new Option(obj.children[i],i,false,false);
				hiddenSelected.value += ((hiddenSelected.value.length>0)?",":"") + i;
			}
			else {
				obj.selected[i] = false;
			}
		}
	}
	if(hiddenSelected.value == "" && obj.emptyvalue){
		hiddenSelected.value = obj.emptyvalue;
	}
	writeChildren(selParent,selChildren,obj);
	if(obj.label.length>0 && selSelected.options.length==0){
		selSelected.options[0] = new Option(obj.label,"",false,false);
	}
}
// Double select
function writeLeftOptions(selLeft,obj){
	var i,aOpts,txt;
	selLeft.length = 0;
	if(aOrder = obj.order){
		for(i=0;i<aOrder.length;i++){
			if(!obj.selected[aOrder[i]]==true && obj.opts[aOrder[i]]){
				txt = obj.opts[aOrder[i]];
				selLeft.options[selLeft.length] = new Option(txt,aOrder[i],false,false);
			}
		}
	}
}
function selectOption(selLeft,selSelected,hiddenSelected,obj){
	var bDeleteFirst = (selSelected.options.length == 1 && selSelected.options[0].value == "");
	var bTransfer = false;
	for(var i=0;i<selLeft.options.length;i++){
		if(selLeft.options[i].selected){
			selSelected.options[selSelected.options.length] = new Option(obj.opts[selLeft.options[i].value],selLeft.options[i].value,false,false);
			obj.selected[selLeft.options[i].value] = true;
			selLeft.options[i--] = null;
			bTransfer = true;
		}
	}
	if(bTransfer){
		createSelectedList(hiddenSelected,obj);
		if(bDeleteFirst){
			selSelected.options[0] = null;
		}
	}
}
function deleteOption(selLeft,selSelected,hiddenSelected,obj){
	var bTransfer = false;
	for(var i=0;i<selSelected.options.length;i++){
		if(selSelected.options[i].selected){
			obj.selected[selSelected.options[i].value] = false;
			selSelected.options[i--] = null;
			bTransfer = true;
		}
	}
	if(bTransfer){
		writeLeftOptions(selLeft,obj);
		createSelectedList(hiddenSelected,obj);
		if(obj.label.length>0 && selSelected.options.length==0){
			selSelected.options[0] = new Option(obj.label,"",false,false);
		}
	}
}
function initTwoSelect(selLeft,selSelected,hiddenSelected,obj){
	selSelected.length = 0;
	hiddenSelected.value = "";
	for(var i in obj.selected){
		if(obj.selected[i]==true){
			if(obj.opts[i]){
				selSelected.options[selSelected.length] = new Option(obj.opts[i],i,false,false);
				hiddenSelected.value += ((hiddenSelected.value.length>0)?",":"") + i;
			}
			else{
				obj.selected[i] = false;
			}
		}
	}
	if(hiddenSelected.value == "" && obj.emptyvalue){
		hiddenSelected.value = obj.emptyvalue;
	}
	writeLeftOptions(selLeft,obj);
	if(obj.label.length>0 && selSelected.options.length==0){
		selSelected.options[0] = new Option(obj.label,"",false,false);
	}
}
// html buttons
function addCode(obj,code){
	if(document.selection){
		if(obj){
			var t,r = document.selection.createRange();
			if(r.parentElement() == obj){
				r.text = "<"+code+">"+r.text+"</"+code+">";
			}
			else if(t=obj.type){
				if(t=="text"||t=="textarea") obj.value += "<"+code+"></"+code+">";
			}
		}
	}
}
// Javascript for CT cst_dateselect.cfm v2.0
//START_CHANGEDATE
function _dsl_changedate(selected_obj,obj_day,obj_month,obj_year,obj_dates){
	var myform = obj_day.form;
	var offset = (obj_day.options[0].value==''?1:0);
	var selected_day = obj_day.options[obj_day.selectedIndex].value;
	var selected_month = obj_month.options[obj_month.selectedIndex].value;
	var selected_year = obj_year.options[obj_year.selectedIndex].value;
	selected_day = (selected_day == '')?0:eval(selected_day);
	selected_month = (selected_month == '')?0:eval(selected_month);
	selected_year = (selected_year == '')?0:eval(selected_year);
	if(selected_day == 0 && selected_obj == 'obj_day') {selected_month = 0;selected_year = 0;}
	if(selected_month == 0 && selected_obj == 'obj_month') {selected_day = 0;selected_year = 0;}
	if(selected_year == 0 && selected_obj == 'obj_year') {selected_month = 0;selected_day = 0;}
	var aDays = new Array(31);
	for(var i=0;i < 31;i++){
		aDays[i] = new Option(i+1,(i>8)?(i+1):('0'+(i+1).toString()));
	}
	var aMonths = new Array(12);
	for(var i=0;i < 12;i++){
		aMonths[i] = new Option(obj_dates.aMonths[i],(i>8)?(i+1):('0'+(i+1).toString()));
	}
	var range = new Object();
	range.mindate = new Array(1,1,obj_dates.mindate[2]);
	range.maxdate = new Array(_dsl_daysinmonth(selected_month,selected_year),12,obj_dates.mindate[2]);

	if(selected_year == obj_dates.mindate[2]){
		range.mindate[1] = obj_dates.mindate[1];
		if(selected_month == obj_dates.mindate[1]){
			range.mindate[0] = obj_dates.mindate[0];
		}
	}
	if(selected_year == obj_dates.maxdate[2]){
		range.maxdate[1] = obj_dates.maxdate[1];
		if(selected_month == obj_dates.maxdate[1]){
			range.maxdate[0] = obj_dates.maxdate[0];
		}
	}
	if(obj_dates.mindate[2] == obj_dates.maxdate[2]){
		range.mindate[1] = obj_dates.mindate[1];
		range.maxdate[1] = obj_dates.maxdate[1];
		if(obj_dates.mindate[1] == obj_dates.maxdate[1]){
			range.mindate[0] = obj_dates.mindate[0];
			range.maxdate[0] = obj_dates.maxdate[0];
		}
	}
	if(selected_month < range.mindate[1] && selected_month != 0) selected_month = range.mindate[1];
	if(selected_month > range.maxdate[1]) selected_month = range.maxdate[1];
	if(selected_day < range.mindate[0] && selected_day != 0) selected_day = range.mindate[0];
	if(selected_day > range.maxdate[0]) selected_day = range.maxdate[0];
	if(selected_obj != 'obj_day' || selected_day == 0){
		obj_day.options.length = offset;
		j = offset;
		for(var i=range.mindate[0]-1;i < range.maxdate[0];i++){
			obj_day.options[j++] = aDays[i];
		}
	}
	if(selected_obj != 'obj_month' || selected_month == 0){
		obj_month.options.length = offset;
		j = offset;
		for(var i=range.mindate[1]-1;i < range.maxdate[1];i++){
			obj_month.options[j++] = aMonths[i];
		}
	}
	if(selected_day != 0) obj_day.selectedIndex = selected_day - range.mindate[0] + offset;
	else obj_day.selectedIndex = 0;
	if(selected_month != 0) obj_month.selectedIndex = selected_month  - range.mindate[1] + offset;
	else obj_month.selectedIndex = 0;
	if(selected_year != 0) obj_year.selectedIndex = selected_year  - range.mindate[2] + offset;
	else obj_year.selectedIndex = 0;
	_dsl_createdate(myform,obj_dates.field,obj_dates.format,obj_dates.hours);
}
//END_CHANGEDATE
//START_DAYSINMONTH
function _dsl_daysinmonth(checkMonth,checkYear){
	var maxDay = 31;
	if (checkMonth == 4 || checkMonth == 6 || checkMonth == 9 || checkMonth == 11)
		maxDay = 30;
	else
	if (checkMonth == 2){
		if (checkYear % 4 > 0) maxDay =28;
		else if (checkYear % 100 == 0 && checkYear % 400 > 0) maxDay = 28;
		else maxDay = 29;
	}
	return maxDay
}
//END_DAYSINMONTH
//START_CREATEDATE
function _dsl_createdate(myform,name,format,hrs){
	obj = myform[name];
	obj_day = myform['dsl_day_' + name];
	obj_month = myform['dsl_month_' + name];
	obj_year = myform['dsl_year_' + name];
	var tmpdate = '';
	var bDate = true;
	if(format == 'isodate'){
		if(obj_year.options[obj_year.selectedIndex].value == '') bDate = false;
		else tmpdate +=  obj_year.options[obj_year.selectedIndex].value;
		if(obj_month.options[obj_month.selectedIndex].value == '') bDate = false;
		else tmpdate += '-' + obj_month.options[obj_month.selectedIndex].value;
		if(obj_day.options[obj_day.selectedIndex].value == '') bDate = false;
		else tmpdate += '-' + obj_day.options[obj_day.selectedIndex].value;
	}else{
		if(format == 'date'){
			if(obj_month.options[obj_month.selectedIndex].value == '') bDate = false;
			else tmpdate += obj_month.options[obj_month.selectedIndex].value;
			if(obj_day.options[obj_day.selectedIndex].value == '') bDate = false;
			else tmpdate += '/' + obj_day.options[obj_day.selectedIndex].value;
		}
		else{
			if(obj_day.options[obj_day.selectedIndex].value == '') bDate = false;
			else tmpdate += obj_day.options[obj_day.selectedIndex].value;
			if(obj_month.options[obj_month.selectedIndex].value == '') bDate = false;
			else tmpdate += '/' + obj_month.options[obj_month.selectedIndex].value;
		}
		if(obj_year.options[obj_year.selectedIndex].value == '') bDate = false;
		else tmpdate += '/' + obj_year.options[obj_year.selectedIndex].value;
	}
	if(!bDate) tmpdate = '';
	if(hrs && tmpdate!=""){
		var obj_hour = myform['dsl_hour_' + name];
		var obj_min = myform['dsl_min_' + name];
		tmpdate += " " + obj_hour.options[obj_hour.selectedIndex].value + ":" + obj_min.options[obj_min.selectedIndex].value;
	}
	myform[name].value = tmpdate;
}
//END_CREATEDATE
//START_SELECTDATE
function _dsl_selectdate(form_name,obj_name,thisyear,thismonth,thisday){
	var i;
	var myform = eval("document."+form_name);
	var obj_day = myform["dsl_day_"+obj_name];
	var obj_month = myform["dsl_month_"+obj_name];
	var obj_year = myform["dsl_year_"+obj_name];
	var obj_dates = eval(obj_name+"_dates");
	obj_year.selectedIndex = 0;
	for(i=0;i<obj_year.options.length;i++){
		if(obj_year.options[i].value == thisyear) obj_year.selectedIndex = i;
	}
	_dsl_changedate('obj_year',obj_day,obj_month,obj_year,obj_dates);
	obj_month.selectedIndex = 0;
	for(i=0;i<obj_month.options.length;i++){
		if(eval(obj_month.options[i].value) == eval(thismonth)) obj_month.selectedIndex = i;
	}
	_dsl_changedate('obj_month',obj_day,obj_month,obj_year,obj_dates);
	obj_day.selectedIndex = 0;
	for(i=0;i<obj_day.options.length;i++){
		if(eval(obj_day.options[i].value) == eval(thisday)) obj_day.selectedIndex = i;
	}
	_dsl_changedate('obj_day',obj_day,obj_month,obj_year,obj_dates);
}
//END_SELECTDATE
//START_OPENCALENDAR
function _dsl_openCalendar(form_name,obj_name){
	var args = _dsl_openCalendar.arguments;
	var myform = eval("document."+form_name);
	var obj_dates = eval(obj_name+"_dates");
	var str_datetime = (args.length>2)?args[2]:myform[obj_name].value;
	var str_selected_datetime = myform[obj_name].value;
	var arr_months = obj_dates.aMonths;
	var week_days = obj_dates.aDays;
	var n_weekstart = obj_dates.firstday; // day week starts from (normally 0 or 1)
	var mindate = new Date(obj_dates.mindate[2],obj_dates.mindate[1]-1,obj_dates.mindate[0]);
	var maxdate = new Date(obj_dates.maxdate[2],obj_dates.maxdate[1]-1,obj_dates.maxdate[0]);
	var re_hrs = /\s+\d\d:\d\d$/gi;
	str_datetime = str_datetime.replace(re_hrs,"");
	str_selected_datetime = str_selected_datetime.replace(re_hrs,"");

	var dt_datetime = (str_datetime == null || str_datetime =="" ?  new Date() : str2dt2(str_datetime,obj_dates.format));
	if(dt_datetime.getTime() < mindate.getTime()) dt_datetime = new Date(mindate);
	else if(dt_datetime.getTime() > maxdate.getTime()) dt_datetime = new Date(maxdate);
	if(dt_datetime.getTime() < mindate.getTime()) dt_datetime = new Date(mindate);
	var dt_selected_datetime = (str_selected_datetime =="" ?  null : str2dt2(str_selected_datetime,obj_dates.format));
	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_prev_year = new Date(dt_datetime);
	dt_prev_year.setFullYear(dt_datetime.getFullYear()-1);
	var dt_next_year = new Date(dt_datetime);
	dt_next_year.setFullYear(dt_datetime.getFullYear()+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 prev_lastday = new Date(dt_datetime);
	prev_lastday.setDate(0);
	var next_firstday = new Date(dt_next_month);
	next_firstday.setDate(1);
	var prev_year_lastday = new Date(dt_datetime);
	prev_year_lastday.setFullYear(dt_datetime.getFullYear()-1);
	prev_year_lastday.setDate(0);
	var next_year_firstday = new Date(dt_next_year);
	next_year_firstday.setDate(1);
	
	// html generation (feel free to tune it for your particular application)
	var curr_month, opts = new String("");
	for(var i=0;i<12;i++){
		curr_month = new Date(dt_datetime);
		curr_month.setMonth(i);
		if(curr_month.getMonth()>=mindate.getMonth()&&curr_month.getFullYear()>=mindate.getFullYear()&&curr_month.getMonth()<=maxdate.getMonth()&&curr_month.getFullYear()<=maxdate.getFullYear()){
			opts += "\n			<option value=\""+dt2dtstr2(curr_month,obj_dates.format)+"\"";
			if(i==dt_datetime.getMonth()) opts += " selected";
			opts += ">"+arr_months[i]+"</option>";
		}
	}
	var curr_year, opts2 = new String("");
	for(var i=mindate.getFullYear();i<=maxdate.getFullYear();i++){
		curr_year = new Date(dt_datetime);
		curr_year.setFullYear(i);
		if(curr_year.getMonth()>=mindate.getMonth()&&curr_year.getFullYear()>=mindate.getFullYear()&&curr_year.getMonth()<=maxdate.getMonth()&&curr_year.getFullYear()<=maxdate.getFullYear()){
			opts2 += "\n			<option value=\""+dt2dtstr2(curr_year,obj_dates.format)+"\"";
			if(i==dt_datetime.getFullYear()) opts2 += " selected";
			opts2 += ">"+i+"</option>";
		}
	}
	// print calendar header
	var str_buffer = new String (
		"<html>\n"+
		"<head>\n"+
		"	<title>"+obj_dates.calendarlabel+"</title>\n"+
		"	<link rel=\"STYLESHEET\" type=\"text/css\" href=\""+obj_dates.css+"\">\n"+
		"</head>\n"+
		"<body>\n<form>\n"+
		"<table>\n"+
		"<tr class=\"header\">\n	<td colspan=\"7\">\n		<div class=\"left\">"+
		((prev_year_lastday.getTime()>=mindate.getTime())?("<a href=\"javascript:window.opener._dsl_openCalendar('"+
		form_name+"', '"+ obj_name+"', '"+dt2dtstr2(dt_prev_year,obj_dates.format)+"');\" title=\""+arr_months[dt_prev_year.getMonth()]+" "+dt_prev_year.getFullYear()+"\">"+
		((obj_dates.pprevImg!="")?("<img src=\""+obj_dates.pprevImg+"\" width=\"16\" height=\"16\" border=\"0\" alt=\""+obj_dates.ppreviouslabel+"\">"):"&lt;&lt;")+
		"</a>"):("&nbsp;"))+
		((prev_lastday.getTime()>=mindate.getTime())?("<a href=\"javascript:window.opener._dsl_openCalendar('"+
		form_name+"', '"+ obj_name+"', '"+dt2dtstr2(dt_prev_month,obj_dates.format)+"');\" title=\""+arr_months[dt_prev_month.getMonth()]+" "+dt_prev_month.getFullYear()+"\">"+
		((obj_dates.prevImg!="")?("<img src=\""+obj_dates.prevImg+"\" width=\"16\" height=\"16\" border=\"0\" alt=\""+obj_dates.previouslabel+"\">"):"&lt;")+
		"</a>"):("&nbsp;"))+
		"</div>\n		<div class=\"right\">"+
		((next_firstday.getTime()<=maxdate.getTime())?("<a href=\"javascript:window.opener._dsl_openCalendar('"+
		form_name+"', '"+ obj_name+"', '"+dt2dtstr2(dt_next_month,obj_dates.format)+"');\" title=\""+arr_months[dt_next_month.getMonth()]+" "+dt_next_month.getFullYear()+"\">"+
		((obj_dates.nextImg!="")?("<img src=\""+obj_dates.nextImg+"\" width=\"16\" height=\"16\" border=\"0\""+
		" alt=\""+obj_dates.nextlabel+"\">"):"&gt;")+
		"</a>"):("&nbsp;"))+
		((next_year_firstday.getTime()<=maxdate.getTime())?("<a href=\"javascript:window.opener._dsl_openCalendar('"+
		form_name+"', '"+ obj_name+"', '"+dt2dtstr2(dt_next_year,obj_dates.format)+"');\" title=\""+arr_months[dt_next_year.getMonth()]+" "+dt_next_year.getFullYear()+"\">"+
		((obj_dates.nnextImg!="")?("<img src=\""+obj_dates.nnextImg+"\" width=\"16\" height=\"16\" border=\"0\""+
		" alt=\""+obj_dates.nnextlabel+"\">"):"&gt;&gt;")+
		"</a>"):("&nbsp;"))+
		"</div>\n"+
		"		<select onChange=\"window.opener._dsl_openCalendar('"+form_name+"', '"+ obj_name+"', this.options[this.selectedIndex].value);\">"+opts+"\n		</select>\n"+
		"		<select onChange=\"window.opener._dsl_openCalendar('"+form_name+"', '"+ obj_name+"', this.options[this.selectedIndex].value);\">"+opts2+"\n		</select>\n"+
		"	</td>\n</tr>\n"
	);

	var dt_current_day = new Date(dt_firstday);
	// print weekdays titles
	str_buffer += "<tr class=\"week\">\n";
	for (var n=0; n<7; n++)
		str_buffer += "	<td>"+
		week_days[(n_weekstart+n)%7]+"</td>\n";
	// print calendar table
	str_buffer += "</tr>\n";
	while (dt_current_day.getMonth() == dt_datetime.getMonth() ||
		dt_current_day.getMonth() == dt_firstday.getMonth()) {
		// print row header
		str_buffer += "<tr class=\"calendar\">\n";
		for (var n_current_wday=0; n_current_wday<7; n_current_wday++) {
				if (dt_selected_datetime != null && 
					dt_current_day.getDate() == dt_selected_datetime.getDate() &&
					dt_current_day.getMonth() == dt_selected_datetime.getMonth() &&
					dt_current_day.getFullYear() == dt_selected_datetime.getFullYear())
					// print current date
					str_buffer += "	<td class=\"selected\">";
				else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6)
					// weekend days
					str_buffer += "	<td class=\"weekend\">";
				else
					// print working days of current month
					str_buffer += "	<td class=\"weekday\">";

				if (dt_current_day.getTime()<=maxdate.getTime()&&dt_current_day.getTime()>=mindate.getTime())
					str_buffer += "<a href=\"javascript:window.opener._dsl_selectdate('"+form_name+"','"+obj_name+"',"+dt_current_day.getFullYear()+","+(dt_current_day.getMonth()+1)+","+dt_current_day.getDate()+"); window.close();\">";
				if (dt_current_day.getMonth() == dt_datetime.getMonth())
					// print days of current month
					str_buffer += "<span class=\"thismonth\">";
				else 
					// print days of other months
					str_buffer += "<span class=\"othermonth\">";
				str_buffer += dt_current_day.getDate()+"</span>";
				if (dt_current_day.getTime()<=maxdate.getTime()&&dt_current_day.getTime()>=mindate.getTime())
					str_buffer += "</a>";
				str_buffer += "</td>\n";
				dt_current_day.setDate(dt_current_day.getDate()+1);
		}
		// print row footer
		str_buffer += "</tr>\n";
	}
	// print calendar footer
	str_buffer +=
		"</table>\n" +
		"</form>\n</body>\n" +
		"</html>\n";

	var windowWidth = document.all?280:300;
	var vWinCal = window.open("", "Calendar", 
		"width="+windowWidth+",height=220,status=no,resizable=yes,top=200,left=200");
	vWinCal.opener = self;
	vWinCal.focus();
	var calc_doc = vWinCal.document;
	calc_doc.write (str_buffer);
	calc_doc.close();
}
function str2dt2 (str_datetime,format) {
	var d,re_date = /^(\d+)[-\/](\d+)[-\/](\d+)$/;
	if (!re_date.exec(str_datetime))
		return alert("Invalid Datetime format: "+ str_datetime);
	switch(format){
		case "date":
			d = new Date (RegExp.$3, RegExp.$1-1, RegExp.$2);
			break;
		case "eurodate":
			d = new Date (RegExp.$3, RegExp.$2-1, RegExp.$1);
			break;
		default:
			d = new Date (RegExp.$1, RegExp.$2-1, RegExp.$3);
			break;
	}
	return d;
}
function dt2dtstr2 (dt_datetime,format) {
	var d;
	switch(format){
		case "date":
			d = new String ((dt_datetime.getMonth()+1)+"/"+dt_datetime.getDate()+"/"+dt_datetime.getFullYear());
			break;
		case "eurodate":
			d = new String (dt_datetime.getDate()+"/"+(dt_datetime.getMonth()+1)+"/"+dt_datetime.getFullYear());
			break;
		default:
			d = new String (dt_datetime.getFullYear()+"-"+(dt_datetime.getMonth()+1)+"-"+dt_datetime.getDate());
			break;
	}
	return d;
}
//END_OPENCALENDAR
