﻿function handleAutoComplete(txtEditId, dsource, searchType)
{
    /*
    searchType = 1 then the whole phrase
    searchType = 2 then the last word
    */
    
    var txtEdit = document.getElementById(txtEditId);
    
    txtEdit.onkeyup = function(e){onKeyUp(dsource, txtEdit.value, txtEditId, searchType, e);};
    txtEdit.onblur = function(){onBlur()};
    txtEdit.autocomplete = 'off';
    
}


function onKeyUp(dsource, value, sender, searchType, e)
{
    var keyCode = 0;
    if(window.event)
        keyCode = event.keyCode;
    else if(e)
        keyCode = e.which;
        

    if(keyCode == 38)
    {
        moveSelectedItem(-1, sender);
        return;
    }
    
    if(keyCode == 40)
    {
        moveSelectedItem(1, sender);
        return;
    }

    
    
    var txtEdit = document.getElementById(sender);
    
    
    var txtValue = '' + txtEdit.value;
    var value = '';
    /*if(searchType == 1)
        value = txtValue;
    else
    {
        
        txtValue = txtValue.trim(txtValue);
        if(txtValue == '')
            return;
            
        var splitted = txtValue.split(' ');
        value = splitted[splitted.length - 1];
    }*/
    
    value = txtValue;
    showDiv(sender);
    
    getSearchResult(dsource, value, sender, searchType);
}

function onBlur()
{
    hideHiv();
}


function showDiv(txtEditId)
{
    var txtEdit = document.getElementById(txtEditId);
    
    var divAutoComplete = document.getElementById('divAutoComplete');

    var top;
    var left;
    
    
    top = getY(txtEditId) * 1 + txtEdit.offsetHeight;
    left = getX(txtEditId);
    
    
    divAutoComplete.style.display = 'block';

    
    divAutoComplete.style.left = '' + left + 'px';
    divAutoComplete.style.top = top + 'px';
    
    divAutoComplete.style.width = txtEdit.style.width;
    divAutoComplete.onfocus = function(){divAutoComplete.style.display = 'block';}
    
}

function hideHiv()
{
    var divAutoComplete = document.getElementById('divAutoComplete');
    
    divAutoComplete.style.display = 'none';
}


/*
    1 Netscape
    2 IE
*/
function getBrowser()
{
    var brwoserName = navigator.appName;
    
    if(brwoserName.indexOf('Netscape') != -1)
        return 1
        
        
    if(brwoserName.indexOf('Microsoft') != -1)
        return 2
        
    
    return brwoserName;
}




///----------------------------------------------------------------------

function createXMLHttp() 
{
    if (typeof XMLHttpRequest != "undefined") 
    {
        return new XMLHttpRequest();
    } 
    else if (window.ActiveXObject) 
    {
      var aVersions = [ "MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp","Microsoft.XMLHttp"];

      for (var i = 0; i < aVersions.length; i++) {
        try 
        {
            var oXmlHttp = new ActiveXObject(aVersions[i]);
            return oXmlHttp;
        } 
        catch (oError) 
        {
        }
      }
    }
    throw new Error("XMLHttp object could be created.");
}

///------------------------------------------------------------------

function getSearchResult(dsource, query, sender, searchType)
{
    var xmlHttp = createXMLHttp();
    xmlHttp.open("POST", "../callbackpages/autocomplete.ashx?rnd="+Math.floor(Math.random() * 10000), true);
    
    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");


    xmlHttp.onreadystatechange = function()   
        {
            if(xmlHttp.readyState == 4)
            {
                handleRetMsg(xmlHttp.responseText, query, sender);
            }
        };
        
    xmlHttp.send('s=' + dsource + '&q=' + unescape(query) + '&t=' + searchType);
}



