private void LinkFn(FloatingWindowScope scope, jQueryObject element, dynamic attr)
        {
            myElement = element;
            myScope = scope;
            items.Add(element, scope);

            element.Click((elem, @event) => Focus());

            scope.Parent.SwingAway = (a, b, c) => { SwingAway(a, b, element, c); };
            scope.Parent.SwingBack = (c) => { SwingBack(scope, element, c); };
            scope.Parent.Minimize = () =>
            {
                scope.Parent.Minimized = true;
                scope.Minimize();
            };
            scope.Parent.DestroyWindow = () =>
            {
                scope.Destroy();
                element.Remove();
            };


            scope.PositionStyles = new FloatingWindowPosition() { Left = scope.Left, Top = scope.Top, Display = "block" };
            scope.PositionStyles.ZIndex = 10000;

            if (scope.Left.IndexOf("%") != -1)
            {
                scope.PositionStyles.MarginLeft = (-(int.Parse(scope.Width.Replace("px", "")) / 2)) + "px";
            }
            if (scope.Top.IndexOf("%") != -1)
            {
                scope.PositionStyles.MarginTop = (-(int.Parse(scope.Height.Replace("px", "")) / 2)) + "px";
            }


            scope.SizeStyle = new Size() { Width = scope.Width, Height = scope.Height, };
            scope.Maximize = () =>
            {
                if (!scope.IsMaximized)
                {
                    scope.LastPositionStyles = scope.PositionStyles;
                    scope.LastSizeStyle = scope.SizeStyle;
                    scope.PositionStyles = new FloatingWindowPosition()
                    {
                        Left = "0",
                        Top = "0",
                        Display = "block"
                    };
                    scope.SizeStyle = new Size() { Width = "100%", Height = "100%", };
                }
                else
                {
                    scope.PositionStyles = scope.LastPositionStyles;
                    scope.SizeStyle = scope.LastSizeStyle;
                    scope.LastPositionStyles = null;
                    scope.LastSizeStyle = null;
                }

                scope.IsMaximized = !scope.IsMaximized;
            };
            scope.Close = () =>
            {
                if (scope.OnClose != null)
                {
                    scope.OnClose();
                }
                if (scope.Parent.OnClose != null)
                {
                    scope.Parent.OnClose();
                }
                //todo destroy
                scope.PositionStyles.Display = "none";
            };
            scope.Minimize = () =>
            {
//                myUIManagerService.OnMinimize(scope);
                scope.Parent.SwingAway(SwingDirection.Bottom,
                    false,
                    () => { scope.PositionStyles.Display = "none"; });
            };
            scope.Restore = () =>
            {
                scope.Parent.SwingBack(null);
                scope.PositionStyles.Display = "block";
            };
            Focus();

            if (scope.Parent.OnReady != null)
                scope.Parent.OnReady();
        }
        public void SwingBack(FloatingWindowScope scope, jQueryObject element, Action callback)
        {
            Window.SetTimeout(() =>
            {
                var js = new JsDictionary<string, object>();

                js["left"] = scope.Left;
                js["top"] = scope.Top;
                element.CSS("display", "block");

                element.Animate(js, EffectDuration.Fast, EffectEasing.Swing, callback);

            }, 1);
        }