 function StartAjaxSearch(_TextBoxId) 
    {
        var objTextBox = document.getElementById(_TextBoxId);
        
        var handler = objTextBox.KeyDownHandler;
				
        if (handler.LastContent() != objTextBox.value)
        {
            
            handler.LastContent(objTextBox.value);
            
            if (objTextBox.value != '') 
            {
                var objUP = handler.GetUpdateProgress();
				objUP.style.display = 'block';
                requestPageContent('/Default.aspx?id=' + handler.GetRequestPageId() + '&q=' + objTextBox.value, _TextBoxId)
                                
            	handler.SelectedIndex(handler.StartIndex());
            }
			else
			{
			    var objMD = handler.GetMainDiv();
			    objMD.style.display = 'none';
			}
        }
	}
    
    
    function hRow(TextBoxId, Index)
    {
        objTextBox = document.getElementById(TextBoxId);
        var handler = objTextBox.KeyDownHandler;
        
        handler.SelectedIndex(Index);
        handler.HighliteRow();
    }
    
    
    function lRow(TextBoxId, Index)
    {
        objTextBox = document.getElementById(TextBoxId);
        var handler = objTextBox.KeyDownHandler;
        
        //handler.SelectedIndex(Index);
        handler.LowliteRow();
    }
    
    
    
    function objKeydownHandler(TextBoxId,RequestPageId, InitStartIndex)
    {
        objTextBox = document.getElementById(TextBoxId);
		objUpdateProgress = document.getElementById('UpdateProgress_' + TextBoxId);
		objDivList = document.getElementById('Content_' + TextBoxId);
        
        var objTimer;
        
        var _StartIndex = InitStartIndex;
        var _SelectedIndex = InitStartIndex;
        var _LastContent = '';
		var _RequestPageId = RequestPageId;
        
        this.Down = function () {
            if (document.getElementById('row_' +  TextBoxId + '_' + Number(_SelectedIndex+1)) != null)
            {
            
                if (_SelectedIndex > 0)
                {
                    this.LowliteRow();
                }
                _SelectedIndex += 1;
                this.HighliteRow();
            }
       }
        
        this.Up = function () {
            if (_SelectedIndex > _StartIndex)
            {   
                this.LowliteRow();
                if (_SelectedIndex-1 > 0)
                {
                    _SelectedIndex -= 1;
                    this.HighliteRow();
                }
                else
                {
                    _SelectedIndex = _StartIndex;
                }
            }
            else
            {
                if (_StartIndex == 0)
                {
                    this.LowliteRow();
                }
                _SelectedIndex = _StartIndex;
            }
        }
        
        
        this.GetUpdateProgress = function () {
			return objUpdateProgress;
		}
		
		 this.GetMainDiv = function () {
			return objDivList;
		}
		
		 this.GetRequestPageId = function () {
			return _RequestPageId;
		}
		
		 this.Timer = function () {
			return objTimer;
		}
		
		this.StartIndex = function (_value) {
			if (_value != null)
				_StartIndex = _value;
			return _StartIndex;
		}
		
		
		this.SelectedIndex = function (_value) {
			if (_value != null)
				_SelectedIndex = _value;
			return _SelectedIndex;
		}
		
		this.LastContent = function (_value) {
		    if (_value != null)
				_LastContent = _value;
			return _LastContent;
		}
	   
        this.HighliteRow = function()
        {
            rowElement = document.getElementById('row_' + TextBoxId + '_' +  + _SelectedIndex);
            if (rowElement != null)
            {
                rowElement.style.backgroundColor = '#999999';
            }
        }
        
        this.LowliteRow = function()
        {
            rowElement = document.getElementById('row_' + TextBoxId + '_' +  + _SelectedIndex);
            rowElement.style.backgroundColor = '#DDDDDD';
        }
      
        objTextBox.KeyDownHandler = this;
    }
    
    function fireEvent(element,eventname){
    
    if (document.createEventObject){
        // dispatch for IE
        
        var evt = document.createEventObject();
        
        return element.fireEvent('on'+eventname,evt)
        
    }
    else{
        // dispatch for firefox + others
        var evt = document.createEvent("HTMLEvents");
        evt.initEvent(eventname, true, true ); // event type,bubbling,cancelable
        return !element.dispatchEvent(evt);
    }
}

