var _resultCache=new Object(); // This is a cache of results
cacheResults("",new Array(),new Array());
var _timeoutAdjustment=0;
var _old_field_value = '';
var _new_field_value = '';
var _completeDiv = null;
var _inputField = null;
var type = '';
var arg2 = '';
var changed = false;

function setCompleteDivSize(){
  if(_completeDiv){
    _completeDiv.style.left=calculateOffsetLeft(_inputField)+"px";
    _completeDiv.style.top=calculateOffsetTop(_inputField)+_inputField.offsetHeight-1+"px";
    _completeDiv.style.width=calculateWidth()+"px"
   if(calculateWidth() < 112) {_completeDiv.style.width = '112px';}
  }
}
install = function(){
   _completeDiv=document.createElement("DIV");
  _completeDiv.id="completeDiv";
  _completeDiv.style.fontFamily="Verdana, Arial, Helvetica, sans-serif";
  _completeDiv.style.fontSize="12px";
  _completeDiv.style.lineHeight="16px";
  _completeDiv.style.backgroundImage="url(/images/cross_hatch_back.gif)";
  _completeDiv.style.border="#333333 1px solid";
  _completeDiv.style.zIndex="3";
  _completeDiv.style.padding="0 3px 0 0";
  _completeDiv.align = 'right';
  _completeDiv.style.visibility="hidden";
  _completeDiv.style.position="absolute";
  _completeDiv.style.backgroundColor="#C3D9FE";
  document.body.appendChild(_completeDiv);
   mainLoop();
}
onkey = function(id, req_type){
   if(arguments[2] != undefined) { arg2 = arguments[2]; }
   _inputField = document.getElementById(id); 
   if(id != 'my_zip'){
      _completeDiv = null;
      install();
      setCompleteDivSize();
   } else {
      _completeDiv = document.getElementById('my_zip_feedback');
      _completeDiv.style.backgroundImage="url(/images/cross_hatch_back.gif)";
      _completeDiv.style.backgroundRepeat="repeat";
      //_completeDiv.style.height="32px";
      _completeDiv.style.border="#333333 1px solid";
      _completeDiv.style.visibility="hidden";
   }
   _new_field_value = _inputField.value;
   if(arguments[3] != undefined) { changed=true;}
   type = req_type;
}

function setOldNew(){
   _old_field_value = _new_field_value;
}

function recalculateTimeout(Mb){
  var H=100;
  for(var o=1; o<=(Mb-2)/2; o++){
    H=H*2
  }
  H=H+50;
  return H
}

function cacheResults(is,ds){
  _resultCache[is]=ds;
}
mainLoop = function() 
{
   var val= '';
   if(_old_field_value != _new_field_value || changed)
   {
      val = '&search=' + _new_field_value + '&type=' + type;
      if(arg2 != '') {val = val + '&arg2=' + arg2;}
      if(changed) {val = val+'&true=1';}
      var cache = _resultCache[val];  //see if previous search was in cache
      if(cache){
         //found in cache
         send_done(val, cache);
      }
      else{
         _timeoutAdjustment++;
         send_search(val); 
      }
      changed = false;
   }
   setOldNew();
   setTimeout("mainLoop()",recalculateTimeout(_timeoutAdjustment));
   return true;
}

send_done = function(is,ds)
{
   if(_timeoutAdjustment>0){
      _timeoutAdjustment--;
   }
   var lc=(new Date()).getTime();
   cacheResults(is,ds);

   var div = _completeDiv;
   if(ds != '')
   {
      //div.style.height = '16px';
      div.innerHTML = ds;
      div.style.visibility='visible';
   }
   else
   {
      //div.style.height = '0px';
      div.innerHTML = '';
      div.style.visibility='hidden';
   }
}

send_search = function(val)
{
var xmlhttp=false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
// JScript gives us Conditional compilation, we can cope with old IE versions.
// and security blocked creation of the objects.
  try {           
  xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {   
   try {          
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
   } catch (E) {  
    xmlhttp = false;
   }              
  }               
@end @*/
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  xmlhttp = new XMLHttpRequest();
}
if(xmlhttp.overrideMimeType)
{
   xmlhttp.overrideMimeType('text/xml');
}
   _timeoutAdjustment--;
   var fragment_url = '/includes/search_process_xml.php?searching=true' + val;
   xmlhttp.open("GET", fragment_url, true);
   xmlhttp.onreadystatechange = function() {
      if (xmlhttp.readyState == 4){
         if(xmlhttp.status == 200){
            send_done(val, xmlhttp.responseText);
         }
         else{
            send_done(val, '');
         }
      }
   }
   xmlhttp.send(null);
}

function calculateOffsetLeft(r){
  return Ya(r,"offsetLeft")
}
function calculateOffsetTop(r){
  return Ya(r,"offsetTop")
}
function Ya(r,attr){
  var kb=0;
  while(r){
    kb+=r[attr]; 
    r=r.offsetParent
  }
  return kb
}
function calculateWidth(){
  if(navigator&&navigator.userAgent.toLowerCase().indexOf("msie")==-1){
    return _inputField.offsetWidth-2
  }else{
    return _inputField.offsetWidth
  }
}
