function UrlHandler(inputUrl) {

	var _url = "";
	var _params = new Array();
	//
	this.refresh = refresh;  
	this.getUrl = getUrl;  
	this.containsKey = containsKey;
    this.getValue = getValue;
    this.add = add;
    this.toString = toString;   

	function refresh() {
		_url = "";		
		_params = new Array();
		//
		var cUrl = inputUrl + "";
		// seperate url and parameters
		var partsArr = cUrl.split("?");
		_url = partsArr[0];
		// analyse params
		if(partsArr.length > 1) {		
			var paramArr = partsArr[1].split("&");			
			for(var i=0; i < paramArr.length; i++) {
				_params.push(paramArr[i]);
			}
		}
	}	
	
	function getUrl() {
		return _url;
	}
	
	function containsKey(key) {
		return getValue(key) != null;	
	}
	
	function getValue(key) {
		key = key.toLowerCase();        
        for(var i=0; i < _params.length; i++) {
            var valueArr = _params[i].split("=");
            if(valueArr.length == 2) {
                if(valueArr[0].toLowerCase() == key) {
                    return unescape(valueArr[1]);
                }
            }
        }
        return null;
	}
	
	function add(key, value) {
		_params.push(key + "=" + value);
	}

	function toString() {
		var resultUrl = _url;
		// append 
		resultUrl += _params.length > 0 ? "?" : "";
		// append params
		for(var i=0; i < _params.length; i++) {			
			var valueArr = _params[i].split("=");
            if(valueArr.length == 2) {
                resultUrl += valueArr[0];
                resultUrl += "=";
				resultUrl += escape(valueArr[1]);
				//
				resultUrl += _params.length - 1 > i ? "&" : ""; 
            }			
		}
		// result complete url
		return resultUrl;
	}

}