public void NewPage(string url)
        {
            Page page = new Page
            {
                url = url,
                addedDateTime = DateTime.Now,
                lastUsedDateTime = DateTime.Now,
                noUsed = 0
            };
            StringBuilder storageNameBuilder = new StringBuilder();
            storageNameBuilder.Append(path);
            Uri uri = new Uri(url);
            
            string filename = System.IO.Path.GetFileName(uri.LocalPath);
            storageNameBuilder.Append("\\page_");
            storageNameBuilder.Append(uri.Host);
            storageNameBuilder.Append("_");
            storageNameBuilder.Append(System.IO.Path.GetFileName(uri.LocalPath));
            page.localStorageName = storageNameBuilder.ToString();

            HtmlWeb hw = new HtmlWeb();

            HtmlDocument document = hw.Load(url);
            FileStream fs = File.OpenWrite(page.localStorageName);
            StreamWriter writer = new StreamWriter(fs, Encoding.UTF8);
            
            document.Save(writer);
            
            this.Size += fs.Length;
            page.size = fs.Length;
            
            writer.Close();
            fs.Close();

            
            while((this.Pages != null) && ((MaxSize < this.Size) || (MaxPageNum < this.Pages.Count)) && (this.Pages.Count >= 1))
            if (this.isNS)
            {
                this.Pages = this.Pages.OrderByDescending(x => x.addedDateTime).ToList();
                this.Size -= this.Pages[0].size;
                File.Delete(this.Pages[0].localStorageName);
                DnevnikRada.add("Deleted page " + this.Pages[0].url + " in " + DateTime.Now.ToString(CultureInfo.InvariantCulture) + ". Used " + this.Pages[0].noUsed + " times, loaded " + this.Pages[0].addedDateTime + ". Last time loaded at: " + this.Pages[0].lastUsedDateTime);
                Console.WriteLine("Deleted page " + this.Pages[0].url + " in " + DateTime.Now.ToString(CultureInfo.InvariantCulture) + ". Used " + this.Pages[0].noUsed + " times, loaded " + this.Pages[0].addedDateTime + ". Last time loaded at: " + this.Pages[0].lastUsedDateTime);
                this.Pages.Remove(this.Pages[0]);
            }
            else
            {
                this.Pages = this.Pages.OrderByDescending(x => x.noUsed).ToList();
                this.Size--;
                File.Delete(this.Pages[0].localStorageName);
                DnevnikRada.add("Deleted page " + this.Pages[0].url + " in " + DateTime.Now.ToString(CultureInfo.InvariantCulture) + ". Used " + this.Pages[0].noUsed + " times during " + DateTime.Now.Subtract(this.Pages[0].addedDateTime).Seconds.ToString(CultureInfo.InvariantCulture) + " seconds, loaded " + this.Pages[0].addedDateTime + ". Last time loaded at: " + this.Pages[0].lastUsedDateTime);
                Console.WriteLine("Deleted page " + this.Pages[0].url + " in " + DateTime.Now.ToString(CultureInfo.InvariantCulture) + ". Used " + this.Pages[0].noUsed + " times, loaded " + this.Pages[0].addedDateTime + ". Last time loaded at: " + this.Pages[0].lastUsedDateTime);
                this.Pages.Remove(this.Pages[0]);
            }
            
            this.Pages.Add(page);
            this.page = page;

            DnevnikRada.add("Loaded page " + url + " u " + DateTime.Now.ToString(CultureInfo.InvariantCulture));
        }
        /// <summary>
        /// Initializes the specified my model.
        /// </summary>
        /// <param name="myModel">My model.</param>
        /// <param name="myView">My view.</param>
        /// <returns><c>true</c> if success, <c>false</c> otherwise.</returns>
        public bool initialize(MVC_Model myModel, MVC_View myView)
        {

            this.myModel = myModel;
            this.myView = myView;
            
            activePage = storage.GetPage(myModel.url);
            
            if (activePage == null)
            { 
                storage.NewPage(myModel.url);
                activePage = storage.GetPage(myModel.url);
            }

            SaveStorage();

            return true;
        }
        public MVC_Model(Page page, string old_url)
        {
            this.url = page.url;
            this.local_url = page.localStorageName;
            this.old_url = old_url;
            this.isLocal = true;

            init();
        }
        public Storage(SerializationInfo info, StreamingContext ctxt)
        {
            this.Pages = (List<Page>) info.GetValue("Pages", typeof (List<Page>));
            this.page = (Page) info.GetValue("page", typeof (Page));
            this.Size = (long) info.GetValue("Size", typeof (long));
            this.MaxSize = (long) info.GetValue("MaxSize", typeof (long));
            this.MaxPageNum = (long) info.GetValue("MaxPageNum", typeof (long));
            this.isNS = (bool) info.GetValue("isNS", typeof (bool));
            this.path = (string) info.GetValue("path", typeof (string));

        }
 public Page GetPage(string url)
 {
     if (Pages == null)
         return null;
     foreach(Page page in Pages)
     {
         if (page.url == url)
         {
             this.page = page;
             page.noUsed++;
             page.lastUsedDateTime = DateTime.Now;
             return page;
         }
     }
     this.page = null;
     return null;
 }
        public void Use(string url)
        {
            Page page = GetPage(url);
            page.lastUsedDateTime = DateTime.Now;
            page.noUsed++;
            this.page = page;

        }