///////////////////////////////////////////////////////////////////////////////
//
// Common JavaScript Utilities v1.0
//
// v1.0: created by Nikolay Basov 17.01.2007
//
///////////////////////////////////////////////////////////////////////////////

// Определение браузера клиента
isDOM = document.getElementById                        //DOM1 browser (MSIE 5+, Netscape 6, Opera 5+)
isOpera = isOpera5 = window.opera && isDOM             //Opera 5+
isOpera6 = isOpera && window.print                     //Opera 6+
isOpera7 = isOpera && document.readyState              //Opera 7+
isMSIE = document.all && document.all.item && !isOpera //Microsoft Internet Explorer 4+
isMSIE5 = isDOM && isMSIE                              //MSIE 5+
isNetscape4 = document.layers                          //Netscape 4.*
isMozilla = isDOM && navigator.appName == "Netscape"   //Mozilla или Netscape 6.*

// Внутренний метод. Выполняет поиск заданного контрола. 
function FindControl(controlId, parentId)
{
  var ctl;
  if (controlId)
  {
    ctl = document.getElementById(controlId);  
    if (!ctl) throw 'Контрол '+ controlId +' не найден';
  } 
  else if (parentId) 
  {
    ctl = document.getElementById(parentId);  
    if (!ctl) throw 'Контрол '+ parentId +' не найден';
  } 
  else throw 'Контрол не задан';

  return ctl;
}

// Метод подготавливает данные для поискового запроса и переводит пользователя 
// на страницу поиска. Uri имеет вид: '/search/_t_/search='.
function ProcessSearch(uri, controlId, parentId)
{
  try
  {
    var ctl = FindControl(controlId, parentId);   
    if (ctl.value != '')
    {
      var value = ctl.value;
      value=value.replace(/&|and|\+/g,' ');
      value=value.replace(/^\s+|\s+$/g,'');
      value=value.replace(/\s+/g,'+');
      location.href = uri+encodeURIComponent(value);
      return false;
    }
  
    return false; 
  }
  catch (ex)
  { 
    alert('Ошибка ProcessSearch: ' + ex.message);
  }
}

// Метод по нажатию клавиши Enter выполняет действие, повешанное на контрол
function ProcessSearchEnter(e, controlId, parentId)
{
  try
  {
    var ctl = FindControl(controlId, parentId);   

    var key = navigator.appName == 'Netscape' ? e.which : e.keyCode;
    if (key == 13)
      ctl.click();
  }
  catch (ex)
  {
    alert('Ошибка ProcessSearchEnter: ' + ex.message);
  }
}

// Метод выполняет установку заданной функции в событие OnLoad
function SetGlobalOnload(f) 
{
  var root = window.addEventListener || window.attachEvent ? window : document.addEventListener ? document : null
  if (root)
  {
    if(root.addEventListener) root.addEventListener("load", f, false)
    else if(root.attachEvent) root.attachEvent("onload", f)
  } 
  else 
  {
    if(typeof window.onload == 'function') 
    {
      var existing = window.onload
      window.onload = function() 
      {
        existing()
        f()
      }
    } 
    else 
    {
      window.onload = f
    }
  }
}

// Метод вешает на обект обработчик заданного события
function AddEventHandler(object, event, handler)
{
  if (typeof object.addEventListener != 'undefined')
    object.addEventListener(event, handler, false);
  else if (typeof object.attachEvent != 'undefined')
    object.attachEvent('on' + event, handler);
  else
    alert('Ошибка AddEventHandler: Несовместимый браузер');
}

// Метод устанавливает фокус на указанном контроле
function FocusControl(controlId, parentId)
{
  try
  {
    var ctl = FindControl(controlId, parentId);   
    ctl.focus();
  }
  catch (ex)
  { 
    alert('Ошибка FocusControl: ' + ex.message);
  }
}
    
