// JavaScript Document

function MIPredict() {
	
	var keyDelayMilliseconds = 200;
	var timeout = '';
	var miRequest;
	var miQLayer;
	var miInstName			= '';
	var miBaseURL				= '';
	var miQueryParamName		= '';
	var miFormname 				= '';
	var miQLayerName				= '';
	var miQueryInput;
	var miPredict				= new Array();
	var miLastQuery;
	var miSelectedItem		= 0;

	this.init = function(BaseURL, formname, queryParamName, divLayername, instanceName,miQueryParamNameHidden) {
	
	  miBaseURL = BaseURL;
		miFormname			= formname;
		miQueryParamName		= queryParamName;
		miQLayerName			= divLayername;
		miInstName		= instanceName;
		miQueryInput = document[miFormname][miQueryParamName];
		miQueryInputHidden = document[miFormname][miQueryParamNameHidden];
		miQueryInput.onkeyup	= handleKeyPress;
		miQueryInput.onfocus	= showLayer;
		miQueryInput.onblur	= hideLayer;
		
		document[miFormname].onsubmit = fetchpage;
	}
	
	
	function fetchpage(){
	  if(miPredict[miSelectedItem]){
  	  var ti = miPredict[miSelectedItem]['ti'];
      switch (ti){
        case "1":
            top.location.href = miBaseURL + 'server/stockforward.aspx?sid=' + miPredict[miSelectedItem]['r'];
            break;
        case "2":
            top.location.href = miBaseURL + 'product/productlist.aspx?dep=' + miPredict[miSelectedItem]['r'];
            break;
        case "3":
            top.location.href = miBaseURL + 'product/productlist.aspx?man=' + miPredict[miSelectedItem]['r'];
            break;
     }
   } else {
      callSearch();
   }
    return false;
  }
	
	function callSearch(){
	  if(miQueryInput.value != "" &&  miQueryInput.value != miQueryInputHidden.value){
      top.location.href = miBaseURL + 'product/productlist.aspx?term=' + encodeURIComponent(miQueryInput.value);
    }
    return false;
  }
  
  
	
	function callAjax() {
		var query = miQueryInput.value;
		miQLayer = document.getElementById(miQLayerName);
		$j.ajax({ 
      url: miBaseURL+'server/searchdata.aspx', 
      data: 'term='+encodeURIComponent(query),          
      dataType: 'json',          
      type: 'post',          
      success: function (j) { 
          miPredict = j.items;
          generateItems(j.items);
      }         
    });
  }

	this.handleClick = function() {
	   fetchpage();
	}
	
	this.doMouseOver = function(myPos) {
		var tblCell = getCell(myPos);
		clearAll();
		if (tblCell != null) {
			highlightPredict(tblCell);
			miSelectedItem = myPos;
		}
	}
	
	this.doMouseOut = function(myPos) {
		var tblCell = getCell(myPos);
		if (tblCell != null) {
			clearPredict(tblCell);
			miSelectedItem = -1
		}
	}
	
	function handleKeyPress(evt) {

		evt = (evt) ? evt : ((event) ? event : null);
		var keyPressed = evt.keyCode;
		if (keyPressed == 38) {
			moveSelected('up')
		} else if (keyPressed == 27) {	
			hideLayer();
		} else if (keyPressed == 40) {
			moveSelected('down');
		} else if (keyPressed == 13 && miSelectedItem < 0) {
		  clearTimeout(timeout);
			callSearch();
		} else if (keyPressed == 13 && miSelectedItem > 0) {
		  clearTimeout(timeout);
			fetchpage();
		} else {
      clearTimeout(timeout);
			timeout = setTimeout(doSearch, keyDelayMilliseconds);
		}
	}
	
	function doSearch(){
		if (miQueryInput.value == '') {
			hideLayer();
			if (miQLayer != null){ miQLayer.innerHTML = ''; }
			return null;
		}
    if (miLastQuery != miQueryInput.value){ callAjax(); }
		miLastQuery = miQueryInput.value;
  }
	
	function moveSelected(direction) {
		var myPos = miSelectedItem;
		if (direction == 'up'){myPos--;}
		else{myPos += 1;}
		
		if (myPos < 0) {
			clearAll();
			miQueryInput.focus();
			miSelectedItem	= -1;
		} else {
			var tblCell = getCell(myPos);
			if (tblCell != null) {
				clearAll();
				highlightPredict(tblCell);
				miSelectedItem = myPos;
			}
		}
		
		var query = miQueryInput.value;
		miQueryInput.value = '';
		miQueryInput.focus();
		miQueryInput.value = query; 
	}
	
	
	function hideLayer() {
		if (miQLayer != null) {
			miQLayer.style.display = 'none';
		}
	}
	
	
	function showLayer() {
		if (miQLayer != null) {
			miQLayer.style.display = 'block';
		}
	}

	function predictorComplete(predictLayerIsVisible) {
		if (typeof(onPredictCompleted) == 'function') {
			onPredictCompleted(predictLayerIsVisible);
		}
	}

	function generateItems(items) {
		miSelectedItem = -1;

		var HTMLoutput = '<table cellpadding="0" cellspacing="0" class="miPredictor" width="100%" border="0" onMouseDown="' + miInstName + '.handleClick();">';
		var query = miQueryInput.value;
		
		for (var i = 0; i < items.length; i++) {
		  if(items[i]){
		    if(items[i]['t'] == "0"){
  			 HTMLoutput += '<tr id="' + miQLayerName + '_' + i + '" class="miRow"><td nowrap="nowrap" colspan="3" align="right" class="miQuery" style="text-align:right;">' + items[i]['i'] + '</td></tr>';
  			} else {		
  			 HTMLoutput += '<tr id="' + miQLayerName + '_' + i + '" class="miRow" onMouseOver="' + miInstName + '.doMouseOver(' + i + ');" onMouseOut="' + miInstName + '.doMouseOut(' + i + ');">'
  								+'<td class="miQuery">' + items[i]['i'].replace(new RegExp("("+query+")","ig"),'<span class="miEnteredQuery">$1</span>') + '</td>'
  								+'<td class="miType">' + items[i]['t'] + '</td><td class="miAmount">' + items[i]['q'] + '</td></tr>';
  			}
			}
		}
		HTMLoutput += '</table>';
		
		if (items.length >= 1) {
			showLayer();
			miQLayer.innerHTML = HTMLoutput;
			predictorComplete(true);
		} else {
			hideLayer();
			miQLayer.innerHTML = '';
			predictorComplete(false);
		}
	}
	
	function clearPredict(tblCell) {
		tblCell.className = 'miRow'; 
	}
	
	function highlightPredict(tblCell) {
		tblCell.className = 'miHighlight'; 
	}
	function getCell(myPos) {
		var tblCell;
		tblCell = document.getElementById(miQLayerName + '_' + myPos);
		return tblCell;
	}
	
	function clearAll() {
		var tblCell;
		for (var i = 0; i < miPredict.length; i++) {
			tblCell = getCell(i);
			if (tblCell != null) {
				clearPredict(tblCell);
			}
		}
	}

}