/* общий для всех проектов js */

var /*PH_is_IE =*/ PH_is_IE6 = (navigator.appVersion.search(/MSIE 6/) > -1);


function PH_DOM(node) // возвращает элемент, в не зависимости от того, передан он сам или его ID
{
	return typeof node == 'string' ? document.getElementById(node) : node;
}


function PH_DOM_get_offset_rect(elem) //получаем координаты box, содержащего элемент и offsetHeight элемента
{
	var box = elem.getBoundingClientRect();

	var body = document.body;
	var docElem = document.documentElement;

	var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;
	var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;

	var clientTop = docElem.clientTop || body.clientTop || 0;
	var clientLeft = docElem.clientLeft || body.clientLeft || 0;

	var top  = box.top +  scrollTop - clientTop;
	var left = box.left + scrollLeft - clientLeft;

	var height = elem.offsetHeight;

	return { top: Math.round(top), left: Math.round(left), height: Math.round(height) };
}


function PH_mousePageXY(e)
{
	var x = 0, y = 0;

	if (!e) e = window.event;

	if (e.pageX || e.pageY)
	{
		x = e.pageX;
		y = e.pageY;
	}
	else if (e.clientX || e.clientY)
	{
		x = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft;
		y = e.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop;
	}

	return {"x":x, "y":y};
}

//var PH_transl_popup_run = 0;
//var PH_transl_popup_timeout;

function PH_translation_popup(e, link_, cur_elem) // показываем div со ссылкой для перевода
{	
	var mCur = PH_mousePageXY(e); 

	l = mCur.x - 10; // 15
	t = mCur.y - 5; // 10

	PH_translation_popup_display(l, t, link_, cur_elem);
/*
//alert(PH_transl_popup_run);
	if (PH_transl_popup_run == 1) clearTimeout(PH_transl_popup_timeout);
	PH_transl_popup_timeout = setTimeout("PH_translation_popup_display("+l+", "+t+", '"+ 'link_'+PH_transl_popup_run +"')", 200);
	PH_transl_popup_run = 1;
*/
}


function PH_translation_popup_display(l, t, transl_popup_html, cur_elem)
{
	if (!PH_DOM('ph_transl_popup_div'))
	{
		var d = document.createElement("DIV");
		d.className = 'ph_transl_popup_div';
		d.id = 'ph_transl_popup_div';
		document.getElementsByTagName('body')[0].appendChild(d);
	}
	
	var ed = PH_DOM('ph_transl_popup_div');
	ed.style.left = l + "px";
	ed.style.top = t + "px";
	PH_DOM('ph_transl_popup_div').innerHTML = transl_popup_html;
	ed.onmouseout = function(x) {return function() {if (PH_DOM('ph_transl_popup_div')) {x.style.color = ''; ed.parentNode.removeChild(ed); /*PH_transl_popup_run = 0;*/}}}(cur_elem);
	ed.style.display = '';
}



// PH_CALA - функции для работы с календариком

var PH_CALA_curr_elem = null;
var PH_CALA_select_date = new Date();

