(function(tools){
	
	// public
	tools.urlparams = function(url) {
		// Version: 2009 05 13
		// qstring
		var qstring = (url+'').split('?').slice(1).join('?');
		// get params from url
		var paramstrs = qstring.split('&');
		var params = {};
		for(index in paramstrs) {
			if (paramstrs[index]=='') continue;
			var keyval = paramstrs[index].split('=');
			var key = keyval[0];
			var val = (typeof keyval[1] != 'undefined') ? keyval[1] : '';
			params[key] = val;
		}
		// return param associative array
		return params;
	}
	tools.urlparam = function(url,paramkey) {
		// Version: 2009 05 13
		// qstring
		var qstring = (url+'').split('?').slice(1).join('?');
		// get params from url
		var paramstrs = qstring.split('&');
		var params = {};
		for(index in paramstrs) {
			if (paramstrs[index]=='') continue;
			var keyval = paramstrs[index].split('=');
			var key = keyval[0];
			var val = (typeof keyval[1] != 'undefined') ? keyval[1] : '';
			params[key] = val;
		}
		// return param associative array
		return params[paramkey];
	}	
	tools.stripparams = function(url) {
		// url
		var urlnoparams = url.split('?').shift();
		return urlnoparams;
	}
	tools.makeurl = function(url,newparams) {
		// Version: 2009 12 03
		// url
		var urlparams = tools.urlparams(url);
		var urlnoparams = (url+'').split('?').shift();		
		// array of strings
		var paramstrs = [];
		for(index in urlparams) {
			if (urlparams[index]==null) continue;
			if (typeof newparams[index] != "undefined") continue;			
			paramstrs.push(index+'='+urlparams[index]);
		}
		for(index in newparams) {
			if (newparams[index]==null) continue;
			paramstrs.push(index+'='+newparams[index]);
		}
		// return
		var paramstr = paramstrs.join('&');
		if (paramstr=='') {
			url =  urlnoparams;
		} else {
			url = urlnoparams+'?'+paramstr;
		}
		return url;
	}
	
	
})(window.tools = (window.tools) ? window.tools : {});