// dropDown, он же dd, представляет собой эммитацию SELECT'ов 
var dropDownDragAndDropNow = false; // нужно ли обрабатывать Drag&Drop для DropDown'а?
var dropDownDragAndDropObj = false; // JS-объект DropDown для Drag&Drop'а?
var dropDownDragAndDropY = false; // верт. координата мыши
var dropDownDragAndDropYK = 1; // коэф. для увеличения сдвига списка относительно сдвига скроллера в случае, если реальная высота бегунка больше расчитываемой высоты (из-за высоты вложенной картинки)
var dropDownList = new Array(); // список dd-объектов
var dropDownIE = (navigator.userAgent.indexOf('MSIE')>-1);

/* Все страницы */

function topSearchInit(formId) {
  var topSearch = new Object;
  topSearch.form = document.getElementById(formId);
  if (topSearch.form) {
    topSearch.input = topSearch.form.getElementsByTagName('INPUT')[0];
    topSearch.emptyString = topSearch.input.value;
    if (topSearch.input.attachEvent) {
      topSearch.input.attachEvent("onfocus", clearDefaultValue);
      topSearch.input.attachEvent("onblur", insertDefaultValue);
    } else {
      topSearch.input.addEventListener("focus", clearDefaultValue, true);
      topSearch.input.addEventListener("blur", insertDefaultValue, true);
    }
  }
}

var topSearchIsInit = true;
    
function clearDefaultValue(evt) {
  var elem = evt.srcElement || evt.target;
  if (elem.value==elem.defaultValue) elem.value = "";
  if (!elem.className) elem.className = "";
  if (elem.className.indexOf("inFocus")==-1) elem.className += " inFocus";  
}

function insertDefaultValue(evt) {
  var elem = evt.srcElement || evt.target;
  if (elem.value=="") elem.value = elem.defaultValue;
  if (!elem.className) elem.className = "";
  elem.className = elem.className.replace(/inFocus/g, "");  
}

function topSearchSubmit(formId, errorMsg) {
  form = document.getElementById(formId);
  if (form) {
    input = form.getElementsByTagName('INPUT')[0];
    input2 = form.getElementsByTagName('INPUT')[1];
    if (input && input2) {
      if (input.value.length<3) {
        alert(errorMsg);
        return false;
      } else {
        document.location.href = form.getAttribute('ACTION') +"?"+ input.name +"="+ input.value +"&"+ input2.name +"="+ input2.value;
      }
    }
  }
}


/* Архив новостей */

function newsArchive_ChangeYear() {
  var y = document.getElementById('newsArchiveYear').value;
  var m = document.getElementById('newsArchiveMonth');
  var i2 = 0;
  var ddMonthsObj = (dropDownList.length>0);
  var ddYearObj = (dropDownList.length>0);
  if (newsArchive[y]) {
    m.options.length = 0;
    if (ddMonthsObj) {
      for (var i=0; i<dropDownList.length; i++) {
        if (dropDownList[i].el.getAttribute('for')=='newsArchiveYear') ddYearObj = dropDownList[i];
        if (dropDownList[i].el.getAttribute('for')=='newsArchiveMonth') ddMonthsObj = dropDownList[i];
      }
      ddMonthsObj.list.innerHTML = "";
      ddMonthsObj.items.length = 0;
      ddMonthsObj.headerText.innerHTML = newsArchiveMonthNames[0];
    }
    // var l = newsArchiveMonthNames.length;
    /*
    for (var i=0; i<newsArchiveMonthNames.length; i++) {
      if (i==0 || newsArchive[y][i] && newsArchive[y][i]>0) {
        m.options[m.options.length] = new Option(newsArchiveMonthNames[i], ( i<10 ? '0'+i : i ) );
        if (ddMonthsObj) {
          var newDDoption = document.createElement('div');
            newDDoption.className = "ddItem";
            newDDoption.setAttribute( "value", ( i<10 ? '0'+i : i ) );
            newDDoption.innerHTML = newsArchiveMonthNames[i];
            ddMonthsObj.list.appendChild(newDDoption);
            ddMonthsObj.items[ddMonthsObj.items.length] = 
              {
                text: newDDoption.innerHTML,
                obj: newDDoption
              }
        }
        i2 += 1;
      }
    }
    */
    // m.options[0] = new Option( newsArchiveMonthNames[0], "0" );
    for (var i=newsArchiveMonthNames.length; i>0; i--) {
      if (i==newsArchiveMonthNames.length) i = 0;
      if (i==0 || newsArchive[y][i] && newsArchive[y][i]>0) {
        m.options[m.options.length] = new Option(newsArchiveMonthNames[i], ( i<10 ? '0'+i : i ) );
        if (ddMonthsObj) {
          var newDDoption = document.createElement('div');
            newDDoption.className = "ddItem";
            newDDoption.setAttribute( "value", ( i<10 ? '0'+i : i ) );
            newDDoption.innerHTML = newsArchiveMonthNames[i];
            ddMonthsObj.list.appendChild(newDDoption);
            ddMonthsObj.items[ddMonthsObj.items.length] = 
              {
                text: newDDoption.innerHTML,
                obj: newDDoption
              } 
        }
        i2 += 1;
      }
      if (i==0) i = newsArchiveMonthNames.length;
    }
    if (ddMonthsObj) {
      ddMonthsObj.formedDOMoption();
      ddMonthsObj.listContainer.style.height = ddMonthsObj.itemHeight*(ddMonthsObj.items.length) +"px";
      ddMonthsObj.headerText.innerHTML = m.value;
    }
  } else {
    m.options.length = 1;
  }
  newsArchive_ChangeMonth();
}

