var isDOM=document.getElementById;
var isIE=document.all && document.all.item;
var isMZ=isDOM && (navigator.appName=="Netscape");
var isO=window.opera && isDOM;

function undef(param) { return param; }

// плавная моталка по странице. Это супер-фича.
function travelA( Aname, quick, noplus )
{
  if (isMZ && navigator.userAgent.substr(navigator.userAgent.indexOf("Gecko/")+6,4)=="2003" ) isMZ=false;
  if (isMZ && navigator.userAgent.substr(navigator.userAgent.indexOf("Gecko/")+6,4)=="2002" ) isMZ=false;
  if (!isIE && !isMZ) return true;
  var value=10;
  if (noplus) value=0;
  if (document.all)
   z = document.all[Aname];
  else
  {
   a = document.getElementsByTagName("A");
   aLength = a.length;
   for (var i = 0; i < aLength; i++)
   {
    an = a[i].getAttribute("name");
    if (an!=null && an==Aname)
     break;
   }
   z = a[i];
  }
//  z = document.all ? document.all[Aname] : document.getElementById(Aname);
  if (z == undef()) return true;
  var x=0;
  var y=0;
  do {
    x += parseInt(isNaN(parseInt(z.offsetLeft))?0:z.offsetLeft);
    y += parseInt(isNaN(parseInt(z.offsetTop))?0:z.offsetTop);
  } while (z=z.offsetParent)
  travelto( x,  y-value, quick );
  return true;
}

// часть прикольной, завораживающей моталки
function travelto(x, y, quick )
{
  if (document.documentElement) var d = document.documentElement;
  else var d = document.body;
  if (quick)
  {
      ox = d.scrollLeft;
      oy = d.scrollTop;
      dx = (x - ox);
      dx = sign(dx) * Math.ceil(Math.abs(dx));
      dy = (y - oy);
      dy = sign(dy) * Math.ceil(Math.abs(dy));
      window.scrollBy(dx, dy);
    return;
  }
  do
    {
      ox = d.scrollLeft;
      oy = d.scrollTop;
      dx = (x - ox) / 10;
      dx = sign(dx) * Math.ceil(Math.abs(dx));
      dy = (y - oy) / 10;
      dy = sign(dy) * Math.ceil(Math.abs(dy));
      window.scrollBy(dx, dy);
      cx = d.scrollLeft;
      cy = d.scrollTop;
    }
  while (( (ox-cx) != 0 ) || ( (oy-cy) != 0 ));
}

var ok;

function sign(x)
{
  if (x > 0) return 1;
  if (x < 0) return -1;
  return 0;
}


 var wikiedit;
 var dbclick;
 var edit;

 function all_init () //инициализация всяких штук, которые требуют инициализации
 {
  if (wikiedit)
   we_init(wikiedit);
  if (dbclick)
   dclick(dbclick);
  init_travel();
 }

 function dclick(frame)
 {
  if (edit)
  if(isIE || isO){
    document.ondblclick=function(){
      op = event.srcElement;
      while (op!=null && op.className!=frame && op.tagName!="BODY")
        op=op.parentElement;
      if (op.className==frame) {
       document.location=edit;
      }
      return true;
    }
  }else if (isMZ) {
  document.addEventListener("dblclick", mouseClick, true);
  }

 }

 function mouseClick(event)
 {
     op = event.target;
     while (op!=null && op.className!=dbclick && op.tagName!="BODY")
       op=op.parentNode;
     if (op!=null && op.className==dbclick) {
      document.location=edit;
     }
 }

 function init_travel()
 {
  a = document.all ? document.all : document.getElementsByTagName("*");
  aLength = a.length;
  l = window.location.href;
  if (l.indexOf("#")!=-1) l = l.substr(0,l.indexOf("#"));
  for (var i = 0; i < aLength; i++)
  {
   if (a[i].tagName == "A" || a[i].tagName == "a")
   {
    ahref = a[i].getAttribute("href");

    if (ahref!=null && ((ahref.substr(0, l.length)==l && ahref.charAt(l.length)=="#") || ahref.charAt(0)=="#"))// && ahref.charAt(l.length+1)=="#")
    {
      if (ahref.charAt(0)=="#") ah = ahref.substr(1, ahref.length-1);
      else ah = ahref.substr(l.length+1, ahref.length-l.length-1);
      a[i].setAttribute("travel", ah);
      a[i].onclick = function (e) { return travel(e); };
//      if (a[i].addEventListener) a[i].addEventListener("click", travel, false);
//      else if (a[i].attachEvent) a[i].attachEvent("onclick", travel);
    }
   }
  }
 }

 function travel(e)
 {
  d = window.event ? window.event.srcElement : e.currentTarget;
  if (!d.getAttribute("travel")) return;
  s = d.getAttribute("travel");
  return travelA(s);
 }

 function weSave()
 {
  if (confirm("Really save?"))
  {
   document.forms.edit[0].click();
  }
 }

var DOTS = "#define x_width 2\n#define x_height 1\nstatic char x_bits[]={0x01}";



