﻿function SearchBox(searchbox)
{
    var parent = searchbox.parentNode;
    var sel = document.getElementById("searchType");
    var txt = document.getElementById("txtKeyword");
    var btn = document.getElementById("btnSearch");
    var box = document.createElement("DIV");
    var type = "all";
    var keyword = "";
    var root = "/";
    var isIE = document.all ? true : false;
    box.setAttribute("id","keywordbox");
    parent.appendChild(box);
    txt.onkeyup = function()
    {
        var e = getEvent();
        var k = e.keyCode || e.which;
        if(k == 40 || k == 38) return;
        type = sel.options[sel.selectedIndex].value;
        keyword = txt.value;
        var q = encodeURI(keyword);
        if(q)
        {
            var webRequest = new Sys.Net.WebRequest();
            webRequest.set_url(root + 'SearchWords.aspx');
            webRequest.set_httpVerb('POST');
            webRequest.set_body('s='+ type +'&q='+ q);
            webRequest.add_completed(completedHandler);
            webRequest.invoke();
        }
        else
        {
            box.style.display = "none";
        }
    }
    
    txt.onkeydown = function()
    {
        var e = getEvent();
        var k = e.keyCode || e.which;
        if(k == 13)
        {
            btn.click();
            return false;
        }
        if(box.style.display == "block" && (k == 40 || k == 38))
        {
            var divs = box.getElementsByTagName("DIV");
            var count = divs.length;
            if(count == 0) return;
            if(count == 1)
            {
                if(divs[0].className == "over")
                {
                    divs[0].className = "";
                    txt.value = keyword;
                }
                else
                {
                    divs[0].className = "over";
                    if(isIE)
                        txt.value = divs[0].innerText;
                    else
                        txt.value = divs[0].textContent;
                }
            }
            else
            {
                if(k == 40)
                {
                    for(var i = 0; i< count; i++)
                    {
                        if(divs[i].className == "over")
                        {
                            divs[i].className = "";
                            if(i + 1 == count)
                            {
                                txt.value = keyword;
                                return;
                            }
                            else
                            {
                                divs[i+1].className = "over";
                                if(isIE)
                                    txt.value = divs[i+1].innerText;
                                else
                                    txt.value = divs[i+1].textContent;
                                return;
                            }
                        }
                    }
                    divs[0].className = "over";
                    if(isIE)
                        txt.value = divs[0].innerText;
                    else
                        txt.value = divs[0].textContent;
                }
                else
                {
                    for(var i = 0; i< count; i++)
                    {
                        if(divs[i].className == "over")
                        {
                            divs[i].className = "";
                            if(i == 0)
                            {
                                txt.value = keyword;
                                return;
                            }
                            else
                            {
                                divs[i-1].className = "over";
                                if(isIE)
                                    txt.value = divs[i-1].innerText;
                                else
                                    txt.value = divs[i-1].textContent;
                                return;
                            }
                        }
                    }
                    divs[count-1].className = "over";
                    if(isIE)
                        txt.value = divs[count-1].innerText;
                    else
                        txt.value = divs[count-1].textContent;
                }
            }
        }
    }
    
    btn.onclick = function()
    {
        var s = sel.options[sel.selectedIndex].value;
        var q = txt.value.replace(/^\s*/,"").replace(/\s*$/,"");
        if(q)
        {
            q = escape(q);
            var url = root + "Search.aspx?s=" + s + "&q=" + q;
            window.location.href = url;
        }
    }
    
    var completedHandler = function(result,eventArgs)
    {
        if(result.get_responseAvailable())
        {
            var userContext = result.get_responseData();
            if(userContext != "")
            {
                box.innerHTML = deal(userContext);
            }
            if(box.innerText != "")
            {
                box.style.display = "block";
                addEvent();
            }
        }
    }
    var addEvent = function()
    {
        var divs = box.getElementsByTagName("DIV");
        if(divs.length > 0)
        {
            for(var i = 0; i < divs.length; i++)
            {
                divs[i].onclick = function(){txt.value = this.innerText;btn.click();}
                divs[i].onmouseover = function(){this.className = "over";}
                divs[i].onmouseout = function(){this.className = "";}
            }
        }
        var close = document.createElement("A");
        if(isIE)
            close.innerText = "关闭";
        else
            close.textContent = "关闭";
        box.appendChild(close);
    }
    
    var deal = function(context)
    {
        var str;
        var newContext = "";
        context = context.replace("<div>" + keyword + "</div>","");
        var re =new RegExp("<div>[^>]*<\/div>","ig");
        var list = new Array();
        while ((str = re.exec(context)) != null)
	        list.push(str.toString());
        list.sort(function(a,b){return a.length-b.length});
        var num = 5;
        if(num > list.length) num = list.length;
        for(var i = 0; i < num; i++)
        {
            newContext += list[i];
        }
        return newContext;
    }
    
    document.body.onclick = function()
    {
        if(box.style.display == "block")
        {
            var e = getEvent();
            var eventSrc = (isIE)? e.srcElement : e.target;
            if(eventSrc != txt) box.style.display = "none";
        }
    }
    
    function bindSelect(select,value)
    {
        for(var i=0;i<select.options.length;i++)
        {
            if(select.options[i].value == value)
            {
                select.options[i].selected = true;
                break;
            }
        }
    }
    
    this.setSearchBox = function()
    {
        var url = window.location.href.toString();
        try
        {
            var strPath=window.location.pathname.replace(new RegExp(root,"i"),"").match(/^\w+(?=\/|\.)/).toString().toLowerCase();
        }
        catch(e)
        {
            var strPath = "";
        }
        var s = "";
        var q = "";
        switch(strPath)
        {
            case "product":
            case "business":
            case "building":
            case "house":
            case "article":
            case "company":
            case "forum":
                s = strPath;
                break;
            case "search":
                s = url.match(/s\=\w+(?=\&)/i).toString().replace("s=","");
                if(!s) s = "all";
                q = url.match(/q\=.*/).toString().replace("q=","");
                q = unescape(q);
                q = q.replace("+"," ");
                break;
            default:
                s = "all";
                break;
        }
        var sel = document.getElementById("searchType");
        var txt = document.getElementById("txtKeyword");
        bindSelect(sel,s);
        txt.value = q;
    }
    
    function getEvent()
    {   
        if(isIE) return window.event; 
        func=getEvent.caller;
        while(func!=null){   
            var arg0=func.arguments[0];   
            if(arg0){   
                if((arg0.constructor==Event || arg0.constructor ==MouseEvent) || (typeof(arg0)=="object" && arg0.preventDefault && arg0.stopPropagation)){   
                    return arg0;   
                }               
            }   
            func=func.caller;   
        }   
        return null;   
    }
}

