
var symbol_input;
var symbol_selected = false;
var old_input = "";

function focusSymbol(txtObj){
	symbol_selected = false;
	Log("focusSymbol(): symbol_selected = " + symbol_selected);
}
function Log(msg){
	try{
		outputObj = document.getElementById("test1");
		if(outputObj)
			outputObj.innerHTML += "\r\n" + msg;
	}
	catch(exception){
	}
}
function changeSymbolText(txtObj){
	//document.getElementById("test1").innerHTML += "\r\n" + symbol_selected;	
	
	if(symbol_selected == true){
		Log("symbol_selected = true");
		return false;
	}
	symbol_input = txtObj;
	var keyword = txtObj.value;

	if(keyword.trim() ==''){
		clearNames();
		return false;
	}
	/*
	if(old_input == ""){
		old_input = keyword;
		symbol_selected = false;
		return false;
	}
	*/
	if(old_input == keyword && document.getElementById("symbolDiv")){
		Log("document.getElementById('symbolDiv')=" + document.getElementById("symbolDiv"));
		return false;
	}
	else{
		old_input = keyword;
		symbol_selected = false;
	}
	
	if(symbol_selected == false){
		GetSymbolsByXML(keyword);
	}
}
function finishEditSymbol(txtObj){
	symbol_selected = true;
	setTimeout(clearNames, 250);
}
function GetSymbolsByXML(keyword)
{
  try
  {
    url = "./XMLGetSymbols";
    var queryString = "key="+keyword;
    xmlHttpGet(url, queryString, "AJAX_SymbolsProc");
  }
  catch(exception)
  {
  	alert(exception);
  }
}
function AJAX_SymbolsProc(xmlhttp)
{
  var ret = "";
  try{
    if (xmlhttp.readyState == 4)
    {
      if (xmlhttp.status == 200)
      {
        var _ctype = xmlhttp.getResponseHeader("Content-type");
        if(_ctype.indexOf("text/xml") >= 0)
        {
          if(!xmlhttp.responseText){
            return;
          }
          jsXmlDom = new REXML(xmlhttp.responseText);
          parseXMLForSymbols(jsXmlDom);
        }
          if(navigator.appVersion.indexOf('MSIE 6') == -1){
	      	xmlhttp.onreadystatechange = null;
          }
      }
      else if (xmlHttp.status == 204){//no data exist
        clearNames();
        xmlhttp.onreadystatechange = null;
      }
    }
  }
  catch(exception){
  }
  return false;
}

function parseXMLForSymbols(xmlDoc)
{
  if(xmlDoc.rootElement == null){
    return;
  }
  var _response = xmlDoc.rootElement;
  var _header = _response.childElement("HEADER");
  var errCode = _header.childElement("ERRCODE").getText();
  if(eval(errCode) > 0){//occur error
    return;
  }
  var _result_items = _response.childElement("RESULT");
  if(!_result_items){
  	return;
  }
  if(_result_items.childElements.length > 0){
  	 var symbolArray = new Array(_result_items.childElements.length);
     for(var i=0; i<_result_items.childElements.length; i++)
	 {
	    var _nodeList =_result_items.childElements[i];
	    symbolArray[i] = new Array();
	    symbolArray[i]["symbol"] = _nodeList.childElements[0].getText();
	    symbolArray[i]["company"] = _nodeList.childElements[1].getText();
	    symbolArray[i]["market"] = _nodeList.childElements[2].getText();
	 }
	 fillSymbols(symbolArray);
  }
  else{
  	clearNames();
  }
}

function fillSymbols(symbolArray){
  var symbolDiv = document.getElementById("symbolDiv");
  var bIsFirst = 0;
  if(!symbolDiv){
	bIsFirst = 1;
	symbolDiv = createNamedElement('div','symbolDiv');
	symbolDiv.style.display = "none";
  }
  var symbolBackFrame = document.getElementById("symbolBackFrame");
  if(!symbolBackFrame){
	symbolBackFrame = createNamedElement('iframe','symbolBackFrame');
	symbolBackFrame.frameSpacing = 0;
	symbolBackFrame.frameBorder = 0;
	symbolBackFrame.style.position = "absolute";
	symbolBackFrame.style.borderWidth="0px";
	symbolBackFrame.style.display = "none";
	symbolBackFrame.style.zIndex = "998";
	document.body.appendChild(symbolBackFrame); 
  }
  if(!symbol_input){
	clearNames();
	return;
  }	
  var txtObj = symbol_input;
  if(!symbolArray){
	clearNames();
	return;
  }
  symbolDiv.innerHTML = "";
  /*
  if(symbolDiv.childNodes.length > 0){
  	while(symbolDiv.childNodes.length > 0){
  		symbolDiv.removeChild(symbolDiv.firstChild);
  	}
  }
  */
  for(i=0;i<symbolArray.length;i++){
	  var outDiv = createNamedElement('div','outerDiv'+i);
	  var innerDiv = createNamedElement('div','innerDiv'+i);
	  innerDiv.onmouseover = function(){mouseoverDiv(this);};
	  innerDiv.onmouseout = function(){mouseoutDiv(this);};
	  //innerDiv.onclick = function(){selectSymbolFromDiv(this);};
	  objSpan_symbol = createNamedElement('div','symbolpart_'+i);
	  objSpan_symbol.className = "t";
	  objSpan_symbol.innerHTML = symbolArray[i]["symbol"];
	  objSpan_symbol.onmousedown = function(){selectSymbolFromSymbol(this);};	  
	  innerDiv.appendChild(objSpan_symbol);
	  
	  objSpan_company = createNamedElement('div','companypart_'+i);
	  objSpan_company.className = "n";
	  objSpan_company.innerHTML = symbolArray[i]["company"];
	  if(symbolArray[i]["company"].trim() == ''){
	  	objSpan_company.innerHTML = "&nbsp;";
	  }
	  objSpan_company.onmousedown = function(){selectSymbolFromCompany(this);};	  
  	  innerDiv.appendChild(objSpan_company);
  	  //innerDiv.innerHTML = "<div class='t' id='div1_"+i+"' onClick='selectSymbolFromSymbol(this);'>"+symbolArray[i]["symbol"]+"</div><div class='n' id='div2_"+i+"' onClick='selectSymbolFromCompany(this);'>"+symbolArray[i]["company"]+"&nbsp;</div>";
	  outDiv.appendChild(innerDiv);
  	  symbolDiv.appendChild(outDiv);
  }		
  setOffsets(symbolDiv);
  symbolDiv.style.display = "";
  if(bIsFirst > 0){
	document.body.appendChild(symbolDiv);
  }
    
  i=0;
  if(symbolBackFrame){
	  setBackFrameOffsets(symbolDiv, symbolBackFrame);
	  symbolBackFrame.style.display = "";
  }
}

