if (!dp_cfg) var dp_cfg = new Object();
var dp_styles = new Array();
dp_styles = {"pi_down":["#98B5E2","1px solid #316AC5"],"pi_hover":["#C1D2EE","1px solid #316AC5"],"pi_normal":["#F4FDFD","1px solid #F4FDFD"],"pi_selected":["#98B5E2","1px solid #316AC5"],"pi_disabled":["#cccccc","1px solid #c0c0c0"]};
dp_months = Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
function dp_create() {
	var res = '';
	if (!cfg.name || !cfg.id) {
		alert('Создание редактора невозможно, так как не указано его имя');
		return;
	}
	dp_cfg[cfg.name] = dp_config(cfg);
	but_style = 'cursor:hand;height:20px;font-family:Tahoma;font-size:9pt;text-align:center;';
	res += '<table style="cursor:default;padding:0px;" cellspacing=0 id="dp_editor_' + dp_cfg[cfg.name].name + '">';
	res += '<tr>';
	res += '<td width=1><input name="' + dp_cfg[cfg.name].name + '" id="' + dp_cfg[cfg.name].id + '" class="' + dp_cfg[cfg.name].input_class + '" type="text" onkeydown="return false;" ondrop="return false;" size="11" value="' + dp_cfg[cfg.name].value + '"></td>';
	res += '<td width=1><input id="dp_button_' + dp_cfg[cfg.name].name + '" class="' + dp_cfg[cfg.name].input_class + '" type="button" value=" ... " onclick="dp_pick(\'' + dp_cfg[cfg.name].name + '\');" title="Выбрать дату"></td>';
	res += '<td width=100%><input id="dp_button1_' + dp_cfg[cfg.name].name + '" class="' + dp_cfg[cfg.name].input_class + '" type="button" value=" X " onclick="dp_clear(\'' + dp_cfg[cfg.name].name + '\');" title="Очистить дату"></td>';
	res += '</tr>';
	res += '<tr><td colspan=3 height=2px;></td></tr>';
	res += '<tr><td colspan=3>';
	res += '<table cellspacing=0 id="dp_picker_' + dp_cfg[cfg.name].name + '" class="dp_picker" style="display:none;padding:0px;">';
	res += '<tr><td height=1></td></tr>';
	res += '<tr><td colspan=2 height=1 align="center"><table style="padding:0px;" cellspacing=0><tr>';
	res += '<td style="width:1px;"></td>';
	res += '<td><div style="width:35px;' + but_style + '" class="dp_i" id="dp_but_bb" onclick="dp_b_decade(\'' + dp_cfg[cfg.name].name + '\')" title="Десятилетие назад"><<<</div></td>';
	res += '<td style="width:1px;"></td>';
	res += '<td><div style="width:30px;' + but_style + '" class="dp_i" id="dp_but_bb" onclick="dp_b_year(\'' + dp_cfg[cfg.name].name + '\')" title="Год назад"><<</div></td>';
	res += '<td style="width:1px;"></td>';
	res += '<td><div style="width:25px;' + but_style + '" class="dp_i" id="dp_but_bb" onclick="dp_b_month(\'' + dp_cfg[cfg.name].name + '\')" title="Месяц назад"><</div></td>';
	res += '<td style="width:1px;"></td>';
	res += '<td><div style="width:25px;' + but_style + '" class="dp_i" id="dp_but_bb" onclick="dp_f_month(\'' + dp_cfg[cfg.name].name + '\')" title="Месяц вперед">></div></td>';
	res += '<td style="width:1px;"></td>';
	res += '<td><div style="width:30px;' + but_style + '" class="dp_i" id="dp_but_bb" onclick="dp_f_year(\'' + dp_cfg[cfg.name].name + '\')" title="Год вперед">>></div></td>';
	res += '<td style="width:1px;"></td>';
	res += '<td><div style="width:35px;' + but_style + '" class="dp_i" id="dp_but_bb" onclick="dp_f_decade(\'' + dp_cfg[cfg.name].name + '\')" title="Десятилетие вперед">>>></div></td>';
	res += '<td style="width:1px;"></td>';
	res += '</tr></table></td></tr>';
	res += '<tr><td width=1></td><td align=center><table cellpadding=0 cellspacing=0>';
	res += '<tr>';
	res += '<td><div class="dp_weekday">П</div></td>';
	res += '<td style="width:2px;"></td>';
	res += '<td><div class="dp_weekday">В</div></td>';
	res += '<td style="width:2px;"></td>';
	res += '<td><div class="dp_weekday">С</div></td>';
	res += '<td style="width:2px;"></td>';
	res += '<td><div class="dp_weekday">Ч</div></td>';
	res += '<td style="width:2px;"></td>';
	res += '<td><div class="dp_weekday">П</div></td>';
	res += '<td style="width:2px;"></td>';
	res += '<td><div class="dp_weekday">С</div></td>';
	res += '<td style="width:2px;"></td>';
	res += '<td><div class="dp_weekday">В</div></td>';
	res += '</tr>';
	res += '</table></td></tr>';
	res += '<tr valign=top><td width=1></td><td align=center><table cellpadding=0 cellspacing=0><tr>';
	for (var i = 0; i < 42; i++) {
		if (i / 7 == Math.floor(i / 7))
			res += '</tr><tr><td height=1></td></tr><tr>';
		res += '<td><div style="cursor:hand;width:25px;height:18px;font-family:Tahoma;font-size:9pt;text-align:center;" class="dp_i" id="dp_but_' + dp_cfg[cfg.name].name + '_' + i + '" onclick="dp_select(\'' + dp_cfg[cfg.name].name + '\', ' + i + ')">' + i + '</div></td>';
		if (i / 7 != Math.floor(i / 7))
			res += '<td style="width:2px;"></td>';
			
	}
	res += '</tr></table></td></tr>';
	res += '<tr><td height=1 colspan=2></td></tr>';
	res += '</table>';
	res += '</td></tr>';
	res += '</table>';
	document.write(res);
	dp_setunselectable(fo('dp_editor_' + dp_cfg[cfg.name].name));
	var imgs = fo('dp_editor_' + dp_cfg[cfg.name].name).getElementsByTagName('div');
	for (var i  = 0; i < imgs.length; i++) {
		if (imgs[i].className == 'dp_i') {
			imgs[i].onmouseover = imgs[i].onmouseout = imgs[i].onmouseup = imgs[i].onmousedown = dp_buttonevent;
			dp_but_change(imgs[i], 'normal');
		}
	}
	dp_update_pick(cfg.name);
}

