var template, result;
function htmlEscape(str) {
    return String(str)
            .replace(/&/g, '&')
            .replace(/"/g, '"')
            .replace(/'/g, ''')
            .replace(//g, '>');
}
function navigateTo (url) {
    jsonurl = url.replace ("index", "getJSON");
    $.getJSON(jsonurl, function(data) {
        history.pushState(data, "", url);
        updatePage (data);
    });
}
function updatePage (data) {
    result = template (data);
    document.title = data.title;
    $(".container").html (result);
    
    ajaxifyLinks ();
}
function ajaxifyLinks () {
    if (history.pushState) {
        $("a[href^='index']").click (function (event) {
            event.preventDefault(); 
            var url = $(this).attr('href');
            navigateTo (url);
        });
    }
}
window.onpopstate = function(event) {
    updatePage (event.state);
};
 $(document).keydown(function(e){
    if (e.keyCode == 37 && $("#prevLink").length > 0) {
        navigateTo ($("#prevLink").attr('href'));
    }
    if (e.keyCode == 39  && $("#nextLink").length > 0) {
        navigateTo ($("#nextLink").attr('href'));
    }
});