/**
 * Получает элемент по его идентификатору
 * @param	string	id			идентификатор элемента
 */
function get(id) { return document.getElementById(id); }

/**
 * Получает элемент формы по названию формы и элемента
 * @param	string	form		название формы
 * @param	string	item		название элемента формы
 */
function element(form,item) { return document.forms[form].elements[item]; }

/**
 * получение содержимого фрейма
 */
function loadframe( name ) { return get(name).contentWindow.document.body.innerHTML; }

/**
 * Поиск элемента масива
 */
function in_array(array,item)
{
	for( x in array ) if( item==array[x] ) return true;
	return false;
}

/**
 * обрезание пробелов в строке
 */
function trim(string)
{
	string = string.replace(/^[\s\n\r]+/,"");
	string = string.replace(/[\s\n\r]+$/,"");
	return string;
	//return string.replace(/(^\s+)|(\s+$)/g,"");
}

/**
 * примитивный аналог пхп
 */
function htmlspecialchars(text)
{
	if( !text ) return "";
	text = text.replace(/&/g,"&amp;");
	text = text.replace(/</g,"&lt;");
	return text;
}

/**
 * вывод параметров объекта
 */
function dom(obj)
{
	var html = '<table border="1">';
	for( x in obj ) html += '<tr><td>'+x+'</td><td>'+obj[x]+'</td></tr>';
	html += '</table>';
	return html;
}

/**
 * Выполнение AJAX запроса к серверу
 * @param	string	page		страница запроса
 * @param	string	send		строка запроса
 * @param	object	item		объект или название функци для возвращения данных
 */
function request( page, send, item )
{
	var req = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
	req.onreadystatechange = function()
	{
		if( req.readyState==4 )
		{
			if( item && item.nodeName=="INPUT" ) item.value=req.responseText;	// установка значения
			else if( item && item.innerHTML ) item.innerHTML=req.responseText;	// вывод результата
			else item(req.responseText);										// вызов функции
		}
	}
	req.open( "POST", "/"+page+"?r="+Math.random(Math.round()*100000), true );
	req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');	//multipart/form-data
	req.setRequestHeader("Connection", "close");
	//req.setRequestHeader("Content-length", send.length);
	req.send( send );
}


function viewinglist(mode,root,id,func)
{
	var save = get(id), item = get(id+"_select");
	if( mode )
	{
		var f = function(event)
		{
			if( !event ) event = window.event;
			var i = selectchild(item,save.value,"LI","hover","");
			if(i==undefined && event.keyCode==40) i=-1;
			else if(i==undefined && event.keyCode==38) i=item.childNodes.length;
			else if(i==0 && event.keyCode==38) { i=undefined; save.value=undefined; }
			if( event.keyCode==38 ) save.value = selectchild(item,save.value,"LI","hover","",i-1);
			else if( event.keyCode==40 ) save.value = selectchild(item,save.value,"LI","hover","",i+1);
			else if( event.keyCode==13 ) { dropdown(root,id,"body",getchild(item,i,"LI")); root.blur(); }
			else if( event.keyCode==27 ) { dropdown(root,id,"body"); root.blur(); }
			if( event.keyCode==40 && (i+4)*19>item.offsetHeight ) item.scrollTop = (i-2)*19;
			else if( event.keyCode==38 && (i+3)*19>item.offsetHeight ) item.scrollTop = (i-3)*19;
			else item.scrollTop = 0;
		}
		document.onkeydown = f;
	}
	else
	{
		document.onkeydown = function(){}
	}
}

/**
 * получение массива ключей и значений из выпадающего списка
 */
function grabValues(item,node)
{
	var list = {};
	for( var x=0; x<item.childNodes.length; x++ )
	{
		var t = item.childNodes[x];
		if( node==t.nodeName ) list[t.value] = trim(t.innerText ? t.innerText : t.textContent);
	}
	return list;
}

/**
 * получение абсолютных координат объекта
 */
