

function bind_method(el, evt, mth, cap)
{
    if (el.addEventListener)
        el.addEventListener(evt, mth, cap);
    else if (el.attachEvent && !cap)
        el.attachEvent('on' + evt, mth);
    else if (el.setAttribute && !cap)
        el.setAttribute('on' + evt, mth);
}

function unbind_method(el, evt, mth, cap)
{
    if (el.removeEventListener)
        el.removeEventListener(evt, mth, cap);
    else if (el.detachEvent && !cap)
        el.detachEvent('on' + evt, mth);
}




function keypress_Q(evt)
{
    if (evt.keyCode)
    {
        if (evt.keyCode == 13)
        {
            var q = document.getElementById('q');
            var qf = document.getElementById('qf');
            if (qf && q && q.value != '')
            {
                if (evt.preventDefault)
                    evt.preventDefault();

                qf.submit();
                return false;
            }
        }
    }

    return true;
}

function keydown_Go(evt)
{
    //if the keycode is not enter, up, down, or escape, don't do anything
    if(evt.keyCode)
    {
        var btnOpt = document.getElementById('srch_btn_opt');
        if(!btnOpt)
            return;

        var i = 0;
        var options = btnOpt.childNodes;
        if(evt.keyCode == 13) //enter
        {
            if(btnOpt.style.display == "block") //fire click on selected element
            {
                for(i = 0; i < options.length; i++)
                {
                    if(options.item(i).className == "selected")
                    {
                        if(document.createEvent)
                        {
                            var clickEvent = document.createEvent('MouseEvents');
                            clickEvent.initEvent('click',true,true);
                            options.item(i).dispatchEvent(clickEvent);
                        }
                        else if(options.item(i).fireEvent)
                        {
                            options.item(i).fireEvent('onclick');
                        }
                        break;
                    }
                }

                if (evt.preventDefault)
                    evt.preventDefault();

                return false;
            }

            return;
        }

        if(evt.keyCode == 9) //tab
        {
            hideManualGo(btnOpt);
        }

        if(evt.keyCode == 27) //escape
        {
            hideManualGo(btnOpt);
            if (evt.preventDefault)
                evt.preventDefault();

            return false;
        }

        if(evt.keyCode != 38 && evt.keyCode != 40)
            return;

        if(btnOpt.style.display != "block")
            showManualGo(btnOpt);

        var newOption = -1;
        for (i = 0; i < options.length; i++)
        {
            if(options.item(i).className == 'selected')
            {

                if(evt.keyCode == 40) //down key
                {
                    if(i == options.length - 1)
                        newOption = 0; //wrap
                    else
                        newOption = i + 1;
                }
                else if (evt.keyCode == 38) //up key
                {
                    if(i == 0)
                        newOption = options.length - 1; //wrap
                    else
                        newOption = i - 1;
                }
            }
            options.item(i).className = '';
        }

        if(newOption == -1)
            newOption = 0; //we opened the menu by hitting the down or up key

        if(newOption >= 0 && newOption < options.length)
        {
            options.item(newOption).className = 'selected';
        }

        if (evt.preventDefault)
            evt.preventDefault();

        return false;
    }
}

function keypress_Go(evt)
{
    if(evt.keyCode)
    {
        var btnOpt = document.getElementById('srch_btn_opt');
        if(!btnOpt)
            return true;
        if((evt.keyCode == 13 && btnOpt.style.display == 'block') ||
            evt.keyCode == 27 || evt.keyCode == 38 || evt.keyCode == 40)
        {
            if(evt.preventDefault)
                evt.preventDefault();

            return false;
        }
    }
    return true;
}





function change_TryGeo(evt)
{
    var el = document.getElementById('trygeocombo');
    if (el)
    {
        if (el.selectedIndex > 0)
        {
            var tgf = document.getElementById('tgf');
            if(tgf)
                tgf.submit();
            return false;
        }
    }
}

function toggleQB(show)
{
    if(typeof(document.getElementById) == 'undefined')
        return;

    var qb = document.getElementById("qb");
    if(qb)
    {
        if(show && qb.style.display == "none")
        {
            qb.style.display = "block";
            show = true;
        }
        else
        {
            show = false;
            qb.style.display = "none";
        }
    }
    else if (show)
    {
        var qs = location.search;
        var idx = location.search.indexOf('@q=');
        if (idx == -1)
            idx = location.search.indexOf('&q=');
        if (idx != -1)
        {
            qs = location.search.substr(0, idx);
            idx = location.search.indexOf('&', idx + 3);
            if (idx != -1 && idx + 1 < location.search.length)
            {
                if (qs.length > 0)
                    qs += "&" + location.search.substr(idx + 1);
                else
                    qs += "?" + location.search.substr(idx + 1);
            }
        }

        idx = location.search.indexOf('@qb=');
        if (idx == -1)
            idx = location.search.indexOf('&qb=');
        if (idx == -1)
        {
         if (qs.length > 0)
                qs += "&qb=1";
        else
                qs += "@qb=1";
        }

        var q = document.getElementById("q").value;
        if (window.encodeURIComponent)
            q = encodeURIComponent(q);
    else
            q = quasiUriEncode(q);
        if (qs.length > 0)
                qs += "&q=" + q;
        else
                qs += "@q=" + q;

        location.search = qs;
    }

    var qbCommand = document.getElementById("qb_command");
    if(qbCommand)
    {
        qbCommand = qbCommand.firstChild;
        if(show)
            qbCommand.innerHTML = "-" + qbCommand.innerHTML.substr(1);
        else
            qbCommand.innerHTML = "+" + qbCommand.innerHTML.substr(1);
    }
}

