var iTypingTimeout = 750;
var KEYUP = 38;
var KEYDOWN = 40;
var KEYENTER = 13;
var KEYTAB = 9;

var xmlHttp;
var suggestionsShown = false;
var currentlySelectedLi = -1;

var sSearchType = 'artist_title';
var tTypingTimer = null;

var aSearchResult = null;

function lm(str){
    try {
        console.log(str);
    }
    catch (e){
        // do nothing
    }
}

function setSearchType(s){
    sSearchType = s;
}

function deselectLi(list, li) {
	var liClass="";	
	(li%2==0) ? liClass="li_even" : liClass="li_odd";
    if(li != -1) {
        list[li].className = "li "+liClass;
    }
}


function selectLi(list, li, updateInputText) {
	var liClass="";				
	
    for (i = 0; i < list.length; i++){
		(i%2==0) ? liClass="li_even" : liClass="li_odd";
        if (i == li){
            list[i].className = "hoverLi";
            //currentlySelectedLi = i;
        }
		else{
			 //list[i].className = liClass;
		}
    }

    if (updateInputText) {
        //setInputText(li);
    }
}

function newCurrentLi(li) {
    var list = getList();

    for(var i = 0; i < list.length; i++) {
        if(list[i].value == li) {
            selectLi(list, i, false);
            setCurrentLi(i);
        }
        else {
            deselectLi(list, i);
        }
    }
}

function resetCurrentLi() {
    currentlySelectedLi = -1;
}

function setCurrentLi(li) {
    currentlySelectedLi = li;
}

function emptySuggestions() {

    document.getElementById("suggestions").innerHTML = "";
    document.getElementById("suggestions").style.display = 'none';

}

function getList() {

    return document.getElementById("suggestions").getElementsByTagName("li");

}

function getXmlHttpObject() {
    var xmlHttp = null;
    try {
        xmlHttp = new XMLHttpRequest();                           // Firefox, Opera 8.0+, Safari
    }
    catch (e) {
        try {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");        // Internet Explorer
        }
        catch (e) {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");     // Internet Explorer
        }
    }
    return xmlHttp;
}

function handleClick(selection) {
    lm("IN CLICK ONLY")
    for (i = 0; i < aSearchResult.length; i++){
        if (aSearchResult[i].song_id == selection){
            lm(aSearchResult[i])
            if (aSearchResult[i].is_artist == 1){
                sUrl = "http://www.lyriczz.com/" + aSearchResult[i].artist_escaped +
                    "-lyrics.html";
            }
            else {
                sUrl = "http://www.lyriczz.com/lyrics/" + aSearchResult[i].artist_escaped +
                    "/" + aSearchResult[i].song_id + "-" + aSearchResult[i].title_escaped + "/";
            }
            lm("surL: " + sUrl)
            window.location = sUrl;
			//emptySuggestions();
			return 0;
        }
    }
//    var aSelectedRecord = aSearchResultArr[selection];
//    lm(aSelectedRecord)
    //document.getElementById("inputText").value = unescape(selection);
    emptySuggestions();
}

function handleInput(e) {
    var theEvent = e || window.event;

    /*if (userInput.length == 0) {
    emptySuggestions();
    return;
  }*/

    var iKeyAscii = theEvent.keyCode;
    
    if (iKeyAscii == KEYUP || iKeyAscii == KEYDOWN) {

        var list = getList();

        if(iKeyAscii == KEYDOWN) {
            var newSelectedLi = currentlySelectedLi + 1;
        }
        else {
            newSelectedLi = currentlySelectedLi - 1;
        }
        lm("NEW: " + newSelectedLi)
        if(newSelectedLi <= 20 && newSelectedLi >= 0) {
            selectLi(list, newSelectedLi, true);
            deselectLi(list, currentlySelectedLi);
            setCurrentLi(newSelectedLi);
        }
        return;

    }

    if (iKeyAscii == 13){
        if (document.getElementById("suggestions").style.display == 'block' && currentlySelectedLi != -1){
            lm("HOPA: " + currentlySelectedLi)
            lm(aSearchResult[currentlySelectedLi])
            handleClick(aSearchResult[currentlySelectedLi].song_id)
            return;
        }
        else {
            // "submit" the form
            lm("Gooooo")
            var sQuery = document.getElementById('inputText').value;
            sQuery = sQuery.replace(' ', '+');
            //var sUrl = "http://lyriczz.com/search/index.php?query=" + escape(sQuery) + "&type=" + sSearchType;
            var sUrl = "http://lyriczz.com/search.php?query=" + sQuery;
            lm(sQuery)
            window.location = sUrl;
            return;
        }
    }

    // filter all special keys - they do not trigger the search
    //lm(iKeyAscii)
    var bValidKey = false;
    if (iKeyAscii > 64 && iKeyAscii < 91){ // letters
        bValidKey = true;
    }
    if (iKeyAscii == 32){ // space
        bValidKey = true;
    }
    if (iKeyAscii == 8){ // backspace
        bValidKey = true;
    }
    if (iKeyAscii > 47 && iKeyAscii < 59){ // numbers
        bValidKey = true;
    }
    if (bValidKey == false){
        return;
    }
    if (tTypingTimer != null){
        clearTimeout(tTypingTimer);
    }
    tTypingTimer = setTimeout(doCounterSearch, iTypingTimeout);
}

