var languages = {
    "java" : "https://github.com/eclipse/paho.mqtt.java",
    "python" : "https://github.com/eclipse/paho.mqtt.python"
}


var snippets;
var snippetSearchValue = "";
getIndex();


// Add Watcher to Search Box
setInterval(function() { updateSearch($('#snippet-search').val()); }, 100);

function updateSearch(value){
    if(snippetSearchValue !== value){
        snippetSearchValue = value.toLowerCase();
        var snippetSearchTags = snippetSearchValue.split(/[ ,]+/).filter(Boolean);
        for(var key in snippets){
            if(tagCompare(key.toLowerCase(),snippetSearchTags)){
                $(".snippet-" + snippets[key]['classIndex']).removeClass('hidden');
            } else {
                $(".snippet-" + snippets[key]['classIndex']).addClass('hidden');
            }
        }
    }
}

function tagCompare(sup, sub){
    for(var i = 0; i < sub.length; i++){
        if(sup.indexOf(sub[i]) === -1){
            return false;
        }
    }
    return true;

}


function updatePage(snippet_name){
    if(!isEmpty(snippet_name)){
        loadSnippet(snippet_name)
    } else {
        showIndex();
    }
}




function getIndex(){
    $.getJSON("paho-examples/index.json", function(data) {
        var items = []
        snippets = data;
        var index = 0;
        $.each(data, function(key, val){
            items.push("<div class=\"item col-xs-4 col-lg-4 snippet-" + index + "\">\
                            <div class=\"panel panel-default\">\
                                <div class=\"panel-heading\">\
                                    <a href='examples.php?path=" + val['file'] + "'><h3 class=\"panel-title\">" + key + "</h3></a>\
                                </div>\
                                <div class=\"panel-body\">\
                                    " + val["description"]+ "\
                                </div>\
                            </div>\
                        </div>");
                        snippets[key]['classIndex'] = index;
                        ++index;
        });
        $( ".snippet-list" ).html(items.join( "" ));

       // If we are currently on a specific snippet, load it
       var snippetName = window.location.hash.substr(1);
       if(!isEmpty(snippetName)){
           loadSnippet(snippetName)
       } else {
           showIndex();
       }
    });
}

function showIndex(){
    // Set Title of page
    setTitle("Paho Example Snippets");
    document.title = "Paho Examples";
    // Hide/Show Divs
    $('.snippet').hide();
    $('.snippet-index').show();
}

$(window).on('hashchange', function() {
    var snippetName = window.location.hash.substr(1);
    updatePage(snippetName);
});

function isEmpty(str) {
    return (!str || 0 === str.length);
}
