function showDateTimePicker(ident, ident_type, value, shift) {
	//value = '2009-01-01 10:10:10';
	var Element = getElementByIdent(ident, ident_type);
	if(!Element){
		removeElementById('DateTimePicker');
		return false;
	}
	var Months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
	var WeekDays = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];
	var WeekStart = 1;
	var RequestedStrDT = value;
	var ElementDT = StringToDate(Element.value);
	if(!RequestedStrDT) RequestedStrDT = Element.value;
	var RequestedDT = StringToDate(RequestedStrDT);
	var CurrentDT = new Date();
	RequestedDT.setMonth(RequestedDT.getMonth() + shift);
	RequestedStrDT = DateToString(RequestedDT);
	var BeginDT = new Date(RequestedDT);
	BeginDT.setDate(1);
	BeginDT.setDate(1 - (7 + BeginDT.getDay() - WeekStart) %7);
	var RequestedLastDayDT = new Date(RequestedDT);
	RequestedLastDayDT.setMonth(RequestedLastDayDT.getMonth() + 1);
	RequestedLastDayDT.setDate(0);
	// Main Table
	var table = document.createElement("TABLE");
	var pos = getAbsoluteElementPosition(Element);
	table.id = 'DateTimePicker';
	table.style.width = '210px';
	table.className = 'dtp';
	table.style.left = pos.x+'px';
	table.style.top = pos.y + 20+'px';
	var default_td_width = parseInt(parseInt(table.style.width) / WeekDays.length) + 'px';
	// Main table tbody
	var tbody = document.createElement("TBODY");
	// Headers tr
	var tr_header = document.createElement("TR");
	tr_header.className = 'dtp_tr_h';
	// Previous month td
	var td_prev = document.createElement("TD");
	td_prev.style.width = default_td_width;
	td_prev.className = 'dtp_td_prev';
	// Prevous month img
	var prev = document.createElement("IMG");
	prev.style.cursor = 'pointer';
	prev.src = '/adminImg/ar_left.gif';
	prev.title = 'Previous month';
	prev.setAttribute('ident', ident);
	prev.setAttribute('ident_type', ident_type);
	prev.setAttribute('datetime', RequestedStrDT);
	prev.onclick = function() {showDateTimePicker(this.getAttribute('ident'), this.getAttribute('ident_type'), this.getAttribute('datetime'), -1);};
	td_prev.appendChild(prev);
	// Current month td
	var td_current = document.createElement("TD");
	td_current.className = 'dtp_td_cur';
	td_current.colSpan = WeekDays.length - 2;
	td_current.innerHTML = RequestedDT.getFullYear() + ' ' + Months[RequestedDT.getMonth()];
	// Next month td
	var td_next = document.createElement("TD");
	td_next.style.width = default_td_width;
	td_next.className = 'dtp_td_next';
	// Next month img
	var next = document.createElement("IMG");
	next.style.cursor = 'pointer';
	next.src = '/adminImg/ar_right.gif';
	next.title = 'Next month';
	next.setAttribute('ident', ident);
	next.setAttribute('ident_type', ident_type);
	next.setAttribute('datetime', RequestedStrDT);
	next.onclick = function() { showDateTimePicker(this.getAttribute('ident'), this.getAttribute('ident_type'), this.getAttribute('datetime'), 1);};
	td_next.appendChild(next);
	// Append td to headers tr
	tr_header.appendChild(td_prev);
	tr_header.appendChild(td_current);
	tr_header.appendChild(td_next);
	// Append headers tr to tbody
	tbody.appendChild(tr_header);
	// Week days tr
	var tr_weeekdays = document.createElement("TR");
	tr_weeekdays.className = 'dtp_tr_wd';
	for(i = 0; i < WeekDays.length ; i++) {
		// Week day td
		td_weekday = document.createElement("TD");
		td_weekday.className = 'dtp_td_wd';
		td_weekday.style.width = default_td_width;
		td_weekday.innerHTML = WeekDays[i];
		// Append week day td to week days tr
		tr_weeekdays.appendChild(td_weekday);
	}
	// Append week days tr to tbody
	tbody.appendChild(tr_weeekdays);
	// Generating calendar
	var stop_month = RequestedLastDayDT.getYear() * Months.length + RequestedLastDayDT.getMonth();
	var elv_y = ElementDT.getYear();
	var elv_m = ElementDT.getMonth();
	var elv_d = ElementDT.getDate();
	var dt_m = RequestedDT.getMonth();
	var dt_y = RequestedDT.getYear();
	var cdt_y = CurrentDT.getYear();
	var cdt_m = CurrentDT.getMonth();
	var cdt_d = CurrentDT.getDate();
	while((BeginDT.getYear() * Months.length + BeginDT.getMonth()) <= stop_month) {
		// Days tr
		tr_days = document.createElement("TR");
		tr_days.className = 'dtp_tr_d';
		for (i = 0 ; i < WeekDays.length; i++) {
			// Day td
			td_day = document.createElement("TD");
			td_day.className = 'dtp_td_d';
			
			td_day.style.borderColor =  BeginDT.getYear() == elv_y && BeginDT.getMonth() == elv_m && BeginDT.getDate() == elv_d ? 'darkorchid' : (BeginDT.getMonth() == dt_m && BeginDT.getYear() == dt_y ? (BeginDT.getYear() == cdt_y && BeginDT.getMonth() == cdt_m && BeginDT.getDate() == cdt_d ? 'indianred' : '') : 'lightblue');
			td_day.style.width = default_td_width;
			td_day.setAttribute('ident', ident);
			td_day.setAttribute('ident_type', ident_type);
			td_day.setAttribute('datetime', DateToString(BeginDT));
			td_day.onclick = function() {
				var element = getElementByIdent(this.getAttribute('ident'), this.getAttribute('ident_type'));
				if(element) {
					datetime = StringToDate(this.getAttribute('datetime'));
					element.value = DateToString(datetime);
				}
				removeElementById('DateTimePicker');
			};
			td_day.onmouseover = function() {this.style.background = 'orange';};
			td_day.onmouseout = function() {this.style.background = '';};
			td_day.innerHTML = BeginDT.getDate();
			// Append day td to days tr
			tr_days.appendChild(td_day);
			BeginDT.setDate(BeginDT.getDate() + 1);
		}
		// Append days of one week tr to tbody
		tbody.appendChild(tr_days);
	}

	// Append tbody to table
	table.appendChild(tbody);
	// Remove obsolete DateTimePicker
	removeElementById('DateTimePicker');
	// Append DateTimePicker
	document.body.appendChild(table);
	return true;
}

function StringToDate (string) {
	var datetime = new Date();
	var reg = /^(\d+)\-(\d+)\-(\d+)$/;
	if (!reg.exec(string)) return datetime;
	datetime = new Date (RegExp.$1, RegExp.$2-1, RegExp.$3);
	return datetime;
}

function DateToString(datetime) {
	var string = datetime.getFullYear() + '-' + (datetime.getMonth() + 1) + '-' + datetime.getDate();
	return string;
}

function getElementByIdent(ident, ident_type) {
	var element = null;
	switch(ident_type){
		case 'id': element = document.getElementById(ident); break;
		case 'name':
			var collection = document.getElementsByName(ident);
			if(collection[0]) element = collection[0];
			break; 
	}
	return element;
}