function dp_config(cfg) {
	cfg.delim = cfg.delim ? cfg.delim : "-";
	cfg.min = cfg.min ? cfg.min : 1901;
	cfg.max = cfg.max ? cfg.max : 2099;
	cfg.input_class = cfg.input_class ? cfg.input_class : "dp_input";
	return cfg;
}

function dp_setunselectable(src) {
	if (typeof(src.tagName) != "undefined" && src.tagName.toLowerCase() != "input") {
		if (src && src.hasChildNodes())
			for (var i = 0; i < src.childNodes.length; i++) dp_setunselectable(src.childNodes[i]);
		src.unselectable = true;
	}
}

function dp_doevent(src) {
	if (!src) {
		window.event.returnValue = false;
		window.event.cancelBubble = true;
		return window.event;
	}
	else {
		src.stopPropagation();
		src.preventDefault();
		return src;
	}
}

function dp_buttonevent(evnt, src) {
	var evnt = dp_doevent(evnt);
	src = src ? src : this;

	if (typeof(src.controlstate) != "undefined" && (src.controlstate == "disabled" || src.controlstate == "selected" || src.disabled))
		return;

	switch (evnt.type) {
		case "mousedown":
			dp_but_change(src, "down");
			break;
		case "mouseover":
		case "mouseup":
			dp_but_change(src, "hover");
			break;
		default:
			dp_but_change(src, "normal");
			break;
	}
}

function dp_but_change(src, state) {
	if (typeof(src.controlstate) != "undefined" && state == src.controlstate) return;
	var style = "pi_" + state;
	src.style.background = dp_styles[style][0];
	src.style.border = dp_styles[style][1];
	src.controlstate = state;
}

function dp_get_date(src, day, month, year) {
	var date = !year || !month || !day ? new Date() : new Date(year, month - 1, day);
	return dp_add_null(date.getDate(), 2) + dp_cfg[src].delim + dp_add_null(date.getMonth() + 1, 2) + dp_cfg[src].delim + String(date.getFullYear());
}

