/*************************************************************
*                     ОСНОВНЫЕ НАСТРОЙКИ
*************************************************************/
var CONFIG = new Array();
CONFIG['dir'] = new Array();
CONFIG['dir']['XMLHR'] = '/http/XMLHR/';
CONFIG["TRUE_IMAGES_TYPES"] = new Array('jpg', 'jpeg');


/*************************************************************
* Определение броузера.
* Взято с kruglov.ru
*************************************************************/
var isDOM = document.getElementById //DOM1 browser (MSIE 5+, Netscape 6, Opera 5+)
var isOpera = isOpera5 = window.opera && isDOM //Opera 5+
var isOpera6 = isOpera && window.print //Opera 6+
var isOpera7 = isOpera && document.readyState //Opera 7+
var isMSIE = document.all && document.all.item && !isOpera //Microsoft Internet Explorer 4+
var isMSIE5 = isDOM && isMSIE //MSIE 5+
var isNetscape4 = document.layers //Netscape 4.*
var isMozilla = isDOM && navigator.appName == "Netscape" //Mozilla или Netscape 6.*

function getScrollLeft()
{
    return  window.pageXOffset
            || document.documentElement.scrollLeft
            || document.body.scrollLeft
            || 0;
}
    
function getScrollTop()
{
    return window.pageYOffset
           || document.documentElement.scrollTop
           || document.body.scrollTop
           || 0;
}

/*************************************************************
* Строковые функции
*************************************************************/

/**
* Метод возвращает false если строка пуста,
* т.е. не содержит символов, или не содержит символов,
* отличных от пробельных.
* ИСПОЛЬЗУЕТСЯ В ФУНКЦИЯХ: is_empty_input
* @param void
* @return boolean
*/
String.prototype.noempty = function()
{
    if (this == '' || this == null) {
        return false;
    }

    for (var j=0; j<this.length; j++)
    {
        if (this.charAt(j)!=" " && this.charAt(j)!="\n" && this.charAt(j)!="\t" && this.charAt(j)!="\r") {
            return true;
        }
    }
    
    return false;
}

/**
* Метод возвращает true если строка 
* является email-адресом 
* и false в обратном случает.
* @param void
* @return boolean
*/
String.prototype.is_mail = function()
{
    var reg = new RegExp("^\s*([_\.\da-z0-9\-]+@)([\da-z0-9][\da-z0-9\-]+\.)+([a-z]{2,4})\s*$", "i");

    return this.match(reg);
}



/*************************************************************
* Функции массива
*************************************************************/

/*************************************************************
* Метод ищет в массиве значение arg и 
* возвращает индекс элемента, если оно там присутствует
* и -1 если заданного значения в массиве нет
*************************************************************/
Array.prototype.in_array = function(arg)
{
	for (var i=0; i<this.length; i++)
    {
		if (this[i] == arg)
        {
		    return i;
		}
	}

	return -1;
}


/*************************************************************
* Прочие функции
*************************************************************/

// Функция получает выделение со страницы и возвращает его.
// Если выделение прошло неудачно, возвращает FALSE.
function get_selection()
{
    var selection = '';
    
    if (document.getSelection)
    {
        return document.getSelection();
    }
    else if (document.selection && document.selection.createRange && document.selection.type == "Text")
    {
        return document.selection.createRange().text;
    }
    
    return false;
}


function get_select_comment(textarea_id)
{
    var selec = get_selection();
	
    if (!selec)
	{
        alert("Для вставки цитаты необходимо выделить нужное мышью");
    }
	else
    {
        var name_str = '';
        var lnk = document.getElementById(textarea_id);
        var oldval = lnk.value;     
        lnk.value = oldval + '[Q]' + selec + "[/Q] ";
        lnk.focus();
	}
    
    return false;
}

// Открытие всплывающего окна с адресом path и размеракми width и height.
function openWindow(path, width, height)
{
    var l = (screen.availWidth - width)/2;
    var t = (screen.availHeight - height)/2;

    var win = window.open(path, '', 'width='+width+', height='+height+',toolbar=0,menubar=0,scrollbars=1,resizable=1,location=0,status=0,left=' + l + ',top=' + t + '');
    win.focus();
}

// Возвращает метку timestamp UNIX
function getUnixTimestamp()
{
    var now = new Date();
    var str = new String(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds(), now.getUTCMilliseconds()));
    return str.slice(0, -3);
}
    


/*************************************************************
* DOM
*************************************************************/

/**
* Функция возвращает массив ссылок на тэги tagName 
* с классом className
* @param string tagName имя тега
* @param string className имя класса
*/
function getElementsByClassName(tagName, className)
{
    var arr = new Array();
    var tags = document.getElementsByTagName(tagName);
    var j = 0;

    for (var i=0; i < tags.length; i++)
    {
        var tClasName = tags.item(i).className;
        if (tClasName == className || tClasName.indexOf(className) != -1)
        {
            arr[j++] = tags.item(i);
        }
    }
    
    return arr;
}

// возвращает ближайший тег
function getFirstChildTag(node)
{
    var lnk = node.firstChild;
    while(lnk.nodeType != 1)
    {
        lnk = lnk.nextSibling;
    }
    
    return lnk;
}

// возвращает предыдущий тег
function getPreviousSiblingTag(node)
{
    var lnk = node.previousSibling;
    while(lnk.nodeType != 1)
    {
        lnk = lnk.previousSibling;
    }
    
    return lnk;
}

// возвращает следующий тег
function getNextSiblingTag(node)
{
    var lnk = node.nextSibling;
    
    if (lnk)
    {
        while(lnk.nodeType != 1)
        {
            lnk = lnk.nextSibling;
        }
    }
    
    return lnk;
}


// отладка 
function pr(obj, objName)
{
    var result = "";
    for (var i in obj) // обращение к свойствам объекта по индексу
        result += objName + ".<strong>" + i + "</strong> = " + obj[i] + "<br /><br /><br />\n";
    document.write(result);
}
