// Script: Calendar v1.0
// Company: Interaxis
// Author: dynamicreport.com
// Website: http://dynamicreport.com/ddobj.html
// License: Free (original author info. must remain in all files)


var cal_months = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');

// INITIALIZE BROWSER DETECTION AND BROWSER-SPECIFIC DOM OBJECT VALUES
var cal_ns = cal_ie = cal_opera = cal_features = 0;

function cal_setBrowser ()
{
	var agt = navigator.userAgent.toLowerCase ();
  
	// determine browser types and versions
	if (agt.indexOf("opera") != -1)
	{
		cal_opera = parseInt (navigator.appVersion);
		cal_ie = 5;
	}

	if (navigator.appName == "Microsoft Internet Explorer")
		cal_ie = parseInt (navigator.appVersion);
	else if (navigator.appName == "Netscape")
		cal_ns = parseInt (navigator.appVersion);

	// determine applicable features
	if (cal_ie >= 4 || cal_ns >= 5 || cal_opera)
		cal_features = 1;
	else if (cal_ns >= 4)
		cal_features = 2;
	else
		cal_features = 0;
}

function cal_init (ddobj, sfrm, sobj, w, sDate)
{ // ddobj = drag drop object index, sfrm = form id, sobj = date input id for return value, 
// w = calendar output width, sDate = null for current, mm-dd-yyyy otherwise
	cal_setBrowser ();

	var sLayout = "";
	if (sfrm == "" || sobj == "")
		obj = null; // don't send date back to form input control
	else // send date back to form input control
		obj = (cal_features == 2 ? "window.document." + sfrm + "['" + sobj + "']" : "document.getElementById('" + sobj + "')");

	if (sDate == null)
	{ // current date
		date = new Date();
		month = date.getMonth();
		day = date.getDate();
		year = date.getFullYear();
	}
	else
	{ // custom date defined by parameter string sDate using convention: mm-dd-yyyy
		month = parseFloat (sDate.substring (0, 2)) - 1;
		day = parseFloat (sDate.substring (3, 5));
		year = parseFloat (sDate.substring (6, 10));
		date = new Date(year, month, day);
	}
	// forward month date adjustment
	month_fwd = month + 2;
	day_fwd = 1;
	year_fwd = year;
	if (month_fwd > 12)
	{ // check month boundary - end of year
		if (year_fwd < 2020)
		{ // limit max. year
			year_fwd++;
			month_fwd = 1;
		}
		else
			month_fwd = 12;
	}
	// backward month date adjustment
	month_bwd = month;
	day_bwd = 1;
	year_bwd = year;
	if (month_bwd < 1)
	{ // check month boundary - beginning of year
		if (year_bwd > 1974)
		{ // limit min. year
			year_bwd--;
			month_bwd = 12;
		}
		else
			month_bwd = 1;
	}
	// convert date components from integers to strings (implicitly)
	month_bwd = month_bwd + "";
	day_bwd = day_bwd + "";
	year_bwd = year_bwd + "";
	month_fwd = month_fwd + "";
	day_fwd = day_fwd + "";
	year_fwd = year_fwd + "";

	// forward and backward month parameters (force mm-dd-yyyy format)
	sDate_fwd = (month_fwd.length < 2 ? "0" + month_fwd : month_fwd) + "-" + (day_fwd.length < 2 ? "0" + day_fwd : day_fwd) + "-" + year_fwd;
	sDate_bwd = (month_bwd.length < 2 ? "0" + month_bwd : month_bwd) + "-" + (day_bwd.length < 2 ? "0" + day_bwd : day_bwd) + "-" + year_bwd;

	// obtain correct number of days in month (regards February in a leap year)
	month_cur = new Date(year, month, 1);
	month_next = new Date(year, month + 1, 1);
	wd_start = month_cur.getDay(); // start and end of month
	days_ttl = Math.round((month_next.getTime() - month_cur.getTime()) / (1000 * 60 * 60 * 24));

	params = "'" + ddobj + "', '" + sfrm + "', '" + sobj + "', " + w;

	sLayout = '<table class = "css_tbl" width = "100%">';
	sLayout += '<tr><td class = "css_cell" align = "center"><a href = "#" onclick = "cal_init (' + params + ', \'' + sDate_bwd + '\'); return false;">&lt;&lt;</a></td>';
	sLayout += '<td colspan = "5" align = "center" class = "css_cell">' + cal_months[month] + ' ' + year + '</td>';
	sLayout += '<td class = "css_cell" align = "center"><a href = "#" onclick = "cal_init (' + params + ', \'' + sDate_fwd + '\'); return false;">&gt;&gt;</a></td></tr>';
	sLayout += '<tr class = "css_rowh" align = "center"><td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td></tr>';
	sLayout += '<tr>';
	// leading blank cells (days) for first week of month
	for (wk_day = 0; wk_day < wd_start; wk_day++)
		sLayout += '<td class = "css_cell"></td>';

	wk_day = wd_start;
	for (iDay = 1; iDay <= days_ttl; iDay++)
	{
		wk_day %= 7;
		sDate = (month + 1) + "-" + iDay + "-" + year;
		if (obj) // sending date back to form input control
			sLink = '<a href = "#" onclick = "javascript: ' + obj + '.value = \'' + sDate + '\'; dd_showLyr (\'' + ddobj + '\', 0, 0, 0, \'\', \'\', 0); return false;">';
		if (wk_day == 0)
			sLayout += '</tr><tr>';
		sDay = (obj ? sLink : '') + iDay + (obj ? '</a>' : '');
		if (day == iDay) // current day
			sLayout += '<td align = "center"><b>' + sDay + '</b></td>';
		else
			sLayout += '<td align = "center" class = "css_cell">' + sDay + '</td>';
		wk_day++;
	}
	sLayout += '</tr></table>';
	dd_wrContent (ddobj, "<p class = 'css_calh'><b>Calendar</b></p>", sLayout, w);
}