function dp_pick(src) {
	if (!fo(dp_cfg[src].id).value) fo(dp_cfg[src].id).value = dp_get_date(src);
	if (fo('dp_picker_' + src).style.display == 'none') {
		fo('dp_button1_' + src).disabled = true;
		fo('dp_picker_' + src).style.display = 'block';
		dp_update_pick(src);
	}
	else {
		fo('dp_button1_' + src).disabled = false;
		fo('dp_picker_' + src).style.display = 'none';
	}
}

function dp_add_null(str, num) {
	str = String(str);
	while (str.length < num) str = '0' + str;
	return str;
}

function dp_clear(src) {
	fo(dp_cfg[src].id).value = '';
}

function dp_parse(src) {
	var date = String(fo(dp_cfg[src].id).value);
	if (date.length != 10) date = dp_get_date(src);
	var obj = new Object();
	obj.day = Number(date.slice(0, 2));
	obj.month = Number(date.slice(3, 5));
	obj.year = Number(date.slice(6, 10));
	return obj;
}

function dp_b_decade(src) {
	var obj = dp_parse(src);
	if (dp_check_year(src, obj.year - 10)) fo(dp_cfg[src].id).value = dp_get_date(src, obj.day, obj.month, obj.year - 10);
	dp_update_pick(src);
}

function dp_f_decade(src) {
	var obj = dp_parse(src);
	if (dp_check_year(src, obj.year + 10)) fo(dp_cfg[src].id).value = dp_get_date(src, obj.day, obj.month, obj.year + 10);
	dp_update_pick(src);
}

function dp_b_year(src) {
	var obj = dp_parse(src);
	if (dp_check_year(src, obj.year - 1)) fo(dp_cfg[src].id).value = dp_get_date(src, obj.day, obj.month, obj.year - 1);
	dp_update_pick(src);
}

function dp_f_year(src) {
	var obj = dp_parse(src);
	if (dp_check_year(src, obj.year + 1)) fo(dp_cfg[src].id).value = dp_get_date(src, obj.day, obj.month, obj.year + 1);
	dp_update_pick(src);
}

function dp_b_month(src) {
	var obj = dp_parse(src);
	if (obj.month == 1) {
		obj.year -= 1;
		obj.month = 13;
	}
	if (dp_check_year(src, obj.year)) fo(dp_cfg[src].id).value = dp_get_date(src, obj.day, obj.month - 1, obj.year);
	dp_update_pick(src);
}

function dp_f_month(src) {
	var obj = dp_parse(src);
	if (obj.month == 12) {
		obj.year += 1;
		obj.month = 0;
	}
	if (dp_check_year(src, obj.year)) fo(dp_cfg[src].id).value = dp_get_date(src, obj.day, obj.month + 1, obj.year);
	dp_update_pick(src);
}

function dp_update_pick(src) {
	var obj = dp_parse(src);
	var shift = 0;
	var isleap = false;
	if (obj.year / 4 == Math.floor(obj.year / 4)) dp_months[1] = 29;
	else {
		dp_months[1] = 28;
		shift++;
	}
	for (var i = 0; i < obj.month - 1; i++) shift += dp_months[i];
	shift += obj.year - Math.floor(obj.year / 7) * 7 + Math.floor(obj.year / 4) + 3;
	shift = shift - Math.floor(shift / 7) * 7;
	shift = shift == 6 ? -1 : shift;
	for (var i = 0; i < 42; i++) {
		var but = fo('dp_but_' + dp_cfg[src].name + '_' + i);
		if (i <= shift || (i - shift) > dp_months[obj.month - 1])
			but.style.display = 'none';
		else {
			but.style.display = 'block';
			but.innerHTML = i - shift;
			if(obj.day == i - shift) {
				but.style.cursor = 'default';
				but.disabled = true;
				dp_but_change(but, 'selected');
				
			}
			else {
				but.style.cursor = 'hand';
				but.disabled = false;
				dp_but_change(but, 'normal');
			}
		}
	}
}

function dp_select(src, num) {
	var obj = dp_parse(src);
	fo(dp_cfg[src].id).value = dp_get_date(src, Number(fo('dp_but_' + dp_cfg[src].name + '_' + num).innerHTML), obj.month, obj.year);
	dp_pick(src);
}

function dp_check_year(src, year) {
	if (year < dp_cfg[src].min) {
		alert('Нельзя выбрать год меньше чем ' + dp_cfg[src].min);
		return false;
	}
	if (year > dp_cfg[src].max) {
		alert('Нельзя выбрать год больше чем ' + dp_cfg[src].max);
		return false;
	}
	return true;
}