function getAbsolutePos( item )
{
	//if( item.scrollTop>0 || item.scrollLeft>0 ) alert(item.scrollTop+"/"+item.scrollLeft);
	var data = { "x":item.offsetLeft, "y":item.offsetTop, "t":item.scrollTop, "l":item.scrollLeft };
	if( item.offsetParent )
	{
		var temp = getAbsolutePos( item.offsetParent );
		data.x += temp.x-temp.l; data.y += temp.y-temp.t;
	}
	return data;
}

/**
 * получение видимой области экрана
 */
function getsize()
{
	var x = y = 0;
	if( self.innerHeight )
		x = self.innerWidth, y = self.innerHeight;
	else if( document.documentElement && document.documentElement.clientHeight )
		x = document.documentElement.clientWidth, y = document.documentElement.clientHeight;
	else if( document.body )
		x = document.body.clientWidth, y = document.body.clientHeight;
	return { "width":x, "height":y };
}

/**
 * проверка попадания курсора в объект
 */

/**
 *
 */
function evalscript(data)
{
	var s2 = i = 0;
	do {
		var s1 = data.indexOf("<script>",s2);
		var s2 = data.indexOf("</script>",s1);
		var s = data.substring(s1+8,s2);//substring
		if( s1>=0 && s2>=0 ) eval(s);
	} while( s1>0 && s2>0 && ++i<3 )
}

function dom(item)
{
	var html = '<table border="1">';
	for( x in item) html += '<tr><td>'+x+'</td><td>'+item[x]+'</td></tr>';
	return html+'</table>';
}


function mc(name)
{
	var ie =  navigator.appName.indexOf("Microsoft")!=-1;
	var ob = (ie ? window : document)['youtube_swf'];
	return ob ? ob : get('youtube_swf');
}

function explode (delimiter, string, limit)
{
    // Splits a string on string separator and return array of components. If limit is positive only limit number of components is returned. If limit is negative all components except the last abs(limit) are returned.
    //
    // version: 909.322
    // discuss at: http://phpjs.org/functions/explode
    // +     original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     improved by: kenneth
    // +     improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     improved by: d3x
    // +     bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: explode(' ', 'Kevin van Zonneveld');
    // *     returns 1: {0: 'Kevin', 1: 'van', 2: 'Zonneveld'}
    // *     example 2: explode('=', 'a=bc=d', 2);
    // *     returns 2: ['a', 'bc=d']

    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
    {
        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 loadCalendar(ts,razdel)
{
	var func = function(data)
	{
		get("Calendar").innerHTML = data;
	}
	request( razdel + "news/AjaxCalendar/" + ts, "data=true", func );
}

function SendOpros()
{
	var func = function(data)
	{
		get("InnerOpros").innerHTML = data;
	}
	if(get("answer_id").value!="")
		request( "main/SetOpros/", "AnswerID=" + get("answer_id").value + "&OprosID=" + get("opros_id").value, func );
	//alert(get("answer_id").value);
}

function AjaxAddComment(type_id)
{
	var func = function(data)
	{
		LoadComments("false",type_id,razdel);
		get('comment').value="";
	}
	request( razdel + "news/AjaxAddComment/", "comment=" + get('comment').value + "&type_id=" + get('type_id').value, func );
}

function LoadComments(page,type_id)
{
	var func = function(data)
	{
		get("COMMENTS").innerHTML = data;

	}
	request( razdel + "news/LoadComments/", "page=" + page + "&type_id=" + type_id, func );
}

function LoadProgram(id)
{
	var func = function(data)
	{
		get("PROGRAM").innerHTML = data;
		evalscript(data);
		loadflashfromajax();
	}
	request( "programs/LoadArh", "id=" + id, func );
}

function DelComment(id)
{
	var func = function(data)
	{
		get("divcom_" + id).innerHTML = data;
	}
	request( "main/DelComment", "id=" + id, func );

}

function BanUser(id)
{
	var func = function(data)
	{
		if(data="success")
			alert("Готово! Этот пользователь больше не сможет войти в систему!");
	}
	request( "main/BanUser", "id=" + id, func );

}
*/