function getTreeObj(obj, upLevel, next, downLevel){
for(i=0; i < upLevel; i++)  {obj = obj.parentNode;}
for(i=0; i < next; i++)     {obj = obj.nextSibling;}
for(i=0; i < downLevel; i++){obj = obj.lastChild;}
return obj;
}

/*
***Функция добавления своей кнопки в меню над полем ввода ответа***
*obj - узел в котором выполняется скрипт (textAr.parentNode)
*beforNumb - номер объекта в списке потомков obj, перед которым нужно вставлять новую кнопочку
*Ahref - действия новой ссылки
*Atarget - способ открытия окна на которое ведет ссылка, ежели она куда-то ведет
*IMGsrc - картинка внутри ссылки
*IMGalt - поясняющий текст новой кнопочки
*/

function addMenuAnc(obj, beforNumb, Ahref, Atarget, IMGsrc, IMGalt){
var tagA = new Object();
var newText = document.createTextNode(unescape('%A0%A0'));
var newA = document.createElement('A');
newA.href = Ahref;
newA.target = Atarget;

obj.insertBefore(newA, obj.childNodes[beforNumb]);
tagA = obj.childNodes[beforNumb];
tagA.appendChild(document.createElement('img'));
tagA.lastChild.src = IMGsrc;
tagA.lastChild.alt = IMGalt;
tagA.lastChild.border = 0;
tagA.lastChild.width = 16;
tagA.lastChild.height = 16;
if(obj.childNodes[beforNumb+1].nodeName == 'IMG'){obj.insertBefore(newText, obj.childNodes[beforNumb+1])}
else{obj.insertBefore(newText, tagA)}
} /*end addMenuAnc*/

/*
***Функция возвращающая массив ссылок на элементы с указанным атрибутом class***
*className - название класса
*NodeList - список элементов в котором следует производить поиск. Если этот параметр опущен поиск производится по всему древу элементов
*/

function getElementsByClass(className, NodeList){
    if(NodeList == null){
        NodeList = document.all;
    }
    
    var RezNodeList = new Array();
    var l = NodeList.length
    
    for(j=0; j < NodeList.length; j++){
    	if(NodeList[j].getAttribute('class') == className){
    	    RezNodeList.push(NodeList[j])
    	}
    	else{
    	    if(NodeList[j].getAttribute('className') == className){
    	        RezNodeList.push(NodeList[j])
            }
        }
    }    
    return RezNodeList;
} /*end getElementsByClass*/

/*
***Функция возвращающая ссылку на родительский элемент элемента self с указанным именем тега***
*searchParentTagName - имя искомого родительского тега
*self - элемент от которого ведется поиск
*/

function getParentElementByTagName(searchParentTagName, self){
	var tmpElem = self.parentNode;
	var tmpNodeName = tmpElem.nodeName.toLowerCase();
	searchParentTagName = searchParentTagName.toLowerCase();
	while(tmpNodeName != searchParentTagName && tmpNodeName != '#document'){
		tmpElem = tmpElem.parentNode;
		tmpNodeName = tmpElem.nodeName.toLowerCase();
	}
	if((tmpNodeName == '#document' && searchParentTagName == '#document') || tmpNodeName != '#document'){
		return tmpElem;
	}
	else{
		return null;
	}
} /*end getParentElementByTagName*/

/*
***Функция возвращающая NodeList потомков элемента self, с заданым атрибутом name***
*searchChildNodesName - имя искомых потомков
*self - элемент от которого ведется поиск
*/

function getChildNodesByName(searchChildNodesName, self){
	var NodeList = new Array();
	var scnLen = self.childNodes.length;
	for(i=0; i < scnLen; i ++){
		self.childNodes[i].getAttribute('name') == searchChildNodesName ?
			NodeList.push(self.childNodes[i]) :
			NodeList = NodeList.concat(getChildNodesByName(searchChildNodesName, self.childNodes[i]));
	}
	return NodeList;
}

/*
***Функция возвращающая NodeList элементов div, содержащих сообщения темы***
*/
function fbb_getMsgs(){
	return getElementsByClass('font1', document.getElementsByTagName('div'));
}