ns4 = (document.layers)
ie4 = (document.all && !document.getElementById)
ie5 = (document.all && document.getElementById)
ff1 = (!document.all && document.getElementById)

clientPC = navigator.userAgent.toLowerCase()
is_gecko = ((clientPC.indexOf('gecko')!=-1) && (clientPC.indexOf('spoofer')==-1)
                && (clientPC.indexOf('khtml') == -1) && (clientPC.indexOf('netscape/7.0')==-1))
is_safari = ((clientPC.indexOf('AppleWebKit')!=-1) && (clientPC.indexOf('spoofer')==-1))
is_ie = !is_gecko && !is_safari

qqReq = false
if (window.XMLHttpRequest) {
    qqReq = new XMLHttpRequest()
}

/**
 *
 */
function getElement(id) {
    // W3C - Explorer 5+ and Netscape 6+
    if (ie5 || ff1) {
        elem = document.getElementById(id)
        if (!elem) {
            elem = parent.document.getElementById(id)
        }
        return elem

    }
    // Explorer 4
    else if (ie4) {
        elem = document.all[id]
        if (!elem) {
            elem = parent.document.all[id]
        }
        return elem
    }
    // Netscape 4
    else if (ns4) {
        elem = document.layers[id]
        if (!elem) {
            elem = parent.document.layers[id]
        }
        return elem
    }
}

/**
 *
 */
function getElementFromWindow(win, id) {
    // W3C - Explorer 5+ and Netscape 6+
    if (ie5 || ff1) {
        return win.document.getElementById(id);
    }
    // Explorer 4
    else if (ie4) {
        return win.document.all[id];
    }
    // Netscape 4
    else if (ns4) {
        return win.document.layers[id];
    }
}

/**
 *
 */
function onLoad(qEmpty, qInited) {
    document.qEmpty = qEmpty
    document.lastQuery = null
    this.name = "mitzaLyrics"
    setQuery(qInited)
}

/**
 *
 */
function validateSearch() {
    elem = getElement("query")
    if (elem.value.length == 0 || !document.qInited) {
        return false
    } else {
        return true
    }
}

/**
 *
 */
function setQuery(qInited) {
    document.qInited = qInited
    elem = getElement("query")
    if (elem.value.length == 0) {
        if (qInited) {
            elem.select()
        } else {
            elem.value = document.qEmpty
        }
    }
}

/**
 *
 */
function qFocus(elem) {
    clearTimeout(document.qqTimer)
    hideQQToolTip()
    getElement("qqToolTip").innerHTML = ""
    document.qqElem = elem
    initQQuery(elem)
    if (elem.id == "query") {
        document.minLen = 4
        if (document.qInited) {
            elem.select()
        } else {
            elem.value = ""
        }
    } else {
        document.minLen = 0
    }
}

/**
 *
 */
function qBlur(elem) {
    document.qqTimer = setTimeout("hideQQToolTip()", 1000)
    deactivateQQuery(document.qqElem)
    if (elem.id == "query") {
        if (document.qInited) {
            if (elem.value.length == 0) {
                elem.value = document.qEmpty
                document.qInited = false
            }
        } else {
            if (elem.value.length == 0) {
                elem.value = document.qEmpty
            } else {
                document.qInited = true
            }
        }
    }
}

/**
 *
 */
function initQQuery(elem) {
    if (is_ie) {
        elem.attachEvent("onkeydown", qQueryKeyPress)
    } else {
        elem.addEventListener("keypress", qQueryKeyPress, false)
    }
}

/**
 *
 */
function deactivateQQuery(elem) {
    if (is_ie) {
        elem.detachEvent("onkeydown", qQueryKeyPress)
    } else {
        elem.removeEventListener("keypress", qQueryKeyPress, false)
    }
}

/**
 *
 */
function qQueryKeyPress(event) {
    if (event.keyCode == 40) { // KEY DOWN
        var elem = getElement("qqToolTip")
        if (isVisible(elem)) {
            var curLM = getElement("highlit")
            if (!curLM) {
                curLM = elem.firstChild.firstChild
            } else if (curLM.nextSibling) {
                curLM.removeAttribute("id")
                curLM = curLM.nextSibling
            } else {
                curLM.removeAttribute("id")
                curLM = elem.firstChild.firstChild
            }
            if (curLM) {
                curLM.setAttribute("id", "highlit")
            }
        } else {
            if (elem.innerHTML.length > 0) {
                showQQToolTip(elem, document.qqElem)
            } else {
                document.qqForce = true
                doQuery()
            }
        }
        if (is_ie) {
            event.returnValue = false
        } else {
            event.preventDefault()
        }
    } else if (event.keyCode == 38) { // KEY UP
        elem = getElement("qqToolTip")
        if (isVisible(elem)) {
            var curLM = getElement("highlit")
            if (!curLM) {
                curLM = elem.firstChild.lastChild
            } else if (curLM.previousSibling) {
                curLM.removeAttribute("id")
                curLM = curLM.previousSibling
            } else {
                curLM.removeAttribute("id")
                curLM = elem.firstChild.lastChild
            }
            if (curLM) {
                curLM.setAttribute("id", "highlit")
            }
            if (is_ie) {
                event.returnValue = false
            } else {
                event.preventDefault()
            }
        }
    } else if (event.keyCode == 13) { // ENTER
        elem = getElement("qqToolTip")
        if (isVisible(elem)) {
            var curLM = getElement("highlit")
            if (curLM) {
                if (getElement("qqQuery")) { // it's a query, go to lyrics
                    go(curLM.firstChild.firstChild)
                } else {
                    ac(curLM) // it's a suggestion, replace it
                }
            }
            if (is_ie) {
                event.returnValue = false
            } else {
                event.preventDefault()
            }
        }
    } else if (event.keyCode == 9) { // TAB
        elem = getElement("qqToolTip")
        if (isVisible(elem)) {
            var curLM = getElement("highlit")
            if (curLM && getElement("qqSuggest")) { // it's a suggestion, replace it
                ac(curLM)
                if (is_ie) {
                    event.returnValue = false
                } else {
                    event.preventDefault()
                }
            }
        }
    } else if (event.keyCode == 27) { // ESC
        hideQQToolTip()
        if (is_ie) {
            event.returnValue = false
        } else {
            event.preventDefault()
        }
    } else if (event.keyCode == 32 || event.which == 32) { // SPACE
        elem = getElement("qqToolTip")
        if (isVisible(elem)) {
            var curLM = getElement("highlit")
            if (curLM && getElement("qqSuggest")) { // it's a suggestion, replace it
                ac(curLM)
                if (is_ie) {
                    event.returnValue = false
                } else {
                    event.preventDefault()
                }
            }
        } else {
            clearTimeout(document.qqTimer)
            document.qqForce = false
            document.qqTimer = setTimeout("doQuery()", 200)
        }
    } else {
        clearTimeout(document.qqTimer)
        document.qqForce = false
        document.qqTimer = setTimeout("doQuery()", 200)
    }
}

