/* Obsuga zdarze zmiany historii. */
function handleHistoryChange(newLocation, 
      historyData) {
   // Jeeli nie jest podany adres, wtedy zostanie wywietlony
   // domylny widok, ktrym jest inbox.
   if (newLocation == "") {
      newLocation = "section:inbox";
   }

   // Wydobycie sekcji do wywietlenia na podstawie
   // zmiany adresu; warto waciwoci newLocation
   // rozpoczyna si od sowa "section:" 
   newLocation = 
      newLocation.replace(/section\:/, "");

   // Uaktualnienie przegldarki w odpowiedzi
   // na zmian historii DHTML.
   displayLocation(newLocation, historyData);
}

/* Wywietlenie zawartoci podanego adresu 
w prawej czci strony aplikacji. */
function displayLocation(newLocation,
      sectionData) {
   // Pobranie elementu menu, ktry zosta zaznaczony.
   var selectedElement = 
      document.getElementById(newLocation);

   // Wyczyszczenie poprzedniego zaznaczonego elementu.
   var menu = document.getElementById("menu");
   for (var i = 0; i < menu.childNodes.length;
         i++) {
      var currentElement = menu.childNodes[i];
      // Sprawdzenie, czy jest to element modelu DOM.
      if (currentElement.nodeType == 1) {
         // Usunicie wszystkich nazw klas.
         currentElement.className = "";
      }
   }

   // Spowodowanie, e nowo zaznaczony element menu
   // pojawia si oddzielnie w interfejsie uytkownika.
   selectedElement.className = "selected";

   // Wywietlenie nowej sekcji po prawej
   // stronie ekranu; okrelenie, 
   // czym jest sectionData.

   // Oddzielne wywietlenie ksiki adresowej
   // przy uyciu danych z adresu lokalnego,
   // ktre zostay wczeniej umieszczone w buforze
   if (newLocation == "addressbook") {
      // Sformatowanie i wywietlenie ksiki adresowej.
      sectionData = "<p>Twoja ksika adresowa:</p>";
      sectionData += "<ul>";

      // Pobranie ksiki adresowej z bufora,
      // jeli jeszcze nie zostao to zrobione.
      if (window.addressBook == undefined) {
         window.addressBook = 
            historyStorage.get("addressBook");
      }

      // Sformatowanie ksiki adresowej w celu wywietlenia.
      for (var i = 0; 
            i < window.addressBook.length;
            i++) {
         sectionData += "<li>"
            + window.addressBook[i]
            + "</li>";                  
      }

      sectionData += "</ul>";
   }

   // Jeeli nie ma sekcji sectionData, wwczas 
   // zdalnie j pobieramy; w omawianym przykadzie
   // do wszystkiego uywamy fikcyjnych danych
   // cznie z ksik adresow.
   if (sectionData == null) {
      // W rzeczywistej aplikacji istnieje moliwo zdalnego
      // pobrania zawartoci tej sekcji.
      sectionData = "<p>To jest sekcja: " 
            + selectedElement.innerHTML + "</p>";  
   }

   // Uaktualnienie tytuu oraz gwnego tekstu zawartoci.
   var contentTitle = 
      document.getElementById("content-title");
   var contentValue =
      document.getElementById("content-value");
   contentTitle.innerHTML =
      selectedElement.innerHTML;
   contentValue.innerHTML = sectionData;
}
