function onCategorySelected() {
    var sCat = $('#mplf_category :selected').val();
    if (sCat!='') {
        changeCategoryLocation(sCat);     
    }
}

function changeCategoryLocation(sCat) {
    var c = getContext();
    var sUrl = c.reqpath_cat+"/"+sCat+".kategorien.html";   
    window.location.href=sUrl;
}


function getContext() {
    return {
        basepath:    Drupal.settings.srdrsmundartplattform_basepath,
        reqpath:     Drupal.settings.srdrsmundartplattform_requestpath,
        reqpath_cat: Drupal.settings.srdrsmundartplattform_requestpath_category,
        cat:         Drupal.settings.srdrsmundartplattform_cat,
        cmd:         Drupal.settings.srdrsmundartplattform_cmd
    } 
}

var mundartLiveSearch = function(sContainerId, aDict) {
    
    var oContainer = $("#"+sContainerId);    
    var aDictionary = aDict;
    var sContentSsi = '/www/ssi/mundartplattform/kanalansicht/';    

    
    return {
    sCurrentQuery: '',
    MaxResults: 25,
    
    searchTermPrepare: function(sTerm) {
        /*
        * replace vowel with any character.
        * In case of two subsequent vowels, only
        * substitute the first.
        */
        var sVowels = "aeiouyäöü";
        var oVocReg = new RegExp("(["+sVowels+"])?(["+sVowels+"])", "g"); 
        var sT = sTerm.replace(oVocReg, function($0, $1, $2) {
            return $1 ? "["+sVowels+"]{1,2}"+$2 : "["+sVowels+"]{1,2}";             
        });
        return sT; 
    },
    
    searchTerm: function(sTerm) {
        var oMatched = new Array(); 
        
        sSearch = this.searchTermPrepare(sTerm);
        this.sCurrentQuery = sSearch;
        mls = this;

        oReg = new RegExp(sSearch, "i");
        $.each(aDictionary, function(iIndex) {
            if(oMatched.length>=mls.MaxResults) return oMatched;
            if(sSearch!=mls.sCurrentQuery) { throw ('ret'+" "+mls.sCurrentQuery+" nicht mehr "+sSearch); return; } // Abbrechen, wenn der Begriff geaendert hat...
            var oTerm = aDictionary[iIndex];
            if (!oTerm || !oTerm.title || oTerm.title == "") {
                return;
            }    
            var aWords = oTerm.title.split(",");
            var aMatches = new Array();
            for (var w=0; w<aWords.length; w++) { 
              var sWord = aWords[w].replace(/^\s+|\s+$/,'');
              if (!oReg.test(sWord)) continue;
              aMatches.push(sWord);
            }
            if (aMatches.length > 0) {
              oMatched.push({key: iIndex, matched: aMatches});
            }
        });
        return oMatched;
    },

    livesearch: function(sInput) {
        if (sInput.length < 2 || sInput=='Wort eingeben') {
            this.hide();
            return;
        }
        var aMatches = this.searchTerm(sInput);
        if (aMatches.length > 0) {
            this.show(aMatches, sInput)
        } else {
            this.hide();
        }
    },   

    show: function(aTermIndex, sTerm) {
        if (!oContainer) {
            return false;
        }
        var oDiv = this.result(aTermIndex); 
        this.resultTitle(sTerm);
        oContainer.append(oDiv);
        oContainer.show();
        return true; 
    },

    resultTitle: function(sTerm) {
        if (!oContainer) {
            return;
        } 
        var oH2 = oContainer.find("h2");
        if (oH2) {
            oH2.html("Ergebnisse f&#252;r &#171;"+sTerm+"&#187;");
        }
    },

    resultRemove: function() {
        var oDiv = oContainer.find("div");
        if (oDiv) {
            oDiv.remove();
        }
    },

    result: function(aTermIndex) {
        this.resultRemove();
        var oDiv = $(document.createElement('div'));
        for(var i=0; i<aTermIndex.length; i++) {
            var oTerm = aDictionary[aTermIndex[i].key];
            if (!oTerm || !oTerm.title || oTerm.title == "") {
                continue;
            }
            var args = [
                aTermIndex[i],
                aDictionary[aTermIndex[i].key], 
                oDiv
            ];
            this.resultElementLoad(args);
        }
        return oDiv; 
    },
   
    resultElementLoad: function(aArgs) {
        
        this.resultElementLoaded(aArgs[0], aArgs[1], aArgs[2]); 
    },
 
    resultElementLoaded: function(oTerm, aValue, eParent) {
        eParent.append(this.resultElement(oTerm, aValue.desc));
        eParent.append(this.resultElementContent(aValue.k));
        return eParent;
    },

    resultElement: function(oTerm, sValue) {
        var oH4 = $(document.createElement('h4'));
        var oH4a = $(document.createElement('a'));
        oH4a.addClass('dot_link');
        oH4a.attr('href', this.resultElementLink(oTerm.key));    
        oH4a.html(this.resultElementHLTitle(sValue, oTerm.matched));
        oH4.append(oH4a); 
        return oH4;
    },
   
    resultElementHLTitle: function(sTitle, aMatches) {
        var sHl = sTitle;
        for (var w=0; w<aMatches.length; w++) {
            var hl = '<span style="background-color:#ffff66">';
            hl+= aMatches[w]+'</span>'; 
            sHl = sHl.replace(aMatches[w], hl);
        }
        return sHl;
    },
     
    resultElementContent: function(sContent) {
        var oP = $(document.createElement('p'));
        var oSpan = $(document.createElement('span'));
        oSpan.addClass('subtitle');
        oSpan.html(sContent);
        oP.html(oSpan);
        return oP;
    },
   
    getContentUrl: function(sKey) {
        return sContentSsi + sKey;
    },
     
    resultElementLink: function(iNodeId) {
        var ctxt = getContext();
        if (!ctxt) {
            return "";
        }
        var p = "/" + ctxt.basepath;
        p += ctxt.reqpath + "/mundartplattform/";
        p += iNodeId + ".mundartwort.html"; 
        return p;
    },

    hide: function() {
        oContainer.hide();
    }
}
}

