var bb_count = 0;
var bb_curr_idx = "";
var bb_cache = new Array;
var bb_debug = false;
var bb_iframe_script = "/cgi-bin/bbfix/count.cgi";
var bb_iframe_loaded = false;
var bb_target_div = "";

// Jeeli debugowanie jest wczone za pomoc funkcji bb_init(), 
// wwczas do elementu divTrail 
// doczamy pewne dane.

function bb_debug_update (str) {
   if (bb_debug) {
      var divBBDebug = document.getElementById("divBBDebug");
      divBBDebug.innerHTML = divBBDebug.innerHTML + "<br>" + str;
   }
}

// Uruchomienie z wewntrznego stopera czasu (raz w cigu sekundy), 
// ta funkcja odczytuje warto indeksu bufora
// przechowywan w elemencie DIV elementu potomnego IFRAME.
//
// Jeeli to pobrana warto indeksu bufora rni si od
// biecej wartoci indeksu bufora, wwczas zosta nacinity
// przycisk Wstecz. W takim przypadku pobieramy odpowiednie dane
// z bufora, a nastpnie nastpuje uaktualnienie strony.

function bb_check_state () {

   if (bb_iframe_loaded == false) {
      return;
   }

   var doc =  window.frames['bbFrame1'].document;
   var new_idx = doc.getElementById('divFrameCount').innerHTML;

   if (new_idx != bb_curr_idx) {

      var debug_msg = "Warto elementu IFRAME ulega zmianie. Wynosia " 
         + bb_curr_idx 
         + ", teraz " 
         + new_idx;

      // Wydobycie z bufora poprzedniego stanu (jeeli istnieje).

      if (bb_cache[new_idx]) {
         var divBody = document.getElementById("divBody");
         divBody.innerHTML = bb_cache[new_idx];

         debug_msg += " [pobrane " 
            + new_idx 
            + " z bufora]";
      }
      bb_curr_idx = new_idx;

      bb_debug_update (debug_msg);
   }
}

// Wywoane przez element potomny IFRAME.

function bb_done_loading () {
   bb_iframe_loaded = true;
}

// Uaktualnienie ukrytego elementu IFRAME.

function bb_loadframe () {
   var bbFrame1 = document.getElementById("bbFrame1");
   bb_iframe_loaded = false;
   bbFrame1.src = bb_iframe_script + "?" + bb_count;
}

// Zapisanie w buforze biecego stanu
// na kade danie.

function bb_save_state () {
   // Przechowywanie nowej zawartoci w buforze.
   var div_to_cache = document.getElementById(bb_target_div);
   bb_count++;
   bb_cache[bb_count] = div_to_cache.innerHTML;

   bb_debug_update ("Dodano " + bb_count + " do bufora");

   // Wczytanie nowej strony do elementu IFRAME.
   bb_loadframe ();

   bb_curr_idx = bb_count;
}

// Wczytanie ukrytego elementu IFRAME i uruchomienie wewntrznego stopera.

function bb_init (div_name, debug_val) {
   bb_target_div = div_name;
   bb_debug = debug_val;

   bb_loadframe ();
   window.setInterval ('bb_check_state()', 1000);
   bb_save_state ();
}