function setMonth(num) {
  var m = document.getElementById('newsArchiveMonth');
  var l = m.options.length;
  for (var i=0; i<l; i++) {
    if (m.options[i].value*1==num*1) {
      m.options[i].selected = true;
    } else {
      m.options[i].selected = false;
    }
  }
  var ddMonthsObj = (dropDownList.length>0);
  if (ddMonthsObj) {
    for (var i=0; i<dropDownList.length; i++) {
      if (dropDownList[i].el.getAttribute('for')=='newsArchiveMonth') ddMonthsObj = dropDownList[i];
    }
    ddMonthsObj.headerText.innerHTML = m.value;
  }
}

function newsArchive_ChangeMonth() {
  var y = document.getElementById('newsArchiveYear').value;
  var m = document.getElementById('newsArchiveMonth').value;
  // if (m!=0 && navigator.userAgent.indexOf('MSIE 6')>-1) m = 13 - m;
  if (m==0) { m = 1; m2 = 12; } else { m2 = m; }
  var ddMonthsObj = false;
  if (dropDownList.length>0) {
    for (var i=0; i<dropDownList.length; i++) {
      // if (dropDownList[i].el.getAttribute('for')=='newsArchiveYear') ddYearObj = dropDownList[i];
      if (dropDownList[i].el.getAttribute('for')=='newsArchiveMonth') ddMonthsObj = dropDownList[i];
    }
    if (ddMonthsObj) ddMonthsObj.headerText.innerHTML = newsArchiveMonthNames[parseInt(document.getElementById('newsArchiveMonth').value)];
  }
  var from = document.getElementById('newsArchiveFrom');
  var to = document.getElementById('newsArchiveTo');
  if (from && from.value) {
    from.value = "01/"+ ( m*1<10 ? '0'+m*1 : m ) +"/"+ y;
    to.value = dayInMonth(m2, y) +"/"+ ( m2*1<10 ? '0'+m2*1 : m2 ) +"/"+ y;
    return (y>0);
  } else {
    return false;
  }
}

function dayInMonth(month, year) {
  month = month *1;
  year = year *1;
  if (month==1) return 31; 
  if (month==2) return year%4!=0 ? 28 : 29;
  if (month==3) return 31; 
  if (month==4) return 30; 
  if (month==5) return 31; 
  if (month==6) return 30; 
  if (month==7) return 31; 
  if (month==8) return 31; 
  if (month==9) return 30; 
  if (month==10) return 31; 
  if (month==11) return 30; 
  if (month==12) return 31; 
  return 31;
}

function newsArchive_addMonth(select, num) {
  select.options[num] = new Option(newsArchiveMonthNames[num], newsArchiveMonthNames[num]);
}

/*
function newsArchive_formedMonthNames() {
  var m = document.getElementById('newsArchiveMonth');
  var ret = new Array();
  for (var i=0; i<m.length; i++) ret.push(m.options[i].text);
  return ret;
}
*/

function newsArchive_submit() {
  errorMessage = arguments[0] || "";
  if (newsArchive_ChangeMonth()) {
    var from = document.getElementById('newsArchiveFrom');
    var to = document.getElementById('newsArchiveTo');
    
    document.location.href = document.forms.newsArchive.getAttribute('ACTION') +"?"+ from.name +"="+ from.value +"&"+ to.name +"="+ to.value;
  } else {
    alert(errorMessage);
  }
}

function newsArchive_inputsKeyUp(evt) {
  if (evt.keyCode==13) {
    if (newsArchive_ChangeMonth()) {
      newsArchive_submit();
    } else {
      var subm = " "+ document.forms.newsArchive.getAttribute('ONSUBMIT');
      // alert( subm.substring( subm.indexOf("('")+2, subm.indexOf("')") ) );
    }    
  }
  if (evt.keyCode==27) {
    var parsedGet = newsArchive_parseGet_DefaultValues(document.location.href.substring( document.location.href.indexOf("?")+1 ) +"&");
    var y = document.getElementById('newsArchiveYear');
    for (var i=0; i<y.options.length; i++) newsArchive_selectedOption( y.options[i], (y.options[i].value==parsedGet.year) );
    newsArchive_ChangeYear();
    var m = document.getElementById('newsArchiveMonth');
    for (var i=0; i<m.options.length; i++) newsArchive_selectedOption( m.options[i], (m.options[i].value==parsedGet.month) );
  }
}

