/**
 * Class to handle the URL.
 */
module.exports =
{
	/**
	 * Gets the value of a URL variable.
	 *
	 * @param {string} key The variable name
	 */
	getQuery: function(key) {
		var regExp = new RegExp('[\?\&]'+ key +'=([^\&]*)(\&?)', 'i');
		var value = location.search.match(regExp);

		return value ? value[1] : value;
	}
	
	/**
	 * Sets the value of a URL variable.
	 *
	 * @param {string} key The variable name
	 * @param {string} value The new value
	 */
	,setQuery: function(key, value) {
		var changed = true;
		var found = false;
		var newPair = key +'='+ value;
		var kvPairs = location.search.substr(1).split('?');

		for (var i = 0; i < kvPairs.length; i++) {
			var kvPair = kvPairs[i].split('=', 1);
			
			if (kvPair[0] == key) {
				if (kvPair[1] != value)
					kvPairs.splice(i, 1, newPair);
				else
					changed = false;

				found = true;
				break;
			}
		}

		if (!found)
			kvPairs.push(newPair);
		
		if (changed)
			document.location.hash = '?'+ kvPairs.join('&');
	}
	
	,makeUri: function(map) {
		var post = '';
	
		for (var key in map) {
			var value = map[key];
				
			if (value === null || value === undefined)
				continue;
			if (typeof value == 'boolean')
				value = value ? '1' : '0';
			if (post.length > 2)
				post += '&';

			post += encodeURIComponent(key) +'='+ encodeURIComponent(value);
		}
	
		return post;
	}
};