var ACComp_uri;
var ACComp_originalPopupTop;
var ACComp_inputField;
var ACComp_bFirstTime;
var ACComp_popup;
var ACComp_companyHidden;
var ACComp_oCompanyId;
var ACComp_searchType;
var ACComp_envType;
var ACComp_current = 0;

function TopNav_CompanyAutoCompleteInit(strEnvType, strType)
{
	ACComp_companyHidden = null;
	ACComp_oCompanyId = null;
	ACComp_searchType = strType;
	ACComp_envType = strEnvType;
	ACComp_popup = document.getElementById('topnav-company-popup');
	ACComp_uri = '/autocomplete?type='+strType+'&company=';
}

function CompanyAutoCompleteInit(strType, strCoId, event)
{ 
	ACComp_searchType = strType;
	if (document.getElementById(strCoId) != null)
		ACComp_oCompanyId = document.getElementById(strCoId);

	if (document.getElementById('company-popup') != null)
		ACComp_popup = document.getElementById('company-popup');

	ACComp_uri = '/autocomplete?type='+strType+'&company=';
}

function processCompany(obj, searchStr, event)
{
	//222=single quote; 8=backspace
	if((event.keyCode<48 || event.keyCode>90) && event.keyCode!=222 && event.keyCode!=8)
		return;

	processCompanyRequest(obj, searchStr);
}

function ACComp_hidePopup()
{
	ACComp_popup.style.visibility = 'hidden';
}

function InitFieldsValues(obj)
{
	obj.value = '';
	if (ACComp_oCompanyId != null)
		ACComp_oCompanyId.value = '0';
}

function processCompanyRequest(obj, searchStr)
{
	ACComp_inputField = obj;
	ACComp_bFirstTime = true;
	//ACComp_removeListener(ACComp_inputField, 'keydown', ACComp_start);
	$(ACComp_inputField).unbind('keydown',false);
	if (ACComp_oCompanyId != null) {
		ACComp_companyHidden = ACComp_oCompanyId;
		ACComp_companyHidden.value = '0';
	}
	timeout = window.setTimeout('getCompanyRequest("'+searchStr+'")', 400);
}

function getCompanyRequest(searchStr)
{
	//var searchStr = escape(ACComp_inputField.value);
	if (ACComp_bFirstTime)
	{
		ACComp_bFirstTime = false;
    	ACComp_Request(ACComp_uri + searchStr);
		ACComp_addKeyListener(ACComp_inputField, ACComp_start);
	}
}

function ACComp_Request(uri)
{
	var request = false;
	if (window.XMLHttpRequest)
	    request = new XMLHttpRequest();

    if(request && request.readyState < 4)
        request.abort();

    if(!window.XMLHttpRequest)
        request = new ActiveXObject("Microsoft.XMLHTTP");
	
    request.onreadystatechange = function() {processCoReqChange(request);};
    request.open("GET", uri, true);
    request.send(null);
}

function processCoReqChange(request)
{
	if(request.readyState == 4) {
      	ACComp_popup.innerHTML = request.responseText;
        ACComp_post();
	}
}

function ACComp_start(e) {
  //up arrow
  if(e.keyCode == 38)
  {
    if(ACComp_current > 0)
    {
      options[ACComp_current].className = '';
      ACComp_current--;
      options[ACComp_current].className = 'selected';
    }
  }
  //down arrow
  else if(e.keyCode == 40)
  {
    if(ACComp_current < options.length - 1)
    {
      options[ACComp_current].className = '';
      ACComp_current++;
      options[ACComp_current].className = 'selected';
    }
  }
  //enter or tab
  else if(e.keyCode == 13 || e.keyCode == 9)
  {
	var re = /&amp;/g;
	if (typeof(options[ACComp_current]) != 'undefined')
    	ACComp_inputField.value = options[ACComp_current].innerHTML.replace(re, "&");
   	ACComp_buildOtherValues();

    ACComp_hidePopup();
    if (e.keyCode == 13) {
		try {
			ACComp_inputField.focus();
		}catch (err) {;}
	}

    ACComp_removeListener(ACComp_inputField, 'keydown', ACComp_start);
    event.returnValue = false;
  }
}

function ACComp_post()
{
    ACComp_current = 0;
    options = ACComp_popup.getElementsByTagName("li");
    values = ACComp_popup.getElementsByTagName("input");

    if(options.length > 1 || (options.length == 1 && options[0].innerHTML != ACComp_inputField.value))
    {
      ACComp_setPopupStyles();
      for(var i = 0; i < options.length; i++)
      {
        options[i].index = i;
        ACComp_addOptionHandlers(options[i]);
      }
      options[0].className = 'selected';
    }
    else {
      	ACComp_hidePopup();;
    }
}

