function popup(p_url, p_name, p_w, p_h, event) {
	var p_l = event.screenX; var p_t = event.screenY;
	if (p_t + p_h>screen.availHeight) p_t-=p_h;
	if (p_l+p_w>screen.availWidth) p_l-=p_w;
	var w = window.open(p_url, p_name, 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,left=' + p_l + ',top=' + p_t + ',width=' + p_w + ',height=' + p_h);
	if (w) w.focus();
}

function mOvr(src, clOver, event) {
	if (document.all) {
		if (!src.contains(event.fromElement)) { src.style.cursor = 'hand'; src.className = clOver; }
	}
	else {
		src.style.cursor = 'pointer'; src.className = clOver;
	}
}

function mOut(src, clIn, event) {
	if (document.all) {
		if (!src.contains(event.toElement)) { src.style.cursor = 'default'; src.className = clIn; }
	}
	else {
		src.style.cursor = 'default'; src.className = clIn;
	}
}

function mClk(src, event) {
	if (document.all) {
		if(event.srcElement.tagName=='TD') { src.children.tags('A')[0].click(); }
	}
	else {
		if(event.target.tagName=='TD') { document.location.href = src.childNodes[0].href; }
	}
}

function setCheckboxes(the_form, the_cb, do_check)
{
	if (typeof(document.forms[the_form].elements[the_cb]) != 'undefined')
	{
		var elts = document.forms[the_form].elements[the_cb];
		var elts_cnt  = (typeof(elts.length) != 'undefined')
			? elts.length
			: 0;

		if (elts_cnt)
		{
			for (var i = 0; i < elts_cnt; i++)
			{
				if (!elts[i].disabled) elts[i].checked = do_check;
			}
		}
		else
		{
			elts.checked = do_check;
		}
	}
	if (typeof(document.forms[the_form].elements['check_all']) != 'undefined')
	{
		document.forms[the_form].elements['check_all'].checked = do_check;
	}
	return true;
}

rePoint = new RegExp(",", "ig");
reNonNumeric = new RegExp("[^0-9\.]", "ig");
reDoubleDot = new RegExp("[\.]?([0-9]+[\.]?[0-9]*)[\.]?", "ig");
function getValue(str)
{
	if (str==".") str = "";
	str = str.replace(rePoint, ".");
	str = str.replace(reNonNumeric, "");
	str = str.replace(reDoubleDot, "$1");
	return (str);
}
function numberFormat(src, precision) {
	if (precision != null) {
		src = Number(src).toFixed(precision);
	}
	src = src.toString();
	var len = src.length;
	var point = src.indexOf('.');
	point = point > 0? point : len;
	var first = point % 3;
	if (first==point) first = 0;
	var dst = new String;
	var j = 1;
	for (var i = 0; i<point; i++){
		dst+= src.charAt(i);
		if (j>first && first>0){
			first = 0;
			j = 1;
		}
		if (((first>0 && j==first) || (first==0 && (j % 3==0))) && (i!=point-1))
			dst+= ' ';
		j++;
	}
	if (point<len)
		dst+=',' + src.slice(point+1);
	return dst;
}
function change_digits(sender) {
	var src = new String(getValue(sender.value));
	var dst = numberFormat(src);
	if (dst!=sender.value)
		sender.value = dst;
}

function showhide(tr, show) {
	if (show == null) {
		show = tr.style.display == 'none';
	}
	tr.style.display = show ? '' : 'none';
}

function show_hide(id, show, inline) {
	show_hide_node(document.getElementById(id), show, inline);
}
function show_hide_node(ctrl, show, inline) {
	if (show == true) {
		ctrl.style.display = (inline == null)? 'block' : 'inline';
	}
	else {
		ctrl.style.display = 'none';
	}
}

function switch_hidden(tr, cn) {
	if (cn == null) {
		cn = '';
	}
	tr.className = tr.className=='hide'? cn : 'hide';
	return !(tr.className=='hide');
}

function get_maxsize_comment(value, maxsize, cut_cr_symbols) {
	var len = (cut_cr_symbols ? value.replace(new RegExp("\r\n", 'g'), "\n") : value).length;
	if (len <= maxsize) {
		var num = maxsize - len;
		return 'Осталось ' + num + ' символов';
	}
	else {
		var num = len - maxsize;
		return '<em>Превышение ' + num + ' символов</em>';
	}
}

/**
 * Функция, добавляющая строку в таблицу. Возвращает ссылку на объект добавленной строки.
 *
 * table    object - таблица, в которую надо вставить строку
 * td_array array  - массив ассоциативных записей. Анализируемые поля каждой записи:
 *                   html - innerHTML ячейки таблицы
 *                   align - выравнивание
 *                   colspan, rowspan - соответственно то, что значат эти поля в HTML
 *                   td_class - имя класса для данной ячейки таблицы
 * insert_before_row object - строка, перед которой вставить новую строку. если null - вставить в конец
 *
 * return object
 */
function add_table_row(table, td_array, insert_before_row) {
	var tr = document.createElement('tr');
	for (var ii=0; ii<td_array.length; ii++) {
		var td = document.createElement('td');
		td.innerHTML = td_array[ii].html;
		if (td_array[ii].align) {
			td.setAttribute('align', td_array[ii].align);
		}
		if (td_array[ii].colspan) {
			td.setAttribute('colSpan', td_array[ii].colspan);
		}
		if (td_array[ii].rowspan) {
			td.setAttribute('rowSpan', td_array[ii].rowspan);
		}
		if (td_array[ii].td_class) {
			td.className = td_array[ii].td_class;
		}
		tr.appendChild(td);
	}
	if (!insert_before_row) {
		table.tBodies[0].appendChild(tr);
	}
	else {
		table.tBodies[0].insertBefore(tr, insert_before_row);
	}
	
	return tr;
}

function get_count_name_js(count, name10, name1, name4) {
	var _count = count % 100;
	var out;
	if (_count>=5 && _count<=20)
		out = name10;
	else {
		_count_modulus = _count % 10;
		if (_count_modulus==1) {
			out = name1;
		}
		else {
			if (_count_modulus < 5 && _count_modulus!=0) {
				out = name4;
			}
			else {
				out = name10;
			}
		}
	}
	return out;
}

function get_radio_button_checked_node(radio_button) {
	for (var ii=0; ii<radio_button.length; ii++) {
		if (radio_button[ii].checked) {
			return radio_button[ii];
		}
	}
	return false;
}
function get_radio_button_value(radio_button) {
	return (get_radio_button_checked_node(radio_button)).value;
}
function get_window_width() {
    if (window.innerWidth) {
        return window.innerWidth;
    }
    else if (document.documentElement.clientWidth) {
        return document.documentElement.clientWidth;
    }
    else if (document.body.clientWidth) {
        return document.body.clientWidth;
    }
    else if (document.body.offsetWidth) {
        return document.body.offsetWidth;
    }
    return 0;
}
function setCookie(doc, name, value, expires, path, domain, secure) {
    if (!name || !value) return false;
    var str = name + '=' + encodeURIComponent(value);

    if (expires) str += '; expires=' + expires.toGMTString();
    if (path)    str += '; path=' + path;
    if (domain)  str += '; domain=' + domain;
    if (secure)  str += '; secure';

    doc.cookie = str;
    return true;
}

function getCookie(doc, name) {
    var pattern = "(?:; )?" + name + "=([^;]*);?";
    var regexp  = new RegExp(pattern);

    if (regexp.test(doc.cookie))
    return decodeURIComponent(RegExp["$1"]);

    return false;
}

function deleteCookie(doc, name, path, domain) {
    setCookie(doc, name, null, new Date(0), path, domain);
    return true;
}