function newsArchive_parseGet() {
  var uri = document.location.href;
  var get = uri.substring( uri.indexOf("?")+1 ) +"&";
  var yElem = document.getElementById('newsArchiveYear');
  var mElem = document.getElementById('newsArchiveMonth');
  if (yElem && mElem) {
    if (!yElem.getAttribute('addSubmitOnEnter')) {
      if (yElem.attachEvent) {
        yElem.attachEvent("onkeyup", newsArchive_inputsKeyUp);
        mElem.attachEvent("onkeyup", newsArchive_inputsKeyUp);
      } else {
        yElem.addEventListener("keyup", newsArchive_inputsKeyUp, true);
        mElem.addEventListener("keyup", newsArchive_inputsKeyUp, true);
      }
    }
    
    var parsedGet = newsArchive_parseGet_DefaultValues(get);
    for (var i=0; i<yElem.options.length; i++) newsArchive_selectedOption( yElem.options[i], (yElem.options[i].value==parsedGet.year) );
    newsArchive_ChangeYear();
    for (i=0; i<mElem.options.length; i++) newsArchive_selectedOption(mElem.options[i], (mElem.options[i].value==parsedGet.month) );
    newsArchive_ChangeMonth();
  }
}

function newsArchive_parseGet_DefaultValues(get) {
  var yElem = document.getElementById('newsArchiveYear');
  var mElem = document.getElementById('newsArchiveMonth');
  if (yElem && mElem) {
  var ret = new Object;
    var s1 = "from-date=";
      var s1length = s1.length;
      var s1indexOf = get.indexOf(s1);
    var s2 = "to-date=";
      var s2length = s2.length;
      var s2indexOf = get.indexOf(s2);
    ret.year = s1indexOf>-1 ? get.substr( s1indexOf + s1length + 6, 4 ) : yElem.options[0].value;
    ret.yFrom = s1indexOf>-1 ? get.substr( s1indexOf + s1length + 6, 4 ) : yElem.options[0].value;
    ret.yTo = s2indexOf>-1 ? get.substr( s2indexOf + s2length + 6, 4 ) : yElem.options[0].value;
    ret.mFrom = s1indexOf>-1 ? get.substr( s1indexOf + s1length + 3, 2 ) : mElem.options[0].value;
    ret.mTo = s2indexOf>-1 ? get.substr( s2indexOf + s2length + 3, 2 ) : mElem.options[0].value;
    ret.month = (ret.mFrom!=ret.mTo) ? 0 : ret.mFrom*1;
    return ret;
  }
  return false;
}

function newsArchive_selectedOption(elem, isSelected) {
  if (!elem || !elem.tagName || elem.tagName!='OPTION') return false;
  if (isSelected) {
    if ( window.opera ) {
      elem.setAttribute('selected', "selected");
      elem.selected = true;
    } else {
      elem.selected = true;
    }
  } else {
    if ( window.opera && elem.getAttribute('selected') ) elem.removeAttribute('selected');
    elem.selected = false;
  }
}

function newsResetDate() {
  /*
  var select = document.getElementById('newsArchiveYear');
  var parsedGet = newsArchive_parseGet_DefaultValues(document.location.href.substring( document.location.href.indexOf("?")+1 ) +"&");
  var value = parsedGet.year;
  for (var i=0; i<select.options.length; i++) newsArchive_selectedOption(select.options[i], (select.options[i].value==value || (i==0 && value==0)) );
  newsArchive_ChangeYear();
  */
  window.location.href = window.location.href.substring(0, window.location.href.indexOf('?'));
}

function checkRightSubscribeForm() {
  var form = document.getElementById('subscribe');
  if (!form) form = document.getElementById('subscription');
  if (form) {
    var inp = form.getElementsByTagName('input');
    var l = inp.length;
    var iName = inp[l-2].value;
    var iMail = inp[l-1].value;
    var errName = false;
    var errMail = false;
    var errString = "";
    if (iName.length==0) errName = true;
    if ( iMail.lastIndexOf('.')-iMail.indexOf('@')<3 || iMail.indexOf('@')<2 || iMail.length-iMail.lastIndexOf('.')<3 ) errMail = true;
    var hr = window.location.href;
    var lang = hr.substring( hr.indexOf('/', 8)+1, hr.indexOf('/', hr.indexOf('/', 8)+1)-1 );
    if (lang.length!=2) lang = "ru";
    switch(lang) {
      case "ru":
        errString += (errName) ? "Укажите Ваше имя\n" : "";
        errString += (errMail) ? ( (iMail.length==0) ? "Укажите Ваш E-mail" : "Поле E-mail заполнено неверно") : "";
      break;
      case "en":
        errString += (errName) ? "Name cannot be empty\n" : "";
        errString += (errMail) ? ( (iMail.length==0) ? "E-mail cannot be empty" : "E-mail is invalid") : "";
      break;
    }
    if (errString.length>0) alert(errString);
    return (errString.length==0);
  }
  return true;
}

