// ПЕРЕДАЕМ URL ВО ФРЕЙМ
function toajax(url)
{
	//frames["ajax"].document.location.href = url;
	showLoad(true);
	top._$("ajax").src = url;
}

// ПОКАЗАТЬ/СКРЫТЬ АНИМАШКУ "ЗАГРУЗКА"
function showLoad(visible)
{
	if(visible==null)
		visible = true;
	try {
		var _img = top.document.getElementById("imgLoad");
		_img.style.visibility = visible ? "visible" : "hidden";
	}
	catch(e) {}  
}

// ПЕРЕЗАГРУЗИТЬ СТРАНИЦУ ПОСЛЕ РАБОТЫ ФРЕЙМА
function topReload()
{
	switch(userNavigator())
	{
		case "isOpera":
		case "isChrome":
			history.go(0);
			break;
		
		case "isGecko":
			history.back();
			setTimeout("top.location.reload(true)",500);
			break;
		
		default:
			history.back();
			history.go(0);
			break;
	}
}
// ВЫЗОВ ФУНКЦИИ history.back() ПОСЛЕ РАБОТЫ ФРЕЙМА
function topBack(post) // post - страница дергалась формой (иначе - ссылкой)
{
	showLoad(false);
	switch(userNavigator())
	{
		case "isChrome":
		case "isSafari":
			if(post)
				history.back();
			break;
		
		default:
			history.back();
			break;
	}
}

// ОПРЕДЕЛЕНИЕ ТИПА БРАУЗЕРА
function userNavigator()
{
	// Получим userAgent браузера и переведем его в нижний регистр 
	var ua = navigator.userAgent.toLowerCase(); 
	// Safari, используется в MAC OS 
	if( (ua.indexOf("safari") != -1) ) 
		return "isSafari";
	// Internet Explorer 
	if( (ua.indexOf("msie") != -1 && ua.indexOf("opera") == -1 && ua.indexOf("webtv") == -1) )
		return "isIE";
	// Opera 
	if( (ua.indexOf("opera") != -1) )
		return "isOpera";
	// Chrome
	if( (ua.indexOf("chrome") != -1) ) 
		return "isChrome";
	// Gecko = Mozilla + Firefox + Netscape 
	if( (ua.indexOf("gecko") != -1) ) 
		return "isGecko";
	// Konqueror, используется в UNIX-системах 
	if( (ua.indexOf("konqueror") != -1) ) 
		return "isKonqueror";

	return false;
}

// ОТКРЫВАЕТ СТРАНИЦУ В ОТДЕЛЬНОМ ОКНЕ
function openWindow(width,height,url,target)
{
/*
	width	размер в пикселах	ширина нового окна
	height	размер в пикселах	высота нового окна
	left	размер в пикселах	абсцисса левого верхнего угла нового окна
	top	размер в пикселах	ордината левого верхнего угла нового окна
	toolbar	1 / 0 / yes / no	вывод панели инструменов
	location	1 / 0 / yes / no	вывод адресной строки
	directories	1 / 0 / yes / no	вывод панели ссылок
	menubar	1 / 0 / yes / no	вывод строки меню
	scrollbars	1 / 0 / yes / no	вывод полос прокрутки
	resizable	1 / 0 / yes / no	возможность изменения размеров окна
	status	1 / 0 / yes / no	вывод строки статуса
	fullscreen	1 / 0 / yes / no	вывод на полный экран
*/ 
	if(!target) target = 'my';
	var left = Math.round((screen.width-width)/2);
	var top = Math.round((screen.height-height)/2)-40;
	var win = window.open(url, target, 'resizable=yes,width='+width+',height='+height+',scrollbars=1,top='+top+',left='+left);
	win.focus();
	// Пример:
	// <a href="page.htm" target="my" onClick="openWindow(570,700)">открыть</a>
}

// 
function sure()
{
	return confirm("Уверены?");
}

// ОПРЕДЕЛЕНИЕ КООРДИНАТ ЭЛЕМЕНТА
function absPosition(obj) 
{ 
	var x = y = 0;
	while(obj) 
	{
		x += obj.offsetLeft;
		y += obj.offsetTop;
		obj = obj.offsetParent;
	}
	return {x:x, y:y};
	// Пример:
	// "x = " + absPosition(obj).x;
	// "y = " + absPosition(obj).y;
}

