//----------------------------------------------------------------------------
// Standardowa funkcja przeładowywania strony
//----------------------------------------------------------------------------
function mySubmit() {
  refreshURL(getCGIParams())
}

//----------------------------------------------------------------------------
// Wyciąga klucze z "obiektu" i zapisuje je do tablicy
//----------------------------------------------------------------------------
function Tablica(ob) {
  var counter = 0
  var result = new Array()
  
  for (var str in ob) {
    result[counter] = str;
    counter++
  }
  return result
}


//----------------------------------------------------------------------------
// Wstawia do selecta pole / wybierz wszystkie
//----------------------------------------------------------------------------
function wstawAll(name) {
  
  eval("var f = document.forms.WyborSpolki." +name)
 
  f.length = 1
  if (name == "spolki") {
    f.options[0].value = "null"
    f.options[0].text = "--- wybierz spółkę ---"
  }
  else { 
    f.options[0].value = "all"
    f.options[0].text = "-- wszystkie --"
  }
}


//----------------------------------------------------------------------------
// Na podstawie przekazanych argumentów, zwraca jedną z tablic kodów:
// sektorów, indeksów, liter, spółek
//----------------------------------------------------------------------------
function pobierzKody(sektor, indeks, alfabet) {
  // stworzenie hasha javascriptowego, aby zminimalizować ilość iteracji 
  // potrzebną do zwrócenia niepowtarzającej się tablicy kodów
  var ob = new Object()
 
  // gdy sektor niezdefiniowany - zwracamy kody sektorów
  if (sektor == "undefined") {
    for(i = 0; i < kody.length; i++) {
      // wpisuj kolejny kod (jeśli występuje kilka takich samych kodów, to 
      // i tak w ob będzie występował tylko raz
      eval("ob['" +kody[i][0]+ "'] = 1")
    }
    // konwertuj do tablicy i zwróć
    return Tablica(ob)
  }
  // gdy indeks niezdefiniowany, to zwracamy kody indeksów
  if (indeks == "undefined") {
    // jeśli kod sektora wskazuje na wszystkie, to zwracamy wszystkie indeksy 
    if (sektor == "all") {
      for (var str in indeksyN) {
        eval("ob['" +str+ "'] = 1")
      }
    }
    else {
      for(i = 0; i < kody.length; i++) {
        // kody indeksów, które posiada wybrany sektor
        if (kody[i][0] == sektor) {
          eval("ob['" +kody[i][1]+ "'] = 1")
        }
      }
    }
    return Tablica(ob)
  }
  // gdy alfabet niezdefiniowany, to zwracamy kody alfabetów
  if (alfabet == "undefined") {
    // jeśli sektor i indeks wskazują na wszystkie to zwracamy również wszystkie 
    // kody alfabetów
    if ((indeks == "all") && (sektor == "all")) {
      for (var str in literyN) {
        eval("ob['" +str+ "'] = 1")
      }
    }
    else {
      for(i = 0; i < kody.length; i++) {
        if ((kody[i][0] == sektor && kody[i][1] == indeks) || 
            (sektor == "all" && kody[i][1] == indeks) || 
            (sektor == kody[i][0] && indeks == "all")) {
          eval("ob['" +kody[i][2]+ "'] = 1")
        }
      }
    }
    return Tablica(ob)
  }
  if ((sektor == "all") && (indeks == "all") && (alfabet == "all")) {
    for (var str in spolkiN) {
      eval("ob['" +str+ "'] = 1")
    }
  }
  else {
    for(i = 0; i < kody.length; i++) {
      if ((sektor == kody[i][0] || sektor == "all") && 
         (indeks == kody[i][1] || indeks == "all") &&
         (alfabet == kody[i][2] || alfabet == "all")) {
        eval("ob['" +kody[i][3]+ "'] = 1")
      }
    }
  }
  return Tablica(ob)
}  