/**
 *
 */
function doQuery() {
    var qqToolTip = getElement("qqToolTip")
    if (document.qqForce || (document.qqElem.value.length > 0 && (document.qqElem.value != document.lastQuery || qqToolTip.innerHTML.length == 0))) {
        document.lastQuery = document.qqElem.value
        if (document.qqElem.value.length >= document.minLen) {
            if (qqReq && qqReq.readyState < 4) {
                qqReq.abort(); //abort previous call
            }
            if (document.qqElem.id == "album" || document.qqElem.id == "title") {
                artistObj = getElement("artist")
                url = "qs.php?w=" + document.qqElem.id + "&q=" + document.lastQuery + "&q2=" + artistObj.value
            } else {
                url = "qs.php?w=" + document.qqElem.id + "&q=" + document.lastQuery
            }
            if (window.XMLHttpRequest) {
                // do nothing, already loaded
            } else {
                qqReq = new ActiveXObject("Microsoft.XMLHTTP")
            }
            qqReq.onreadystatechange = qqReqChange
            qqReq.open("GET", url)
            qqReq.send(null)
        } else {
            hideQQToolTip()
            qqToolTip.innerHTML = ""
        }
    } else if (document.qqElem.value.length == 0) {
        hideQQToolTip()
        qqToolTip.innerHTML = ""
    }
}

/**
 *
 */
function qqReqChange() {
    if (qqReq.readyState == 4) {
        var elem = getElement("qqToolTip")
        elem.innerHTML = qqReq.responseText
        if (elem.innerHTML.length == 0) {
            hideQQToolTip()
        } else {
            var curLM = false
            if (elem.firstChild.firstChild) {
                curLM = elem.firstChild.firstChild
            }
            if (curLM) {
                curLM.setAttribute("id", "highlit")
            }
            showQQToolTip(elem, document.qqElem)
        }
    }
}

/**
 *
 */
function showQQToolTip(elem, refElem) {
    elem.style.top = findPosY(refElem) + document.body.scrollTop + refElem.offsetHeight + "px"
    elem.style.left = findPosX(refElem) + "px"
    elem.style.display = ""
    elem.style.visibility = "visible"
}

/**
 *
 */
function isVisible(elem) {
    return elem.style.visibility == "visible"
}

/**
 *
 */
function hideQQToolTip() {
    elem = getElement("qqToolTip")
    elem.style.visibility = "hidden"
    elem.style.display = "none"
}

/**
 * update curLM, "highlit"
 */
function ud(refElem) {
    var curLM = getElement("highlit")
    if (curLM) {
        curLM.removeAttribute("id")
    }
    refElem.setAttribute("id", "highlit")
}

/**
 * accept suggestion
 */
function ac(refElem) {
    ud(refElem)
    document.qqElem.value = refElem.innerHTML
    hideQQToolTip()
    document.qqElem.focus()
}

/**
 * go to refElem.href
 */
function go(refElem) {
    if (refElem.href) {
        window.location = refElem.href
        return false
    }
    return true
}

/**
 *
 */
function findPosX(obj) {
    var curleft = 0
    if (obj.offsetParent) {
        while (obj.offsetParent) {
            curleft += obj.offsetLeft
            obj = obj.offsetParent
        }
    } else if (obj.x) {
        curleft += obj.x
    }
    return curleft
}

/**
 *
 */
function findPosY(obj) {
    var curtop = 0
    if (obj.offsetParent) {
        while (obj.offsetParent) {
            curtop += obj.offsetTop
            obj = obj.offsetParent
        }
    } else if (obj.y) {
        curtop += obj.y
    }
    return curtop
}

/**
 *
 */
function confirmCommit(m, c) {
    if (confirm(m)) {
        elem = getElement("modifyForm")
        elem.command.value = c
        elem.submit()
    } else {
        getElement("artist").focus()
    }
}