var addressBook = {
    control: false,  // элемент селект
    target:  false,  // «цель» - элемент pre
    loader:  false,  // сообщение о загрузке
    xmlhttp: false,  // XMLHttpRequest

    // инициализация
    // controlId - id элемента select
    // sbmtBtnId - id кнопки submit
    // targetId - id элемента pre
    init: function(controlId, sbmtBtnId, targetId) {


        if (!document.getElementById(controlId) ||
            !document.getElementById(sbmtBtnId) ||
            !document.getElementById(targetId)) return;

        // создаем и проверяем объект XMLHttpRequest,
        // если возникли проблемы тихонько выходим
        addressBook.xmlhttp = window.ActiveXObject ?
                              new ActiveXObject("Microsoft.XMLHTTP") :
                              new XMLHttpRequest();
        if (!addressBook.xmlhttp) return;

        // удаляем кнопку submit
        // она нам нужна только если скрипт не запустится
        addressBook.removeElement(document.getElementById(sbmtBtnId));

        addressBook.control = document.getElementById(controlId);
        addressBook.target = document.getElementById(targetId);

        // добавляем обработчик события onchange элемента select
        addressBook.addEvent(addressBook.control, 'change',
                             function() {
                                 if (this.value != '')
                                     addressBook.getAddress(this.value);
                                 else
                                     addressBook.target.innerHTML = '';
                             });
    },

    // загрузка и отображение данных
    getAddress: function(id) {
        // даем пользователю знать, что началась загрузка данных
        addressBook.buildLoader();

        addressBook.xmlhttp.open('POST', 'index.php', true);
        // обязательное для POST указание Content-Type
        addressBook.xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

        addressBook.xmlhttp.onreadystatechange = function() {
            if (addressBook.xmlhttp.readyState == 4) {
                if (addressBook.xmlhttp.status == 200) {
                    // удаляем сообщение о загрузке
                    addressBook.killLoader();
                    // вставляем полученную информацию в элемент pre
                    addressBook.target.innerHTML = addressBook.xmlhttp.responseText;
                }
            }
        };
        // отсылаем данные запроса
        addressBook.xmlhttp.send('id=' + id);
    },

    // создание сообщения о загрузке
    buildLoader: function() {
        addressBook.loader = document.createElement('div');
        addressBook.loader.id = 'loading';
        addressBook.loader.appendChild(document.createTextNode('Загрузка...'));
        document.body.appendChild(addressBook.loader);
    },

    // удаление сообщения о загрузке
    killLoader: function() {
        addressBook.removeElement(document.getElementById('loading'));
    },

    // удаление элемента
    removeElement: function(el) {
        el.parentNode.removeChild(el);
    },

    // добавление обработчика события
    addEvent: function(obj, type, fn) {
        if (obj.addEventListener)
            obj.addEventListener(type, fn, false);
        else if (obj.attachEvent) {
            obj['e' + type + fn] = fn;
            obj[type + fn] = function() {
                obj['e' + type + fn](window.event);
            };
            obj.attachEvent('on' + type, obj[type + fn]);
        }
    }
};

// вызываем метод init() при загрузке страницы
// и передаем необходимые параметры
addressBook.addEvent(window, 'load', function() {
    addressBook.init('person', 'submit', 'address');
});


//Отсюда и до конца функции для анимации календаря
function MM_preloadImages() {
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
function MM_swapImgRestore() {
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_findObj(n, d) {
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function showm(id, id1, id2, id3, id4, id5, id6){
document.getElementById(id).style.visibility='visible';
document.getElementById(id1).style.visibility='hidden';
document.getElementById(id2).style.visibility='hidden';
document.getElementById(id3).style.visibility='hidden';
document.getElementById(id4).style.visibility='hidden';
document.getElementById(id5).style.visibility='hidden';
document.getElementById(id6).style.visibility='hidden';
}
function closem(id1, id2, id3, id4, id5, id6, id7){
document.getElementById(id1).style.visibility='hidden';
document.getElementById(id2).style.visibility='hidden';
document.getElementById(id3).style.visibility='hidden';
document.getElementById(id4).style.visibility='hidden';
document.getElementById(id5).style.visibility='hidden';
document.getElementById(id6).style.visibility='hidden';
document.getElementById(id7).style.visibility='hidden';
}



/*
 * Функционал для формы поиска
 */

function searchFiltersToggle() {
	var cur = $("#filters").css('display');
	if(cur=='none') {
		$("#searchFiltersToggleButton").html('Фильтры поиска (скрыть)');
		$("#filters").show('fast');
	} else {
		$("#searchFiltersToggleButton").html('Фильтры поиска (отобразить)');
		$("#filters").hide('fast');
	}
}

function searchChangeCatClick() {
	$("#filter_cat0").hide();
	$("#filter_cat").show();
}

function searchToggleCheckboxes() {
	var v = $("#searchCbToggleButton").html();
	if(v=='Отметить все галочки') {
		$('.searchCheckbox').attr("checked","checked");
		$("#searchCbToggleButton").html('Убрать все галочки');
	} else {
		$('.searchCheckbox').removeAttr("checked");
		$("#searchCbToggleButton").html('Отметить все галочки');
	}
}

/*
 * Функционал для выставления галочек в потоках
 */

function streamToggleCheckboxes() {
	var v = $("#streamFiltersToggleButton").html();
	if(v=='Выбрать все подразделы') {
		$('.subtypeCheckbox').attr("checked","checked");
		$("#streamFiltersToggleButton").html('Очистить все критерии выбора');
	} else {
		$('.subtypeCheckbox').removeAttr("checked");
		$("#streamFiltersToggleButton").html('Выбрать все подразделы');
	}
}

$(function($) {
	// потому что onclick не работает блин!
	$("#searchFiltersToggleButton").click(searchFiltersToggle);
	$("#changeCatButton").click(searchChangeCatClick);
	$("#searchCbToggleButton").click(searchToggleCheckboxes);
	
	$("#streamFiltersToggleButton").click(streamToggleCheckboxes);
});