function CancelBubbel(evt)
{
	if (evt.stopPropagation)
	{
		evt.returnValue = false;
		evt.cancel = true;
		evt.stopPropagation();
		evt.preventDefault(); 
	}
	else
	{
	        evt.cancelBubble = true;
	        evt.returnValue = false;			       
	}
}

    
    
    function OnBlurHide(TextBoxId)
    {
       var objTextBox = document.getElementById(TextBoxId)
       var handler = objTextBox.KeyDownHandler;
       handler.LastContent('');
       
	   var objDL = handler.GetMainDiv();
	   objDL.style.display = 'none';
				
	   var objUP = handler.GetUpdateProgress();
	   objUP.style.display = 'none';
    }
    
    function OnBlurAction(objTextBox)
    {
        blurTimer = setTimeout("OnBlurHide('" + objTextBox.id + "')",200);
    }
    
    function CheckKeyCode(evt)
    {
        
        var key = evt.keyCode;
        
        var objTextBox 
        if (evt.target) objTextBox = evt.target;
	    else if (evt.srcElement) objTextBox = evt.srcElement;

		var handler = objTextBox.KeyDownHandler;
		
		var TextBoxId = objTextBox.id;

            switch(key)
            {
                case 9:             //Tab
                    if (document.getElementById('row_' +  TextBoxId + '_' + handler.SelectedIndex())!= null)
                    {
                        CancelBubbel(evt);
                        var trElement = document.getElementById('row_' +  TextBoxId + '_' + handler.SelectedIndex());
                        var t1 = fireEvent(trElement,'click');
                        
                    }
                    break;
                    
                case 13:            //Enter
                        var trElement = document.getElementById('row_' +  TextBoxId + '_' + handler.SelectedIndex());
                        var t1 = fireEvent(trElement,'click');
                        OnBlurAction(objTextBox);
                    break;    
                    
	            case 38:            //up arrow
	                handler.Up();
	                break			
                    
	            case 40:            //down arrow
	                
	                handler.Down();            
                    break			
                          
                 default:
                    clearTimeout(handler.objTimer);
                    
                    handler.objTimer = setTimeout("StartAjaxSearch('" + TextBoxId + "')",700);
                    break;
            }
         
        }


function requestPageContent(url, id) 
{
    element2 = document.getElementById('Content_' + id);
	element3 = document.getElementById('UpdateProgress_' + id);
		
    var http_request = initXMLHttpRequestObject();
    if (http_request != null)
    {
        
        http_request.open('GET', url, true);
        //http_request.open('GET', url, false);
        http_request.setRequestHeader( "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" ); //Don't cache
        
        http_request.onreadystatechange = function () 
        {
            if (http_request.readyState == 4) {
                if (http_request.status == 200) {
                    if (http_request.responseText != '')
					{
					    element2.innerHTML = http_request.responseText;
						element2.style.display = 'block';	 														
					}
					else
					{
						element2.innerHTML = '';
						element2.style.display = 'none';
					}
					element3.style.display = 'none';
                } 
                else 
                {
                    return null;
                }
                http_request = null;
            }
        }
        http_request.send(null);
    }
}

function initXMLHttpRequestObject()
{
    var XMLHttpRequestObject = null;
    if (window.XMLHttpRequest)

    { // Mozilla, Safari,...  And IE 7.0
        XMLHttpRequestObject = new XMLHttpRequest();
        if (XMLHttpRequestObject.overrideMimeType)
        {
            XMLHttpRequestObject.overrideMimeType('text/xml');
        }
    }
    else if (window.ActiveXObject)
    { // IE
        try
        {
            XMLHttpRequestObject = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            try
            {
                XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (e)
            {

            }
        }
    }
return XMLHttpRequestObject;
}


