function URLEncode (clearString) 
{
    var output = '';
    var x = 0;
    clearString = clearString.toString();
    var regex = /(^[a-zA-Z0-9_.]*)/;
    while (x < clearString.length) 
    {
        var match = regex.exec(clearString.substr(x));
        if (match != null && match.length > 1 && match[1] != '') 
        {
            output += match[1];
            x += match[1].length;
        } 
        else 
        {
            if (clearString[x] == ' ')  output += '+';
            else 
            {
                var charCode = clearString.charCodeAt(x);
                var hexVal = charCode.toString(16);
                output += '%' + ( hexVal.length < 2 ? '0' : '' ) + hexVal.toUpperCase();
            }
            x++;
        }
    }
    return output;
}

function GetURLWOQueryString()
{
    var onlyURL = location.href.split("?");
    return onlyURL[0];
}

function AddOrReplaceQueryParameter(locationSearch, paramName, paramValue)
{   
    paramValue = URLEncode(paramValue);
    
    var qs         = locationSearch;    
    var parameters = qs.split("&");
    var added      = false;
    var i          = 0;
    var result     = "";
    
    for (i = 0; i < parameters.length; i++)
    {
        var nameValue = parameters[i].split('=');
        if (nameValue[0] == paramName)
        {
            if (paramValue != '')   parameters[i] = paramName + "=" + paramValue;
            else parameters.splice(i, 1);
            added         = true;
            break;
        }
    }
    
    if (!added)
    {
        parameters.push(paramName + "=" + paramValue); 
    }
    
    for (i = 0; i < parameters.length; i++)
    {
        result = result + (result == "" ? "" : "&") + parameters[i];
    }
    //alert("AddOrReplaceQueryParameter: " + result);
    return result;
}