var footerHeight = 0;

function searchOnLoad () {
  enableTabSwitcher(document.getElementById('searchtablist'));

  addEmailBlock(document.getElementById('email-attributes-tab').getElementsByTagName('button')[0]);

  footerHeight = document.getElementById('footer').offsetHeight;
}

function onListBoxHover (select) {
  if (select.getAttribute('expand') == 'true')
    return true;

  var clone = document.createElement('span');
  var parent = select.parentNode;
  clone.style.display="inline";
  clone.style.padding=0;
  clone.style.margin=(select.offsetWidth/1)+4+"px";
  select.style.position='absolute';
  select.style.zIndex=3;
  select.style.left=select.offsetLeft+'px';
  select.style.top=select.offsetTop+'px';
  select.setAttribute('expand','true');
  select.clone = clone;
  parent.replaceChild(clone, select);
  parent.appendChild(select);
  select.size=select.options.length;
  select.multiple="multiple";
  select.addEventListener('mouseout',onListBoxOut, true);
}

function onListBoxOut (e) {
  if (this.getAttribute('expand') != 'true')
    return true;

  if (
      (e.clientX > this.offsetLeft && e.clientX < this.offsetLeft+this.offsetWidth)
      &&
      (e.clientY > this.offsetTop && e.clientY < this.offsetTop+this.offsetHeight)
      ) {
  } else {
    var parent = this.parentNode;
    this.size=1;
    this.multiple="";
    parent.removeChild(this);
    this.style.position='';
    parent.replaceChild(this, this.clone);
    this.setAttribute('expand','false');
  }
  //select.style.left=select.offsetLeft+'px';
  //select.style.top=select.offsetTop+'px';
}


var email1values = ['the bug assignee'
                , 'the reporter'
                , 'the QA contact'
                , 'a CC list member'
                , 'Commenter'];

var email2values = ['contains'
                , 'is'
                , 'matches regexp'
                , "doesn\'t match regexp"];

function addEmailBlock (t) {
  var parent = t.parentNode;

  if (parent.getElementsByTagName('fieldset').length > 3)
    return true;

  var fieldset = document.createElement('fieldset');
  var legend = document.createElement('legend');
  var table = document.createElement('table');
  legend.innerHTML="Any one of";
  fieldset.appendChild(legend);
  for(var m=0;m<2;m++){
    var tr = document.createElement('tr');
    for (var i=0;i<3;i++) {
      var td = document.createElement('td');
      switch (i) {
        case 0:
          var select = document.createElement('select');
          for (var v in email1values) {
            var option = document.createElement('option');
            option.innerHTML=email1values[v];
            select.appendChild(option);
          }
          td.appendChild(select);
          break;
        case 1:
          var select = document.createElement('select');
          for (var v in email2values) {
            var option = document.createElement('option');
            option.innerHTML=email2values[v];
            select.appendChild(option);
          }
          td.appendChild(select);
          break;
        case 2:
          var input = document.createElement('input');
          input.type="text";
          td.appendChild(input);
          break;
      }
      tr.appendChild(td);
    }
    table.appendChild(tr);
  }
  fieldset.appendChild(table);
  parent.insertBefore(fieldset, t);
}

function onSearch () {
  var l=25;
  var I=null;
  function stage0 () {
    resultTable.clear();
  }
  function stage1 () {
    var num = Math.floor(1+(Math.random()*4));
    for (var i=0;i<num&&l>0;i++) {
      resultTable.addBug([Math.floor(100+(Math.random()*1000)), 'nor', 'P2', 'Mac', 'ian@flock.com', 'ASSI', '', getDescription()]);
      l--;
    }
    if (l>0) {
      setTimeout(stage1,Math.floor(100+(Math.random()*100)));
    } else {
      stage2();
    }
  }
  function stage2 () {
    resultTable.switchWorking(false);
    document.getElementById('resultbox').setAttribute('style','');
  }
  stage0();
  document.getElementById('resultbox').setAttribute('style','height:46.3em');

  // if searchbox touches footer, switch footer from fixed to normal display
  // so that result box can push footer
  var diff = (window.innerHeight-footerHeight) - 
          (document.getElementById('resultbox').offsetHeight+document.getElementById('resultbox').offsetTop);
  document.getElementById('footer').style.position=diff<=0?"static":"fixed";

  resultTable.switchWorking(true);
  I = setTimeout(stage1,500);
}

