var CHRONOSHARE;

var PAGE; // no default page anymore (no reason to have)
var PARAMS = [ ];
var URIPARAMS = "";

function nav_anchor (aurl) {
    aurl = aurl.split('#');
    if (aurl[1])
    {
        aurl_split = aurl[1].split ('&');
        page = aurl_split[0];

        vars = [ ];
        for (var i = 1; i < aurl_split.length; i++)
        {
            hash = aurl_split[i].split('=');
            vars.push(hash[0]);
            // there is strange double-encoding problem...
            vars[hash[0]] = decodeURIComponent (decodeURIComponent (hash[1]));
        }

        if (page != PAGE)
        {
            PAGE = page;
            PARAMS = vars;
            URIPARAMS = aurl[1];

            if (CHRONOSHARE) {
                CHRONOSHARE.run ();
            }
        }
        else if (aurl[1] != URIPARAMS)
        {
            PARAMS = vars;
            URIPARAMS = aurl[1];

            if (CHRONOSHARE) {
                CHRONOSHARE.run ();
            }
        }
    }
}

$(document).ready (function () {
    nav_anchor (window.location.href);

    if (!PARAMS.user || !PARAMS.folder)
    {
        $("#error").html ("user and folder must be be specified in the URL");
        $("#error").removeClass ("hidden");
        return;
    }
    else {
        // update in-page URLs
        $(".needs-get-url").each (function (index,element) {
            this.href += "&user="+encodeURIComponent (encodeURIComponent (PARAMS.user))
                + "&folder="+encodeURIComponent (encodeURIComponent (PARAMS.folder));
        });
        $(".needs-get-url").removeClass ("needs-get-url");
    }

    CHRONOSHARE = new ChronoShare (PARAMS.user, PARAMS.folder);
    CHRONOSHARE.run ();

    $(window).on('hashchange', function() {
        nav_anchor (window.location.href);
    });
});

