﻿// DateTimePicker class

var DateTimePicker = Toolkit.Base.extend(
{
	// Constructor
	constructor:function(config)
	{
		this.config = config;
		this.input = document.getElementById(config.id);
		if (this.config.minDate && typeof this.config.minDate == "number") this.config.minDate = new Date(this.config.minDate);
		if (this.config.maxDate && typeof this.config.maxDate == "number") this.config.maxDate = new Date(this.config.maxDate);
		this.config.minYear = (this.config.minDate ? this.config.minDate.getFullYear() : DateTimePicker.defaultConfig.minYear);
		this.config.maxYear = (this.config.maxDate ? this.config.maxDate.getFullYear() : DateTimePicker.defaultConfig.maxYear);
		if (!this.config.rtl) this.config.rtl = false;
		if (!this.config.monthNamesFull) this.config.monthNamesFull = DateTimePicker.defaultConfig.monthNamesFull;
		if (!this.config.dayNamesShort) this.config.dayNamesShort = DateTimePicker.defaultConfig.dayNamesShort;
		if (!this.config.previousMonthImage) this.config.previousMonthImage = DateTimePicker.defaultConfig.previousMonthImage;
		if (!this.config.nextMonthImage) this.config.nextMonthImage = DateTimePicker.defaultConfig.nextMonthImage;
		DateTimePicker.registered.push(this);
	},
	
	// Properties
	config:null,
	input:null,
	currentDateTime:null,
	selectedDateTime:null,
	selectButton:null,
	clearButton:null,
	
	selectClicked:function(trigger)
	{
		this.showPicker(trigger);
	},
	
	clearClicked:function(trigger)
	{
		this.clearValue();
	},
	
	previousMonthClicked:function()
	{
		var year = parseInt(DateTimePicker.picker.yearSelector.value);
		var month = parseInt(DateTimePicker.picker.monthSelector.value) - 1;
		if (month < 0)
		{
			month = 11;
			year--;
		}
		this.setMonthPicker(year, month);
		this.renderCalendar(year, month);
	},
	
	nextMonthClicked:function()
	{
		var year = parseInt(DateTimePicker.picker.yearSelector.value);
		var month = parseInt(DateTimePicker.picker.monthSelector.value) + 1;
		if (month > 11)
		{
			month = 0;
			year++;
		}
		this.setMonthPicker(year, month);
		this.renderCalendar(year, month);
	},
	
	dateClicked:function(cell)
	{
		if (cell)
		{
			var val = Toolkit.trimString(cell.innerText);
			if (val && !isNaN(val))
			{
				this.setSelectedDateTime(cell);
				if (this.config.selectedDateCellCssClass)
				{
					for (var i=0; i<DateTimePicker.picker.calendarCells.length; i++)
					{
						var tempCell = DateTimePicker.picker.calendarCells[i];
						tempCell.className = tempCell.className.replace(new RegExp(this.config.selectedDateCellCssClass), "");
					}
					cell.className = (this.config.dateCellCssClass ? this.config.dateCellCssClass + " " : "") + this.config.selectedDateCellCssClass;
				}
			}
		}
	},
	
	timeChanged:function()
	{
		this.setSelectedDateTime();
	},
	
	okButtonClicked:function()
	{
		if (this.selectedDateTime)
		{
			this.setInput(this.selectedDateTime);
		}
		this.hidePicker();
	},
	
	cancelButtonClicked:function()
	{
		this.hidePicker();
	},
	
	showPicker:function(trigger)
	{
		// Try & parse current value, if any
		if (this.input.value)
		{
			var current = Date.parseExact(this.input.value, this.config.format);
			if (isNaN(current))
			{
				if (this.config.hideDatePicker && this.config.showTimePicker)
				{
					// Time-only - prepend today's date & re-try
					var now = new Date();
					current = Date.parse(now.getDate() + " " + this.config.monthNamesFull[now.getMonth()] + " " + now.getFullYear() + " " + this.input.value);
				}
				else
				{
					current = Date.parse(this.input.value);
				}
			}
			if (!isNaN(current))
			{
				this.currentDateTime = new Date(current);
				this.selectedDateTime = this.currentDateTime;
				this.setInput(this.currentDateTime);
			}
			else
			{
				this.currentDateTime = null;
				this.selectedDateTime = null;
			}
		}
		
		// Render & display
		this.render();
		var triggerPosition = Toolkit.getPosition(trigger);
		document.body.appendChild(DateTimePicker.picker);
		DateTimePicker.picker.style.left = triggerPosition.x + "px";
		DateTimePicker.picker.style.top = triggerPosition.y + "px";
		DateTimePicker.picker.style.display = "block";
	},

	setInput:function(date)
	{
		if (date)
		{
			this.input.value = date.toFormattedString(this.config.format);
			this.input.valueAsObject = date;
			this.input.valueAsMilliseconds = date.getTime();// - (date.getTimezoneOffset() * 60 * 1000);
		}
	},
	
	setSelectedDateTime:function()
	{
		if (arguments.length == 1 && arguments[0] == null)
		{
			DateTimePicker.picker.selectedDateRow.innerText = (this.config.noCurrentValueText ? this.config.noCurrentValueText : DateTimePicker.defaultConfig.noCurrentValueText);
			return;
		}
		
		if (arguments.length == 1 && arguments[0] && Toolkit.objectType(arguments[0]) == "Date")
		{
			// Argument is already a date
			this.selectedDateTime = arguments[0];
		}
		else
		{
			var newDate = (this.selectedDateTime != null ? this.selectedDateTime : new Date());
			newDate.setFullYear(parseInt(DateTimePicker.picker.yearSelector.value));
			newDate.setMonth(parseInt(DateTimePicker.picker.monthSelector.value));
			if (isNaN(newDate))
			{
				newDate = new Date();
			}
			newDate.setHours(0, 0, 0, 0);
			if (arguments.length == 1 && arguments[0] && arguments[0].tagName == "TD")
			{
				// Fired from a calendar cell - get day
				newDate.setDate(parseInt(arguments[0].innerText));
			}
			if (this.config.showTimePicker)
			{
				var hour = parseInt(DateTimePicker.picker.hourSelector.value);
				if (DateTimePicker.picker.ampmSelector.value == "pm")
				{
					hour += 12;
				}
				var minute = parseInt(DateTimePicker.picker.minuteSelector.value);
				newDate.setHours(hour, minute, 0, 0);
			}
			this.selectedDateTime = newDate;
		}
		DateTimePicker.picker.selectedDateRow.innerText = this.selectedDateTime.toFormattedString(this.config.format);
	},
	
	hidePicker:function()
	{
		DateTimePicker.hidePicker();
	},
	
	clearValue:function()
	{
		this.currentDateTime = null;
		this.selectedDateTime = null;
		this.input.value = "";
		this.input.valueAsObject = null;
		this.input.valueAsMilliseconds = null;
	},
	
	setMonthPicker:function(year, month)
	{
		if (!this.config.showDatePicker)
		{
			DateTimePicker.picker.yearSelector.value = year;
			DateTimePicker.picker.monthSelector.value = month;
		}
	},

	setTimePicker:function(hour, minute)
	{
		var pm = (hour > 11);
		if (pm) hour = hour - 12;
		DateTimePicker.picker.hourSelector.value = hour;
		DateTimePicker.picker.minuteSelector.value = minute;
		DateTimePicker.picker.ampmSelector.value = (pm ? "pm" : "am");
	},

	render:function()
	{
		var date = (this.selectedDateTime ? this.selectedDateTime : this.currentDateTime);
		if (!date)
		{
			this.setSelectedDateTime(null);
			date = new Date();
			date.setHours(0, 0, 0, 0);
		}
		else
		{
			this.setSelectedDateTime(date);
		}
		var year = date.getFullYear(); 
		var month = date.getMonth();

		DateTimePicker.picker.className = (this.config.cssClass ? this.config.cssClass : "");
		this.renderMonthPicker(year, month);
		this.renderCalendar(year, month);
		this.renderTimePicker(date.getHours(), date.getMinutes());
		DateTimePicker.picker.selectedDateRow.className = (this.config.selectedDateTimeRowCssClass ? this.config.selectedDateTimeRowCssClass : "");
		if (this.config.rtl)
		{
			DateTimePicker.picker.selectedDateRow.dir = "rtl";
		}
		DateTimePicker.picker.buttonRow.className = (this.config.buttonRowCssClass ? this.config.buttonRowCssClass : "");
		DateTimePicker.picker.okButton.value = (this.config.okButtonText ? this.config.okButtonText : DateTimePicker.defaultConfig.okButtonText);
		DateTimePicker.picker.okButton.className = (this.config.okButtonCssClass ? this.config.okButtonCssClass : "");
		DateTimePicker.picker.cancelButton.value = (this.config.cancelButtonText ? this.config.cancelButtonText : DateTimePicker.defaultConfig.cancelButtonText);
		DateTimePicker.picker.cancelButton.className = (this.config.cancelButtonCssClass ? this.config.cancelButtonCssClass : "");
	},
	
	renderMonthPicker:function(year, month)
	{
		if (!this.config.hideDatePicker)
		{
			DateTimePicker.picker.monthPickerTable.className = (this.config.monthPickerCssClass ? this.config.monthPickerCssClass : "");
			DateTimePicker.picker.previousMonthImage.src = this.config.previousMonthImage;
			DateTimePicker.picker.nextMonthImage.src = this.config.nextMonthImage;
			DateTimePicker.picker.yearSelector.innerHTML = "";
			for (var i=this.config.minYear; i<=this.config.maxYear; i++)
			{
				DateTimePicker.picker.yearSelector.options[DateTimePicker.picker.yearSelector.options.length] = new Option(i, i);
			}
			DateTimePicker.picker.monthSelector.innerHTML = "";
			for (var i=0; i<this.config.monthNamesFull.length; i++)
			{
				DateTimePicker.picker.monthSelector.options[DateTimePicker.picker.monthSelector.options.length] = new Option(this.config.monthNamesFull[i], i);
			}
			if (this.config.rtl)
			{
				DateTimePicker.picker.yearSelector.dir = "rtl";
				DateTimePicker.picker.monthSelector.dir = "rtl";
			}
			this.setMonthPicker(year, month);
		}
		DateTimePicker.picker.monthPickerTable.style.display = (this.config.hideDatePicker ? "none" : (Toolkit.browser.msie ? "block" : "table"));
	},

	renderCalendar:function(year, month)
	{
		if (!this.config.hideDatePicker)
		{
			DateTimePicker.picker.calendarTable.className = (this.config.calendarCssClass ? this.config.calendarCssClass : "");
			
			var today = new Date();
			var date = new Date(year, month, 1);
			var daysInMonth = Toolkit.daysInMonth(date);
			var nextMonthDate = new Date(year, month + 1, 1);
			var table = DateTimePicker.picker.calendarTable;
			
			// Set headers
			for (var i=0; i<DateTimePicker.picker.calendarHeaderCells.length; i++)
			{
				var newIndex = i + this.config.firstDayOfWeek;
				if (newIndex >= 7) newIndex -= 7;
				DateTimePicker.picker.calendarHeaderCells[i].innerHTML = this.config.dayNamesShort[newIndex];
			}
			
			// Set cells
			var offset = date.getDay() - this.config.firstDayOfWeek;
			if (offset < 0) offset += 7;
			for (var i=0; i<DateTimePicker.picker.calendarCells.length; i++)
			{
				var val = (i - offset + 1);
				if (i < offset || val > daysInMonth)
				{
					DateTimePicker.picker.calendarCells[i].className = "";
					DateTimePicker.picker.calendarCells[i].innerHTML = "&nbsp;";
				}
				else
				{
					var defaultCss = (this.config.dateCellCssClass ? this.config.dateCellCssClass : "");
					DateTimePicker.picker.calendarCells[i].className = defaultCss;
					if (this.config.todayDateCellCssClass && today.getMonth() == month && today.getDate() == val)
					{
						DateTimePicker.picker.calendarCells[i].className += " " + this.config.todayDateCellCssClass;
					}
					if (this.config.selectedDateCellCssClass && this.selectedDateTime && this.selectedDateTime.getMonth() == month && this.selectedDateTime.getDate() == val)
					{
						DateTimePicker.picker.calendarCells[i].className = " " + this.config.selectedDateCellCssClass;
					}
					DateTimePicker.picker.calendarCells[i].innerHTML = val;
					DateTimePicker.picker.calendarCells[i].style.cursor = (val ? "pointer" : "default");
				}
			}
			
			// Set last 2 rows - may not need to be visible
			var showPenultimateRow = (Toolkit.trimString(DateTimePicker.picker.calendarPenultimateRow.innerText) != "");
			var showUltimateRow = (Toolkit.trimString(DateTimePicker.picker.calendarUltimateRow.innerText) != "");
			DateTimePicker.picker.calendarPenultimateRow.style.display = (showPenultimateRow ? (Toolkit.browser.msie ? "block" : "table-row") : "none");
			DateTimePicker.picker.calendarUltimateRow.style.display = (showUltimateRow ? (Toolkit.browser.msie ? "block" : "table-row") : "none");
		}
		DateTimePicker.picker.calendarTable.style.display = (this.config.hideDatePicker ? "none" : (Toolkit.browser.msie ? "block" : "table"));
	},
	
	renderTimePicker:function(hour, minute)
	{
		if (this.config.showTimePicker)
		{
			this.setTimePicker(hour, minute);
			DateTimePicker.picker.timePicker.className = (this.config.timePickerRowCssClass ? this.config.timePickerRowCssClass : "");
		}
		DateTimePicker.picker.timePicker.style.display = (this.config.showTimePicker ? "block" : "none");
	}
});