function changeMails() {
  var ar = document.getElementsByTagName('a');
  var l = ar.length;
  for (var i=0; i<l; i++) {
    with(ar[i]) {
      if (href.indexOf('mailto:')>-1) {
        href = href.replace(/-at-/gi, "@");
        innerHTML = innerHTML.replace(/-at-/gi, "@");
      }
    }
  }
  var ar = document.getElementsByTagName('select');
  var l = ar.length;
  var opt = new Array();
  for (var i=0; i<l; i++) for (var i2=0; i2<ar[i].length; i2++) opt[opt.length] = ar[i].options[i2];
  var l = opt.length;
  for (var i=0; i<l; i++) {
    with(opt[i]) {
      value = value.replace(/-at-/gi, "@");
      text = text.replace(/-at-/gi, "@");
    }
  }
}


var utilJSloaded = true;


function ready() {
  if (arguments.callee.done) return; // выход из функции, если она уже вызывалась
  arguments.callee.done = true; // флаг, чтобы не запускать функцию дважды
  if ((navigator.userAgent.indexOf('MSIE 6')>-1)) {
    dropDownFormed();
    if (dropDownList.length>0) {
      var dropDownIE = (navigator.userAgent.indexOf('MSIE')>-1); // ИЕ?
      if (dropDownIE) {
        document.attachEvent("onmousemove", dropDownMouseMove); // доб. обработчик перемещения мыши, для ИЕ
        document.attachEvent("onmouseup", dropDownMouseUp); // доб. обработчик отпускания LMB, для ИЕ 
        document.attachEvent("onclick", dropDownDocumentClick); // доб. обработчик щелчка на LMB, для ИЕ
      } else {
        document.getElementsByTagName('body')[0].addEventListener("mousemove", dropDownMouseMove, false); // доб. обработчик перемещения мыши, для остальных
        document.addEventListener("mouseup", dropDownMouseUp, false); // доб. обработчик отпускания LMB, для остальных
        document.addEventListener("click", dropDownDocumentClick, false); // доб. обработчик щелчка на LMB, для остальных
      } 
    }
    if (document.getElementById('newsArchiveMonth')) {
      newsArchive_parseGet();
      // newsArchive_ChangeYear();
      // newsArchive_ChangeMonth();
    }
  }
  topSearchInit('topSearch');
  changeMails();
}

/* dropDown (begin) */


