
// ПЕРЕДАЕМ URL ВО ФРЕЙМ
function toiframe(url)
{
	//frames["iframe"].document.location.href = url;
	showLoad(true);
	top._$("iframe").src = url;
}

// ПОКАЗАТЬ/СКРЫТЬ АНИМАШКУ "ЗАГРУЗКА"
function showLoad(visible)
{
	if(visible == null)
		visible = true;
	try {
		top._$("imgLoad").style.visibility = visible ? "visible" : "hidden";
	}
	catch(e) {}  
}

// ПЕРЕЗАГРУЗИТЬ СТРАНИЦУ ПОСЛЕ РАБОТЫ ФРЕЙМА
function topReload()
{
	if($.browser.webkit || $.browser.opera)
		history.go(0);
	else if($.browser.mozilla)	{
		history.back();
		setTimeout("top.location.reload(true)",500);
	} else {
		history.back();
		history.go(0);
	}
}
// ВЫЗОВ ФУНКЦИИ history.back() ПОСЛЕ РАБОТЫ ФРЕЙМА
function topBack(post) // post - страница дергалась формой (иначе - ссылкой)
{
	showLoad(false);
	if(!($.browser.webkit && !post))
		history.back();
}

// ОТКРЫВАЕТ СТРАНИЦУ В ОТДЕЛЬНОМ ОКНЕ
function openWindow(width,height,url,target,toolbar)
{
/*
	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+',toolbar='+toolbar);
	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 };
}

// ФУНКЦИЯ ПРОВЕРКИ ДАТЫ ВИДА 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;
}

// ПРЕДВАРИТЕЛЬНАЯ ЗАГРУЗКА КАРТИНОК
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 i = obj.parentNode.cellIndex; // индекс td(th) в которой checkbox
	$(obj).parents('table:first').find('tr:gt(0)').find('td:eq('+i+') input[type="checkbox"]').attr('checked', obj.checked);
}
// УДАЛЯЕМ ОТМЕЧЕННЫЕ ЗАПИСИ
function dellChecked()
{
	var url = '?action=delall';
	var input = document.getElementsByTagName('INPUT');
	for(var i=1; i<input.length; i++)
		if(input[i].id == 'del' && input[i].checked)
			url += '&del[]='+input[i].value;
	toajax(url);
}
// ПОЛУЧЕНИЕ ПОТОМКОВ (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;
}

// САБМИТИМ ФОРМУ ЛЮБЫМ ЭЛЕМЕНТОМ
function frmSubmit(e) // event
{
	
	var obj = getObjEvent(e);
	do {
		obj = obj.parentNode;
	}
	while(obj.tagName != "FORM")
	obj.submit();
}

// GET/POST AJAX
function toajax(url_obj) // ссылка или объект формы / на выходе возвращаем javascript код
{
	if(is_object(url_obj)) // постим/гетим форму  <form onSubmit="return toajax(this)"
	{
		$.ajax({
			type: url_obj.method=='' ? 'GET' : url_obj.method,
			url: url_obj.action,
			async: false,
			data: $(url_obj).serialize(),
			success: function(data) {
				data = str_replace(['<script>','</script>'], '', data);
				try { eval(data); } catch(e){ alert(data); }
			}
		});		
		return false;
	}
	else // гетим ссылку
	{
		$.get(url_obj, '', function(data) {
			data = str_replace(['<script>','</script>'], '', data);
			try { eval(data); } catch(e){ alert(data); }
		});
	}
}



// ============ ============  АНАЛОГИ PHP  ============ ============

function number_format(number, decimals, dec_point, thousands_sep) 
{
    number = (number + '').replace(/[^0-9+\-Ee.]/g, '');
    var n = !isFinite(+number) ? 0 : +number,
        prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
        sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
        dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
        s = '',
        toFixedFix = function (n, prec) {
            var k = Math.pow(10, prec);
            return '' + Math.round(n * k) / k;
        };
    // Fix for IE parseFloat(0.55).toFixed(0) = 0;
    s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
    if (s[0].length > 3) {
        s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
    }
    if ((s[1] || '').length < prec) {
        s[1] = s[1] || '';
        s[1] += new Array(prec - s[1].length + 1).join('0');
    }
    return s.join(dec);
}


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 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;
}


function str_replace(search, replace, subject) 
{
	var f = search, r = replace, s = subject;
	var ra = r instanceof Array, sa = s instanceof Array, f = [].concat(f), r = [].concat(r), i = (s = [].concat(s)).length;
	while (j = 0, i--) {
		if (s[i]) {
			while (s[i] = (s[i]+'').split(f[j]).join(ra ? r[j] || "" : r[0]), ++j in f) {};
		}
	}
	return sa ? s : s[0];
}


function is_object(mixed_var) 
{
	if(mixed_var instanceof Array)
		return false;
	return (mixed_var !== null) && (typeof(mixed_var) == 'object');
}


function explode(delimiter, string, limit) 
{
	var emptyArray = { 0: '' };
	// third argument is not required
	if (arguments.length < 2 || typeof arguments[0] == 'undefined' || typeof arguments[1] == 'undefined')
		return null;
	if (delimiter === '' || delimiter === false || delimiter === null)
		return false;
	if (typeof delimiter == 'function' || typeof delimiter == 'object' || typeof string == 'function' || typeof string == 'object')
		return emptyArray;
	if (delimiter === true)
		delimiter = '1';
	if (!limit)
		return string.toString().split(delimiter.toString());
	else 
	{    // support for limit argument
		var splitted = string.toString().split(delimiter.toString());
		var partA = splitted.splice(0, limit - 1);
		var partB = splitted.join(delimiter.toString());
		partA.push(partB);
		return partA;
	}
}


function implode(glue, pieces) 
{
	var i = '', retVal = '', tGlue = '';
	if(arguments.length === 1) 
	{
		pieces = glue;
		glue = '';
	}
	if(typeof(pieces) === 'object') 
	{
		if(pieces instanceof Array)
			return pieces.join(glue);
		for(i in pieces) 
		{
			retVal += tGlue + pieces[i];
			tGlue = glue;
		}
		return retVal;
	} 
	else
		return pieces;
}
