/*
 Кодировка JS файла д.б. такой же, как и у основного документа!
 @charset  UTF-8
 @version  1.0.1
*/

/**
 * После нажатия кнопки "Назад" загружается предыдущая страница.
 * Но в IE >= 5.0 остаются старые значения в формах ввода.
 * Бывает не всегда удобно это поведение браузера.
 * Эта функция исправляет значения на исходные.
 */
function resetForms()
{
    for (var i = 0; i < document.forms.length; i++)
    {
        document.forms[i].reset();
    }
}

function displayLayer(id, win)
{
  if (!win)
  {
      win = window;
  }
  var obj = win.document.getElementById(id).style;
  obj.display = (obj.display == 'none' || !obj.display) ? '' : 'none';
  return false;
}

/**
* Подавливает загрузку документа во фрейме и загружает его в окне
* верхнего уровня. Рекомендуется вызывать в начале загрузки документа.
*/
function killFrames(is_confirm)
{
    if (top.document.location.href != document.location.href)
    {
        if (is_confirm)
        {
            if (! confirm('Frames detected.\r\nLoad page in top window?'))
            {
                return;
            }
        }
        top.document.location.href = document.location.href;
    }
}

/**
* Устанавливает имя заголовку документа окна верхнего уровня (тег <title>).
* Если параметр не передается, то берется текущее имя документа.
* Рекомендуется вызывать в начале загрузки документа.
*/
function setTitle(title) {
  if (document.getElementById) { //DOM?
    top.frames.document.title = title ? title : document.title;
  }
}

//ported from PHP trim()
String.prototype.trim = function() {
  return this.replace(/(^\s*)|(\s*$)/g, '');
}

/*Array.prototype.unique=function(){var a=[],i;this.sort();for(i=0;i<this.length;i++){if(this[i]!==this[i+1]){a[a.length]=this[i];}}return a;}
*/

//ported from PHP sprintf()
sprintf=function(s){
  for(var i=1;i<arguments.length;i++)s=s.replace('%s',arguments[i]);
  return s;
}

/*
  Функция возвращает значение параметра из URL адреса.
  Если параметр url не задан, берется текущий URL адрес.

  @param  string  name
  @param  mixed   url (string; object location)
  @return mixed   (boolean false; string value)
*/
function getParam(name, url) {
  var get = url ? String(url).replace(/^.*\?/,'').split('&') : location.search.substring(1).split('&');
  for (var i = 0; i < get.length; i++) {
    var p = get[i].split('=');
    if (p[0] == name) {
      return unescape(p[1]);
    }
  }
  return false;
}

/*
  Функция открывает новое окно браузера и возвращает его объект.
  @param   string  id
  @param   string  url
  @param   int     w    ширина
  @param   int     h    высота
  @param   int     l    отступ слева  (если l=0, то автоцентрирование)
  @param   int     t    отступ сверху (если t=0, то автоцентрирование)
  @param   bool    sb   прокрутка
  @param   bool    st   статусная строка
  @param   bool    rz   изменяемый размер
  @param   bool    fl   fullscreen
  @param   string  html
  @return  object window
  @version 3.0.0
*/
function winPopUp(name, url, w, h, l, t, sb, st, rz, fl, html) {
  var y = 'yes', n = 'no';
  var l = l ? l : (screen.width  - w) / 2;
  var t = t ? t : (screen.height - h) / 2;
  //окно уже открыто?
  if (top[name] != null && typeof(top[name]) == 'object' && !top[name].closed) {
    if (top[name].document.location.href != url) {
      top[name].document.location.href = url;
    }
  }
  else {
    top[name] = window.open(url, name, 'toolbar=no,location=no,directories=no,status='+(st?y:n)+',menubar=no,scrollbars='+(sb?y:n)+',left='+l+',top='+t+',resizable='+(rz?y:n)+',width='+w+',height='+h+',fullscreen='+(fl?y:n));
  }
  top[name].resizeTo(w, h);
  top[name].moveTo(l, t);
  if (html) {
    with (top[name].document) {
      open();
      write(html);
      close();
    }
  }
  top[name].focus();
  return top[name];
}