function dropDownFormed() {
  var s = document.getElementsByTagName('select');
  var d = false;
  var l = (s.length && s.length>0) ? s.length : 0;
  for (var i=0; i<l; i++) {
  // for (var i=l-1; i>=0; i--) {
    if (s[i].className && s[i].className.indexOf('dropDown')>-1) {
      var parOverflow = s[i];
      while(parOverflow.parentNode) { 
        if (parOverflow.nodeType==1 && parOverflow.className && parOverflow.className.indexOf('selectNoBorder')>-1) break;
        parOverflow = parOverflow.parentNode; 
      }
      if (parOverflow.parentNode) parOverflow.style.overflow = "visible";
      var cl = s[i].className;
      cl = " "+ cl.substring(0, cl.indexOf('dropDown')) + cl.substring(cl.indexOf('dropDown')+9) +" ";
      // var w = s[i].offsetWidth;
      if (s[i].id) {
        var sId = s[i].id;
      } else {
        var sId = "dropDownSelect"+i;
        s[i].id = sId;
      }
      var div = document.createElement('div'); // div.dropDrop
        div.className = "dropDrop "+cl;
        div.style.width = s[i].offsetWidth;
        div.style.zIndex = 100 + (l-i);
        div.setAttribute('for', sId);
        var ddHeader = document.createElement('div'); // div.ddHeader
          ddHeader.className = "ddHeader";
          var ddHeaderText = document.createElement('div'); // div.ddHeaderText
            ddHeaderText.className = "ddHeaderText";
            ddHeaderText.innerHTML = s[i].options[0].text;
            s[i].options[0].selected;
          var ddHeaderImg = new Image();
            ddHeaderImg.width = 16;
            ddHeaderImg.height = 16;
            ddHeaderImg.src = "/media/img/drop-down/drop-down-arrow.gif";
            // ddHeaderImg.alt = "&darr;";
          ddHeader.appendChild(ddHeaderText);
          ddHeader.appendChild(ddHeaderImg);
        var ddListContainer = document.createElement('div'); // div.ddListContainer
          ddListContainer.className = "ddListContainer";
          if (s[i].getAttribute('itemsVisible')) {
            ddListContainer.setAttribute('itemsVisible', s[i].getAttribute('itemsVisible'));
          } else {
            ddListContainer.setAttribute('itemsVisible', "20");
          }
          var ddScroll = document.createElement('div'); // div.ddScroll
            ddScroll.className = "ddScroll";
            // ddScroll.innerHTML = "<div class='ddsArrowUp'><img width='17' height='13' src='img/drop-down/drop-down-arrow-up.gif' alt='&uarr;'' /></div><div class='ddsScrollerCont'><div class='ddsTop'><div class='ddsBottom'><div class='ddsScroller'><img width='17' height='10' src='img/drop-down/drop-down-scroller.gif' alt='#' /></div></div></div></div><div class='ddsArrowDown'><img width='17' height='13' src='img/drop-down/drop-down-arrow-down.gif' alt='&darr;'' /></div>";
            // ddScroll.innerHTML = "<div class='ddsArrowUp'><img width='17' height='13' src='img/drop-down/drop-down-arrow-up.gif' alt='&uarr;' /></div><div class='ddsScrollerCont'><div class='ddsTop'><div class='ddsBottom'><div class='ddsScroller'><img width='17' height='10' src='img/drop-down/drop-down-scroller.gif' alt='#' /></div></div></div></div><div class='ddsArrowDown'><img width='17' height='13' src='img/drop-down/drop-down-arrow-down.gif' alt='&darr;' /></div>";
            ddScroll.innerHTML = "<div class='ddsArrowUp'><img width='17' height='13' src='/media/img/drop-down/drop-down-arrow-up.gif' /></div><div class='ddsScrollerCont'><div class='ddsTop'><div class='ddsBottom'><div class='ddsScroller'><img width='17' height='10' src='/media/img/drop-down/drop-down-scroller.gif' alt='#' /></div></div></div></div><div class='ddsArrowDown'><img width='17' height='13' src='/media/img/drop-down/drop-down-arrow-down.gif' /></div>";
          var ddList = document.createElement('div'); // div.ddList
            ddList.className = "ddList";
            for (var i2=0; i2<s[i].options.length; i2++) {
              var ddItem = document.createElement('div'); // div.ddItem
                ddItem.className = "ddItem";
                ddItem.innerHTML = s[i].options[i2].text;
                ddItem.setAttribute('value', s[i].options[i2].value);
              ddList.appendChild(ddItem);
              if (s[i].options[i2].selected || s[i].options[i2].getAttribute('selected')) ddHeaderText.innerHTML = s[i].options[i2].text; 
            }
          ddListContainer.appendChild(ddScroll);
          ddListContainer.appendChild(ddList);
        div.appendChild(ddHeader);
        div.appendChild(ddListContainer);
      s[i].parentNode.insertBefore(div, s[i]);
      s[i].style.display = "none";
      dropDownList[dropDownList.length] = new dropDown( div );
    } 
  }
}

function dropDownMouseUp() {
  // срабатывает при отпускании LMB
  dropDownDragAndDropNow = false;
}

function dropDownMouseMove(evt) {
  // срабатывает при перемещении мыли
  if (dropDownDragAndDropNow) {
    evt = evt || window.event;
    var mouseY = (dropDownIE) ? evt.clientY + document.body.scrollTop - document.body.clientTop : evt.pageY; // выч. тек. верт. коор. мыши
    dy = mouseY - dropDownDragAndDropY; // теперь mouseY тек. пол. мыши, dropDownDragAndDropY — прошлое, a dy — разница
    if (dropDownScrollerMoveBy(dy)) dropDownDragAndDropY = mouseY;
  }
}

function dropDownScrollerMoveBy(dy) {
  var obj = dropDownDragAndDropObj;
  // if (obj.scroll.offsetHeight*2<obj.list.offsetHeight) dy = dy / (obj.list.offsetHeight / obj.scroll.offsetHeight);
  var newY = parseInt(obj.scroller.style.top) + dy;
  // if (!dropDownDragAndDropNow) alert(parseInt(obj.scroller.style.top) +', '+ newY);
  // if (!dropDownDragAndDropNow) alert(k1);
  var minY = obj.scrollUp.offsetHeight;
  var maxY = (obj.scroll.offsetHeight - (obj.scrollDown.offsetHeight)) - obj.scroller.offsetHeight;
  if (newY<minY) dy = dy - (newY-minY);
  if (newY>maxY) dy = dy - (newY-maxY);
  var newY = parseInt(obj.scroller.style.top) + dy;
  // if (!dropDownDragAndDropNow) alert(newY);
  if (dy!=0) {
    obj.scroller.style.top = newY +"px";
      Eb = obj.list.offsetHeight - obj.scroll.offsetHeight;
      Es = obj.scroll.offsetHeight - (obj.scrollDown.offsetHeight + obj.scrollUp.offsetHeight) - obj.scroller.offsetHeight;
      k = Es / Eb;
      var lt = -1*(newY-obj.scrollUp.offsetHeight)/k;
      obj.list.style.top = lt+"px";
    return true;
  }
  return false;
}

