var keyIndex = -1;
var querySourceID = "";
var preValue = "";

function onKeyUp( source, evt )
{
	querySourceID = source.id;
	
	if( evt.keyCode == 38 || evt.keyCode == 40 )
	{			
		moveList( source, evt );			
	}
	else
	{
	    if( preValue != source.value )
	    {
		    findKeyList( source );
		    keyIndex = -1;
		    preValue = source.value;
		}
	}		
}

function onPaste( source )
{
	querySourceID = source.id;
	findKeyList( source );	
}

function findKeyList( source )
{
	var succ = createKeyList();
	if( succ )
	{					
		var divMain = document.getElementById("divList");
		divMain.style.width = source.style.width;	

		//document.getElementById("divList").style.left = source.offsetLeft + addLeft;
		
		var iLeft = posLib.getClientLeft(source) + posLib.getCanvasElement(source).clientLeft;//last
	
		//var iLeft = posLib.getClientLeft(source);
		divMain.style.left = iLeft;
		
		var iTop = posLib.getClientTop(source) + source.offsetHeight + posLib.getCanvasElement(source).clientTop;
		
		divMain.style.top = iTop;		
							
		divMain.style.display = "";
	}
	else
	{
		document.getElementById("divList").style.display = "none";
	}	
}

function hideList()
{
	document.getElementById("divList").style.display = "none";
	keyIndex = -1;
	activeRow();
}

function activeRow()
{
	var dg = document.getElementById("tableList");
	var rowCount = dg.rows.length;
	for( var i= 0; i< rowCount; i++ )
	{
		//dg.rows[i].cursor = "pointer";
		if( keyIndex != dg.rows[i].rowIndex )
		{
			dg.rows[i].style.backgroundColor="#fff";
			dg.rows[i].style.color="#797979";
			dg.rows[i].cells[0].style.color='#797979';
		}
		else
		{
			dg.rows[i].style.backgroundColor='#eee';//blue
			//dg.rows[i].style.color='#ffffff';
			dg.rows[i].style.color='#900000';
			dg.rows[i].cells[0].style.color='#900000';
		}
	}
}

function moveList( source, evt )
{
	if( document.getElementById("divList").style.display == "" )
	{
		var tableMain = document.getElementById("tableList");
		var count = tableMain.rows.length;
        
		if( evt.keyCode == 38 )
		{
			if( keyIndex < 1 )
			{
				keyIndex = count -1;
			}
			else
			{
				keyIndex = keyIndex -1;
			}
		}
		
		if( evt.keyCode == 40 )
		{
			if( keyIndex == count -1 )
			{
				keyIndex = 0;
			}
			else
			{
				keyIndex = keyIndex + 1;
			}
		}
		
		if( keyIndex < count )
		{
		    var strContent;
			if(document.all)
			{
			    strContent = tableMain.rows[keyIndex].cells[0].innerText;
			}
			else
			{
			    strContent = tableMain.rows[keyIndex].cells[0].textContent;
			}
			source.value = strContent;
		}
		activeRow();
	}
}


var selectRow = function(source)
{
	var dest = document.getElementById(querySourceID);
	
	var strContent;
	if(document.all)
	{
		strContent = source.srcElement.innerText;
	}
	else
	{
		strContent = source.target.textContent;
	}
	dest.value = strContent;
	
	var qButton = document.getElementById(querySourceID.replace("tbKeys","btnQuery"));
	if( qButton )
	{
		qButton.click();
	}
}

var active = function(id)
{
	return function()
	{
		keyIndex = id;					
		activeRow();
	}
}	