function selectSymbolFromSymbol(spanObj){
	try{
		symbol_input.value = spanObj.innerHTML;
		symbol_selected = true;
		finishEditSymbol();
	}
	catch(exception){
		alert(exception);
	}
}
function selectSymbolFromCompany(spanObj){
	try{
		symbol_input.value = spanObj.parentNode.firstChild.innerHTML;
		symbol_selected = true;
		finishEditSymbol();
	}
	catch(exception){
     	alert(exception);
	}
}
function selectSymbolFromDiv(divObj){
	try{
		symbol_input.value = divObj.firstChild.innerHTML;
		symbol_selected = true;
		finishEditSymbol();
	}
	catch(exception){
		alert(exception);
	}
}

function clearNames() {
  var symbolDiv = document.getElementById("symbolDiv");
  if(symbolDiv){
	document.body.removeChild(symbolDiv);
  }
  var symbolBackFrame = document.getElementById("symbolBackFrame");
  if(symbolBackFrame)
	  symbolBackFrame.style.display = "none";
}
function setOffsets(symbolDiv) {
     var end = symbol_input.offsetWidth;
     var left = calculateOffsetLeft(symbol_input);
     var top = calculateOffsetTop(symbol_input) + symbol_input.offsetHeight;
     //symbolDiv.style.border = "black 1px solid";
     symbolDiv.style.left = (left + 0) + "px";
     symbolDiv.style.top = (top + 0) + "px";
     //nameTable.style.width = end + "px";
}

function setBackFrameOffsets(symbolDiv, symbolBackFrame) {
     symbolBackFrame.style.left = symbolDiv.style.left;
     symbolBackFrame.style.top = symbolDiv.style.top;
     symbolBackFrame.style.width = symbolDiv.offsetWidth;
     symbolBackFrame.style.height = symbolDiv.offsetHeight;
}

function calculateOffsetLeft(field) {
  	return calculateOffset(field, "offsetLeft");
}
function calculateOffsetTop(field) {
  	return calculateOffset(field, "offsetTop");
}
function calculateOffset(field, attr) {
  	var offset = 0;
  	while(field && field.id != 'intro') {
    	offset += field[attr]; 
    	//alert("offset="+offset +" field[attr]="+field[attr]);
    	field = field.offsetParent;
  	}
  	return offset;
}

function mouseoverDiv(divObj){
	if(divObj){
		divObj.className = "selected";
	}
}
function mouseoutDiv(divObj){
	if(divObj)
		divObj.className = "";
}
function createNamedElement(type, name) {
   	var element = null;
   	// Try the IE way; this fails on standards-compliant browsers
   	try {
    	element = document.createElement('<'+type+' name="'+name+'" id="'+name+'">');
   	} catch (e) {
   	}
   	if (!element || element.nodeName != type.toUpperCase()) {
      // Non-IE browser; use canonical method to create named element
      element = document.createElement(type);
      element.name = name;
      element.id = name;
   	}
   	return element;
}
function keyboardActionTest(e) {
	var DOWN_KEY = 40, UP_KEY = 38;
	if (e == null) { // ie
		keycode = event.keyCode;
	} else { // mozilla
		keycode = e.which;
	}
	if(keycode == UP_KEY){//Up Key
		setTimeout(clearNames, 100);
		changeSelectRowInSymbolDiv(-1);
	}
	else if(keycode == DOWN_KEY){//Down Key
		setTimeout(changeSelectRowInSymbolDiv, 100);
		//changeSelectRowInSymbolDiv(1);
	}
}
function changeSelectRowInSymbolDiv(){
	direction = 1;
	var symbolDiv = document.getElementById("symbolDiv");
	if(symbolDiv){
		if(symbolDiv.childNodes.length > 0){
			if(direction > 0){//go to down
				var nSelected = -1;
				for(var i=0;i<symbolDiv.childNodes.length;i++){
					var outerDiv = symbolDiv.childNodes[i];
					var innerDiv = outerDiv.firstChild;
					if(innerDiv.className == "selected"){
						nSelected = i;
					}
				}
				if(nSelected == -1){
					nSelected++;
					symbolDiv.childNodes[nSelected].className = "selected";
				}
				else if(nSelected < symbolDiv.childNodes.length - 1){
					symbolDiv.childNodes[nSelected].className = "";
					symbolDiv.childNodes[nSelected+1].className = "selected";
				}
			}
			else if(direction < 0){// go to up
				
			}
		}
		//var outerDivList = symbolDiv.childNodes();		
	}
}
function bindEvent(element, event, callback){
  if (element.addEventListener)
    element.addEventListener(event, callback, false);
  else if (element.attachEvent)
    element.attachEvent("on" + event, callback);
} 