private static bool ProvjeriMogucnostDodavanja(
            Emisija emisija, IComponentRaspored dan, TvProgram program)
        {
            bool moguceDodati = true;

            if (program.GetPocetakPrikazivanja().TimeOfDay >
                emisija.GetVrijemePrikazivanja().TimeOfDay)
            {
                moguceDodati = false;
            }
            if (PostojiEmisijaKojaPocinjeUNavedenoVrijeme(dan, emisija.GetVrijemePrikazivanja()))
            {
                moguceDodati = false;
            }
            if (PostojiEmisijaKojaSeEmitiraUNavedenoVrijeme(
                    dan, emisija.GetVrijemePrikazivanja(), emisija.GetTrajanje()))
            {
                moguceDodati = false;
            }
            if (PrelaziPonocaXkrajPrograma(emisija, program))
            {
                moguceDodati = false;
            }
            return(moguceDodati);
        }
        private static void DodajEmisijuNaPocetakPrograma(TvProgram program, Emisija orig,
                                                          VremenskiPlan plan, int brojDana)
        {
            Emisija emisijaZaDodat = VratiNoviKopiraniObjekt(orig);

            DodajNoveOsobeUlogeEmisije(emisijaZaDodat, plan);
            emisijaZaDodat.SetVrijemePrikazivanja(program.GetPocetakPrikazivanja());
            DodjeliRedniBroj(emisijaZaDodat);
            program.GetTjedan()[(brojDana - 1)].AddChild(emisijaZaDodat);

            SubjectOsobaUlogaSingleton subject = SubjectOsobaUlogaSingleton.GetInstance();

            subject.AddObserver(emisijaZaDodat);
        }
        private static List <DateTime> PronadiPocetkePrvihEmisija(TvProgram program)
        {
            List <DateTime> listaPocetakaPrvihEmisija = new List <DateTime>();

            for (int i = 0; i < program.GetTjedan().Count; i++)
            {
                var sortiranDan = program.GetTjedan()[i].GetChildList().OrderBy
                                      (o => o.GetVrijemePrikazivanja()).ToList <IComponentRaspored>();
                if (sortiranDan.Count == 0)
                {
                    listaPocetakaPrvihEmisija.Add(program.GetPocetakPrikazivanja());
                }
                else
                {
                    listaPocetakaPrvihEmisija.Add(sortiranDan[0].GetVrijemePrikazivanja());
                }
            }
            return(listaPocetakaPrvihEmisija);
        }
        private static DateTime DohvatiVrijemeEmisijuMoguceUbacitiPrijePrveEmisije(
            IComponentRaspored dan, int trajanje, TvProgram program)
        {
            DateTime vratiDatum = DateTime.MinValue;
            List <IComponentRaspored> sortiranDan = dan.GetChildList().OrderBy
                                                        (o => o.GetVrijemePrikazivanja()).ToList <IComponentRaspored>();

            DateTime pocetakPrveEmisije = new DateTime();

            pocetakPrveEmisije = sortiranDan[0].GetVrijemePrikazivanja();

            DateTime pocetakPrograma = new DateTime();

            pocetakPrograma = program.GetPocetakPrikazivanja();

            if (pocetakPrograma.AddMinutes(trajanje) <= pocetakPrveEmisije)
            {
                vratiDatum = pocetakPrograma;
                return(vratiDatum);
            }
            return(vratiDatum);
        }