function doCounterSearch(){
    xmlHttp = getXmlHttpObject();

    if (xmlHttp == null) {
        alert("Your browser does not support this application.  Please update to a newer version.");
        return;
    }
    var sQuery = document.getElementById('inputText').value;
    // skip short queries
    if (sQuery.length < 4){
        return;
    }

    sQuery = sQuery.replace(' ', '+');
    lm("sQuery: " + sQuery)
    //var url = "index.php?q=" + sQuery + '&type=' + sSearchType;// + "&sid=" + Math.random();
    var url = "http://www.lyriczz.com/search.php?q=" + sQuery;
    //alert(url);
    xmlHttp.onreadystatechange = stateChangedHandler;
    xmlHttp.open("GET", url, true);
    xmlHttp.send(null);
}

function handleTab(e) {

    // var theEvent = e || window.event;

    // if(theEvent.keyCode == KEYTAB && document.getElementById("suggestions").innerHTML != "") {
        // setInputText();
        // emptySuggestions();
    // }

}

function stripHTML(oldString) {

    var newString = "";
    var inTag = false;
    for(var i = 0; i < oldString.length; i++) {

        if(oldString.charAt(i) == '<') inTag = true;
        if(oldString.charAt(i) == '>') {
            if(oldString.charAt(i+1)=="<")
            {
            //dont do anything
            }
            else
            {
                inTag = false;
                i++;
            }
        }

        if(!inTag) newString += oldString.charAt(i);

    }

    return newString;
}

function setInputText(li) {

    var list = getList();


    if(li >= 0) {
        var splitff= list[li].innerHTML.split("<br>");
        var finasstrr= stripHTML(splitff[0]).substring(6);
        //document.getElementById("inputText").value = list[li].innerHTML.substring(6);
        document.getElementById("inputText").value = finasstrr;
    }
    else {
        var splitff= list[currentlySelectedLi].innerHTML.split("<br>");
        var finasstrr= stripHTML(splitff[0]).substring(6);
        ///document.getElementById("inputText").value = list[currentlySelectedLi].innerHTML.substring(6);
        document.getElementById("inputText").value = finasstrr;
    }

}

function stateChangedHandler() {

    if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete") {

        suggestionsShown = true;

        //var split = xmlHttp.responseText.split(",");
        aSearchResult = jQuery.parseJSON(xmlHttp.responseText);
        lm(aSearchResult)
        var suggestionList = "";

        //if(split[0] != "") {
        if (jQuery.isEmptyObject(aSearchResult)){
            document.getElementById("suggestions").style.display = 'none';
        }
        else {
            for(var i = 0; i < aSearchResult.length; i++) {
                //var splitf= split[i].split("<br>");
                //var finasstr= stripHTML(splitf[0]);
                var sArtist = aSearchResult[i].artist;
                var sTitle = aSearchResult[i].title;
                var iSongId = aSearchResult[i].song_id;
                var bIsArtist = aSearchResult[i].is_artist;
				var liClass="";
				
				(i%2==0) ? liClass="li_even" : liClass="li_odd";
				
                if (bIsArtist == 1){
                    suggestionList += "<li value='" + iSongId +
                        "' class=\"li "+liClass+"\" onmouseover=\"newCurrentLi(this.value);\" onclick=\"handleClick('" +
                        iSongId + "');\" onreturn=\"handleClick('" + iSongId + "');\">&nbsp;" + sArtist +
                        " <small>(" + aSearchResult[i].num_songs + " Lyriczz)</small></li>";
                }
                else {
                    suggestionList += "<li value='" + iSongId +
                        "' class=\"li "+liClass+"\" onmouseover=\"newCurrentLi(this.value);\" onclick=\"handleClick('" +
                        iSongId + "');\" onreturn=\"handleClick('" + iSongId + "');\">&nbsp;" + sArtist +
                        " - " + sTitle + "</li>";
                }
            }

            if(suggestionList != "") {
                suggestionList = "<ul class=\"ul\">" + suggestionList;
                suggestionList += "</ul>";
            }
            //alert(suggestionList);
            document.getElementById("suggestions").innerHTML = suggestionList;
            document.getElementById("suggestions").style.display = 'block';
        }

    }

}

