/*
 * Object for the parsing and manipulation of query parameters.
 *
 * This code is based on querystring.js by Adam Vandenberg, which is available
 * at <http://adamv.com/dev/javascript/querystring>.
 */
function QueryParams(queryString) {
    this.params = new Object();
    
    if (queryString == null)
        queryString = location.search.substring(1, location.search.length);
    if (queryString.length == 0)
        return;

    queryString = queryString.replace(/\+/g, " ");
    var args = queryString.split("&");
    for (var i = 0; i < args.length; i++) {
        var pair = args[i].split("=");
        var name = unescape(pair[0]);
        var value = (pair.length == 2) ? unescape(pair[1]) : null;
        this.params[name] = value;
    }
}

QueryParams.prototype = {
    /*
     * Return the requested query parameter.
     */
    getOr: function(name, defaultValue) {
        // Changes undefined to null
        if (defaultValue == null)
            defaultValue = null;
        return YAHOO.lang.hasOwnProperty(this.params, name)
            ? this.params[name] : defaultValue;
    },

    /*
     * Converts the query parameters back into URL-encoded string form.
     */
    toString: function() {
        var pairs = [];
        for (i in this.params)
            pairs.push(escape(i) + "=" + escape(this.params[i]));
        return pairs.join("&");
    }
}

function updatePerPage(itemsPerPage) {
    var queryParams = new QueryParams();
    queryParams.params['per_page'] = itemsPerPage;
    queryParams.params['page'] = 1;
    document.location.href = document.location.pathname + '?'
        + queryParams.toString();
}

function updatePerPageOnKeyPress(e, itemsPerPage) {
    if (window.event)
        var keycode = window.event.keyCode;
    else if (e)
        var keycode = e.which;
    else
        return true;

    if (keycode == 13)
        updatePerPage(itemsPerPage);
}

