function TrimString(s) {
	return s.replace(/^\s+|\s+$/,""); 
}

/**
*
* URL encode / decode
* http://www.webtoolkit.info/
*
**/

var Url = {

    // public method for url encoding
    encode : function (string) {
        return escape(this._utf8_encode(string));
    },

    // public method for url decoding
    decode : function (string) {
        return this._utf8_decode(unescape(string));
    },

    // private method for UTF-8 encoding
    _utf8_encode : function (string) {
        string = string.replace(/\r\n/g,"\n");
        var utftext = "";

        for (var n = 0; n < string.length; n++) {

            var c = string.charCodeAt(n);

            if (c < 128) {
                utftext += String.fromCharCode(c);
            }
            else if((c > 127) && (c < 2048)) {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            }
            else {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }

        }

        return utftext;
    },

    // private method for UTF-8 decoding
    _utf8_decode : function (utftext) {
        var string = "";
        var i = 0;
        var c = c1 = c2 = 0;

        while ( i < utftext.length ) {

            c = utftext.charCodeAt(i);

            if (c < 128) {
                string += String.fromCharCode(c);
                i++;
            }
            else if((c > 191) && (c < 224)) {
                c2 = utftext.charCodeAt(i+1);
                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                i += 2;
            }
            else {
                c2 = utftext.charCodeAt(i+1);
                c3 = utftext.charCodeAt(i+2);
                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                i += 3;
            }

        }

        return string;
    }

}

function urlAddParameter(url, param_name, param_value) {
	var result = url;
	var param_separator_pos = url.indexOf("?");
	if (param_separator_pos == -1) result += "?";
	else if (TrimString(url.substring(param_separator_pos)) != "?") result += "&";
	result += param_name + "=" + param_value;
	return result;
}

function urlGetQueryPart(url) {
	var pos = url.indexOf("?");
	if (pos == -1) return "";
	else return url.substring(pos + 1);
}

function urlGetParameter(url, param_name) {
	var url_query = urlGetQueryPart(url);
	var parameters = url_query.split("&");
	param_name = param_name.toLowerCase();
	var result;
	for(var i = 0; i < parameters.length; i++) {
		var parameter = parameters[i];
		var param_parts = parameter.split("=");
		if (param_parts[0].toLowerCase() == param_name) {
			result = new Array();
			if (url.indexOf("&" + parameter) != -1)
				result['separator'] = "&";
			else if (url.indexOf("?" + parameter) != -1)
				result['separator'] = "?";
			result['string'] = parameter;
			result['name'] = param_parts[0];
			result['value'] = param_parts[1];
			return result;
		}
	}
	return null;
}

function urlGlobalReplace(str, findStr, replaceStr) {
	var pos = 0;
	while(pos != -1) {
		pos = str.indexOf(findStr);
		if (pos != -1) {
			str = str.replace(findStr, replaceStr);
		}
	}
	return str;
}

function urlSetParameter(url, param_name, param_value) {
	var found_param = urlGetParameter(url, param_name);
	if (found_param == null) return urlAddParameter(url, param_name, param_value);
	else {
		return url.replace(found_param['separator'] + found_param['string'], found_param['separator'] + found_param['name'] + "=" + param_value);
	}
}

function urlDeleteParameter(url, param_name) {
	var found_param = urlGetParameter(url, param_name);
	if (found_param != null) {		
		url = url.replace(found_param['separator'] + found_param['string'], "");
		if (found_param['separator'] == "?") {
			var pos = url.indexOf("&");
			if (pos != -1) url = url.substring(0, pos - 1) + "?" + url.substring(pos + 1);
		}
		return url;
	}
	else return url;
}

function urlGetParameterString() {
	return window.location.search.substr(1);
}