function handleRetMsg(msg, query, sender)
{
    var divAutoComplete = document.getElementById('divAutoComplete');
    divAutoComplete.innerHTML = '';
    
    var temp = '';
    var srchValue = ''
    var spltdMsg = msg.split('$');
    srchValue = spltdMsg[1];
    
    var records = spltdMsg[0].split('#');
    
    var i = 0;
    for(i = 0;i < records.length;i++)
    {
        var fields = records[i].split('|');
        
        var displayText = fields[0];
        var valueText = fields[1];
        
        
        temp += '<div id="_divAutoDis_' + i + '" class="retItem" ';
        temp += 'onmousedown="handleDivOnClick(' + i + ', ';
        temp += "'" + sender + "'";
        temp += ');"';
        
        
        temp += 'onmousemove="setSelectedItem(' + i + ', ';
        temp += "'" + sender + "'";
        temp += ');">';
        
        if(srchValue == undefined)
            return;
            
        var re = new RegExp(srchValue, 'i');
        
        temp += '<div id="_divText' + i + '">' + displayText.replace(re, '<span style="font-weight:bold">' + srchValue + '</span>') + '</div>' + '<div id="_divValue' + i + '" style="display:none">' + valueText + '</div></div>';
        
        
    }
    divAutoComplete.innerHTML = temp;
}

function handleDivOnClick(itemId, sender)
{
//    var divText = document.getElementById('_divText' + itemId);
//    var divValue = document.getElementById('_divValue' + itemId);
//    
//    var txtEdit = document.getElementById(sender);
//    txtEdit.value = divValue.innerHTML;
//    txtEdit.focus();
//    txtEdit.value = txtEdit.value;

    setTxtSelected(sender);
    document.getElementById('divAutoComplete').style.display = 'none';
}


function setSelectedItem(itemId, sender)
{
    var selectedItem = getSelectedIndex() * 1;
    
    
    if(selectedItem >= 0)
        document.getElementById('_divAutoDis_' + selectedItem).className = 'retItem';
    selectedItem = itemId;
    
    if(selectedItem >= 0)
    {
        document.getElementById('_divAutoDis_' + selectedItem).className = 'selItem';
    }
}

function moveSelectedItem(steps, sender)
{
    var selectedItem = getSelectedIndex() * 1;
    
    
    if(selectedItem >= 0)
        document.getElementById('_divAutoDis_' + selectedItem).className = 'retItem';
    selectedItem = selectedItem + steps;
    
    if(selectedItem >= 0)
    {
        document.getElementById('_divAutoDis_' + selectedItem).className = 'selItem';
        setTxtSelected(sender);
    }
}


function getSelectedIndex()
{
    var currentSelectedItem = -1;
    var item;
    
    while(true)
    {
        currentSelectedItem++;
        item = document.getElementById('_divAutoDis_' + currentSelectedItem);
        if(item)
        {
            if(item.className == 'selItem')
            {
                //alert(currentSelectedItem);
                return currentSelectedItem;
            }
        }
        else
        {
            return -1;
        }
    }
}


function setTxtSelected(sender)
{
    var itemId = getSelectedIndex();
    var divText = document.getElementById('_divText' + itemId);
    var divValue = document.getElementById('_divValue' + itemId);
    
    var txtEdit = document.getElementById(sender);
    txtEdit.value = divValue.innerHTML;
    txtEdit.focus();
    txtEdit.value = txtEdit.value;
}




function getAbsPos( oId, tl ) {
	var o = document.getElementById( oId );
	var val = 0;
	
	while ( o.parentNode.nodeName != "body") {
		val += (tl == 'top') ? parseInt( o.style.offsetTop ) : parseInt( o.style.offsetLeft );
		alert(o.parentNode.nodeName);
		o = o.parentNode;
		}
	return top;
	}
	
	
function getX(elementId)
{
    var oElement = document.getElementById(elementId);
    
    var iReturnValue = 0;
    while( oElement != null ) 
    {
        iReturnValue += oElement.offsetLeft;
        oElement = oElement.offsetParent;
    }
    
    return iReturnValue;
}

function getY(elementId)
{
    var oElement = document.getElementById(elementId);
    
    var iReturnValue = 0;
    while( oElement != null ) 
    {
        iReturnValue += oElement.offsetTop;
        oElement = oElement.offsetParent;
    }
    
    return iReturnValue;
}


String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}


