/// <summary>
        /// Registering the scripts for ZoneEditor.
        /// </summary>
        /// <param name="event">The event.</param>
        private void RegisteringScriptsHandler(IScriptsRegisteringEvent @event)
        {
            if (@event.Sender.GetType() == typeof(ZoneEditor))
            {
                var scriptRootPath = "~/" + FrontendManager.VirtualPathBuilder.GetVirtualPath(this.GetType().Assembly);

                @event.Scripts.Add(new ScriptReference(scriptRootPath + "Mvc/Scripts/Angular/angular.min.js"));
                @event.Scripts.Add(new ScriptReference(scriptRootPath + "Mvc/Scripts/Angular/angular-route.min.js"));
                @event.Scripts.Add(new ScriptReference(scriptRootPath + "Mvc/Scripts/Bootstrap/js/ui-bootstrap-tpls-0.11.0.min.js"));

                @event.Scripts.Add(new ScriptReference(scriptRootPath + "Designers/Scripts/page-editor-services.js"));
                @event.Scripts.Add(new ScriptReference(scriptRootPath + "Designers/Scripts/page-editor.js"));
                @event.Scripts.Add(new ScriptReference(scriptRootPath + "Mvc/Scripts/Kendo/angular-kendo.js"));

                var currentPackage = new PackageManager().GetCurrentPackage();
                if (!currentPackage.IsNullOrEmpty())
                {
                    var packageVar = "var sf_package = '{0}';".Arrange(currentPackage);
                    ((ZoneEditor)@event.Sender).Page.ClientScript.RegisterStartupScript(@event.Sender.GetType(), "sf_package",
                        packageVar + @"Sys.Net.WebRequestManager.add_invokingRequest(function (executor, args) {
                            var url = args.get_webRequest().get_url();
                            if (url.indexOf('?') == -1)
                                url += '?package=' + encodeURIComponent(sf_package);
                            else
                                url += '&package=' + encodeURIComponent(sf_package);
                            args.get_webRequest().set_url(url);
                        });",
                        addScriptTags: true);
                }
            }
        }
        /// <summary>
        /// Registering the scripts for ZoneEditor.
        /// </summary>
        /// <param name="event">The event.</param>
        private void RegisteringScriptsHandler(IScriptsRegisteringEvent @event)
        {
            if (@event.Sender.GetType() == typeof(ZoneEditor))
            {
                var scriptRootPath = "~/" + FrontendManager.VirtualPathBuilder.GetVirtualPath(this.GetType().Assembly);

                @event.Scripts.Add(new ScriptReference(scriptRootPath + "Mvc/Scripts/Angular/angular.min.js"));
                @event.Scripts.Add(new ScriptReference(scriptRootPath + "Mvc/Scripts/Angular/angular-route.min.js"));
                @event.Scripts.Add(new ScriptReference(scriptRootPath + "Mvc/Scripts/Bootstrap/js/ui-bootstrap-tpls.min.js"));

                ////var references = PageManager.GetScriptReferences(ScriptRef.KendoAll);
                ////foreach (var scriptRef in references)
                ////{
                ////    @event.Scripts.Add(scriptRef);
                ////}

                @event.Scripts.Add(new ScriptReference(scriptRootPath + "Designers/Scripts/page-editor-services.js"));
                @event.Scripts.Add(new ScriptReference(scriptRootPath + "Designers/Scripts/page-editor.js"));

                @event.Scripts.Add(new ScriptReference(scriptRootPath + "Mvc/Scripts/LABjs/LAB.min.js"));

                var currentPackage = new PackageManager().GetCurrentPackage();
                if (!currentPackage.IsNullOrEmpty())
                {
                    var sb = new StringBuilder();
                    sb.AppendLine(@"Sys.Net.WebRequestManager.add_invokingRequest(function (executor, args) {");
                    sb.AppendLine("var url = args.get_webRequest().get_url();");
                    sb.AppendLine("if (url.indexOf('?') == -1)");
                    sb.AppendLine(" url += '?package=' + encodeURIComponent(sf_package);");
                    sb.AppendLine("else");
                    sb.AppendLine(" url += '&package=' + encodeURIComponent(sf_package); ");
                    sb.AppendLine("args.get_webRequest().set_url(url); ");
                    sb.AppendLine("});");

                    var packageVar = "var sf_package = '{0}';".Arrange(currentPackage);
                    ((ZoneEditor)@event.Sender).Page.ClientScript.RegisterStartupScript(
                        @event.Sender.GetType(),
                        "sf_package",
                        packageVar + sb,
                        addScriptTags: true);

                    var zoneEditor = @event.Sender as ZoneEditor;
                    if (zoneEditor != null)
                    {
                        var urlhelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
                        var url = urlhelper.Content("~/ResourcePackages/{0}/assets/dist/css/styles.min.css".Arrange(currentPackage));
                        var packageStyleMarkup = "<link rel=\"stylesheet\" type=\"text/css\" href=\"{0}\">".Arrange(url);
                        var packageStyleLiteralControl = new LiteralControl(packageStyleMarkup);
                        zoneEditor.Page.Header.Controls.Add(packageStyleLiteralControl);
                    }
                }
            }
        }
        /// <summary>
        /// Gets the key to be used in the view engine collection dictionary based on the controller type and the widget name.
        /// </summary>
        /// <param name="controller">The controller.</param>
        private static string GetKey(Controller controller)
        {
            const string WidgetNameKey = "widgetName";

            var key = controller.GetType().FullName;

            if (controller.RouteData != null && controller.RouteData.Values != null && controller.RouteData.Values.ContainsKey(WidgetNameKey))
            {
                var widgetName = (string)controller.RouteData.Values[WidgetNameKey];
                key = string.Format("{0}-{1}", key, widgetName);
            }

            var currentPackage = new PackageManager().GetCurrentPackage();
            if (!currentPackage.IsNullOrEmpty())
            {
                key += "-" + currentPackage;
            }

            return key;
        }