﻿var UrlTool = {

PAGE_VERB_PARAM_NAME : "pageverb",

lastUserPageInfo : null,

parametrizeUrl : function(url, paramNames, paramValues)
{
    var res = url;
    
    do
    {
        if (!paramNames) break;
        
        var addedCount = 0;
        
        for (var i = 0; i < paramNames.length; ++i)
        {
            var name = paramNames[i];
            var val = paramValues[i];
            
            if (!name || !val || val == "") continue;
            
            res += (addedCount > 0) ? "&" : "?";            
            res += name + "=" + val;
                        
            ++addedCount;
        }
    }
    while(0);
    
    return res;
},

makeUserPageLink : function(userDirUrl, id, actionVerb, paramNames, paramValues)
{
    var res = null;
    
    do    
    {
        var g = Global;
    
        if (!userDirUrl) userDirUrl = StringTool.format(
             "http://{0}{1}{2}user/",
             g.host,
             g.root,
             g.aspNetPath);
    
        // form url (http://site.com/Foo.aspx)
        if (!id) break;
        res = userDirUrl + id + ".aspx";
        
        // params
        if (!paramNames) paramNames = [];
        if (!paramValues) paramValues = [];
        
        var allParamNames = paramNames.concat(UrlTool.PAGE_VERB_PARAM_NAME);            
        var allParamValues = paramValues.concat(actionVerb);

        res = UrlTool.parametrizeUrl(res, allParamNames, allParamValues);
    }    
    while(0);
    
    return res;
},

parseParams: function(paramsString)
{
    // delete <#>
    var sharpPos = paramsString.indexOf("#");
    
    if (sharpPos != -1)
    {
        paramsString = paramsString.substr(0, sharpPos);
    }

    var params = [];
    params.obj = {};
    
    do
    {
        if (!paramsString) break;
        
        var pairs = paramsString.split("&");
        if (!pairs) break;
        
        for (var i = 0; i < pairs.length; ++i)
        {
            var pair = pairs[i];
            if (!pair) continue;
            
            var tokens = pair.split("=");
            if (tokens && tokens[0] && tokens[1])
            {
                var p = {name: tokens[0], value: tokens[1]};
                params.push(p);
                params.obj[p.name] = p.value;
            }
        }
    }
    while(0);
    
    return params;
},

getRequestParams: function(url)
{
    if (!url) url = location.href;

    var params = [];
    params.obj = {};

    do
    {
        var beg = url.indexOf("?");
        if (beg < 0) break;
        
        paramStr = url.substr(beg + 1);
        if (!paramStr) break;
        
        params = UrlTool.parseParams(paramStr);
    }
    while(0);
    
    return params;
},

getUserPageInfo : function()
{
    var res = UrlTool.lastUserPageInfo;
    if (res) return res;
    
    var fullUrl = location.href;

    var questMarkPos = fullUrl.indexOf("?");
    if (questMarkPos < 0)
    {   
        var lastSlashPos = fullUrl.lastIndexOf("/");
        var dotPos = fullUrl.indexOf(".", lastSlashPos);
        var id = fullUrl.substring(lastSlashPos + 1, dotPos);
        
        res = {
            userDirUrl: fullUrl.substr(0, lastSlashPos + 1),
            id: id,
            actionVerb: ""
        };
    }
    else
    {
        var lastSlashPos = fullUrl.lastIndexOf("/");
        var dotPos = fullUrl.indexOf(".", lastSlashPos);
        var id = fullUrl.substring(lastSlashPos + 1, dotPos);
        
        var paramsStr = fullUrl.substr(questMarkPos + 1);
        var params = UrlTool.parseParams(paramsStr);
        
        var actionVerb = params.obj[UrlTool.PAGE_VERB_PARAM_NAME];
        
        res = {
            userDirUrl: fullUrl.substr(0, lastSlashPos + 1),
            id: id,
            actionVerb: actionVerb ? actionVerb : ""
        };
    }
    
    UrlTool.lastUserPageInfo = res;
    return res;
},

goUserPage : function(userDirUrl, id, actionVerb, paramNames, paramValues)
{
    var url = UrlTool.makeUserPageLink(userDirUrl, id, actionVerb, paramNames, paramValues);
    location.href = url;
},

makeCommonPageLink: function(id, actionVerb)
{
    var _g = Global;
    
    var url = _format("http://{0}{1}{2}{3}.aspx", _g.host, _g.root, _g.aspNetPath, id);
    
    if (actionVerb)
    {
        url += _format("?{0}={1}", UrlTool.PAGE_VERB_PARAM_NAME, actionVerb)
    }
    
    return url;
},

goCommonPage: function(id, actionVerb)
{
    var url = UrlTool.makeCommonPageLink(id, actionVerb).toLowerCase();
    location.href = url;
}

};