//----------------------------------------------------------------------------
// Wypełnia dany select (określony przez name) kodami z przekazanej tablicy
//----------------------------------------------------------------------------
function wypelniajSelect(name, kody) {
  
  var val
  // jeśli tablica z kodami ma wielkość jeden, to znaczy, że nic nie można
  // wybrać. W związku z tym nie dopisujemy pola wybierz spółkę / wybierz
  // wszystkie oraz wyłączmy możliwość wyboru w select
  (kody.length == 1) ? val = 0 : val = 1
  eval("var f = document.forms.WyborSpolki." +name)
  // wstawiaj do select'a pole wybierz wszystkie / wybierz spółkę
  wstawAll(name);
  // długość wypełnianiego selecta (może wykasować dane wstawione do selecta przez wstawALL)
  f.length = kody.length + val
 
  var kody_ = new Array()
  // tablica zawierająca skojarzenia nazwa - kod, aby móc posrtować według nazw 
  for (i = 0; i < kody.length; i++) {
    kody_[i] = new Array()
    kody_[i][1] = kody[i]
    eval("kody_[i][0] = " +name+ "N['" +kody[i]+ "']")
  }
  // posortowanie według pierwszego pola (nazwy)
  kody_.sort()
  // i wypełnienie select'a
  for (i = 0; i < kody_.length; i++) {
    f.options[i + val].value = kody_[i][1]
    f.options[i + val].text = kody_[i][0]
   // zaznacznie wcześniej wybranej opcji w select
    if (f.options[i + val].value == eval("sel_" +name)) {
      f.options[i + val].selected = true
    }
  }
  // gdy jedna opcja do wyboru, to wyłącz możliwość wyboru
  if (f.length == 1) {
    f.disabled = true
  }
  // w przeciwnym wypadku włącz ( bo się samo nie włącza po przeładowaniu selecta)
  else {
    f.disabled = false
  } 
}

//----------------------------------------------------------------------------
// Przeładowuje select'a z sektorami
//----------------------------------------------------------------------------
function zmienSektory(val) {
  var kody_ = new Array()
  var f = document.forms.WyborSpolki
  
  wypelniajSelect("sektory", pobierzKody("undefined", "undefined", "undefined"))
  zmienIndeksy(val)
}


//----------------------------------------------------------------------------
// Przeładowuje select'a z indeksami
//----------------------------------------------------------------------------
function zmienIndeksy(val) {
  var f = document.forms.WyborSpolki

  // jeśli val = 1 to znaczy że użytkownik wybrał coś w formularzu nadrzędnym
  if (val == 1) { 
    sel_sektory = f.sektory.options[f.sektory.selectedIndex].value
    sel_indeksy = "all"
    sel_litery = "all"
    sel_spolki = "null"
  }
  // pobranie kodów indeksów dla wybranego sektora i wypełnienie nimi selecta
  wypelniajSelect("indeksy", pobierzKody(sel_sektory, "undefined", "undefined"))
  zmienLitery(val)
}


//----------------------------------------------------------------------------
// Przeładowuje select'a z literami
//----------------------------------------------------------------------------
function zmienLitery(val) {
  var f = document.forms.WyborSpolki
  
  // jeśli val = 1 to znaczy że użytkownik wybrał coś w formularzu nadrzędnym
  if (val == 1) {
    sel_indeksy = f.indeksy.options[f.indeksy.selectedIndex].value
    sel_litery = "all"
    sel_spolki = "null"
  }
  // pobranie kodów liter dla określonego sektora i indeksu i wypelnienie selecta
  wypelniajSelect("litery", pobierzKody(sel_sektory, sel_indeksy, "undefined"))
  zmienSpolki(val)
}


//----------------------------------------------------------------------------
// Przeładowuje select'a ze spółkami
//----------------------------------------------------------------------------
function zmienSpolki(val) {
  var f = document.forms.WyborSpolki

  // jeśli val = 1 to znaczy że użytkownik wybrał coś w formularzu nadrzędnym
  if (val == 1) {
    sel_litery = f.litery.options[f.litery.selectedIndex].value
    sel_spolki = "null"
  }
  // wypełnienie / przeładowanie select'a ze spółkami
  wypelniajSelect("spolki", pobierzKody(sel_sektory, sel_indeksy, sel_litery))
}

function getCGIVal (name, zm, field) {
  var result = ""
  eval("var f = document.forms.WyborSpolki." +field)
  if (f) {
    var val = f.options[f.selectedIndex].value
    if (val != "null") {
      result = name+ "=" +val
    }
  }
  return result
}

function addCGIVal (str, val) {
  if ((str != "") && (val != ""))
    str = str+ "&" +val
  else if ((str == "") && (val != ""))
    str = val
  return str
}

//----------------------------------------------------------------------------
// Zwraca parametry CGI wskazane w formularzu wyboru spółki
//----------------------------------------------------------------------------
function getCGIParams() {
  var f = document.forms.WyborSpolki
  var str = ""
  str = addCGIVal(str, getCGIVal("sektor", sel_sektory, "sektory"))
  str = addCGIVal(str, getCGIVal("indeks", sel_indeksy, "indeksy"))
  str = addCGIVal(str, getCGIVal("litera", sel_litery, "litery"))
  str = addCGIVal(str, getCGIVal("kod_spolki", sel_spolki, "spolki"))
  return str
}
