// Copyright 2008 Andy's Music, Inc.
// All rights reserved.

var stayHidden = true;
var searchSequence = 0;
var searchLastSequence = 0;
var searchMinLength = 3;
var searchLastQuery = '';

window.onresize = moveSearch;

function hoverQuickSearch(item, name, selected) {
    var a = document.getElementById('result-bg' + item);
    var b = document.getElementById('result-link' + item);
    if (selected) { name = name + '-selected'; }
    if (a) { a.className = name; }
    if (b) { b.className = name; }
}

function moveSearch() {
    searchDisplay = document.getElementById('quicksearch');
    if (searchDisplay) {
        var searchBox = document.getElementById('search');
        searchDisplay.style.top = findPosY(searchBox) + 30 + 'px';
        searchDisplay.style.left = findPosX(searchBox) - (searchDisplay.offsetWidth - searchBox.offsetWidth) + 'px';
    }
}

function focusQuickSearch(searchText) {
    searchBox = document.getElementById('search');
    if (searchBox) {
        searchBox.style.backgroundColor = '#ffffff';
    }
    searchDisplay = document.getElementById('quicksearch');
    if (searchDisplay) {
        if (searchText.length >= searchMinLength) {
            stayHidden = false;
            showQuickSearch();
        }
    } else {
        doQuickSearch(searchText);
    }
}

function blurQuickSearch() {
    searchBox = document.getElementById('search');
    if (searchBox) {
        searchBox.style.backgroundColor = 'transparent';
    }
    setTimeout('hideQuickSearch()', 250);
}

function doQuickSearch(searchText) {
    searchDisplay = document.getElementById('quicksearch');
    if (!searchDisplay) {
        searchDisplay = document.createElement('div');
        searchDisplay.setAttribute('name', 'quicksearch');
        searchDisplay.setAttribute('id', 'quicksearch');
        searchDisplay.className = 'quicksearch';
        document.body.appendChild(searchDisplay);
        moveSearch();
    }
    if (validateSearch(searchText) && trim(searchLastQuery) != trim(searchText)) {
        sendQuickSearch(searchText);
    } else if (searchText.length < searchMinLength) {
        hideQuickSearch();
    } else {
        stayHidden = false;
        showQuickSearch();
    }
}

function sendQuickSearch(searchText) {
    var searchResults = getXmlHttpObject();
    if (searchResults != null) {
        searchLastQuery = searchText;
        searchResults.open('GET', '/QuickSearch.asp?q=' + searchText + '&s=' + searchSequence++, true);
        stayHidden = false;
        searchResults.send(null);
        searchResults.onreadystatechange = function() {
            if (searchResults.readyState == 4) {
                if (searchResults.status == 200) {
                    var searchBox = document.getElementById('search');
                    if (searchBox) {
                        var q = searchResults.getResponseHeader('QuickSearch-Query');
                        var s = searchResults.getResponseHeader('QuickSearch-Sequence');
                        if (s >= searchLastSequence || q == searchBox.value) {
                            if (q == searchBox.value) {
                                searchLastSequence = searchSequence;
                            } else {
                                searchLastSequence = s;
                            }
                            displayResults(searchResults.responseText);
                        }
                    }
                } else {
                    hideQuickSearch();
                }
            }
        }
    }
}

function getXmlHttpObject() {
    var xmlHttp = null;
    try {
        xmlHttp = new XMLHttpRequest();
    }
    catch (e) {
        try {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e) {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    return xmlHttp;
}

function displayResults(html) {
    var searchDisplay = document.getElementById('quicksearch');
    if (searchDisplay) {
        searchDisplay.innerHTML = html;
        if (searchDisplay.style.visibility == 'hidden' || !searchDisplay.style.visibility) { showQuickSearch(); }
    }
}

function showQuickSearch() {
    if (!stayHidden) {
        var searchDisplay = document.getElementById('quicksearch');
        if (searchDisplay) {
            searchDisplay.style.visibility = 'visible';
        }
    }
}

function hideQuickSearch() {
    var searchDisplay = document.getElementById('quicksearch');
    if (searchDisplay) { searchDisplay.style.visibility = 'hidden'; }
    stayHidden = true;
}

function findPosX(obj) {
    var curleft = 0;
    if (obj.offsetParent) {
        while (true) {
            curleft += obj.offsetLeft;
            if (!obj.offsetParent) { break; }
            obj = obj.offsetParent;
        }
    } else if (obj.x) {
        curleft += obj.x;
    }
    return curleft;
}

function findPosY(obj) {
    var curtop = 0;
    if (obj.offsetParent) {
        while (1) {
            curtop += obj.offsetTop;
            if (!obj.offsetParent) { break; }
            obj = obj.offsetParent;
        }
    } else if (obj.y) {
        curtop += obj.y;
    }
    return curtop;
}

function validateSearch(searchText) {
    var test = trim(searchText);
    test = test.split(' ');
    if (test[test.length - 1].length >= searchMinLength) {
        return true;
    } else {
        return false;
    }
}

function trim(text) {
    return text.replace(/^\s+|\s+$/g, '');
}