// ОПРЕДЕЛЕНИЕ КООРДИНАТ ПОЛОСЫ ПРОКРУТКИ БРАУЗЕРА
function scrollPosition() 
{
	var scrOfX = 0, scrOfY = 0;
	if( typeof( window.pageYOffset ) == 'number' ) {
		//Netscape compliant
		scrOfY = window.pageYOffset;
		scrOfX = window.pageXOffset;
	} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
		//DOM compliant
		scrOfY = document.body.scrollTop;
		scrOfX = document.body.scrollLeft;
	} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
		//IE6 Strict
		scrOfY = document.documentElement.scrollTop;
		scrOfX = document.documentElement.scrollLeft;
	}
	return { x:scrOfX, y:scrOfY };
}

// ДОПУСКАЕТ ВВОД ТОЛЬКО ЧИСЕЛ
function numberOnly(e)
{
	e = e || window.event;
	var k = e.keyCode;
	//alert(k);
	//if(k==188 || k==191 || k==190) e.keyCode = 110; // заменяем , на .
	return ((k>32 && k<41) || (k>44 && k<58) || (k>95 && k<106) || (k>112 && k<124) || (k>187 && k<192) || k==8 || k==9 || k==16 || k==27 || k==91 || k==93 || k==109 || k==110 || k==0); //  "|| k==0" - добавлено для ФайерФокса
}	

// ФУНКЦИЯ ПРОВЕРКИ ДАТЫ ВИДА xx.xx.xxxx
function checkDate(val)
{
	return (/^\d{2}\.\d{2}\.\d{4}$/.test(val));
}

// ПРОВЕРКА E-mail
function checkEmail(email)
{
    var reg = new RegExp("^[0-9a-z_^\.]+@[0-9a-z_^\.]+\.[a-z]{2,6}$", 'i');
    return reg.test(email);
}

// ПОЛУЧЕНИЕ GET ПАРАМЕТРОВ
function getQueryVariable(query) //query - можно не передавать
{
	//полачаем строку запроса (?a=123&b=qwe) и удаляем знак ?
	if(!query)
		query = window.location.search.substring(1);  
	//получаем массив значений из строки запроса вида vars[0] = ‘a=123’;
	var vars = query.split("&");
	var arr = new Array(); 
	//переводим массив vars в обычный ассоциативный массив 
	for (var i=0;i<vars.length;i++) 
	{
		var pair = vars[i].split("=");
		arr[pair[0]] = pair[1];
	}
	return arr;
}

// ИСПОЛЬЗОВАТЬ ВМЕСТО getElementById() ФУНКЦИЮ _$() (может отдать массив элементов, если передать несколько id)
function _$() 
{
	var elements, i;

	if(arguments.length == 1)
		return document.getElementById(arguments[0]);

	elements = new Array();
	for(i=0; i<arguments.length; i++) 
		elements.push(document.getElementById(arguments[i]));

	return elements;
}

// ФОРМАТИРУЕТ ВЫВОД ЧИСЛА, АНАЛОГ number_format() В PHP
function number_format(number, decimals, dec_point, thousands_sep) 
{
	var n = number, prec = decimals, dec = dec_point, sep = thousands_sep;
	n = !isFinite(+n) ? 0 : +n;
	prec = !isFinite(+prec) ? 0 : Math.abs(prec);
	sep = sep == undefined ? ',' : sep;
	
	var s = n.toFixed(prec), abs = Math.abs(n).toFixed(prec), _, i;
	if (abs > 1000) {
		_ = abs.split(/\D/);
		i = _[0].length % 3 || 3;
		_[0] = s.slice(0,i + (n < 0)) + _[0].slice(i).replace(/(\d{3})/g, sep+'$1');
		s = _.join(dec || '.');
	}
	return s;
}

// ПРЕДВАРИТЕЛЬНАЯ ЗАГРУЗКА КАРТИНОК
function preloadImg() // в аргументы передаются пути к картинкам
{
	arg = preloadImg.arguments;
	img = new Array();
	for(i=0; i<arg.length; i++)
	{
		img[i] = new Image;
		img[i].src = arg[i];
	}
}

// ЭЛЕМЕНТ ВЫЗВАВШИЙ СОБЫТИЕ
function getObjEvent(e)
{
	var e = e || window.event;
	var obj = e.target || e.srcElement;
	return obj;
}

// ВЫДЕЛЕНИЕ ЧЕКБОКСОВ "ГЛАВНЫМ" ЧЕКБОКСОМ В ТАБЛИЦЕ
function setCbTable(obj) // checkbox
{
	var table, tr, td, j, i, input;
	td = obj.parentNode;
	i = td.cellIndex; // индекс td в которой checkbox
	table = td.parentNode.parentNode;
	tr = childNodes(table);
	for(j=1; j<tr.length; j++)
	{
		try {
			td = childNodes(tr[j]);
			input = td[i].getElementsByTagName("INPUT");
			input[0].checked = obj.checked;
		}
		catch(e) {}
	}
}
// ПОЛУЧЕНИЕ ПОТОМКОВ (childNodes) ОПРЕДЕЛННОГО ЭЛЕМЕНТА, БЕЗ МУСОРА
function childNodes(obj)
{
	var i, j, childNodes, _childNodes = new Array();
	childNodes = obj.childNodes;
	j = 0;
	for(i in childNodes)
		if(childNodes[i].nodeType == 1)
			_childNodes[j++] = childNodes[i];
	return _childNodes;
}