/*
  Перенаправление на страницу декодирования email адреса
  @param   string  с  зашифрованный email адрес
  @return  void
*/
function mailto(c) {
  document.getElementById('mailto').src = 'mailto/' + escape(c);
}

// Функция установки значения cookie.
// name      - имя cookie
// value     - значение cookie
// [path]    - путь, для которого cookie действительно (по умолчанию - /)
// [expires] - дата окончания действия cookie (по умолчанию - до конца сессии)
// [domain]  - домен, для которого cookie действительно (по умолчанию - домен,
//             в котором значение было установлено)
// [secure]  - логическое значение, показывающее требуется ли защищенная
//             передача значения cookie
function setCookie(name, value, path, expires, domain, secure) {
  var curCookie = name + "=" + escape(value) +
    ((expires) ? "; expires=" + expires.toGMTString() : "") +
    ((path) ? "; path=" + path : "; path=/") +
    ((domain) ? "; domain=" + domain : "") +
    ((secure) ? "; secure" : "");
  document.cookie = curCookie;
}

// Функция чтения значения cookie.
// name - имя считываемого cookie
function getCookie(name) {
  var prefix = name + "=";
  var cookieStartIndex = document.cookie.indexOf(prefix);
  if(cookieStartIndex == -1) return null;
  var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length);
  if(cookieEndIndex == -1) cookieEndIndex = document.cookie.length;
  return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex));
}

function var_dump(v)
{
    var s = '';
    for (var i in v)
    {
        if (v[i])
        {
            s += typeof(v[i]) + ' ' + i + ' => ' + v[i] + '\r\n';
        }
    }
    alert(s);
}

/**
 * Меняет значение параметра в URL.
 * Если параметра нет, то он добавляется в конец URL.
 * Если значение параметра равно NULL, то он вырезается из URL.
 *
 * @param    string  this
 * @param    string  arg
 * @param    string  value
 * @return   string
 * 
 * @author   Nasibullin Rinat <n a s i b u l l i n  at starlink ru>
 * @charset  ANSI
 * @version  2.0.0
 */
String.prototype.urlReplaceArg = function(arg, value)
{
    /* :NOTE: this = this.replace('?', '?&') пришлось заменить на this = this.replace(/\?/, '?&'), т.к. Firefox 1.0.6 выдает ошибку */
    var url = this;
    url = url.replace(/\?/, '?&');
    var m = url.match(eval('/(&' + arg.replace(/([\.\\\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g, '\\$1') + '=)[^&]*/'));
    if (m !== null)
    {
        //replace or remove parameter, if it's exist
        var v = (value === null) ? '' : m[1] + escape(value);
        url = url.replace(m[0], v);
    }
    else if (value !== null)
    {
        //add parameter to end of url
        var div = (url.indexOf('?') != -1) ? '&' : '?';
        url += div + arg + '=' + escape(value);
    }
    return url.replace(/\?&/, '?').replace(/\?$/, '');
}

/**
 * Добавляет параметр текущего идентификатора сессии к URL, если необходимо
 *
 * @param    string  this
 * @param    string  name
 * @return   string
 * @see      urlReplaceArg()
 *
 * @author   Nasibullin Rinat <n a s i b u l l i n  at starlink ru>
 * @charset  ANSI
 * @version  2.0.1
 */
String.prototype.addSessionId = function(name)
{
    var url = this;
    var re_sid = eval('/(^|[^a-zA-Z\\d\\-])' + name.replace(/([\.\\\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g, '\\$1') + '=([a-zA-Z\\d\\-]+)/');
    //пробуем получить значение из кукисов
    if (navigator.cookieEnabled)
    {
        var m = document.cookie.match(re_sid);
        if (m !== null)
        {
            //значение найдено в кукисах
            return url.urlReplaceArg(name, null);
        }
    }
    //пробуем получить значение из ссылок
    if (document.links && document.links.length > 0)
    {
        var m = document.links[0].href.match(re_sid);
        if (m !== null)
        {
            return url.urlReplaceArg(name, m[2]);
        }
    }
    //пробуем получить значения из форм
    if (document.forms && document.forms.length > 0)
    {
        var sid = document.forms[0].elements[name];
        if (sid !== null)
        {
            return url.urlReplaceArg(name, sid.value);
        }
    }
    return url;
}


