/// <summary>
    /// Returns URL of the media item according site settings.
    /// </summary>
    /// <param name="argument">Argument containing information on current media item</param>
    /// <param name="height">Item height in px</param>
    /// <param name="width">Item width in px</param>
    /// <param name="maxSideSize">Maximum dimension for images displayed for thumbnails view</param>
    /// <param name="notAttachment">True if this is not an attachement</param>
    public string GetItemUrl(string argument, int height, int width, int maxSideSize, bool notAttachment)
    {
        Hashtable argTable = GetArgumentsTable(argument);

        if (argTable.Count >= 2)
        {
            string url;

            // Get image URL
            switch (SourceType)
            {
            case MediaSourceEnum.Content:
            {
                // Get information from argument
                Guid   nodeGuid           = ValidationHelper.GetGuid(argTable["nodeguid"], Guid.Empty);
                string documentUrlPath    = argTable["documenturlpath"].ToString();
                string nodeAlias          = argTable["nodealias"].ToString();
                string nodeAliasPath      = argTable["nodealiaspath"].ToString();
                string documentExtensions = argTable["documentextensions"].ToString();
                string documentClass      = argTable["classname"].ToString();
                bool   nodeIsLink         = (ValidationHelper.GetInteger(argTable["nodelinkednodeid"], 0) != 0);
                string siteName           = argTable["sitename"].ToString();

                // Get default url extension for current item
                string fileExt = !String.IsNullOrEmpty(documentClass) && (documentClass.ToLowerCSafe() == "cms.file") ? TreePathUtils.GetFilesUrlExtension(siteName) : TreePathUtils.GetUrlExtension(siteName);

                // If extension less try to get custom document extension
                if (String.IsNullOrEmpty(fileExt))
                {
                    fileExt = (!String.IsNullOrEmpty(documentExtensions) ? documentExtensions.Split(';')[0] : String.Empty);
                }

                // Get content item URL
                url = GetContentItemUrl(nodeGuid, documentUrlPath, nodeAlias, nodeAliasPath, nodeIsLink, height, width, maxSideSize, notAttachment, fileExt);
            }
            break;

            case MediaSourceEnum.MetaFile:
            {
                // Get information from argument
                Guid   attachmentGuid = ValidationHelper.GetGuid(argTable["metafileguid"], Guid.Empty);
                string attachmentName = argTable["name"].ToString();

                // Get item URL
                url = GetMetaFileItemUrl(attachmentGuid, attachmentName, height, width, maxSideSize);
            }
            break;

            default:
            {
                // Get information from argument
                Guid   attachmentGuid = ValidationHelper.GetGuid(argTable["attachmentguid"], Guid.Empty);
                string attachmentName = argTable["name"].ToString();
                string nodeAliasPath  = string.Empty;
                if (TreeNodeObj != null)
                {
                    nodeAliasPath = TreeNodeObj.NodeAliasPath;
                }

                // Get item URL
                url = GetAttachmentItemUrl(attachmentGuid, attachmentName, nodeAliasPath, height, width, maxSideSize);
            }
            break;
            }

            return(url);
        }

        return(string.Empty);
    }