var Highlighter = {};
var Globals = Globals || {};

// Parsen und die Tags setzen
Highlighter.doHighlight = function(bodyText, searchTerm, highlightStartTag, highlightEndTag)
{
    // the highlightStartTag and highlightEndTag parameters are optional
    if ((!highlightStartTag) || (!highlightEndTag)) {

        highlightStartTag = "<font style='color:#FFFFFF; background-color:#E2007F;'>";
        highlightEndTag = "</font>";
    }

    var newText = "";
    var i = -1;
    var lcSearchTerm = searchTerm.toLowerCase();
    var lcBodyText = bodyText.toLowerCase();

    while (bodyText.length > 0) {
        i = lcBodyText.indexOf(lcSearchTerm, i+1);
        if (i < 0) {
            newText += bodyText;
            bodyText = "";
        } else {
            // skip anything inside an HTML tag
            if (bodyText.lastIndexOf(">", i) >= bodyText.lastIndexOf("<", i)) {
                // skip anything inside a <script> block
                if (lcBodyText.lastIndexOf("/script>", i) >= lcBodyText.lastIndexOf("<script", i)) {
                newText += bodyText.substring(0, i) + highlightStartTag + bodyText.substr(i, searchTerm.length) + highlightEndTag;
                    bodyText = bodyText.substr(i + searchTerm.length);
                    lcBodyText = bodyText.toLowerCase();
                    i = -1;
                }
            }
        }
    }

    return newText;
}

// Suchtext auswerten und Wortgruppen/Wörter in Array ablegen
Highlighter.highlightSearchTerms = function(searchText, contentArea, highlightStartTag, highlightEndTag)
{
    searchText = decodeURIComponent(searchText);    
    var matchGroups = searchText.match(/"([^"]+)"/gi);

    if (matchGroups.length > 0)
    {
        var searchArray = new Array(matchGroups.length);
        for (var i = 0; i < matchGroups.length; i++)
        {
            searchArray[i] = matchGroups[i].replace(/"/gi, "").replace(/\+/gi, " ");
        }

        if (contentArea == undefined) {
            //alert("Bereich exisitiert nicht.");
            return false;
        }

        var newText = contentArea.innerHTML;

        for (var j = 0; j < searchArray.length; j++)
        {
            newText = Highlighter.doHighlight(newText, searchArray[j], highlightStartTag, highlightEndTag);
        }

        contentArea.innerHTML = newText;
        
        return true;
    }
    else
    {
        return false;
    }
}

// Parameter einer URL auslesen
Globals.getUrlParamer = function(key, url) {
    if(arguments.length < 2) url = location.href;
    if(arguments.length > 0 && key != ""){
        if(key == "#"){
            var regex = new RegExp("[#]([^$]*)");
        } else if(key == "?"){
            var regex = new RegExp("[?]([^#$]*)");
        } else {
            var regex = new RegExp("[?&]"+key+"=([^&#]*)");
        }
        var results = regex.exec(url);
        return (results == null )? "" : results[1];
    } else {
        url = url.split("?");
        var results = {};
        if(url.length > 1){
            url = url[1].split("#");
            if(url.length > 1) results["hash"] = url[1];
            url[0].split("&").each(function(item,index){
                item = item.split("=");
                results[item[0]] = item[1];
            });
        }
        return results;
    }
}

window.addEvent('domready', function() {
    // Suche nicht auswerten
    if (location.href.search(/\/suche.php/) === -1)
    {
        var getVariable = Globals.getUrlParamer();
        if (getVariable.q != undefined) Highlighter.highlightSearchTerms(getVariable.q, $('content'));
    }
});
