
var displayElement;
var inputElement;
var curInput;
var callId;
var _request;
var minchars = 4;
var iHigh = 0;
var indicatorElement;
var isOverBox = 0;

function setCaretToEnd(ctrl) {
	if(ctrl.setSelectionRange) {
		ctrl.setSelectionRange(ctrl.value.length, ctrl.value.length);
	}
	else if (ctrl.createTextRange) {
		var range = ctrl.createTextRange();
		range.moveStart('character', ctrl.value.length);
		range.select();
	}
}

// Initializes global variables and session state.
function pageLoad()
{
    displayElement = $get("as_testinput");
    inputElement = $get("testinput_xml");
    callId = 0;
    curInput = '';
    indicatorElement = $get("ajax-spinner");
}

function pageUnload()
{
  displayElement = null;
  inputElement = null;
  indicatorElement = null;
}

///////////////////////////////////////////////////////////////////////////////////////
function onMouseOver(ev)
{
 isOverBox = 1;
 clearHighlight();
}

///////////////////////////////////////////////////////////////////////////////////////
function onMouseOut(ev)
{
 isOverBox = 0;
}
///////////////////////////////////////////////////////////////////////////////////////
function onBlur(ev)
{
  if (isOverBox == 0){
    if (displayElement != null){
       displayElement.style.display = 'none';       
       displayElement.innerHTML = '';
    }
  }
}

///////////////////////////////////////////////////////////////////////////////////////
function onKeyUp(ev)
{
        var _ev = (window.event) ? window.event : ev;
	var key = (window.event) ? window.event.keyCode : ev.keyCode;

	var ARRUP = 38;
	var ARRDN = 40;
	var RETURN = 13;
	var TAB = 9;
	var ESC = 27;
	
	var bubble = 1;
	if ((inputElement == null)||(displayElement == null)) {
          return false;
        };
	switch(key)
	{
		case ARRUP:
			changeHighlight(key);
			bubble = 0;
			setCaretToEnd(inputElement);
			break;

		case ARRDN:
			changeHighlight(key);
			bubble = 0;
			break;
		
		case RETURN:
		        if ((displayElement.style.display == 'none')||(iHigh == 1))
		        {
                           document.forms['searchForm'].submit();
		        }
                        else {
				h = setHighlightedValue();
				if ((h == "undefined") || (h == undefined))
				{
	                           document.forms['searchForm'].submit();
        	                }
                	        else if (h != '') 
	                        {
			        //alert(h);
                	          window.location.href = h;
	                        //  _ev.cancelBubble = true;
			        //alert("moved!");
                	        }
                	}
			bubble = 0;
			break;

		case ESC:
                        inputElement.value = '';
                        displayElement.style.display = 'none';       
                        displayElement.innerHTML = '';
			break;

		default:
                        if (inputElement != null){
                           getSuggestions(inputElement.value);
                        }   
	}

	return bubble;
};


///////////////////////////////////////////////////////////////////////////////////////
function changeHighlight(key)
{	
	var list = $get("as_ul");
	if (!list)
		return false;
	
	var n;

	if (key == 40)
		n = iHigh + 1;
	else if (key == 38)
		n = iHigh - 1;
	
	
	if (n > list.childNodes.length)
		n = list.childNodes.length;
	if (n < 1)
		n = 1;
	
	list = null;
	setHighlight(n);
};


///////////////////////////////////////////////////////////////////////////////////////
function setHighlight(n)
{
	var list = $get("as_ul");
	if (!list)
		return false;
	
	if (iHigh > 0)
		clearHighlight();
	
	iHigh = Number(n);
	
	list.childNodes[iHigh-1].className = "as_highlight";

	list = null;

	//this.killTimeout();
};


///////////////////////////////////////////////////////////////////////////////////////
function clearHighlight()
{
	var list = $get("as_ul");
	if (!list)
		return false;
	
	if (iHigh > 0)
	{
		list.childNodes[iHigh-1].className = "";
		iHigh = 0;
	}
	list = null;
};

///////////////////////////////////////////////////////////////////////////////////////
function setHighlightedValue()
{
	if (iHigh > 0)
	{
	var list = $get("as_ul");
	if (!list)
                 return false;
        h = list.childNodes[iHigh-1].getElementsByTagName("a")[0].getAttribute("href");
        return h;
	}
	list = null;
};

///////////////////////////////////////////////////////////////////////////////////////
function getSuggestions(val)
{
	
	// if input stays the same, do nothing
	//
	s = val.trim();
	if (s == curInput)
		return 0;
	
	curInput = s;
	
	
	// input length is less than the min required to trigger a request
	// do nothing
	//
	if (s.length < minchars)
	{
        displayElement.style.display='none';
        displayElement.innerHTML = '';
		return 0;
	}

        GetSearchResults(s);

	return false;
};

///////////////////////////////////////////////////////////////////////////////////////
function GetSearchResults(key) 
{
      indicatorElement.style.display = 'block';       

//    s = key.trim();
//    if (s.length > minchars) 
      {
        callId++;
        s = callId + '~~' + s;
        if (_request != null)
        {
          var executor = _request.get_executor();
          if (executor.get_started())
          {
            executor.abort();
          }
       }
       _request = DardenDynamicSearch.DynSearch._staticInstance.GetSearchResults(s,OnSucceeded,OnFailed);
       //DardenDynamicSearch.DynSearch.GetSearchResults(s,OnSucceeded,OnFailed);
    }
//    else {
//        displayElement.style.display='none';
//        displayElement.innerHTML = '';
//    }
}

///////////////////////////////////////////////////////////////////////////////////////
// Callback function invoked on successful 
// completion of the page method.
function OnSucceeded(result, userContext, methodName) 
{
    if (methodName == "GetSearchResults")
    {
      indicatorElement.style.display = 'none';       
      iHigh = 0;
      if (inputElement.value.trim() == ''){
              displayElement.style.display='none';       
              displayElement.innerHTML = '';
              return;
      }
        i = result.indexOf('~~');
        if (i > 0) {
          s = result.substring(0,i);
          if (s = callId) {
            s = result.substring(i+2);
            if (s == 'nihil'){
              displayElement.style.display='none';       
              displayElement.innerHTML = '';
            }
            else {
//              displayElement.innerHTML = "<!--[if lte IE 7]><iframe src=\"\"></iframe><![endif]-->" + s;
              displayElement.innerHTML = "<!--[if IE]><iframe src=\"javascript:false;\"></iframe><![endif]--> " + s;
//              displayElement.innerHTML = s;
              displayElement.style.display='block';
              iHigh = 1; //set first line selected
            }
          }
        }
    }
}

// Callback function invoked on failure 
// of the page method.
function OnFailed(error, userContext, methodName) 
{
  indicatorElement.style.display = 'none';       
/*
  if (!_request.get_executor().get_aborted())
  {
    if(error !== null) 
    {
        displayElement.innerHTML = "An error occurred: " + 
            error.get_message();
        displayElement.style.display='block';
    }
  }
*/
}

if (typeof(Sys) !== "undefined") Sys.Application.notifyScriptLoaded();

