static VmapAdBreak LoadAdBreak(XElement adBreakXml)
        {
            var result = new VmapAdBreak();

            result.BreakId    = (string)adBreakXml.Attribute("breakId");
            result.BreakType  = (string)adBreakXml.Attribute("breakType");
            result.TimeOffset = (string)adBreakXml.Attribute("timeOffset");
            var adSourceXml = adBreakXml.Element(ns + "AdSource");

            if (adSourceXml != null)
            {
                result.AdSource = LoadAdSource(adSourceXml);
            }
            var trackingEventsXml = adBreakXml.Element(ns + "TrackingEvents");

            if (trackingEventsXml != null)
            {
                foreach (var trackingEventXml in trackingEventsXml.Elements(ns + "Tracking"))
                {
                    result.TrackingEvents.Add(LoadTrackingEvent(trackingEventXml));
                }
            }
            var extensionsXml = adBreakXml.Element(ns + "Extensions");

            if (extensionsXml != null)
            {
                foreach (var extensionXml in extensionsXml.Elements(ns + "Extension"))
                {
                    result.Extensions.Add(LoadExtension(extensionXml));
                }
            }

            return(result);
        }
        static VmapAdBreak LoadAdBreak(XElement adBreakXml)
        {
            var result = new VmapAdBreak();

            result.BreakId = (string)adBreakXml.Attribute("breakId");
            result.BreakType = (string)adBreakXml.Attribute("breakType");
            result.TimeOffset = (string)adBreakXml.Attribute("timeOffset");
            var adSourceXml = adBreakXml.Element(ns + "AdSource");
            if (adSourceXml != null)
            {
                result.AdSource = LoadAdSource(adSourceXml);
            }
            var trackingEventsXml = adBreakXml.Element(ns + "TrackingEvents");
            if (trackingEventsXml != null)
            {
                foreach (var trackingEventXml in trackingEventsXml.Elements(ns + "Tracking"))
                {
                    result.TrackingEvents.Add(LoadTrackingEvent(trackingEventXml));
                }
            }
            var extensionsXml = adBreakXml.Element(ns + "Extensions");
            if (extensionsXml != null)
            {
                foreach (var extensionXml in extensionsXml.Elements(ns + "Extension"))
                {
                    result.Extensions.Add(LoadExtension(extensionXml));
                }
            }

            return result;
        }
        private void CreateAdvertisement(VmapAdBreak adBreak)
        {
            Advertisement ad = null;
            switch (adBreak.TimeOffset)
            {
                case "start":
                    ad = new PrerollAdvertisement();
                    break;
                case "end":
                    ad = new PostrollAdvertisement();
                    break;
                default:
                    var offset = FlexibleOffset.Parse(adBreak.TimeOffset);
                    if (offset != null)
                    {
                        var midroll = new MidrollAdvertisement();
                        if (!offset.IsAbsolute)
                        {
                            midroll.TimePercentage = offset.RelativeOffset;
                        }
                        else
                        {
                            midroll.Time = offset.AbsoluteOffset;
                        }
                        ad = midroll;
                    }
                    break;
            }

            if (ad != null)
            {
                ad.Source = GetAdSource(adBreak.AdSource);
                if (ad.Source != null)
                {
                    Advertisements.Add(ad);
                    adBreaks.Add(ad, adBreak);
                }
            }
        }