function onFilterClear () {
  var input = document.getElementById('results-input');
  input.value="";
  resultTable.onFilterChange();
}

var resultTable = function () {
}

resultTable.clear = function () {
  var tbody = document.getElementById('tbody');
  var rows = tbody.getElementsByTagName('tr');
  var num = rows.length;
  while (tbody.firstChild) {
    tbody.removeChild(tbody.firstChild);
  }
}

function goToBug () {
  document.location="show_bug.cgi?id=1";
}

resultTable.addBug = function (bug) {
  var tbody = document.getElementById('tbody');
  var bugrow = document.createElement('tr');
  for (var i=0;i<bug.length;i++) {
    var bugcell = document.createElement('td');
    bugcell.addEventListener('click',goToBug,true);
    if (i==bug.length-1) {
      var span = document.createElement('span');
      span.innerHTML=bug[i];
      span.addEventListener('dblclick',switchEditableSpan,true);
      bugcell.appendChild(span);
    } else {
      bugcell.innerHTML=bug[i];
    }
    bugrow.appendChild(bugcell);
  }
  tbody.appendChild(bugrow);
}

var ind=0;

resultTable.onFilterChange = function () {
  var input = document.getElementById('results-input');
  var tbody = document.getElementById('tbody');
  var rows = tbody.getElementsByTagName('tr');
  for (var a=0;a<rows.length;a++) {
    var val = rows[a].childNodes[7].innerHTML.toLowerCase();
    if (val.indexOf(input.value.toLowerCase()) === -1)
      rows[a].style.display = "none";
    else
      rows[a].style.display = "table-row";
  }

  var diff = (window.innerHeight-footerHeight) - 
          (document.getElementById('resultbox').offsetHeight+document.getElementById('resultbox').offsetTop);
  document.getElementById('footer').style.position=diff<=0?"static":"fixed";
}

resultTable.switchWorking = function (state) {
  var box = document.getElementById('resultbox');
  var table = document.getElementById('resulttable');
  var img = box.getElementsByTagName('img')[0];
  if (state) {
    var left = box.offsetLeft+(box.offsetWidth/2)-8;
    var top = box.offsetTop+(box.offsetHeight/2)-8;
    img.style.position="absolute";
    img.style.top = top+'px';
    img.style.left = left+'px';
    img.style.display="block";
    box.className="working";
  } else {
    img.style.display="none";
    box.className="";
  }
}

var tempPar = 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras pretium mauris sed velit. Integer accumsan, sem in tincidunt molestie, nunc est faucibus mi, nec blandit arcu neque a risus. Integer quis mauris sit amet dui dignissim dapibus. Nam mauris urna, tempus at, posuere tempor, condimentum ut, justo. Aenean ante tortor, convallis sed, varius et, suscipit a, augue. Nam vitae lacus eget dui posuere commodo. Praesent lectus ante, porta eu, cursus ac, nonummy a, erat. Curabitur convallis tortor rutrum lacus. Nam at turpis vel dolor tincidunt mollis. Sed blandit. Duis cursus risus sit amet sem. Nunc ultrices nunc non augue. Duis mattis tristique odio. Maecenas et felis eu ligula tincidunt feugiat. Mauris facilisis. Aliquam eu dui. Phasellus viverra sodales ipsum.';
function getDescription () {
  var tempLen = tempPar.length;
  var len = Math.floor(25+(Math.random()*20));
  var start = Math.floor(Math.random()*(tempLen-len))
  return tempPar.substr(start,len);
}