/*
requires: jquery/jquery.js
*/

var AWCOURLUtil = $.extend({},{

	extractGetVarFromURL: function(get_var_name, url) {
		var get_vars = this.extractGetVarsFromURL(url);
		// AWCCMSUtil.debugLog('extractGetVarFromURL url='+url+' get_vars='+AWCCMSUtil.dumpObject(get_vars));
		return get_vars[get_var_name];
	},

	// returns an object of GET vars
	extractGetVarsFromURL: function(url) {
		var get_vars = {};
		var url_string = ''+url;
		var offset = url_string.indexOf('?');
		if (offset > 0) {
			var get_string = url_string.substring(offset+1);
			get_vars = this.extractGetVarsFromQueryString(get_string);
		}
		return get_vars;
	},
	
	extractGetVarsFromQueryString: function(get_string) {
		var get_vars = {};
		var fields = get_string.split('&');
		for (var f = 0; f < fields.length; f++) {
			var field = fields[f].split('=');
			get_vars[unescape(field[0].replace(/\+/g, ' '))] = unescape(field[1].replace(/\+/g, ' '));
		}
		return get_vars;
	},

	stripURLOfGetVars: function(url) {
		var url_string = ''+url;
		var offset = url_string.indexOf('?');
		if (offset > 0) {
			var out_url_string = url_string.substring(0,offset);
		} else {
			var out_url_string = url_string;
		}
		return out_url_string;
	},

	addGetVarToURL: function(key, val, url) {
		get_vars = {};
		get_vars[key] = val;
		return this.addGetVarsToURL(get_vars, url);
	},

	// adds or replaces all get_vars in url
	addGetVarsToURL: function(new_get_vars, url) {
		var url_string = ''+url;

		var old_get_vars = this.extractGetVarsFromURL(url_string);
		var combined_get_vars = this.combineGetVars(old_get_vars, new_get_vars);

		var out_url_string = this.stripURLOfGetVars(url_string);
		var first = true;
		for(var key in combined_get_vars) {
			if (first) { 
				out_url_string += '?'; first = false; 
			} else {
				out_url_string += '&';
			}
			out_url_string += encodeURIComponent(key).replace(/%2B/g,'+') + '=' + encodeURIComponent(combined_get_vars[key]).replace(/%2B/g,'+');
			
		}

		return out_url_string;
	},
	
	appendGetVarStringToURL: function(get_string, url) {
		var get_vars = this.extractGetVarsFromQueryString(get_string);
		return this.addGetVarsToURL(get_vars, url);
	},

	appendGetVarStringToGetVars: function(get_string, get_vars) {
		var new_get_vars = this.extractGetVarsFromQueryString(get_string);
		return this.combineGetVars(get_vars, new_get_vars);
	},
	
	
	combineGetVars: function(old_get_vars, new_get_vars) {
		var combined_get_vars = {};
		for (var k in old_get_vars) {
			combined_get_vars[k] = old_get_vars[k];
		};
		for (var k in new_get_vars) {
			combined_get_vars[k] = new_get_vars[k];
		};
		return combined_get_vars;
	},
	
	randomGetVar: function(length) {
		if (typeof length == 'undefined') length = 5;
		var get_var = '';
		for (var n=0; n < length; n++) {
			var i = Math.round(Math.random() * (62-1));
			if (i < 10) { 
				// 0-9 (48-57)
				get_var = get_var + String.fromCharCode(i+48); 
			} else if (i < 36) { 
				// 10 - 35 (55-90)
				get_var = get_var + String.fromCharCode(i+55); 
			} else { 
				// 36 - 61 (97 - 122)
				get_var = get_var + String.fromCharCode(i+61); 
			}
		}
		return get_var;
	},
	
	
	__end:null
});
