var d = document;

var loaderoffsetY=15; // y offset of indicator
var loaderoffsetX=0; // x offset of indicator

var ie=d.all && !window.opera;
var ns6=d.getElementById && !d.all;
var loadObj, formObj, submitObj, linkObj;



////////////////////////////////////////////////
// сабмит без кнопки
////////////////////////////////////////////////
function quickFormSubmit(isVisualization) {

  var isVisualization = isVisualization || "yes";  // если не передан флаг необх. виз-ции, значит нужна

  // форма
  formObj=d.getElementById('filterform');

  // обычный сабмит
  formObj.submit();

  // отключим все поля
  disableForm(formObj,"disable");

  // визуализация
  if(isVisualization=="yes") loading(formObj,"on");
}
////////////////////////////////////////////////
// пересчет фильтров при сабмите по кнопке
////////////////////////////////////////////////
function remakeFilters(){
  // получаем массив элементов фильтров, которые д.б. неактивны (см $this-Disabled)
  // проходим в цикле по форме и отрубаем их.

  //alert('http://'+window.location.hostname+'/ajax_get_filters.php');

  formObj=d.getElementById('filterform');

  // формируем строку POST запроса
  var postdata = getPostData(formObj);

  // блокируем все элементы формы и включаем индикатор загрузки
  disableForm(formObj,"disable");
  loading(formObj,"on");

  // посылаем асинхронный запрос и обрабатываем результат
  getAjax(postdata);

}
////////////////////////////////////////////////


// меняем кнопку сабмита (если работает ява) если в настройках страницы сабмит onChange, на неактивную кнопку "автоподбор"
function switchIfJava(){
// прячем кнопку сабмита формы
  submitObj=d.getElementById('submit_filter');
  //submitObj.style.visibility="hidden";
  submitObj.value="Автоподбор";
  submitObj.disabled=true;

// 2. стандартный обработчик формы заменится на ajax
//  formObj=d.getElementById('filterform');
//  formObj.action="ajaxformaction.php";
}


// заблокировать\разблокировать элементы формы
function disableForm(formObj,onoff,massiv){
  var massiv = massiv || "all";  // если не передан массив полей формы - значит все
  var onoff = onoff || "enable"; // если не передан флаг переключателя - то включить
  var formEl; var formEltxt;
  var oldIE = false;

  if ((window.navigator.userAgent.indexOf ("MSIE") >= 0)&&(window.navigator.userAgent.substr(window.navigator.userAgent.indexOf("MSIE")+5,1)<7)) oldIE = true;

  if (massiv=="all"){
    /////// Проблема с option select в ie
    if (oldIE){
      // если IE и версия <8, то как-то иначе надо отключать\включать пункты
      // пока ничего не делаем
      // просто ждем когда издохнет эта гадина IE
    }
    else{  // для прочих браузеров
      options_arr=d.getElementsByTagName('option');
      for (var  i = 0; i < options_arr.length; i++) {
        if (onoff=="disable")  options_arr[i].disabled=true;
        else                   options_arr[i].disabled=false;
      }
    }
    for (var  i = 0; i < formObj.elements.length; i++) {
      formEl = formObj.elements[i];
// почему-то не работает в IE вообще. Вынес выше (перед циклом) для всех элементов option
//      if(formEl.type=="select-one") {
//        for(var j in formEl.options) {
//          if (onoff=="disable") formEl.options[j].disabled=true;
//          else                  formEl.options[j].disabled=false;
//        }
//      }
      // else {    // нах. else, чтоб и сам селектбокс стал неактивным (не только его пункты)
      if (onoff=="disable") formEl.disabled=true;
      else                  formEl.disabled=false;
      // }

      if (formEltxt=d.getElementById('txt'+formEl.id)){
        if (onoff=="disable")  formEltxt.style.color="gray";
        else                   formEltxt.style.color="black";
      }
    }
  }
  else{
    for(var i in massiv) {
      if (!massiv.hasOwnProperty(i)) continue;
      formEl=d.getElementById(massiv[i]);

      if(oldIE){
        // хз
      }
      else{
        if (onoff=="disable")  formEl.disabled=true;
        else                   formEl.disabled=false;
      }

      if (formEltxt=d.getElementById('txt'+massiv[i])){
        if (onoff=="disable")  formEltxt.style.color="gray";
        else                   formEltxt.style.color="black";
      }
    }
  }
}



// визуализация
function loading(el,onoff) {
  loadObj=d.getElementById('loading');
  if (onoff=="on")  loadObj.style.visibility="visible";
  else              loadObj.style.visibility="hidden";
  el.onmousemove=positionloading;
}
function ietruebody(){
  return (d.compatMode && d.compatMode!="BackCompat")? d.documentElement : d.body
}
function positionloading(e) {
  var curX=(ns6)?e.pageX : event.clientX+ietruebody().scrollLeft;
  var curY=(ns6)?e.pageY : event.clientY+ietruebody().scrollTop;
  loadObj.style.left=curX+loaderoffsetX+"px";
  loadObj.style.top=curY+loaderoffsetY+"px";
}


// формируем строку POST запроса
function getPostData(formObj) {
  var formEl;
  var query = [];
  for (var  i = 0; i < formObj.elements.length; i++) {
        formEl = formObj.elements[i];
        //query[formEl.name]=formEl.value;
        if ((formEl.type=="select-one")||(formEl.type=="hidden")) query.push(formEl.name + "=" + formEl.value);
        else if (formEl.checked==true)                            query.push(formEl.name + "=" + formEl.value);
  }
  var postString = query.join('&');
  return(postString);
}




// получить аяксом массив фильтров для выключения АСИНХРОННО
function getAjax(postdata){

  // создаем и проверяем объект XMLHttpRequest,
  // если возникли проблемы выходим
  var xmlhttp = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
  if (!xmlhttp) {
    disableForm(formObj,"enable");
    loading(formObj,"off");
    return;
  }
  xmlhttp.open('POST', 'http://'+window.location.hostname+'/ajax_get_filters.php', true);

  // обязательное для POST указание Content-Type
  xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

  ////////////////////////// TODO: Сделать таймаут  //////////////////////////
  xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4) {
              if (xmlhttp.status == 200) {
                eval(xmlhttp.responseText);
                // активируем всё
                disableForm(formObj,"enable");
                // деактивируем полученные фильтры если массив не пустой
                if(switchedOff) disableForm(formObj,"disable",switchedOff);
                // удаляем индикатор загрузки
                loading(formObj,"off");
                // выводим окошко доступно-показать
                if(dostupno==0) dostupno="все";
                showAvailable(dostupno);
              }
            }
  };
  // посылаем данные
  xmlhttp.send(postdata);
}

function moveAvailable(el){
  linkObj=d.getElementById('dostupno');
  linkObj.style.visibility="hidden";

  var thisY=thisX=0;
  while(el) {
    thisY += el.offsetTop;
    thisX += el.offsetLeft;
    el = el.offsetParent;
  }

  linkObj.style.left=thisX-150+'px';
  linkObj.style.top=thisY+'px';
}

function showAvailable(dostupno){
  linkObj=d.getElementById('dostupno');
  linkObj.style.visibility="visible";
  linkObj.innerHTML="Доступно: <b>"+dostupno+"</b>&nbsp;&nbsp;&nbsp;<a class='w' href='/nojava.html' target='_blank' onclick='quickFormSubmit();return false;'>ПОКАЗАТЬ</a>";
}