function resizeHandler()
{
    var bWide = document.body.clientWidth > 980;

    var idx = document.body.className.indexOf(" wide");
    if (idx >= 0 && !bWide)
        document.body.className = document.body.className.substr(0, idx);
    else if (idx < 0 && bWide)
        document.body.className = document.body.className + " wide";

    if(typeof(qb_reposition) != 'undefined')
        qb_reposition();
}

function buildManualGo()
{
    if ((navigator.platform.indexOf("Mac") != -1) && ((navigator.userAgent.indexOf("MSIE") > -1) || (navigator.userAgent.indexOf("Safari") > -1)))
        return;

    if(typeof(document.getElementById) == 'undefined')
        return;

    var el = document.getElementById('srch_btn');
    var select = document.getElementById('srch_type');
    if (el && select)
    {
        var btn = document.createElement('button');
        btn.id = 'srch_btn_go';
        bind_method(btn, 'keydown', keydown_Go);
        bind_method(btn, 'keypress', keypress_Go);
        var container = document.createElement('span');
        container.className = 'trbbdr';

        container.insertBefore(btn, null);

        var span = el.parentNode;
        span.parentNode.insertBefore(container, select);
        span.parentNode.removeChild(span);
        container.parentNode.insertBefore(span, container);

        bind_method(btn, 'click', click_ManualGo);
        var menu = document.createElement('div');
        menu.id = 'srch_btn_opt';
        select.parentNode.insertBefore(menu, select);

        var options = select.childNodes;
        for (var i = 0; i < options.length; i++)
        {
            var div = document.createElement('div');
            if (div)
            {
                handler = new ManualGoHighlighter(div, options.item(i).value);
                bind_method(div, 'click', handler.click);
                bind_method(div, 'mouseover', handler.mouseover);
                bind_method(div, 'mouseout', handler.mouseout);
                var text = '';
                if(typeof(options.item(i).textContent) != 'undefined')
                     text = options.item(i).textContent;
                else if(typeof(options.item(i).innerText) != 'undefined')
                     text = options.item(i).innerText;
                else if(typeof(options.item(i).firstChild) != 'undefined' && typeof(options.item(i).firstChild.nodeValue) != 'undefined')
                     text = options.item(i).firstChild.nodeValue;
                var itemText = document.createTextNode(text);
                div.appendChild(itemText);
                menu.appendChild(div);
            }
        }
        select.parentNode.removeChild(select);
    }
}

function click_ManualGo(evt)
{
    var btnOpt = document.getElementById('srch_btn_opt');
    if (btnOpt)
    {
        if (btnOpt.style.display == 'block')
            hideManualGo(btnOpt);
        else
            showManualGo(btnOpt);

        if (evt.preventDefault)
            evt.preventDefault();
        else
            return false;
    }
}



function showManualGo(btnOpt)
{
    toggleQB();

    var btnSrch = document.getElementById('srch_btn').parentNode;
    var btnGo = document.getElementById('srch_btn_go').parentNode;
    if (btnSrch && btnGo)
    {
        var e = btnSrch;
        var l = 0;
        var t = 0;
        while (e)
        {
            l += e.offsetLeft;
            t += e.offsetTop;

            e = e.offsetParent;
        }
        btnOpt.style.zIndex = 200;
        btnOpt.style.position = "absolute";
        btnOpt.style.left = (l - 1) + 'px';
        btnOpt.style.top = (t + btnSrch.offsetHeight) + 'px';
        btnOpt.style.display = "block";

        var newWidth = btnSrch.offsetWidth + btnGo.offsetWidth - 1;
        var options = btnOpt.childNodes;
        var i;
        for (i = 0; i < options.length; i++)
        {
            if(options.item(i).offsetWidth > newWidth)
                newWidth = options.item(i).offsetWidth;
        }

        if (newWidth > btnOpt.offsetWidth)
            btnOpt.style.width = newWidth + "px";
        else
            newWidth = btnOpt.offsetWidth;

        for (i = 0; i < options.length; i++)
        {
            var div = options.item(i);
            div.style.width = (newWidth - 12) + "px";
        }
    }
}

function hideManualGo(btnOpt)
{
    btnOpt.style.display = 'none';

    var options = btnOpt.childNodes;
    for (var i = 0; i < options.length; i++)
    {
        options.item(i).className = '';
    }
}

function ManualGoHighlighter(el, act)
{
    var me = el;
    var srch_type = act;

    this.mouseover = function(evt)
    {
        var btnOpt = document.getElementById('srch_btn_opt');
        if (btnOpt)
        {
            var options = btnOpt.childNodes;
            for (var i = 0; i < options.length; i++)
            {
                options.item(i).className = '';
                if (options.item(i) == me)
                    options.item(i).className = 'selected';
            }
        }
    }

    this.mouseout = function(evt)
    {
        me.className = '';
    }

    this.click = function(evt)
    {
        hideManualGo(document.getElementById('srch_btn_opt'));

        var q = document.getElementById("q");
        var qf = document.getElementById("qf");
        var fc = document.getElementById("fc");
        if(fc && fc.value.length <= 4)
           fc.value = fc.value + "2";
        var inputNode = document.createElement("input");
        inputNode.type = "hidden";
        inputNode.name = "srch_type";
        inputNode.value = srch_type;
        q.parentNode.insertBefore(inputNode, q);
        qf.submit();
    }
}