function dropDownDocumentClick(evt) {
  evt = evt || window.event;
  el = evt.target || evt.srcElement;
  var insideDropDown = false;
  while (el.parentNode) {
    if (el.nodeType==1 && el.className && el.className.indexOf('dropDrop')>-1) insideDropDown = true;
    el = el.parentNode;
  }
  if (!insideDropDown) {
    for (var i in dropDownList) dropDownList[i].close();
  }
}

function dropDown(dropDropElement) {
  var el = dropDropElement;
  this.el = el;
  var divs = el.getElementsByTagName('div');
  var l = divs.length;
  var s = "";
  this.items = new Array();
  
  for (var i=0; i<l; i++) {
    if (divs[i].className && divs[i].className!="") {
      switch(divs[i].className) {
        case "ddHeader": 
          this.header = divs[i];
          this.arrow = divs[i].getElementsByTagName('img')[0]; 
        break;
        case "ddHeaderText": this.headerText = divs[i]; break;
        case "ddListContainer": this.listContainer = divs[i]; break;
        case "ddList": 
          this.list = divs[i];
          if (navigator.userAgent.indexOf('Gecko')==-1 || navigator.userAgent.indexOf('Safari')>-1) {
            this.list.onmousewheel = function(evt) {
              var evt = evt || window.event;
              dropDownDragAndDropObj = copyThis; 
              wheelScrolled(evt);
              return false;
            };
          } else {
            this.list.addEventListener(
              'DOMMouseScroll', 
              function(evt) { 
                dropDownDragAndDropObj = copyThis;
                wheelScrolled(evt);                
                return false;
              }, 
              false
            );
          }
        break;
        case "ddItem": 
          this.items[this.items.length] = {
            text: divs[i].innerHTML,
            obj: divs[i]
          } 
        break;
        case "ddScroll": 
          this.scroll = divs[i];
          var img = document.createElement('img');
          img.src = "/media/img/drop-down/b.gif"; // пустая картинка
          img.style.position = "absolute";
          img.style.zIndex = "150";
          img.style.left = "0px";
          // img.style.top = "4px"; // соответствует высоте drop-down-scroller-top.gif
          img.style.top = "0px";
          img.style.margin = "0px"; 
          img.height = 1;
          img.width = 1;
          this.baseBracingForDOMEvent = img;
          this.scroll.appendChild(img);
        break;
        case "ddsArrowUp": this.scrollUp = divs[i]; break;
        case "ddsScrollerCont": 
          this.scroller = divs[i];
        break;
        case "ddsTop": this.scrollerTop = divs[i]; break;
        case "ddsBottom": this.scrollerBottom = divs[i]; break;
        case "ddsScroller": 
          this.scrollMiddle = divs[i];
          var img = document.createElement('img');
          img.src = "/media/img/drop-down/b.gif"; // пустая картинка
          img.style.position = "absolute";
          // img.style.zIndex = "200";
          img.style.left = "0px";
          // img.style.top = "4px"; // соответствует высоте drop-down-scroller-top.gif
          img.style.top = "0px";
          img.style.margin = "0px"; 
          img.height = 1;
          img.width = 1;
          this.scrollBracingForDOMEvent = img;
          this.scrollMiddle.appendChild(img);
        break;
        case "ddsArrowDown": this.scrollDown = divs[i]; break;
      }
    }
  }
  this.itemsVisible = (this.listContainer.getAttribute('itemsVisible')) ? this.listContainer.getAttribute('itemsVisible')*1 : this.items.length+1;
  
  this.listContainer.style.visibility = 'hidden';
  this.listContainer.style.display = 'block';
  this.itemHeight = Math.floor(this.list.offsetHeight / this.items.length);
  if (this.itemHeight==0) this.itemHeight = 18;
  if ((this.items.length+1)>this.itemsVisible) {
    this.listContainer.style.height = this.itemHeight * this.itemsVisible + 2 +"px";
    // alert(this.itemHeight +', '+ this.itemsVisible);
    this.needScroll = true;
    addClass(this.el, "withScroll");
    remClass(this.el, "noScroll");
    this.scroll.style.display = "block";
  } else {
    this.listContainer.style.height = this.itemHeight * this.items.length +"px";
    // alert('else '+ this.itemHeight +', '+ this.items.length);
    this.needScroll = false;
    remClass(this.el, "withScroll");
    addClass(this.el, "noScroll");
    this.scroll.style.display = "none";
  }
  this.scroller.style.top = this.scrollUp.offsetHeight+"px";
  this.listContainer.style.display = 'none';
  this.listContainer.style.visibility = 'visible';
  
  var copyThis = this;
  var copyEl = false;
  // this.header.onmouseover = function() { showList(copyThis); };
  this.header.onclick = function() { 
    if (copyThis.listContainer.style.display=="none") {
      for (var i in dropDownList) dropDownList[i].close();
      showList(copyThis);
		var elementId = copyThis.el.getAttribute('for');
		labelId = elementId.replace(/_Field/, 'Label_Field');
		if (!document.getElementById(labelId))
		labelId = FindLabelId(elementId);
		var label = document.getElementById(labelId);
		if (label && label.className && label.className.indexOf('errorField')>-1) 
		  label.className = label.className.replace(/errorField/, "");
    } else {
		  copyThis.close();
    }
     
  };
  this.close = function() { this.listContainer.style.display = "none"; }
  this.formedDOMoption = function() {
    for (i=0; i<this.items.length; i++ ) {
      copyThis.items[i].obj.onmouseover = function() {
        // перемещение мыши в пределы элемента списка
        if (!dropDownDragAndDropNow) { 
          addClass(getItemFromEl(copyThis, this).obj, "hoverItem");
        } 
      };
      copyThis.items[i].obj.onmouseout = function() {
        // перемещение мыши за пределы элемента списка 
        if (!dropDownDragAndDropNow) { 
          remClass(getItemFromEl(copyThis, this).obj, "hoverItem");
        } 
      };
      copyThis.items[i].obj.onclick = function() {
        // LMB на элементе списка 
        if (!dropDownDragAndDropNow) { 
          var select = document.getElementById(copyThis.el.getAttribute('for'));
          var val = this.getAttribute('value'); 
          for (var i=0; i<select.options.length; i++) {
            if (select.options[i].value==val) {
              // select.selectedIndex = i;
              select.options[i].selected = true;
            }
          }
          if (copyThis.el.getAttribute('for')=="newsArchiveYear") {
            newsArchive_ChangeYear();
          } else {
            newsArchive_ChangeMonth();
          }
          copyThis.close();
          copyThis.headerText.innerHTML = this.innerHTML;
          if (dropDownIE) copyThis.arrow.style.left = (copyThis.el.offsetWidth-5)+"px";
        } 
      };
    }
    /*
    copyThis.listContainer.style.visibility = 'hidden';
    copyThis.listContainer.style.display = 'block';
    copyThis.itemHeight = Math.floor(copyThis.list.offsetHeight / copyThis.items.length);
    copyThis.listContainer.style.display = 'none';
    copyThis.listContainer.style.visibility = 'visible';
    */
    // alert(copyThis.items.length);
  }
  this.formedDOMoption();
  copyThis.scrollBracingForDOMEvent.onmousedown = function(evt) { dragScrollStart(evt, copyThis); return false; }
  copyThis.scrollBracingForDOMEvent.ondragstart = function(evt) { return false; }
  copyThis.scrollUp.getElementsByTagName('img')[0].onclick = function() {
    dropDownDragAndDropObj = copyThis;
    // dropDownScrollerMoveBy( -1*copyThis.itemHeight*(copyThis.itemsVisible-2) );
    var dy = copyThis.itemHeight;
    if (copyThis.scroll.offsetHeight*2 < copyThis.list.offsetHeight) {
      dy = dy / (copyThis.list.offsetHeight / copyThis.scroll.offsetHeight);
    }
    dropDownScrollerMoveBy( -1*dy );
  }
  copyThis.scrollDown.getElementsByTagName('img')[0].onclick = function() {
    dropDownDragAndDropObj = copyThis;
    // dropDownScrollerMoveBy( copyThis.itemHeight*(copyThis.itemsVisible-2) );
    var dy = copyThis.itemHeight;
    if (copyThis.scroll.offsetHeight*2 < copyThis.list.offsetHeight) {
      dy = dy / (copyThis.list.offsetHeight / copyThis.scroll.offsetHeight);
    }
    dropDownScrollerMoveBy( dy );
  }
  copyThis.scroll.onclick = function(evt) {
    var evt = evt || window.event;
    var el = evt.target || evt.srcElement;
    if (el.parentNode.className && el.parentNode.className.indexOf("ddScroll")>-1) {
      var mouseY = (dropDownIE) ? evt.clientY + document.body.scrollTop - document.body.clientTop : evt.pageY;
      var elX = 0;
      var elY = 0;
      while (el.offsetParent) {
        elX += el.offsetLeft;
        elY += el.offsetTop;
        el = el.offsetParent;
      }
      dropDownDragAndDropObj = copyThis;
      dropDownScrollerMoveBy( (mouseY-elY) - (parseInt(copyThis.scroller.style.top) + copyThis.scroller.offsetHeight/2) );
    }
  }

  /*
  copyThis.scroll.onmousedown = function(evt) {
    q.innerHTML = "";
    for (i in evt) q.innerHTML += i +" == "+ evt[i] +"<br />";
  }
  */

  function wheelScrolled(evt) {
    // когда крутим на себя:
    // IE6+7           wheelDelta == -120
    // Saf3betaWin     wheelDelta == -120
    // Opera9          wheelDelta == 240 вот оно, правильное решение
    // Fox2            detail == 6
    var evt = evt || window.evt;
    var dy = 0;
    if (evt.wheelDelta) {
      dy = evt.wheelDelta;
      // evt.wheelDelta = 0;
    } else {
      if (evt.detail) {
        dy = evt.detail * dropDownDragAndDropObj.itemHeight;
        // evt.detail = 0;
      }
    }
    window.event.cancelBubble = true;
    if (navigator.userAgent.indexOf('Safari')>-1 || navigator.userAgent.indexOf('MSIE')>-1) dy *= -1;
    dy = dy>0 ? dropDownDragAndDropObj.itemHeight : -1*dropDownDragAndDropObj.itemHeight;
    dropDownScrollerMoveBy(dy);
    // return false;
  } 
  
  function wheelScrolledFox(evt) {
    wheelScrolled(evt);
  }
  
  function dragScrollStart(evt, obj) {
    dropDownDragAndDropNow = true;
    dropDownDragAndDropObj = obj;
    evt = evt || window.event;
    dropDownDragAndDropY = (dropDownIE) ? evt.clientY + document.body.scrollTop - document.body.clientTop : evt.pageY; // выч. тек. верт. коор. мыши
  }
  
  function showList(obj) {
    obj.listContainer.style.display = "block";
    if (obj.needScroll && obj.scroll) {
      i100 = obj.list.offsetHeight;
      i60 = obj.listContainer.offsetHeight;
      i30 = obj.scroll.offsetHeight - (obj.scrollUp.offsetHeight+obj.scrollDown.offsetHeight);
      iy = i100 / i30;
      ix = (i100-i60)/iy;
      var scrollK = (i100/i60);
      var scrollKH = i30 / scrollK;
      // цифра 7 соответствует суммам высот drop-down-scroller-bottom.gif (4) и drop-down-scroller-top.gif (3)
      var minH = 1*obj.scrollMiddle.getElementsByTagName('img')[0].height;
      var scrollH = (scrollKH>minH) ? scrollKH : minH;
      var sH2 = scrollH - 7;
      obj.scrollMiddle.style.height = ((sH2>=obj.scrollMiddle.getElementsByTagName('img')[0].height) ? sH2 : obj.scrollMiddle.getElementsByTagName('img')[0].height) + "px";
      // sH2 = sH2 - 7; 
      obj.scrollBracingForDOMEvent.height = (sH2>=obj.scrollMiddle.getElementsByTagName('img')[0].height) ? sH2 : obj.scrollMiddle.getElementsByTagName('img')[0].height;
      obj.scrollBracingForDOMEvent.width = obj.scrollMiddle.offsetWidth;
      // obj.scrollBracingForDOMEvent.style.background = "red";
      dropDownDragAndDropYK = obj.scroller.offsetHeight / scrollKH;
      obj.baseBracingForDOMEvent.width = obj.scroll.offsetWidth;
      obj.baseBracingForDOMEvent.height = obj.scroll.offsetHeight-obj.scrollDown.offsetHeight;
    }
  }
  function hideList(obj) {
    obj.listContainer.style.display = "none";
  }
  function addClass(el, str) {
    var cl = ( (el.className) ? el.className : "" ) + " " + str;
    el.className = cl;
  }
  function remClass(el, str) {
    var cl = (el.className) ? el.className : "";
    if (cl.indexOf(str)>-1) cl = cl.substring(0, cl.indexOf(str)) + cl.substring(cl.indexOf(str) + str.length);
    el.className = cl;
  }
  function getItemFromEl(obj, el) {
    for (var i=0; i<obj.items.length; i++) if (obj.items[i].obj==el) return obj.items[i]; 
    return false;
  }
}

/* dropDown (end) */

if (navigator.userAgent.indexOf('Safari')>-1) {
  var _timer = setInterval(function() {
    if (/loaded|complete/.test(document.readyState)) {
      clearInterval(_timer);
      delete _timer;
      ready(); 
    }
  }, 10);
} else {
  if (window.addEventListener) {
    // window.addEventListener('load', ready, false);
    window.addEventListener('DOMContentLoaded', ready, false);
  }
/*
  } else {
    ready();
  } 
*/
}