function PH_CALA_first_zero(n)
{
	return ((('' + n).length == 1) ? '0' : '') + n;
}
function PH_CALA_date_to_str(d)
{
	return PH_CALA_first_zero(d.getDate().toString()) + "." + PH_CALA_first_zero((d.getMonth() + 1).toString()) + "." + d.getFullYear();
}
function PH_CALA_get_days_in_month(aMonth, aYear)
{
	var Days;
	if (aMonth == 1 || aMonth == 3 || aMonth == 5 || aMonth == 7 || aMonth == 8 || aMonth == 10 || aMonth == 12)
		Days = 31;
	else if (aMonth == 4 || aMonth == 6 || aMonth == 9 || aMonth == 11)
		Days = 30;
	else if (aMonth == 2)
	{
		if (PH_CALA_is_leap_year(aYear))
			Days = 29;
		else
			Days = 28;
	}
	return Days;
}
function PH_CALA_is_leap_year(aYear)
{
	return (((aYear % 4) == 0) && ((aYear % 100) != 0) || ((aYear % 400) == 0));
}
function PH_CALA_change_month(step)
{
	PH_CALA_select_date.setMonth(PH_CALA_select_date.getMonth() + step);
	PH_CALA_fill_month();
}
// передаем в связанный input type=text выбранную юзером дату и прячем календать
function PH_CALA_set_date(day)
{
	var return_date; //  = null
//	alert(day);
	if (day != -2) // btnClose
	{
		// возвращаем дату
		if (day > 0)
		{
			PH_CALA_select_date.setDate(day);
			return_date = PH_CALA_date_to_str(PH_CALA_select_date);
		}
		else
			if (day == -1) // btnToday
				return_date = PH_CALA_date_to_str(new Date());
		if (return_date)
		{
//			alert(return_date);
			PH_CALA_curr_elem.value = return_date;
		}
	}
	// прячем календарь
	document.getElementById('ph_cala_table').style.display = 'none';
//	if (PH_is_IE6) PH_WCH.Discard('ph_cala_table');
}
function PH_CALA_add_m_e(elem)
{
	elem.onmouseover = function() {if (this.innerHTML.length > 0) this.className+=' ph_cala_m_over';};
	elem.onmouseout = function() {this.className=this.className.replace('ph_cala_m_over', '');};
}
// проверяет, является ли строка dt датой в формате DD.MM.YYYY
function PH_CALA_is_date(dt)
{
	var r=/^(\d{2})\.(\d{2})\.(\d{4})$/;
	if (r.test(dt))
	{
		var d = RegExp.$1*1;
		var m = RegExp.$2*1;
		var y = RegExp.$3*1;
		var test = new Date(y, m-1, d);
		return (test.getFullYear()==y && test.getMonth()==m-1 && test.getDate()==d);
	}
	else
		return false;
}
function PH_CALA_init() // строим табличку с календариком в DOM
{
	var day_of_week_arr = new Array('Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс');
	var month_year_line = new Array('Предыдущий месяц', -1, '&laquo;', 'Предыдущий год', -12, '&laquo;&laquo;', '', 0, 'Месяц, год', 'Следующий год', 12, '&raquo;&raquo;', 'Следующий месяц', 1, '&raquo;');
	var i, j, t, th, tb, tf, tr, td, ggg;
	t = document.createElement('table');
	t.id = 'ph_cala_table';
	t.className = 'ph_cala_table';
	t.cellSpacing = 0;
	t.cellPadding = 0;
	th = document.createElement('thead');
	tr = document.createElement('tr');
	for (i = 0; i < 5; i++)
	{
		td = document.createElement('td');
		if (i == 2)
		{
			td.colSpan = 3;
			td.style.fontSize = '11px';
			td.noWrap = true;
		}
		else
		{
			td.title = month_year_line[i*3];
			PH_CALA_add_m_e(td);
			td.onclick = function(x) {return function() {PH_CALA_change_month(x);}}(month_year_line[i*3+1]);
		}
		td.innerHTML = month_year_line[i*3+2];
		tr.appendChild(td);
	}
	th.appendChild(tr);
	tr = document.createElement('tr');
	for (i = 0; i < 7; i++)
	{
		td = document.createElement('th');
		td.innerHTML = day_of_week_arr[i];
		if (i > 4) td.className = 'ph_cala_weekend';
		tr.appendChild(td);
	}
	th.appendChild(tr);
	t.appendChild(th); // добавляем THEAD в TABLE

	tb = document.createElement('tbody');
	for (j = 1; j < 7; j++)
	{
		tr = document.createElement('tr');
		for (i = 1; i < 8; i++)
		{
			td = document.createElement('td');
			if (i > 5) td.className = 'ph_cala_weekend';
			div = document.createElement('div');
			div.innerHTML = 'x';
			PH_CALA_add_m_e(td);
			td.appendChild(div);
			tr.appendChild(td);
		}
		tb.appendChild(tr);
	}
	t.appendChild(tb); // добавляем TBODY в TABLE - без этого в IE таблица в браузер не выводится!

	tf = document.createElement('tfoot');
	tr = document.createElement('tr');
	for (i = 0; i < 3; i++)
	{
		td = document.createElement('td');
		if (i != 1)
		{
			td.innerHTML = ((i==0) ? 'Сегодня' : 'Закрыть');
			td.colSpan = 3;
			PH_CALA_add_m_e(td);
			td.onclick = function(x) {return function() {PH_CALA_set_date((x==0) ? -1 : -2);}}(i);
		}
		else
			td.innerHTML = '';
		tr.appendChild(td);
	}
	tf.appendChild(tr);
	t.appendChild(tf); // добавляем TFOOT в TABLE

	document.getElementsByTagName('body')[0].appendChild(t);
}
function PH_CALA_fill_month()
{
	var dayInMonth = PH_CALA_get_days_in_month(PH_CALA_select_date.getMonth() + 1, PH_CALA_select_date.getFullYear());
	var firstMonthDay = new Date(PH_CALA_select_date);
//alert(firstMonthDay);
	firstMonthDay.setDate(1);
	var firstWeekDay = firstMonthDay.getDay();
	if (firstWeekDay == 0)
		firstWeekDay = 7;
//alert(firstWeekDay);
	var month_arr = new Array('Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь');
	var i, tmp;
	var tbl = document.getElementById('ph_cala_table');
	tbl.getElementsByTagName('td')[2].innerHTML = month_arr[PH_CALA_select_date.getMonth()] + ', ' + PH_CALA_select_date.getFullYear();
	var tbl_tbody = tbl.getElementsByTagName('tbody')[0];
	var tds_arr = tbl_tbody.getElementsByTagName('td');
//alert(tds_arr.length);
	for (i = 0; i < 42; i++)
	{
		if ((i < (firstWeekDay-1)) || (((i+2) - firstWeekDay) > dayInMonth))
		{
			tds_arr[i].innerHTML = '';
//			tds_arr[i].onmouseover = function() {};
//			tds_arr[i].onmouseout = function() {};
			tds_arr[i].onclick = function() {};
		}
		else
		{
			tmp = (i+2) - firstWeekDay;
			tds_arr[i].innerHTML = '<div>' + tmp + '</div>';
//			PH_CALA_add_m_e(tds_arr[i]);
			tds_arr[i].onclick = function(x) {return function() {PH_CALA_set_date(x);}}(tmp);
		}
	}
}
function PH_CALA_show(elem, e)
{
	var d = PH_DOM(elem);
	PH_CALA_curr_elem = d;
//alert('input value = ' + d.value);	
	if (!e) var e = window.event;

	var buttonWidth = 0; // 12
	var buttonHeight = 0; // 12
		
	var html = document.documentElement
	var body = document.body
		
	var x = e.clientX + (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0) + buttonWidth;
	var y = e.clientY + (html && html.scrollTop || body && body.scrollTop || 0) - (html.clientTop || 0) + buttonHeight;

	if (!PH_DOM('ph_cala_table')) // построим таблицу, если она ещё не построена
		PH_CALA_init();
	var tbl = PH_DOM('ph_cala_table');

	tbl.style.left = x+'px';
	tbl.style.top = y+'px';
//	tbl.style.display = '';

	if (d.value && PH_CALA_is_date(d.value))
	{
		var tmp = (d.value).split(".");
		if (tmp.length == 3)
			PH_CALA_select_date = new Date(tmp[2], tmp[1] - 1, tmp[0]);
	}
//alert('PH_CALA_select_date = ' + PH_CALA_select_date);
	PH_CALA_fill_month();
	tbl.style.display = '';
//	if (PH_is_IE6) PH_WCH.Apply('ph_cala_table');
}
function PH_CALA_today(elem)
{
	if (!elem.value || !PH_CALA_is_date(elem.value))
		elem.value = PH_CALA_date_to_str(new Date());
}



