var inp_;

function GSearchFormSubmit()
{
  return document.getElementById('searchQuery').value.length > 0;
}

function GSearchAutoCompleteInit (inp)
{ 
  inp_ = inp;
  
  window.onresize = function ()
  {
    redrawAutoCompleteWindow();
  }
}

var GSearchAutoComplete = new Object ();

GSearchAutoComplete.blurHandler = function (o, e)
{
  if (box && !selectedItem) box.style.display = 'none';
}

GSearchAutoComplete.focusHandler = function (o, e)
{
  if (box && !cancelAutoComplete) box.style.display = 'block';
}

GSearchAutoComplete.keyDownHandler = function (o, e)
{
  return apress(o, e);
}

GSearchAutoComplete.keyPressHandler = function (o, e)
{
  return apress(o, e);
}

GSearchAutoComplete.keyUpHandler = function (o, e)
{
  return acomplete(o, e);
}

function findPos(obj)
{
	var curleft = curtop = 0;
  
  do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;

      } while (obj = obj.offsetParent);
      
  return [curleft,curtop];
}

function nextDiv ()
{
  if (selectedItem)
  {
      var d = selectedItem.nextSibling;
      
      if (d)
      {
          if (d.onmouseover)
          {
              return d;
              
          } else if (d.nextSibling && d.nextSibling.onmouseover)
          {
              return d.nextSibling;
          }
      }
  }
}

function prevDiv ()
{
  if (selectedItem)
  {
      var d = selectedItem.previousSibling;
      
      if (d)
      {
          if (d.onmouseover)
          {
              return d;
              
          } else if (d.previousSibling && d.previousSibling.onmouseover)
          {
              return d.previousSibling;
          }
      }
  }
}

// =========

var cancelAutoComplete = false;
var cancelKeyPress = false;
var selectedItem;
var loading = false;
var prev;
var box;

function redrawAutoCompleteWindow ()
{
var pos = findPos (inp_);
          box.style.left = pos[0] + 'px';
          box.style.top = pos[1] + inp_.offsetHeight + 'px';
          box.style.width = inp_.offsetWidth + 'px';
}
    
function apress (inp, e)
{
  e = window.event || e;

  if (loading) return;

  if (e.type == 'keydown')
  {
      cancelKeyPress = true;
      
  } else if (e.type == 'keypress' && cancelKeyPress)
  {
      cancelKeyPress = false;
      
      if (e.keyCode == 13)
      {
          if (selectedItem)
          {
              inp.value = selectedItem.getAttribute('oname');
              selectedItem = '';
              
              return false;
          }
      }
      
      return true;
  }
  
  if (!box) return false;

  if (e.keyCode == 27)
  {
      acompleteClose();
      
  } else if (e.keyCode == 40)
  {
      var d = nextDiv();
  
      if (d)
      {
          itemOver(d);
          
      } else
      {
          if (box.hasChildNodes())
          {
              itemOver(box.childNodes[0].getElementsByTagName('DIV')[0]);
          }
      }
      
  } else if (e.keyCode == 38)
  {
      var d = prevDiv();
      
      if (d)
      {
          itemOver(d);
          
      } else
      {
          var ds = box.getElementsByTagName('DIV');
          
          if (ds.length > 1) itemOver(ds[ds.length - 2]);
      }
  } 
  
  return true;
}

function acomplete (inp, e)
{
  e = window.event || e;

  GSearchAutoCompleteInit(inp);

  if (!cancelAutoComplete && !loading && inp.value.length > 0 && (!prev || prev != inp.value))
  {
      prev = inp.value;
      
      if (!box)
      {
          box = document.createElement('div');
          box.id = 'box';
          document.body.appendChild(box, false);
          
          var pos = findPos(inp);
          
          box.style.position = 'absolute';
          redrawAutoCompleteWindow();
      }
  
      GDownloadUrl('/retreivers/search-home.php?s=' + inp.value + '&locationId=' + inp.locationId + Math.random(), acompleteLoaded);
      //loading = true;
      
  } else if (box && inp.value.length == 0)
  {
      box.innerHTML = '';
  }
}

function acompleteClose ()
{
  document.getElementById('acompleteContainer').style.display = 'none';
  
  cancelAutoComplete = true;
}

function acompleteLoaded (html, httpCode)
{
  box.innerHTML = html;
  selectedItem = '';
  loading = false;
}

function itemOver (o)
{
  if (selectedItem) itemOut(selectedItem);

  o.style.backgroundColor = '#3366cc';
  o.style.color = '#ffffff';
  selectedItem = o;
}

function itemOut (o)
{
  o.style.backgroundColor = '#ffffff';
  o.style.color = '#000000';
  selectedItem = '';
}

GSearchAutoComplete.loaded = true;