function ACComp_setPopupStyles()
{
  var maxHeight = 200;

  ACComp_popup.style.left = (ACComp_inputField.offsetLeft) + 'px';
  ACComp_popup.style.top = (ACComp_originalPopupTop + ACComp_inputField.offsetHeight + 5) + 'px';

  if(ACComp_popup.offsetHeight < maxHeight)
    ACComp_popup.style.overflow = 'hidden';
  else  {
    ACComp_popup.style.height = maxHeight + 'px';
    ACComp_popup.style.overflowY = 'hidden';
  }
  ACComp_popup.scrollTop = 0;
  ACComp_popup.style.visibility = 'visible';
}

function ACComp_handleClick(e)
{
  ACComp_inputField.value = ACComp_eventElement(e).innerHTML;

  if (typeof(values[ACComp_current]) != 'undefined')
  {
	var re = /&amp;/g;
    ACComp_inputField.value = options[ACComp_current].innerHTML.replace(re, "&");
   	ACComp_buildOtherValues();

  	ACComp_hidePopup();
	try {
		ACComp_inputField.focus();
	}catch (err) {;}
  }

  ACComp_removeListener(ACComp_inputField, 'keydown', ACComp_start);
}

function ACComp_buildOtherValues()
{
	var iHiddenCompanyId = 0;
	if (typeof(values[ACComp_current]) != 'undefined')
	{
		iHiddenCompanyId = ACComp_popup.getElementsByTagName('INPUT')[ACComp_current].value;
		if (ACComp_companyHidden != null)
			ACComp_companyHidden.value = iHiddenCompanyId;

		if (ACComp_searchType == 'tnq') {
			ACComp_inputField.value = '';
			if (iHiddenCompanyId != 0) {
				var straValues = iHiddenCompanyId.split("|");
				HidePopupSlow('divCurrentQuoteInfo');
				if (document.getElementById('topnavQPId').value == '' && document.getElementById('topnavRFQId').value == '') {
					document.getElementById('topnavCurrentQuote').children[0].rows[1].style.display = 'inline';
					document.getElementById('contractChange').innerHTML = 'Change';
				}

				var qpId = straValues[0] == '' ? straValues[3] : straValues[0];
				document.getElementById('topnavQPId').value = straValues[0];
				document.getElementById('topnavRFQId').value = straValues[3];
				document.getElementById('topnavQPModeId').value = straValues[1];
				document.getElementById('topnavQPContractNumber').value = straValues[4];
				document.getElementById('contractNm').innerHTML = straValues[2];
				document.getElementById('contractRFQId').innerHTML = straValues[3] == '' ? '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' : straValues[3];
				document.getElementById('contractQPId').innerHTML = straValues[0] == '' ? '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' : straValues[0];
				
				processTopNavRequest(ACComp_envType, iUPDATE_TOP_NAV_CURRENT_QUOTE, qpId);

				if (document.getElementById('consoleType') != null && document.getElementById('consoleType').value == 'qpam')
				{
					if (document.getElementById('newQP').value == 'new')
						document.getElementById('TRselBidGroupIds').children[1].innerHTML = 'new';
					else
						document.getElementById('TRselBidGroupIds').children[1].innerHTML = straValues[4];
				}
			}
		}
	}
}

function ACComp_handleOver(e)
{
  options[ACComp_current].className = '';
  ACComp_current = ACComp_eventElement(e).index;
  options[ACComp_current].className = 'selected';
}

function ACComp_addOptionHandlers(option)
{
  ACComp_addListener(option, "click", ACComp_handleClick);
  ACComp_addListener(option, "mouseover", ACComp_handleOver);
}

/* Functions to handle browser incompatibilites */
function ACComp_eventElement(event)
{
	if (isMoz)
		return event.target;
	return event.srcElement;
}
function ACComp_addKeyListener(element, listener)
{
	if (element.addEventListener)
	    element.addEventListener("keydown", listener, false );
	else if (element.attachEvent)
	    element.attachEvent("onkeydown",listener);
}
function ACComp_addListener(element, type, listener)
{
	if (element.addEventListener)
	    element.addEventListener(type, listener, false );
	else if (element.attachEvent)
	    element.attachEvent('on' + type, listener);
}
function ACComp_removeListener(element, type, listener)
{
    if (element.detachEventListener)
	    element.detachEventListener(type, listener, false );
	else if (element.detachEvent)
	    element.detachEvent('on' + type, listener);
	//element.detachEvent('on' + type, listener);
}



