﻿// JScript File
/*
    File isearch.js
    Author Victor Feng
    Version 1.0 Jan 26, 2008
    Deleloped for adding function "Intelligent Search for Manufacturer Part Number" to TonerDirect.ca
    Things must be done in order to use the function:
        1. Create an element as follow
            <div 
                id='div_search_panel' 
                style="position: absolute; visibility:hidden; top:-100; left:-100; z-index:64;">
            </div>
        2. Set search facility that usually is textbox
            <input type='text' autocomplete='off' onkeyup='search_keyup()' onblur='search_hide();' />
        3. Adjust position of the search panel
            in function "search_callback"
                    e.style.left = (number to fit);
                    e.style.top = (number to fit);
            
    Files associated:
        1.  isearch.js 
            used like <script type='text/javascript' language='javascript' src='isearch.js' ...
        2.  isearch.asp
            used in isearch.js
*/
var http_search = null, obj_search = null, row_search = null;
function search_keyup()
{
    var e, c, v;
    if(window.event.srcElement)
        e = window.event.srcElement;
    else if(window.event.target)
        e = window.event.target;
    else
        return;
    obj_search = e;
    c = window.event.keyCode;
    if(c==13)
    {
        if(row_search!=null&&obj_search!=null) obj_search.value = row_search.cells[0].innerText;
        search_hide();
        //window.event.keyCode = 0;
    }
    else if(c==27)
    {
        search_hide();
    }
    else if(c==38)  //up arrow
    {
        search_row_select(-1);
    }
    else if(c==40)  //Down arrow
    {
        search_row_select(1);
    }
    else
    {
        v = e.value;
        if(v.length>=2) search(v); else search_hide();
    }
}
function search_keypress()
{
    switch(event.keyCode)
    {
        case 13:
        case 27:
            return (row_search==null);
        default:
            return true;
    }
}
function search_row_select(n)   //1:next; -1:last
{
    var i, t;
    if((t=document.getElementById("search_table"))==null) return;
    switch(n)
    {
        case -1:
            if(row_search!=null)
            {
                for(i=t.rows.length-1; i>=0; i--)
                {
                    if(t.rows[i]==row_search) break;
                }
                search_row_out(row_search);
                if(i>0) i--; else i = t.rows.length - 1;
            }
            else
            {
                i = t.rows.length-1;
            }
            search_row_over(t.rows[i]);
            break;
        case 1:
            if(row_search!=null)
            {
                for(i=0; i<t.rows.length; i++)
                {
                    if(t.rows[i]==row_search) break;
                }
                search_row_out(row_search);
                if(i+1<t.rows.length) i++; else i = 0;
            }
            else
            {
                i = 0;
            }
            search_row_over(t.rows[i]);
            break;
    }
}
function search_row_over(r)
{
    if(row_search!=null) search_row_out(row_search);
    r.style.backgroundColor="#0303fa"; r.style.color="#ffffff";
    row_search = r;
}
function search_row_out(r)
{
    r.style.backgroundColor="transparent"; r.style.color="#000000";
    row_search = null;
}
function search_hide()
{
    var e;
    if((e=document.getElementById("div_search_panel"))!=null)
    {
        div_search_panel.style.top = -200;
        div_search_panel.style.left = -200;
        div_search_panel.style.visibility = "hidden";
    }
    row_search = null;
}
function search_result(r)
{
    if(obj_search!=null)
    {
        obj_search.value = r;
    }
}
function search(s)
{
    if((http_search=http_search_init())==null)
    {
        return;
    }
    http_search.onreadystatechange = search_callback;
    http_search.open("POST", "isearch.asp", true);
    http_search.send("<search><![CDATA[" + s.replace("]]>", "]]&gt;") + "]]></search>" );
}
function search_callback()
{
    if(http_search.readyState==4)
    {
        var e = document.getElementById("div_search_panel");
        if(http_search.status==200)
        {
            var s = http_search.responseText;
            if(s.length>0)
            {
                e.innerHTML = s;
                e.style.left = 64;
                e.style.top = 184;
                e.style.visibility = "visible";
            }
            else
            {
                e.style.visibility = "hidden";
            }
            
        }
        else
        {
            e.style.visibility = "hidden";
            var w = window.open();
            w.document.write(http_search.responseText);
            w.document.close();
        }
    }
}
function http_search_init()
{
    var xmlHttp = null;
    try { xmlHttp = new XMLHttpRequest; }
    catch(e)
    {
        try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); }
        catch(e)
        {
            try { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); }
            catch(e)
            {
                return null;
            }
        }
    }
    return xmlHttp;
}