function createKeyList()
{
	var succ = false;
	var keys = document.getElementById(querySourceID).value;
	if( keys.length < 1 )
	{
		return succ;
	}
	
	var strXml = XmlHttpSend("GetData.aspx?ItemType=keyword&ItemText=" + escape( keys ) );

	var xmlDoc = CreateDocFromXmlString( strXml );
	var xmlNodeList = xmlDoc.getElementsByTagName( "Item" );
	
	var table = document.getElementById("tableList");
	//table.innerText = "";
	var rowCount = table.rows.length;
	for( var rowIndex = rowCount - 1; rowIndex >= 0; rowIndex -- )
	{
		table.deleteRow( rowIndex );
	}
	
	//var list = document.getElementById("ulList");
	//list.innerText = "";
	//var listItems = "";
	
	//var ul = document.createElement('ul');

	for(var i=0;i<xmlNodeList.length;i++)
	{
		var xmlNode = xmlNodeList.item(i);
		var strText = xmlNode.getAttribute("KeyWordText");
		
		//listItems += "<li><a href='#'>" + strText + "</a></li>";
		
		//var li = document.createElement('li');
		//li.innerHTML = "<a href='#'>" + escape(strText) + "</a>";
		//list.appendChild(li);

	 	
		var newTr = table.insertRow( -1 );
		
		var newTd = newTr.insertCell(-1);
		
		if( document.all )
		{
		    newTd.innerText= strText;
		}
		else
		{
		    newTd.textContent= strText;
		}
		
		
		newTr.style.backgroundColor="#fff";
		newTr.style.color="#797979";
		newTr.cells[0].style.color='#797979';
		newTd.style.cursor = "default";
		newTd.align="left";
		//newTd.style.width = "100%";
		
		//newTr.onmouseover="keyIndex=" + i + ";activeRow();";
		//newTr.onmouseout="activeRow();";
		//newTr.onmousedown="onListClick( this );";	
		
		//newTr.attachEvent("onmouseover", active(i));
		//newTr.attachEvent && newTr.attachEvent("onmouseover", active(i)) || newTr.addEventListener && newTr.addEventListener('mouseover',active(i),false);
		
		//newTr.attachEvent("onmouseout", activeRow);
		//newTr.attachEvent && newTr.attachEvent("onmouseout", activeRow) || newTr.addEventListener && newTr.addEventListener('mouseout',activeRow,false);
		
		//newTr.attachEvent("onmousedown", selectRow);
		//newTr.attachEvent && newTr.attachEvent("onmousedown", selectRow) || newTr.addEventListener && newTr.addEventListener('mousedown',selectRow,false);
		
		if( newTr.attachEvent )
		{
			newTr.attachEvent("onmouseover", active(i));
			newTr.attachEvent("onmouseout", activeRow);
			newTr.attachEvent("onmousedown", selectRow);		    
		}
		else if( newTr.addEventListener )
		{
			newTr.addEventListener('mouseover',active(i), false);
			newTr.addEventListener('mouseout',activeRow, false);
			newTr.addEventListener('mousedown',selectRow, false);
		}
		
		succ = true;				
	}
	//alert( table.innerHTML );
	//list.innerHtml = listItems;
	//alert( list.innerHtml );
	return succ;
}


function CreateDocFromXmlString(xml)
{
	var xmlDoc;
	
	if(window.ActiveXObject)
	{
		xmlDoc=new ActiveXObject("Msxml2.DOMDocument");
		xmlDoc.async=false;
		xmlDoc.loadXML(xml);
	}
	else
	{
		var oParser = new DOMParser();
		xmlDoc = oParser.parseFromString( xml,"text/xml");  
    }	
    //else if(document.implementation && document.implementation.createDocument) 
	//{ 
	//	xmlDoc = document.implementation.createDocument("","",null);
	//	xmlDoc.async=false;
	//	xmlDoc.load( xml ); 
    //}

	return xmlDoc;
}

function XmlHttpSend(url)
{
	//var xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
	var xmlHttp = createXMLHTTP();
	xmlHttp.open('GET',url,false); 
	xmlHttp.setRequestHeader('Content-Type','text/xml;charset=gb2312');
	//xmlhttp.overrideMimeType("text/html;charset=gb2312");
	xmlHttp.send( null );
	
	return xmlHttp.responseText;
}

function createXMLHTTP()
{ 
	if(window.XMLHttpRequest)
	{ 
		var XMLHttp=new window.XMLHttpRequest(); 
		//XMLHttp.overrideMimeType("text/xml"); 
		return XMLHttp; 
	}		
	else if(window.ActiveXObject)
	{ 
		var XMLHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
		return XMLHttp; 
	} 
}

var posLib = {
    getClientLeft:    function (el) {
      var r = el.getBoundingClientRect();
      return r.left - this.getBorderLeftWidth(this.getCanvasElement(el));
    },

    getClientTop:    function (el) {
      var r = el.getBoundingClientRect();
      return r.top - this.getBorderTopWidth(this.getCanvasElement(el));
    },

    getLeft:    function (el) {
      return this.getClientLeft(el) + this.getCanvasElement(el).scrollLeft;
    },

    getTop:    function (el) {
      return this.getClientTop(el) + this.getCanvasElement(el).scrollTop;
    },

    getInnerLeft:    function (el) {
      return this.getLeft(el) + this.getBorderLeftWidth(el);
    },

    getInnerTop:    function (el) {
      return this.getTop(el) + this.getBorderTopWidth(el);
    },

    getWidth:    function (el) {
      return el.offsetWidth;
    },

    getHeight:    function (el) {
      return el.offsetHeight;
    },

    getCanvasElement:    function (el) {
      var doc = el.ownerDocument || el.document;    // IE55 bug
      if (doc.compatMode == "CSS1Compat")
        return doc.documentElement;
      else
        return doc.body;
    },

    getBorderLeftWidth:    function (el) {
      return el.clientLeft;
    },

    getBorderTopWidth:    function (el) {
      return el.clientTop;
    },

    getScreenLeft:    function (el) {
      var doc = el.ownerDocument || el.document;    // IE55 bug
      var w = doc.parentWindow;
      return w.screenLeft + this.getBorderLeftWidth(this.getCanvasElement(el)) + this.getClientLeft(el);
    },

    getScreenTop:    function (el) {
      var doc = el.ownerDocument || el.document;    // IE55 bug
      var w = doc.parentWindow;
      return w.screenTop  + this.getClientTop(el);//+ this.getBorderTopWidth(this.getCanvasElement(el))
    }
  }