// АНАЛОГ PHP ФУНКЦИИ isset()
function isset()	// пример: if(isset(window.per)) {} где per - глобальная переменная
{
	var a=arguments; var l=a.length; var i=0;
	if (l==0)
		throw new Error('Empty isset'); 
	
	while (i!=l) 
		if (typeof(a[i])=='undefined' || a[i]===null)
			return false; 
		else
			i++; 
	return true;
}

// ПЛАВНАЯ РАСКРЫВАШКА/СКРЫВАШКА ДИВА
function displayBlock(obj, speed, h) // объект (див), скорость, высота дива (не передавать!)
{
	if(!speed) speed = 5;
	if(userNavigator()=="isIE") speed *= 3;
	if(!h)
	{
		if(obj.style.display == 'block')
			return;
		obj.style.overflow = 'hidden';
		obj.style.display = 'block';
		h = obj.offsetHeight;
		obj.style.height = '5px';
	}
	var hh = parseInt(obj.style.height) + speed;
	if(hh < h)
	{
		obj.style.height = hh + 'px';
		setTimeout(function(){displayBlock(obj, speed, h)}, 1);
	}
	else
		obj.style.height = h + 'px';
}
function displayNone(obj, speed, h) // объект (див), скорость, высота дива (не передавать!)
{
	if(!speed) speed = 5;
	if(userNavigator()=="isIE") speed *= 3;
	if(!h)
	{
		if(obj.style.display == 'none')
			return;
		h = obj.offsetHeight;
		obj.style.height = h + 'px';
	}
	var hh = parseInt(obj.style.height) - speed;
	if(hh > 0)
	{
		obj.style.height = hh + 'px';
		setTimeout(function(){displayNone(obj, speed, h)}, 1);
	}
	else
	{
		obj.style.height = h + 'px';
		obj.style.display = 'none';
	}
}

// АНАЛОГ PHP-ШНОГО rand()
function rand(min, max)
{
	var argc = arguments.length;
	if(argc == 0) 
	{
		min = 0;
		max = 2147483647;
	} 
	else if(argc == 1) 
		throw new Error('Warning: rand() expects exactly 2 parameters, 1 given');

	return Math.floor(Math.random() * (max - min + 1)) + min;
}

// ПЛАВНОЕ УВЕЛИЧЕНИЕ/УМЕНЬШЕНИЕ КАРТИНКИ
// картинка должна иметь свойство absolute
// в функцию передается или желаемая ширина, или желаемая высота
// шаг - четное число. Для увеличение положительное, для уменьшения отрицательное
// размер шага должен быть таким, чтобы ширина(или высота) картинки совпала с желаемой
function zoomImg(obj, width, height, step, check) // картинка, желаемая ширина, желаемая высота, шаг, проверка (не указывается, нужна для корректной работы)
{
	if(isNaN(check)) check = width>0 ? obj.clientWidth : obj.clientHeight;
	var flag = false;
	if(width > 0) { // меняем картику по ширине
		if((step > 0 && obj.clientWidth < width) || (step < 0 && obj.clientWidth > width)) {
			if(step > 0 && check != obj.clientWidth) return;
			check = obj.width = obj.clientWidth + step;
			flag = true;
		}
	}
	else if(height > 0) { // меняем картику по высоте
		if((step > 0 && obj.clientHeight < height) || (step < 0 && obj.clientHeight > height)) {
			if(step > 0 && check != obj.clientHeight) return;
			check = obj.height = obj.clientHeight + step;
			flag = true;
		}
	}
	if(flag) { // меняем положение картинки
		obj.style.zIndex = step > 0 ? '1001' : 'auto';
		obj.style.top = obj.offsetTop - step/2 + 'px';
		obj.style.left = obj.offsetLeft - step/4 + 'px';
		setTimeout(function(){ zoomImg(obj, width, height, step, check) }, 1); 
	} 
	else if(step < 0)	{
		obj.style.top = obj.style.left = 'auto';
	}
} 

// САБМИТИМ ФОРМУ ЛЮБЫМ ЭЛЕМЕНТОМ
function frmSubmit(e) // event
{
	var obj = getObjEvent(e);
	do {
		obj = obj.parentNode;
	}
	while(obj.tagName != "FORM")
	obj.submit();
}
