private bool ImagePathIsResolvable(string imagePath)
        {
            DebugGuard.ArgumentIsNotNullOrEmpty(imagePath, "imagePath");

            if (imagePath.StartsWith("http") ||
                imagePath.StartsWith("/") ||
                imagePath.StartsWith("#") ||
                imagePath.StartsWith("$") ||
                Regex.IsMatch(imagePath, @"[^A-Z,a-z,0-9,_,\-,/,\.]") ||
                string.IsNullOrEmpty(Path.GetExtension(imagePath)))
            {
                return(false);
            }

            var fileExtension = Path.GetExtension(imagePath);

            return(fileExtension.ToLower() != "css" && fileExtension.ToLower() != "js");
        }
        private string ResolveImagePath(string imagePath, string contextFolderWebDavUrl)
        {
            DebugGuard.ArgumentIsNotNullOrEmpty(imagePath, "imagePath");
            DebugGuard.ArgumentIsNotNullOrEmpty(contextFolderWebDavUrl, "contextFolderWebDavUrl");

            Logger.Debug("Resolving image path: " + imagePath);

            var imageWebDavUrl = this.ConstructImageWebDavUrl(imagePath, contextFolderWebDavUrl);
            var imageComponent = this.Context.Engine.GetObject <Component>(imageWebDavUrl);

            if (imageComponent == null)
            {
                var errorMessage = string.Format("Resolved image WebDavUrl \"{0}\" does not exist.", imageWebDavUrl);
                throw new Exception(errorMessage);
            }

            var imageUrl = this.Context.CreateCachedMultimediaItem(this.Context.Engine.GetObject <Component>(imageWebDavUrl)).Url;

            return(imageUrl);
        }
        private string ConstructImageWebDavUrl(string imagePath, string contextFolderWebDavUrl)
        {
            DebugGuard.ArgumentIsNotNullOrEmpty(imagePath, "imagePath");
            DebugGuard.ArgumentIsNotNullOrEmpty(contextFolderWebDavUrl, "contextFolderWebDavUrl");

            var imagePathParts      = imagePath.Split('/');
            var imagePathPartsCount = imagePathParts.Length;

            var containerWebDavUrlParts      = contextFolderWebDavUrl.Split('/');
            var containerWebDavUrlPartsCount = containerWebDavUrlParts.Length;
            var trailingImagePath            = string.Empty;

            for (var i = 0; i < imagePathPartsCount; i++)
            {
                if (imagePathParts[i] == "..")
                {
                    containerWebDavUrlPartsCount--;
                }
                else
                {
                    trailingImagePath += "/" + imagePathParts[i];
                }
            }

            var imageWebDavUrl = string.Empty;

            for (var i = 0; i < containerWebDavUrlPartsCount; i++)
            {
                if (containerWebDavUrlParts[i] != string.Empty)
                {
                    imageWebDavUrl += "/" + containerWebDavUrlParts[i];
                }
            }

            return(imageWebDavUrl + trailingImagePath);
        }