/* ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ */
var img_dir = "interface/img";

/* ищем host */
var loc = window.location.href;
var matches = loc.match(/http:\/\/([^\/]*)\//);
var host = matches[1]; // имя хоста

/* вырезание пробелов */
if ('undefined' == typeof String.prototype.trim)
{
  String.prototype.trim = function() {
    return this.replace(/^\s+/, '').replace(/\s+$/, '');
  }
}
function echo(str)
{
    var obj = document.getElementById('echo');
    if (!obj) {
        alert('"ECHO" element not found');
        return false;
    }
    obj.innerHTML += '<hr/>'+str;
}
function ml(obj, maxlevel, level) {    var result = '';
    if (maxlevel == undefined) var maxlevel = 0;
    if (level == undefined) var level = 0;
        if (level <= maxlevel && 'object' == typeof obj) {        level++;
                if (level > 1) result += '{';        for (var i in obj) {            result += '<div style="margin-left:'+(level * 1)+'em">' + i + ' = ' + ml(obj[i], maxlevel, level) + '</div>';
        }
        if (level > 1) result += '}';
    }
    else {        result += obj;
    }
    
    if (level <= 1) {        var div = document.getElementById('ml');
        
        if (div == undefined) {            var div = document.createElement("div");
            div.id = 'ml';
            div.style.position = 'absolute';
            div.style.zIndex = 10000;
            div.style.top = '100px';
            div.style.left = '100px';
            div.style.border = '1px solid #800080';
            div.style.background = 'infobackground';
            div.style.padding = '1em';
            div.style.fontSize = '12px';
            div.style.fontFamily = 'Verdana';
            div.style.color = '#800080';
            div.innerHTML = '<div onclick="this.parentNode.style.display=\'none\'" title="Кликнуть, чтобы закрыть">' + result + '</div>';
            document.body.appendChild(div);
        }
        else {            div.style.display = 'block';            div.firstChild.innerHTML = result;
        }
                return result;
    }    else {
        return result;
    }
}

function fixPNG(element)
{
  //Если браузер IE версии 5.5-6
  if (/MSIE (5\.5|6).+Win/.test(navigator.userAgent))
  {
    var src = false;
	
    if (element.tagName=='IMG') //Если текущий элемент картинка (тэг IMG)
    {
      if (/\.png$/.test(element.src)) //Если файл картинки имеет расширение PNG
      {
        src = element.src;
        element.src = "/i/blank.gif"; //заменяем изображение прозрачным gif-ом
      }
    }
    else //иначе, если это не картинка а другой элемент
    {
	  //если у элемента задана фоновая картинка, то присваеваем значение свойства background-шmage переменной src
      src = element.currentStyle.backgroundImage.match(/url\("(.+\.png)"\)/i);
      if (src)
      {
        src = src[1]; //берем из значения свойства background-шmage только адрес картинки
        element.runtimeStyle.backgroundImage="none"; //убираем фоновое изображение
      }
    }
    
    //если, src не пуст, то нужно загрузить изображение с помощью фильтра AlphaImageLoader
    if (src) element.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "',sizingMethod='crop')";
  }
}

/* перечисление всех свойств любого объекта */
function properties(obj) 
{
	var s = "";
	for (var i in obj) {s += i + ': <font color="#006600">' + obj[i] + '</font><br />';}
  
	var props_window = window.open('','props_window','top=0, left=20,scrollbars=1, menubar=0, toolbar=0, location=0, directories=0, status=1, resizable=1,width=800,height=600');
	props_window.focus();

	props_window.document.write('<small style="font-family: Tahoma; font-size: 10px;">'+s+'</small> <hr />');
}

function addHandler(element,event,action,param){
  if(document.addEventListener)element.addEventListener(event,action,param);
  else if(document.attachEvent)element.attachEvent('on'+event,action);
  else element['on'+event]=action;
}

/* обработка HTML-мнемоник */
if ('undefined' == typeof String.prototype.mnemonicToChar)
{
  String.prototype.mnemonicToChar = function()
  {
  	var str = this;
	var pat = new Array (/&lt;/,/&gt;/,/&quot;/);
	var rep = new Array ('<','>','"');
	var count = pat.length; 
	for (var i=0; i<count; i++)
	{
		while (str.search(pat[i]) != -1) str = str.replace(pat[i],rep[i]);
	}
    return str;
  }
}

function PopUp(script_name,x,y,width,height)
{
	popup = window.open(script_name,'popup','top=' + y + ', left=' + x + ',scrollbars=1, menubar=0, toolbar=0, location=0, directories=0, status=1, resizable=1,width=' + width + ',height=' + height);
	popup.focus();
}

function BrowserDetect() {
   var ua = navigator.userAgent.toLowerCase(); 
   // browser name
   this.isIE = ( (ua.indexOf('msie') != -1) && (ua.indexOf('opera') == -1) && (ua.indexOf('webtv') == -1));
   // browser version
   this.versionMinor = parseFloat(navigator.appVersion); 
   // correct version number
   if (this.isIE && this.versionMinor >= 4) {
      this.versionMinor = parseFloat(ua.substring( ua.indexOf('msie ') + 5 ));
   }
   this.versionMajor = parseInt(this.versionMinor); 
   // dom support
   this.isDOM1 = (document.getElementById);
   this.isDOM2Event = (document.addEventListener && document.removeEventListener);
   this.isIE5up = (this.isIE && this.versionMajor >= 5);
}
var browser = new BrowserDetect();

/* является ли числом */
function isNumeric(event)
{
	var keyASCII = event.which ? event.which : event.keyCode;
	
	if (isNaN(String.fromCharCode(keyASCII)) && keyASCII != 17 && keyASCII !=8) return false;
	else return true;
}

/* переход по адресу */
function moveTo(url)
{
	window.location.href = url;
}

/* предзагрузка картинок */
function preloadImg(img_src) {
	if (document.images) {
	 rslt = new Image();
	 rslt.src = img_src;
	 return rslt;
	}
}

/* Позиция элемента */
function getPosition(elem)
{
	var offTrial=elem;
	var offL=0;
	var offT=0;

	while(offTrial)
	{
		offL+=offTrial.offsetLeft;
		offT+=offTrial.offsetTop;
		offTrial=offTrial.offsetParent;
	}

	if (navigator.userAgent.indexOf("Mac")!=-1 && typeof document.body.leftMargin!="undefined") 
	{
		offL+=document.body.leftMargin;
		offT+=document.body.topMargin;
	}

	return {left:offL , top:offT}
}
function resizeTextarea(obj) {
	if ((obj.offsetHeight - 1) < obj.scrollHeight) {
	    obj.style.height = (obj.offsetHeight + 40) + 'px';
	}
}
/* Возвращает последнее число */
function last1Num(v) {
    return parseInt(v.toString().substr(-1,1));
}

/* Показывает всплывающую картинку */
function popImg(obj, img_src)
{
    // Позиция родителя
    var pos = getPosition(obj);
        
    // Показываем картинку
    var img = document.createElement('img');
    img.src = img_src;
    img.style.position = 'absolute';
    img.style.zIndex = 1111;
    img.style.left = pos.left - 50 + 'px';
    img.style.top = pos.top - 100 + 'px';
    img.style.cursor = 'pointer';
    img.className = 'popimg';
    img.onclick = function () {
        if (typeof this.closeImg != 'undefined') {
            this.closeImg.parentNode.removeChild(this.closeImg);
        }
        this.parentNode.removeChild(this);
    }
    // Добавляем крестик
    img.onload = function () {
        showPopImgClose(this);
    }
    document.body.appendChild(img);
    showPopImgClose(img);
    return false;
}
// Крестик закрытия для всплывающей картинки
function showPopImgClose(img)
{
    var pos = getPosition(img);
    
    if (typeof img.closeImg == 'undefined') {
        var close = document.createElement('img');
        close.src = '/i/icons/close.gif';
        close.style.position = 'absolute';
        close.style.zIndex = 1112;
        close.style.cursor = 'pointer';
        document.body.appendChild(close);
        img.closeImg = close;
    } else {
        var close = img.closeImg;
    }
    
    close.style.left = pos.left + img.offsetWidth - 25 + 'px';
    close.style.top = pos.top + 11 + 'px';

    close.onclick = function () {
        img.parentNode.removeChild(img);
        close.parentNode.removeChild(close);
    }
}
// Отправка текущей формы
function submitForm(obj)
{
    if (obj.form) {
        obj.form.submit();
    } else {
        var par = obj;
        while (par.tagName != 'FORM' && par.tagName != 'BODY') par = par.parentNode;
        if (par.tagName == 'FORM') par.submit();
    }
    return false;
}
// Отображение прогресс-бара
function showProgress(obj) {
    // прогресс
    var progress = document.getElementById('progress');
    
    if (!progress) {
        var progress = document.createElement('img');
        progress.src = '/i/progress.gif';
        progress.style.border = 0;
        progress.style.position = 'absolute';
        progress.id = 'progress';
        document.body.appendChild(progress);
    }
    
    var p_obj = getPosition(obj);
    progress.style.left = (p_obj.left - 15) + 'px';
    progress.style.top = p_obj.top + 'px';
    progress.className = 'visible';
}
function hideProgress() {
	document.getElementById('progress').className = 'hidden';
}
function setOpacity(elem, nOpacity)
{
  var opacityProp = getOpacityProperty();

  if (!elem || !opacityProp) return; // Если не существует элемент с указанным id или браузер не поддерживает ни один из известных функции способов управления прозрачностью
  
  if (opacityProp=="filter")  // Internet Exploder 5.5+
  {
    nOpacity *= 100;
	
    // Если уже установлена прозрачность, то меняем её через коллекцию filters, иначе добавляем прозрачность через style.filter
    var oAlpha = elem.filters['DXImageTransform.Microsoft.alpha'] || elem.filters.alpha;
    if (oAlpha) oAlpha.opacity = nOpacity;
    else elem.style.filter += "progid:DXImageTransform.Microsoft.Alpha(opacity="+nOpacity+")"; // Для того чтобы не затереть другие фильтры используем "+="
  }
  else // Другие браузеры
    elem.style[opacityProp] = nOpacity;
}

function getOpacityProperty()
{
  if (typeof document.body.style.opacity == 'string') // CSS3 compliant (Moz 1.7+, Safari 1.2+, Opera 9, IE7)
    return 'opacity';
  else if (typeof document.body.style.MozOpacity == 'string') // Mozilla 1.6 и младше, Firefox 0.8 
    return 'MozOpacity';
  else if (typeof document.body.style.KhtmlOpacity == 'string') // Konqueror 3.1, Safari 1.1
    return 'KhtmlOpacity';
  else if (document.body.filters && navigator.appVersion.match(/MSIE ([\d.]+);/)[1]>=5.5) // Internet Exploder 5.5+
    return 'filter';

  return false; //нет прозрачности
}

function is_email(str) {
    var preg = new RegExp('^[a-z0-9\-_\.]{1,100}@[a-z0-9\-_\.]{1,100}\.[a-z]{2,5}$', 'i');
    return str.search(preg) == -1 ? false : true;
}
/* AJAX запросы с обработкой ошибок */
function axajax(url, fcallback, data) {
    jQuery.ajax({
        url: url,
        data: data,
        dataType : "json",
        success: function (r) {
            eval(fcallback + '(r)');
        },
        error: function (jqXHR, textStatus, errorThrown) {
            // Всплывающий блок с ошибкой
            var alertblock = $('#alertblock');
            
            if (alertblock.length == 0) {
                var alertblock = '<div style="width: 640px; padding: 15px; border: 1px solid #f00; background: #fff; position: absolute; left: 20px; top: 20px; z-index: 1111"';
                alertblock += ' id="alertblock">';
                alertblock += '<p><strong style="color: #f00">Fatal  error (' + textStatus + ')</strong> (AJAX request to' + '<strong>' + url + '</strong>):</p><div id="alertblockcontent"></div>';
                
                alertblock = $(alertblock);
                $(document.body).prepend(alertblock);
            }
            
            $('#alertblockcontent', alertblock).html(jqXHR.responseText);

            //alert(jqXHR + '\n-----\n' +  textStatus + '\n-----\n' +  errorThrown);
        }
    });

}
/*
* Склонение слов в зависимости от числа (titles - 1, 3, 5)
*/
function declOfNum(number, titles) {  
    cases = [2, 0, 1, 1, 1, 2];  
    return titles[ (number%100>4 && number%100<20)? 2 : cases[(number%10<5)?number%10:5] ];  
}

/*
* Удаление дубликатов из массива
*/
function array_unique (inputArr) {
    var key = '',
        tmp_arr2 = [],
        val = '';
 
    var __array_search = function (needle, haystack) {
        var fkey = '';
        for (fkey in haystack) {
            if (haystack.hasOwnProperty(fkey)) {
                if ((haystack[fkey] + '') === (needle + '')) {
                    return fkey;
                }
            }
        }
        return false;
    };
 
    for (key in inputArr) {
        if (inputArr.hasOwnProperty(key)) {
            val = inputArr[key];
            if (false === __array_search(val, tmp_arr2)) {
                tmp_arr2[key] = val;
            }
        }
    }
 
    return tmp_arr2;
}

/*
* Переключатель чекбокса
*/
function checkbox(obj, check) {
    var obj = $(obj);
    
    // Принудительная установка отметки
    if (check != undefined) {
        obj.removeClass('checked');
        if (check) obj.addClass('checked');
    }
    else if (obj.hasClass('checked')) {
        obj.removeClass('checked');
    }
    else {
        obj.addClass('checked');
    }
}