// Static members

DateTimePicker.picker = null;
DateTimePicker.registered = [];
DateTimePicker.defaultConfig =
{
	okButtonText:"OK",
	cancelButtonText:"Cancel",
	noCurrentValueText:"No current value",
	minYear:(new Date().getFullYear() - 10),
	maxYear:(new Date().getFullYear() + 10),
	monthNamesFull:["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
	dayNamesShort:["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
	previousMonthImage:"WebResource.axd?d=OBkRxboMjovmi-IvSOYm15loBMX5jr5_blcT8L84XHzhuTxhx5aGp5mJYQwIkHycYbQ_fWAtHCipPThyHRwXxAEkUicHupx83bQQy_2hGTAJCahFLaak4x3kW9myeypa-QA1F2xTIaUtd7JbU2dX7Tkl8kZGYVJvehqHgeuH87o1&t=633780951280000000",
	nextMonthImage:"WebResource.axd?d=OBkRxboMjovmi-IvSOYm15loBMX5jr5_blcT8L84XHzhuTxhx5aGp5mJYQwIkHycYbQ_fWAtHCipPThyHRwXxAEkUicHupx83bQQy_2hGTAJCahFLaak4x3kW9myeypa7F14HNtJd2K8eR0Yz9KZ2t7BDKh1UeB-op2Y6iIKM8g1&t=633780951280000000"
};
DateTimePicker.currentInstance = null;

DateTimePicker.initialise = function()
{
	Toolkit.addListener(window, "load", function()
	{
		if (!Date.prototype.toFormattedString)
		{
			alert("No <add verb=\"GET\" path=\"/JavascriptDateTimeFormat.axd\" /> httpHandler.");
			return false;
		}
		
		// Create single picker element
		if (DateTimePicker.picker == null)
		{
			DateTimePicker.picker = document.createElement("div");
			DateTimePicker.picker.style.display = "none";
			DateTimePicker.picker.style.position = "absolute";
			DateTimePicker.picker.style.backgroundColor = "#fff";
			DateTimePicker.picker.style.color = "#000";
			DateTimePicker.picker.style.width = "200px";
			DateTimePicker.picker.style.border = "1px solid #ccc";
			DateTimePicker.picker.style.zIndex = 10000;
			
			// Build month picker
			DateTimePicker.picker.monthPickerTable = document.createElement("table");
			DateTimePicker.picker.monthPickerTable.border = 0;
			DateTimePicker.picker.monthPickerTable.cellPadding = 0;
			DateTimePicker.picker.monthPickerTable.cellSpacing = 0;
			DateTimePicker.picker.monthPickerTable.style.width = "100%";
			DateTimePicker.picker.appendChild(DateTimePicker.picker.monthPickerTable);
			var monthPickerHolder = document.createElement("tbody");
			DateTimePicker.picker.monthPickerTable.appendChild(monthPickerHolder);
			var monthPickerRow = document.createElement("tr");
			monthPickerHolder.appendChild(monthPickerRow);
			
			var prevMonthCell = document.createElement("td");
			prevMonthCell.style.padding = "2px 5px";
			prevMonthCell.style.width = "1px";
			monthPickerRow.appendChild(prevMonthCell);
			DateTimePicker.picker.previousMonthImage = document.createElement("img");
			DateTimePicker.picker.previousMonthImage.src = DateTimePicker.defaultConfig.previousMonthImage;
			DateTimePicker.picker.previousMonthImage.style.cursor = "pointer";
			DateTimePicker.picker.previousMonthImage.onclick = DateTimePicker.previousMonthClicked;
			prevMonthCell.appendChild(DateTimePicker.picker.previousMonthImage);
			
			var monthPickerCell = document.createElement("td");
			monthPickerCell.style.padding = "2px 5px";
			monthPickerCell.style.textAlign = "center";
			DateTimePicker.picker.monthSelector = document.createElement("select");
			DateTimePicker.picker.yearSelector = document.createElement("select");
			DateTimePicker.picker.monthSelector.style.fontSize = "90%";
			DateTimePicker.picker.yearSelector.style.fontSize = "90%";
			DateTimePicker.picker.monthSelector.onchange = DateTimePicker.monthPickerChanged;
			DateTimePicker.picker.yearSelector.onchange = DateTimePicker.monthPickerChanged;
			monthPickerCell.appendChild(DateTimePicker.picker.monthSelector);
			monthPickerCell.appendChild(DateTimePicker.picker.yearSelector);
			monthPickerRow.appendChild(monthPickerCell);

			var nextMonthCell = document.createElement("td");
			nextMonthCell.style.padding = "2px 5px";
			nextMonthCell.style.width = "1px";
			monthPickerRow.appendChild(nextMonthCell);
			DateTimePicker.picker.nextMonthImage = document.createElement("img");
			DateTimePicker.picker.nextMonthImage.src = DateTimePicker.defaultConfig.nextMonthImage;
			DateTimePicker.picker.nextMonthImage.style.cursor = "pointer";
			DateTimePicker.picker.nextMonthImage.onclick = DateTimePicker.nextMonthClicked;
			nextMonthCell.appendChild(DateTimePicker.picker.nextMonthImage);

			// Build calendar
			DateTimePicker.picker.calendarTable = document.createElement("table");
			DateTimePicker.picker.calendarTable.border = 0;
			DateTimePicker.picker.calendarTable.cellPadding = 0;
			DateTimePicker.picker.calendarTable.cellSpacing = 0;
			DateTimePicker.picker.calendarTable.style.width = "100%";
			DateTimePicker.picker.calendarHeaderCells = [];
			DateTimePicker.picker.calendarCells = [];
			var rowHolder;
			for (var i=0; i<7; i++)
			{
				if (i == 0) rowHolder = DateTimePicker.picker.calendarTable.appendChild(document.createElement("thead"));
				else if (i == 1) rowHolder = DateTimePicker.picker.calendarTable.appendChild(document.createElement("tbody"));
				var row = rowHolder.appendChild(document.createElement("tr"));
				if (i == 5)
				{
					DateTimePicker.picker.calendarPenultimateRow = row;
				}
				else if (i == 6)
				{
					DateTimePicker.picker.calendarUltimateRow = row;
				}
				for (var j=0; j<7; j++)
				{
					var cell;
					if (rowHolder.tagName == "THEAD")
					{
						cell = document.createElement("th");
						DateTimePicker.picker.calendarHeaderCells.push(cell);
					}
					else
					{
						cell = document.createElement(rowHolder.tagName == "THEAD" ? "th" : "td");
						cell.onclick = DateTimePicker.dateClicked;
						DateTimePicker.picker.calendarCells.push(cell);
					}
					cell.style.textAlign = "center";
					cell.style.padding = "2px 5px";
					cell.style.width = "14%";
					row.appendChild(cell);
				}
			}
			DateTimePicker.picker.appendChild(DateTimePicker.picker.calendarTable);
			
			// Build time picker
			DateTimePicker.picker.timePicker = document.createElement("div");
			DateTimePicker.picker.timePicker.style.display = "none";
			DateTimePicker.picker.timePicker.style.textAlign = "center";
			DateTimePicker.picker.appendChild(DateTimePicker.picker.timePicker);
			DateTimePicker.picker.hourSelector = document.createElement("select");
			var options = DateTimePicker.picker.hourSelector.options;
			for (var i=0; i<12; i++)
			{
				options[options.length] = new Option((i == 0 ? "12" : i), i);
			}
			DateTimePicker.picker.timePicker.appendChild(DateTimePicker.picker.hourSelector);
			DateTimePicker.picker.minuteSelector = document.createElement("select");
			var options = DateTimePicker.picker.minuteSelector.options;
			for (var i=0; i<60; i++)
			{
				options[options.length] = new Option((i < 10 ? "0" : "") + i, i);
			}
			DateTimePicker.picker.timePicker.appendChild(DateTimePicker.picker.minuteSelector);
			DateTimePicker.picker.ampmSelector = document.createElement("select");
			var options = DateTimePicker.picker.ampmSelector.options;
			options[options.length] = new Option("am", "am");
			options[options.length] = new Option("pm", "pm");;
			DateTimePicker.picker.hourSelector.onchange = DateTimePicker.timePickerChanged;
			DateTimePicker.picker.minuteSelector.onchange = DateTimePicker.timePickerChanged;
			DateTimePicker.picker.ampmSelector.onchange = DateTimePicker.timePickerChanged;
			DateTimePicker.picker.timePicker.appendChild(DateTimePicker.picker.ampmSelector);

			// Selected date row
			DateTimePicker.picker.selectedDateRow = document.createElement("div");
			DateTimePicker.picker.selectedDateRow.style.textAlign = "center";
			DateTimePicker.picker.selectedDateRow.style.textAlign = "center";
			DateTimePicker.picker.selectedDateRow.style.padding = "2px 5px 3px 5px";
			DateTimePicker.picker.selectedDateRow.style.borderTop = "1px solid #ccc";
			DateTimePicker.picker.appendChild(DateTimePicker.picker.selectedDateRow);

			// Button row
			DateTimePicker.picker.buttonRow = document.createElement("div");
			DateTimePicker.picker.buttonRow.style.textAlign = "center";
			DateTimePicker.picker.buttonRow.style.padding = "2px 5px 2px 5px";
			DateTimePicker.picker.buttonRow.style.borderTop = "1px solid #ccc";
			DateTimePicker.picker.appendChild(DateTimePicker.picker.buttonRow);
			
			DateTimePicker.picker.okButton = document.createElement("input");
			DateTimePicker.picker.okButton.type = "button";
			DateTimePicker.picker.okButton.onclick = DateTimePicker.okButtonClicked;
			DateTimePicker.picker.buttonRow.appendChild(DateTimePicker.picker.okButton);

			DateTimePicker.picker.cancelButton = document.createElement("input");
			DateTimePicker.picker.cancelButton.type = "button";
			DateTimePicker.picker.cancelButton.onclick = DateTimePicker.cancelButtonClicked;
			DateTimePicker.picker.buttonRow.appendChild(DateTimePicker.picker.cancelButton);
			
			// All done
			document.body.appendChild(DateTimePicker.picker);
		}

		// Wire up buttons
		for (var i=0; i<DateTimePicker.registered.length; i++)
		{
			var instance = DateTimePicker.registered[i];
			var wrapper = instance.input.parentNode;
			var buttons = wrapper.getElementsByTagName("img");
			if (buttons.length == 0)
			{
				buttons = [];
				var inputs = wrapper.getElementsByTagName("input");
				for (var j=0; j<inputs.length; j++)
				{
					if (inputs[j].type == "button") buttons.push(inputs[j]);
				}
			}
			instance.selectButton = buttons[0];
			instance.clearButton = (buttons.length > 1) ? buttons[1] : null;
			instance.selectButton.instance = instance;
			instance.selectButton.onclick = DateTimePicker.selectClicked;
			if (instance.clearButton)
			{
				instance.clearButton.instance = instance;
				instance.clearButton.onclick = DateTimePicker.clearClicked;
			}
		}
	});
};

DateTimePicker.selectClicked = function()
{
	DateTimePicker.currentInstance = this.instance;
	this.instance.selectClicked(this);
}

DateTimePicker.clearClicked = function()
{
	this.instance.clearClicked(this);
}

DateTimePicker.previousMonthClicked = function()
{
	DateTimePicker.currentInstance.previousMonthClicked();
}

DateTimePicker.nextMonthClicked = function()
{
	DateTimePicker.currentInstance.nextMonthClicked();
}

DateTimePicker.monthPickerChanged = function()
{
	DateTimePicker.currentInstance.renderCalendar(parseInt(DateTimePicker.picker.yearSelector.value), parseInt(DateTimePicker.picker.monthSelector.value));
}

DateTimePicker.dateClicked = function()
{
	DateTimePicker.currentInstance.dateClicked(this);
}

DateTimePicker.timePickerChanged = function()
{
	DateTimePicker.currentInstance.timeChanged();
}

DateTimePicker.okButtonClicked = function()
{
	DateTimePicker.currentInstance.okButtonClicked();
}

DateTimePicker.cancelButtonClicked = function()
{
	DateTimePicker.currentInstance.cancelButtonClicked();
}

DateTimePicker.hidePicker = function()
{
	DateTimePicker.picker.style.display = "none";
}

