var SELECTED_BACK_GROUND_COLOR = "#FDFDB3";
function MouseOverEntry(objDiv)
{
	objDiv.style.backgroundColor = SELECTED_BACK_GROUND_COLOR;
	objDiv.style.cursor = "hand";
}
function MouseOutEntry(objDiv)
{
	objDiv.style.backgroundColor = "WHITE";
	objDiv.style.cursor = "hand";
}
var CURRENT_AUTO_COMPLETE_OBJECT = null;
var AUTO_COMPLETE_COUNTS = 0;
function AutoComplete(strTextID  , strResultDivID , strFrameID , strBackGroundURL )
{
	AUTO_COMPLETE_COUNTS++;
	var OBJECT_ID = AUTO_COMPLETE_COUNTS;
	var LEFT_ARROW_KEY = 37;
	var RIGHT_ARROW_KEY = 39;
	var DOWN_ARROOW_KEY = 40;
	var UP_ARROW_KEY = 38;
	var SHIFT_KEY = 16;
	var HOME_KEY = 36;
	var END_KEY = 35;
	var ENTER_KEY = 13;
	var ESCAPE_KEY = 27;
	var CONTROL_KEY = 17;
	var ALT_KEY = 18;
	var CAPS_LOCK_KEY = 20;
	var PAGE_UP_KEY = 33;
	var PAGE_DOWN_KEY = 34;
	var LEFT_MOUSE_BUTTON_KEY = 1;
	var AUTO_COMPLETE_TEXT_ELEMENT = null;
	var PAGE_SIZE = 10;
	var CURRENT_PAGE_INDEX = 0;
	var TOTAL_ENTRIES = 0;
	var TOTAL_SHOWN_ENTRIES = 0;
	var LAST_RETRIEVED_NODES = null;
	var PAGE_COUNT = 0;
	var AUTO_COMPLETE_RESULT_DIV = document.getElementById(strResultDivID);
	var AUTO_COMPLETE_FRAME = document.getElementById(strFrameID);
	var AUTO_COMPLETE_PAGE_UP_DIV = null;
	var AUTO_COMPLETE_PAGE_DOWN_DIV = null;
	var AUTO_COMPLETE_BACK_GROUND_URL = strBackGroundURL;
	var AUTO_COMPLETE_REQUEST = null;
	var ns4=document.layers?1:0;
	var ie4=document.all;
	var ns6=document.getElementById&&!document.all?1:0
	var AUTO_COMPLETE_INDEX = -1;
	var CURRENT_AJAX_REQUESTS = 0;
	var SELF = this;
	SetTextBoxID(strTextID);
	SetResultDivID(strResultDivID);
	function DocumentKeypress(obj)
	{
		CURRENT_AUTO_COMPLETE_OBJECT = SELF;
		var KeyCode = 0;
		if (ns4)
		{
			document.captureEvents(Event.KEYPRESS);
		}
		if( ns4 || ns6 )
		{
			KeyCode = parseInt(  obj.which );
		}
		else
		{
			KeyCode = parseInt(  event.keyCode );
		}
		LAST_VALUE_IN_TEXT_BOX = AUTO_COMPLETE_TEXT_ELEMENT.value;
		var nIndex = 0 ;
		if( AUTO_COMPLETE_TEXT_ELEMENT != null )
		{
			AUTO_COMPLETE_TEXT_ELEMENT.CustomAutoCompleteObject = SELF;
			switch( KeyCode )
			{
				case 0:
				case RIGHT_ARROW_KEY:
				case LEFT_ARROW_KEY:
				case CONTROL_KEY:
				case ALT_KEY:
				case CAPS_LOCK_KEY:
				case SHIFT_KEY:
				case HOME_KEY:
				case END_KEY:
					break;
				case PAGE_UP_KEY:
					SELF.ScrollUp();
					break;
				case PAGE_DOWN_KEY:
					SELF.ScrollDown();
					break;
				case UP_ARROW_KEY:
					if( AUTO_COMPLETE_RESULT_DIV.style.display == "" )
					{
						if( AUTO_COMPLETE_INDEX <= 0 )
						{
							AUTO_COMPLETE_INDEX = PAGE_SIZE - 1;
							var nPageIndex = CURRENT_PAGE_INDEX - 1;
							if( nPageIndex < 0 )
							{
								nPageIndex = PAGE_COUNT - 1;
							}
							if( nPageIndex != CURRENT_PAGE_INDEX )
							{
								Search( nPageIndex , PAGE_SIZE );
							}
						}
						else
						{
							AUTO_COMPLETE_INDEX--;
						}
						ShowEntries( LAST_RETRIEVED_NODES );
					}
					break;
				case DOWN_ARROOW_KEY:
					if( AUTO_COMPLETE_RESULT_DIV.style.display == "" )
					{
						if( AUTO_COMPLETE_INDEX >= TOTAL_SHOWN_ENTRIES -1  )
						{
							AUTO_COMPLETE_INDEX = 0;
							var nPageIndex = CURRENT_PAGE_INDEX + 1;
							if( nPageIndex > PAGE_COUNT - 1)
							{
								nPageIndex = 0;
							}
							if( nPageIndex != CURRENT_PAGE_INDEX )
							{
								Search( nPageIndex , PAGE_SIZE );
							}
						}
						else
						{
							AUTO_COMPLETE_INDEX++;
						}
						ShowEntries( LAST_RETRIEVED_NODES );
					}					
					break;
				case ESCAPE_KEY:
				case ENTER_KEY:
					SelectCurrentKeyword(); 
					break; 
				default:
					AUTO_COMPLETE_INDEX = 0;
					Search( 0 , PAGE_SIZE );
					break;
			}
		}
		return false;
	}
	function SelectCurrentKeyword()
	{
		if( LAST_RETRIEVED_NODES != null && AUTO_COMPLETE_RESULT_DIV.style.display == "")
		{
			if( LAST_RETRIEVED_NODES.length > 0 )
			{
				if( AUTO_COMPLETE_INDEX >= 0 && AUTO_COMPLETE_INDEX <= LAST_RETRIEVED_NODES.length - 1 )
				{
					AUTO_COMPLETE_TEXT_ELEMENT.value = LAST_RETRIEVED_NODES[AUTO_COMPLETE_INDEX].childNodes[0].nodeValue;  
				}
			}
		}
		if( AUTO_COMPLETE_RESULT_DIV.style.display == "" )
		{
			AUTO_COMPLETE_RESULT_DIV.style.display = "none";
			AUTO_COMPLETE_FRAME.style.display = "none";
			
		}
	}
	function Search(nPageIndex , nPageSize)
	{
		var strKeyword = AUTO_COMPLETE_TEXT_ELEMENT.value.replace(" " , "" );
		if( strKeyword != "" && CURRENT_AJAX_REQUESTS <= 0)
		{
			CURRENT_AJAX_REQUESTS = 1;
			CURRENT_PAGE_INDEX = nPageIndex;
			PAGE_SIZE = nPageSize;
			AUTO_COMPLETE_REQUEST =  null;
			AUTO_COMPLETE_REQUEST = new AJAXInteraction( AUTO_COMPLETE_BACK_GROUND_URL + "?Keyword=" + AUTO_COMPLETE_TEXT_ELEMENT.value + "&PageIndex=" + CURRENT_PAGE_INDEX + "&PageSize=" + PAGE_SIZE  , OnRecieveResponse );
			AUTO_COMPLETE_REQUEST.doGet();
		}
		else
		{
			AUTO_COMPLETE_RESULT_DIV.style.display = "none";
			AUTO_COMPLETE_FRAME.style.display = "none";
		}
	}
	this.IsDataShown = function()
	{
		try
		{
			if( AUTO_COMPLETE_RESULT_DIV.style.display == "" )
			{
				return true;
			}
			else
			{
				return false;
			}
		}
		catch(e)
		{
			return false;
		}
	}
	function OnRecieveResponse(strURL , objRequest)
	{
		try
		{
		    CURRENT_AJAX_REQUESTS = 0;
		    var strKeyword = "";
		    var ArrPortions = strURL.split("?")[1].split("&");
		    var i = 0 ;
		    for( i = 0 ; i < ArrPortions.length ; i++ )
		    {
				var ArrValues = ArrPortions[i].split("=");
				if( ArrValues.length > 1 )
				{
					if( ArrValues[0].toUpperCase() == "KEYWORD"  )
					{
						strKeyword = ArrValues[1];
						break;
					}
				}
		    } 
		    if( strKeyword.toUpperCase() != AUTO_COMPLETE_TEXT_ELEMENT.value.toUpperCase() )
		    {
				AUTO_COMPLETE_INDEX = 0;
				Search( 0 , PAGE_SIZE );
				return false;
		    }
			if( objRequest.responseText != "")
			{
				var objXMLDoc = new XMLDocument();
				objXMLDoc.LoadXML(objRequest.responseText);
				var ArrCountNodes = objXMLDoc.GetNodes("Count");
				TOTAL_ENTRIES = parseInt( ArrCountNodes[0].childNodes[0].nodeValue ); 

				var ArrResult = objXMLDoc.GetNodes("Word");
				TOTAL_SHOWN_ENTRIES = ArrResult.length;
				LAST_RETRIEVED_NODES = ArrResult;
				
				PAGE_COUNT = parseInt( TOTAL_ENTRIES / PAGE_SIZE );
				if( TOTAL_ENTRIES % PAGE_SIZE > 0 )
				{
					PAGE_COUNT++;
				}
				ShowEntries( ArrResult );
				if( ArrResult.length <= 0 )
				{
					AUTO_COMPLETE_RESULT_DIV.style.display = "none";
					AUTO_COMPLETE_FRAME.style.display = "none";
				}
				else
				{
					AUTO_COMPLETE_RESULT_DIV.style.display = "";
					AUTO_COMPLETE_FRAME.style.display = "";
				}
			}
			else
			{
				AUTO_COMPLETE_RESULT_DIV.style.display = "none";
				AUTO_COMPLETE_FRAME.style.display = "none";
			}	
		}
		catch(e){}
	}
	function ShowEntries(ArrNodes)
	{
		var strHTML = "";
		AUTO_COMPLETE_RESULT_DIV.style.display = "none";
		AUTO_COMPLETE_FRAME.style.display = "none";
		
		if( CURRENT_PAGE_INDEX > 0 )
		{
			strHTML += "<a href=\"javascript:document.getElementById('"+ AUTO_COMPLETE_TEXT_ELEMENT.id +"').CustomAutoCompleteObject.ScrollUp();\" style='TEXT-DECORATION: NONE'><div align='center' style='COLOR: black;BACKGROUND-COLOR: #F8F8F8;font-family:tahoma;'><img src='images/auto_top_arrw.gif' border='0'/>\</div></a>";
		}		
		var i=0;
		for(i=0 ; i<ArrNodes.length ; i++)
		{
			var strColor = "white";
			if( i == AUTO_COMPLETE_INDEX || (AUTO_COMPLETE_INDEX <= -1 && i == 0) )
			{
				strColor = SELECTED_BACK_GROUND_COLOR;
			}
			strHTML += "<a href=\"javascript:document.getElementById('"+ AUTO_COMPLETE_TEXT_ELEMENT.id +"').CustomAutoCompleteObject.SetLastKeyword("+ i +");\" style='TEXT-DECORATION: NONE'><div onmouseover='MouseOverEntry(this);' onmouseout='MouseOutEntry(this);' style=\"COLOR: black;BACKGROUND-COLOR: "+ strColor +";font-family:verdana;font-size:10pt;\">"+  ArrNodes[i].childNodes[0].nodeValue   +"</div></a>";
		}
		if( CURRENT_PAGE_INDEX < PAGE_COUNT - 1 )
		{
			strHTML += "<a href=\"javascript:document.getElementById('"+ AUTO_COMPLETE_TEXT_ELEMENT.id +"').CustomAutoCompleteObject.ScrollDown();\" style='TEXT-DECORATION: NONE'><div align='center' style='COLOR: black;BACKGROUND-COLOR: #F8F8F8;font-family:tahoma;'>\<img src='images/auto_down_arrw.gif' border='0'/></div></a>";
		}
		AUTO_COMPLETE_RESULT_DIV.innerHTML = strHTML;
		if( AUTO_COMPLETE_RESULT_DIV.innerHTML  != "" )
		{
			AUTO_COMPLETE_RESULT_DIV.style.display = "";
			AUTO_COMPLETE_FRAME.style.display = "";
		}
		else
		{
			AUTO_COMPLETE_RESULT_DIV.style.display = "none";
			AUTO_COMPLETE_FRAME.style.display = "none";
		}
	}
	function SetTextBoxID(strTextID)
	{
		AUTO_COMPLETE_TEXT_ELEMENT = document.getElementById(strTextID);
		AUTO_COMPLETE_TEXT_ELEMENT.onkeyup = DocumentKeypress;
		LAST_VALUE_IN_TEXT_BOX = AUTO_COMPLETE_TEXT_ELEMENT.value;
	}
	function SetResultDivID(strResultDivID)
	{
		AUTO_COMPLETE_RESULT_DIV = document.getElementById(strResultDivID);	
		AUTO_COMPLETE_RESULT_DIV.onmouseover = function(){ AUTO_COMPLETE_TEXT_ELEMENT.PreventHidingAutoComplete = true; }
		AUTO_COMPLETE_RESULT_DIV.onmouseout = function(){ AUTO_COMPLETE_TEXT_ELEMENT.focus();AUTO_COMPLETE_TEXT_ELEMENT.PreventHidingAutoComplete = false; }
		AUTO_COMPLETE_TEXT_ELEMENT.onblur = function(obj , p1 , p2 , p3 , p4 , p5 , p6)
		{
			if( AUTO_COMPLETE_TEXT_ELEMENT.PreventHidingAutoComplete != true )
			{
				if( AUTO_COMPLETE_RESULT_DIV != null ) AUTO_COMPLETE_RESULT_DIV.style.display = "none";
				if( AUTO_COMPLETE_FRAME != null ) AUTO_COMPLETE_FRAME.style.display = "none";
			}
		};
	}
	this.ScrollDown =  function()
	{
		var nPrevPageIndex = CURRENT_PAGE_INDEX;
		var nPageIndex =  CURRENT_PAGE_INDEX + 1 ;
		if( nPageIndex >= PAGE_COUNT )
		{
			nPageIndex = PAGE_COUNT - 1;
		}
		if( nPageIndex != nPrevPageIndex )
		{
			Search( nPageIndex , PAGE_SIZE );
		}
		AUTO_COMPLETE_TEXT_ELEMENT.focus();
	}
	this.SetLastKeyword = function(nIndex)
	{
		var strValue = LAST_RETRIEVED_NODES[nIndex].childNodes[0].nodeValue;
		AUTO_COMPLETE_RESULT_DIV.style.display = "none";
		AUTO_COMPLETE_FRAME.style.display = "none";
		AUTO_COMPLETE_TEXT_ELEMENT.value = strValue;
		AUTO_COMPLETE_TEXT_ELEMENT.focus();
	}
	this.ScrollUp = function()
	{
		var nPrevPageIndex = CURRENT_PAGE_INDEX;
		var nPageIndex =  CURRENT_PAGE_INDEX - 1 ;
		if( nPageIndex < 0 )
		{
			nPageIndex = 0;
		}
		if( nPageIndex != nPrevPageIndex )
		{
			Search( nPageIndex , PAGE_SIZE );
		}		
		AUTO_COMPLETE_TEXT_ELEMENT.focus();
	}	
}