// ERS = ERror Show - показ ошибок при проверке форм на клиенте 

function PH_ERS_show(el_or_id, text) //показываем div с текстом ошибки text под элементом el_or_id
{
//	document.onclick = function() {};
	var el = PH_DOM(el_or_id);
	var el_name = el.nodeName.toLowerCase();
	var el_type = el.type.toLowerCase();

	var tmp = PH_DOM_get_offset_rect(el)
	var left = tmp.left;
	var top = tmp.top + tmp.height;
	if (PH_is_IE6 && (el_name == "input") && ((el_type == "radio") || (el_type == "checkbox"))) top = top - 2;

	if (!PH_DOM('ph_ers_div'))
	{
		var d1 = document.createElement("DIV");
		d1.className = 'ph_ers_div';
		d1.id = 'ph_ers_div';
		var img = document.createElement("IMG");
		img.src = '/shared/img/t.gif';
		img.className = 'ph_ers_mark_img';
		var d2 = document.createElement("DIV");
		d2.className = 'ph_ers_div_text';
		d2.id = 'ph_ers_div_text';
		d1.appendChild(img);
		d1.appendChild(d2);
		document.getElementsByTagName('body')[0].appendChild(d1);
	}

	var ed = PH_DOM('ph_ers_div');

	ed.style.left = left+"px";
	ed.style.top = top+"px";
	PH_DOM('ph_ers_div_text').innerHTML = text;
	ed.style.display = '';
//	if (PH_is_IE6) PH_WCH.Apply('ph_ers_div');
	//var evt = event || window.event; 
//	window.event.cancelBubble = true;
}

function PH_ERS_hide() //скрываем div с текстом ошибки text под элементом el_or_id
{
	if (PH_DOM('ph_ers_div'))
	{
		PH_DOM('ph_ers_div').style.display = 'none';
//		if (PH_is_IE6) PH_WCH.Discard('ph_ers_div');
	}
}

document.onclick = function() {PH_ERS_hide();};


