var queryStringHandler = function(query) {

    var extractValueFrom = function(keyArg, preserveCase) {
        var paramVal = "";

        var regex = new RegExp("[\\?&]" + keyArg + "=([^&#]*)", preserveCase ? "" : "i");
        var keyVal = regex.exec(query);
        if (keyVal !== null) 
            paramVal = keyVal[1];

        return unescape(paramVal);
    };

    var getParameter = function(key, defaultValue) {
        var result = extractValueFrom(key, false);
        return result !== "" ? result : defaultValue;
    };
    
    var buildQueryFrom = function(keys) {
        var url = "";
        for(var key = 0; key < keys.length; key++) {
            url += buildUrl(keys[key]);
        }
        return url.substring(1);
    };

    var buildUrl = function(key) {
        var value = getParameter(key);
        return value ? "&" + key + "=" + value : "";
    };
    
    return {
    	extractValueFrom: extractValueFrom,
    	getParameter: getParameter,
    	buildQueryFrom: buildQueryFrom
    };
};

