public void SetSkin(JwSkinPackage pkg)
        {
            pkg.BindAndResize(BackgroundIcon, componentName, "background");
            pkg.BindHoverButton(PlayIcon, componentName, "playIcon", "playIconOver");
            pkg.BindHoverButton(MuteIcon, componentName, "muteIcon", "muteIconOver");
            pkg.BindAndResize(BufferIcon, componentName, "bufferIcon");

            var interval = pkg.GetSettingValue(componentName, "bufferinterval") ?? "100";
            var rotation = pkg.GetSettingValue(componentName, "bufferrotation") ?? "15";

            spinAnimation = new RotationAnimation(BufferIcon, TimeSpan.FromMilliseconds(double.Parse(interval)), double.Parse(rotation));

            PlayIcon.Clicked += PlayIconClicked;
        }
        void BuildControls(JwSkinPackage pkg, ControlBarLayout layout)
        {
            SetColumnDefinitions(layout);
            int i = 0;
            FrameworkElement lastElement = null;
            foreach (var element in layout.Elements) {
                FrameworkElement c;

                switch (element.Type) {
                    case ControlBarElement.ElementType.Gap:
                        i++; continue;

                    case ControlBarElement.ElementType.Text:
                        if (element.Name == "elapsed") {
                            elapsedText = new JwElapsedText {
                                FontSize = TargetFontSize,
                                FontColour = FontColour
                            };
                            c = elapsedText;
                            players.EachPlayer(p => players.AddBinding(p, elapsedText));
                        } else if (element.Name == "duration") {
                            durationText = new JwDurationText {
                                FontSize = TargetFontSize,
                                FontColour = FontColour
                            };
                            c = durationText;
                            players.EachPlayer(p => players.AddBinding(p, durationText));
                        } else {
                            i++; continue;
                        }
                        break;

                    case ControlBarElement.ElementType.Divider:
                        c = new PairedImage(lastElement);
                        pkg.BindAndResize(((PairedImage)c).Image, ControlBarComponent, element.Name ?? "divider");
                        break;

                    case ControlBarElement.ElementType.CapLeft:
                        c = leftCap = new Image();
                        pkg.BindAndResize(leftCap, ControlBarComponent, element.Name ?? "divider");
                        break;

                    case ControlBarElement.ElementType.CapRight:
                        c = rightCap = new Image();
                        pkg.BindAndResize(rightCap, ControlBarComponent, element.Name ?? "divider");
                        break;

                    case ControlBarElement.ElementType.Button:
                        var btn = BindButton(element, pkg);
                        c = btn;
                        c.Cursor = Cursors.Hand;
                        break;

                    case ControlBarElement.ElementType.TimeSlider:
                        var tsl = BuildTimeSlider(pkg);
                        c = tsl;
                        c.Cursor = Cursors.Hand;
                        break;

                    case ControlBarElement.ElementType.VolumeSlider:
                        var vsl = BuildVolumeSlider(pkg);
                        c = vsl;
                        c.Cursor = Cursors.Hand;
                        break;

                    default:
                        i++; continue;
                }

                LayoutRoot.Children.Add(c);
                lastElement = c;
                if (element.Name == "play" || element.Name == "pause") lastElement = null;
                c.SetValue(Grid.ColumnProperty, i);
                i++;
            }
        }