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

//----------------------------------------------------------------------------
// Funkcja na podstawie przekazanych argumentów, zwraca jedną z tablic kodów:
// towarzystw, grup, typów, funduszy
//----------------------------------------------------------------------------
function getCodes(tow, prod, group, segment, type) {
  // stworzenie hasha javascriptowego, aby zminimalizować ilość iteracji 
  // potrzebną do zwrócenia niepowtarzającej się tablicy kodów
  var ob = new Object()

//  alert("TOW: " +tow+ " GRUPA: " +group+ " SEGMENT: " +segment)
  

  // gdy tow niezdefiniowe, to zwracamy kody towarzystw
  if (tow == "undefined") {
    for(i = 0; i < powiaz.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['" +powiaz[i][0]+ "'] = 1")
    }
    // konwertuj do tablicy i zwróć
    return getKeys(ob)
  }

  // niezdefiniowany produkt to zwracamy wszystkie
  if (prod == "undefined") {
    // jeśli kod tfi wskazuje na wszystkie, to zwracamy wszystkie produkty
    if (tow == "all") {
      for (var str in produktN) {
//      for(i = 0; i < powiaz.length; i++) {
        eval("ob['" +str+ "'] = 1")
//        eval("ob['" +powiaz[i][1]+ "'] = 1")
      }
    }
    else {
      for(i = 0; i < powiaz.length; i++) {
        // kody prefisków grup, które posiada wybrane towarzystwo
        if (powiaz[i][0] == tow) {
          eval("ob['" +powiaz[i][1]+ "'] = 1")
        }
      }
    }
    return getKeys(ob)
  }


  // niezdefiniowany prefiks grup to zwracamy wszystkie
  if (group == "undefined") {
    // jeśli kod tfi wskazuje na wszystkie, to zwracamy wszystkie prefiksy grup 
    if (tow == "all" && prod == "all") {
      for (var str in groupN) {
//      for(i = 0; i < powiaz.length; i++) {
        eval("ob['" +str+ "'] = 1")
//        eval("ob['" +powiaz[i][1]+ "'] = 1")
      }
    }
    else {
      for(i = 0; i < powiaz.length; i++) {
        // kody prefisków grup, które posiada wybrane towarzystwo
        if ((powiaz[i][0] == tow && powiaz[i][1] == prod) ||
            (tow == "all" && powiaz[i][1] == prod) ||
            (tow == powiaz[i][0] && "all" == prod)) {
          eval("ob['" +powiaz[i][2]+ "'] = 1")
        }
      }
    }
    return getKeys(ob)
  }

  // gdy grupa niezdefiniowana, to zwracamy kody grup
  if (segment == "undefined") {
    // jeśli kod tfi prefix wskazuje na wszystkie, to zwracamy wszystkie grupy
    if ((tow == "all") && (prod == "all") && (group == "all")) {
      for (var str in segmentN) {
//      for(i = 0; i < powiaz.length; i++) {
        eval("ob['" +str+ "'] = 1")
//          eval("ob['" +powiaz[i][2]+ "'] = 1")
      }
    }
    else {
      for(i = 0; i < powiaz.length; i++) {
        // kody grup, które posiada wybrane towarzystwo
        if ((powiaz[i][0] == tow && powiaz[i][1] == prod &&  powiaz[i][2] == group) ||
           (tow == "all" && powiaz[i][1] == prod && powiaz[i][2] == group) ||
           (tow == powiaz[i][0] && prod == "all" && powiaz[i][2] == group) ||
           (tow == powiaz[i][0] && powiaz[i][1] == prod && group == "all") ||
           (tow == "all" && prod == "all" && powiaz[i][2] == group) ||
           (tow == "all" && powiaz[i][1] == prod && group == "all") ||
           (tow == powiaz[i][0] && prod == "all" && group == "all")) {
          eval("ob['" +powiaz[i][3]+ "'] = 1")
        }
      }
    }
    return getKeys(ob)
  }



  // gdy typ niezdefiniowany, to zwracamy kody typów
  if (type == "undefined") {
    // jeśli grupa i tow wskazują na wszystkie to zwracamy również wszystkie typy
    if ((segment == "all") && (prod == "all") && (tow == "all") && (group == "all")) {
      for (var str in typeN) {
        eval("ob['" +str+ "'] = 1")
      }
    }
    else {
      for(i = 0; i < powiaz.length; i++) {
        if ((tow == powiaz[i][0] && prod == powiaz[i][1] && group == powiaz[i][2] && segment == powiaz[i][3]) ||
            (tow == "all" && prod == powiaz[i][1] && group == powiaz[i][2] && segment == powiaz[i][3]) ||
            (tow == powiaz[i][0] && prod == "all" && group == powiaz[i][2] && segment == powiaz[i][3]) ||
            (tow == powiaz[i][0] && prod == powiaz[i][1] && group == "all" && segment == powiaz[i][3]) ||
            (tow == powiaz[i][0] && prod == powiaz[i][1] && group == powiaz[i][2] && segment == "all") ||
            (tow == "all" && prod == "all" && group == powiaz[i][2] && segment == powiaz[i][3]) ||
            (tow == "all" && prod == powiaz[i][1] && group == "all" && segment == powiaz[i][3]) ||
            (tow == "all" && prod == powiaz[i][1] && group == powiaz[i][2] && segment == "all") ||
            (tow == powiaz[i][0] && prod == "all" && group == "all" && segment == powiaz[i][3]) ||
            (tow == powiaz[i][0] && prod == "all" && group == powiaz[i][2] && segment == "all") ||
            (tow == powiaz[i][0] && prod == powiaz[i][1] && group == "all" && segment == "all") ||
            (tow == "all" && prod == "all" && group == "all" && segment == powiaz[i][3]) ||
            (tow == "all" && prod == "all" && group == powiaz[i][2] && segment == "all") ||
            (tow == "all" && prod == powiaz[i][1] && group == "all" && segment == "all") ||
            (tow == powiaz[i][0] && prod == "all" && group == "all" && segment == "all") ) 
        {      
          eval("ob['" +powiaz[i][4]+ "'] = 1")
        }
      }
    }
    return getKeys(ob)
  }


  if ((group == "all") && (tow == "all") && (prod == "all") && (type == "all") &&  (segment == "all")) {
    for (var str in fundN) {
      eval("ob['" +str+ "'] = 1")
    }
  }
  else {
    for(i = 0; i < powiaz.length; i++) {
      if ((tow == powiaz[i][0] || tow == "all") &&
          (prod == powiaz[i][1] || prod == "all") &&
          (group == powiaz[i][2] || group == "all") &&
          (segment == powiaz[i][3] || segment == "all") &&
          (type == powiaz[i][4] || type == "all")) {
        eval("ob['" +powiaz[i][5]+ "'] = 1")
      }
    }
  }
  return getKeys(ob)

}


//----------------------------------------------------------------------------
// Funkcja wstawia do selecta pole wybierz fundusz / wybierz wszystkie
//----------------------------------------------------------------------------
function addAll(fieldName) {
 
  eval("var f = document.forms.WyborFunduszy." +fieldName)
  f.length = 1
  f.options[0].value = "all"
  f.options[0].text = "---- wszystkie ----"
  return 1
}


function mySort (a,b)
{
  if (a[0].toLowerCase()==b[0].toLowerCase()) return 0;
  if (a[0].toLowerCase()<b[0].toLowerCase()) return -1;
  return 1;
}


//----------------------------------------------------------------------------
// Funkcja wypełnia dany select (określony przez name) kodami z przekazanej tablicy
//----------------------------------------------------------------------------
function fillSelect(fieldName, codes) {

  var offset = 0
  var f = document.forms.WyborFunduszy

  if (f.segment && f.group)
  {
      if (sel_group == 'all')
      {
          f.segment.disabled = true
          f.segment.selectedIndex = 0
          sel_segment = 'all'
//          alert ('disable ' +fieldName);
 
      }
      else
      {  
          if (f.segment.length != 1)
          {
//              alert ('enable ' +fieldName);
              f.segment.disabled = false
          }
      }
  }
 
  
  if (eval("f." +fieldName)) 
    eval("f = f." +fieldName)

  if(indexOf(codes, 'all') > -1)
    codes.splice(indexOf(codes, 'all'),1);
  
  // opcjonale wstawienie pola wybierz
  if (codes.length > 1 && eval("all_" +fieldName+ " == 1") || codes.length > 0 && fieldName == 'produkt') {
    offset = addAll(fieldName)
  }
  var codes_ = new Array()
  // tablica zawierająca skojarzenia nazwa - kod, aby móc posrtować według nazw 
  for (i = 0; i < codes.length; i++) {
    codes_[i] = new Array()
    codes_[i][1] = codes[i]
    eval("codes_[i][0] = " +fieldName+ "N['" +codes[i]+ "']")
  }
  // posortowanie według pierwszego pola (nazwy)
  codes_.sort(mySort);
  if(codes_.length == 0){
    codes_[0] = new Array()
    codes_[0][1] = 'all';
    codes_[0][0] = 'brak';
  }
  
  f.length = codes_.length + offset

  // i wypełnienie select'a
  for (i = 0; i < codes_.length; i++) {
    f.options[i + offset].value = codes_[i][1]
    f.options[i + offset].text = codes_[i][0]
   // zaznacznie wcześniej wybranej opcji w select
    if (eval("window.sel_" +fieldName)) { 
//      alert(f.options[i + offset].value+ " = " + eval("sel_" +fieldName))
      if (f.options[i + offset].value == eval("sel_" +fieldName)) {
        f.options[i + offset].selected = true
      }
    }
  }
 
  // gdy jedna opcja do wyboru, to wyłącz możliwość wyboru
  if (f.length == 1 || (document.forms.WyborFunduszy.segment && document.forms.WyborFunduszy.group && sel_group == 'all' && fieldName == 'segment')) 
  {
    f.disabled = true
//    alert ('disable 1' +fieldName);
  }
  // w przeciwnym wypadku włącz ( bo się samo nie włącza po przeładowaniu selecta)
  else 
  {
//    alert ('enable 1 ' +fieldName);
    f.disabled = false
  }
}

//----------------------------------------------------------------------------
// Funkcja odpowiedzialna za przeładowanie select'a z towarzystwami
//----------------------------------------------------------------------------
function changeTow(modifySelected) {
  var f = document.forms.WyborFunduszy

  
  if (f.tow) {
    // pobranie kodów tow i wypełnienienie nimi selecta
    fillSelect("tow", getCodes("undefined", "undefined", "undefined", "undefined", "undefined"))
  }
  if(chProdukt)
    changeProdukt(modifySelected)
  else
    changeGroup(modifySelected)
}

//----------------------------------------------------------------------------
// Funkcja odpowiedzialna za przeładowanie select'a z grupami funduszy
//----------------------------------------------------------------------------
function changeProdukt(modifySelected) {
  var f = document.forms.WyborFunduszy


  if (modifySelected) {
    if (f.tow)
      sel_tow = f.tow.options[f.tow.selectedIndex].value

      sel_produkt = "all"
      sel_group = "all"
      sel_segment = "all"
      sel_type = "all"
      sel_fund = "all"
  }

  var codes_
  if (f.tow) {
    // pobranie kodów grup dla wybranego towarzystwa
    codes_ = getCodes(sel_tow, "undefined", "undefined", "undefined", "undefined")
  }
  else {
    // gdy brak jest formularza tow wtedy pobieramy wszystkie grupy
    codes_ = getCodes("all", "undefined", "undefined", "undefined", "undefined")
  }
  
  if (f.produkt)
    fillSelect("produkt", codes_)

  changeGroup(modifySelected)
}

//----------------------------------------------------------------------------
// Funkcja odpowiedzialna za przeładowanie select'a z grupami funduszy
//----------------------------------------------------------------------------
function changeSegment(modifySelected) {
  var f = document.forms.WyborFunduszy
 
   
  if (modifySelected) {
    if (f.tow)
      sel_tow = f.tow.options[f.tow.selectedIndex].value
    if (f.produkt)
      sel_produkt = f.produkt.options[f.produkt.selectedIndex].value
    if (f.group)
      sel_group = f.group.options[f.group.selectedIndex].value
      
    sel_segment = "all"
    sel_type = "all"
    sel_fund = "all"
  }

//  alert("Tow: " +sel_tow+ "grupa: " +sel_group)
  var codes_ 
  if (f.group) { 
    // pobranie kodów prefiksów grup dla wybranego towarzystwa
    codes_ = getCodes(sel_tow, sel_produkt, sel_group, "undefined", "undefined")
  }
  else {
    // gdy brak jest formularza tow wtedy pobieramy wszystkie grupy
    codes_ = getCodes(sel_tow, sel_produkt, "all", "undefined", "undefined")
  }


  if (f.segment) 
    fillSelect("segment", codes_)
 
  changeType(modifySelected)
}

//----------------------------------------------------------------------------
// Funkcja odpowiedzialna za przeładowanie select'a z grupami funduszy
//----------------------------------------------------------------------------
function changeGroup(modifySelected) {
  var f = document.forms.WyborFunduszy

  
  if (modifySelected) {
    if (f.tow)
      sel_tow = f.tow.options[f.tow.selectedIndex].value
    if (f.produkt)
      sel_produkt = f.produkt.options[f.produkt.selectedIndex].value

      sel_group = "all"
      sel_segment = "all"
      sel_type = "all"
      sel_fund = "all"
  }
 
  var codes_;
  if(chProdukt){
      if (f.produkt) {
        // pobranie kodów grup dla wybranego produktu
        codes_ = getCodes(sel_tow, sel_produkt, "undefined", "undefined", "undefined")
      }
      else {
        // gdy brak jest formularza produkt wtedy pobieramy wszystkie grupy
        codes_ = getCodes("all", "all", "undefined", "undefined", "undefined")
      }
  }else{
      if (f.tow) { 
        // pobranie kodów grup dla wybranego towarzystwa
        codes_ = getCodes(sel_tow, "all", "undefined", "undefined", "undefined")
      }
      else {
        // gdy brak jest formularza tow wtedy pobieramy wszystkie grupy
        codes_ = getCodes("all", "all", "undefined", "undefined", "undefined")
      }
  }


  if (f.group) 
    fillSelect("group", codes_)
 
  changeSegment(modifySelected)
}


//----------------------------------------------------------------------------
// Funkcja odpowiedzialna za przeładowanie select'a z typami funduszy
//----------------------------------------------------------------------------
function changeType(modifySelected) {
  var f = document.forms.WyborFunduszy

  if (modifySelected) {
    if (f.segment)
      sel_segment = f.segment.options[f.segment.selectedIndex].value
      sel_type = "all"
      sel_fund = "all"
  }
  
  var codes_ 
  if (f.segment) { 
    // pobranie kodów grup dla wybranego towarzystwa
    codes_ = getCodes(sel_tow, sel_produkt, sel_group, sel_segment, "undefined")
  }
  else {
    // gdy brak jest formularza tow wtedy pobieramy wszystkie grupy
    codes_ = getCodes(sel_tow, sel_produkt, sel_group,  "all", "undefined")
  }

  if (f.type) 
    fillSelect("type", codes_)
  changeFund(modifySelected)
}


//----------------------------------------------------------------------------
// Funkcja odpowiedzialna za przeładowanie select'a z nazwami funduszy
//----------------------------------------------------------------------------
function changeFund(modifySelected) {
  var f = document.forms.WyborFunduszy

  if (modifySelected) {
    sel_fund = "all"
    if (f.type) 
      sel_type = f.type.options[f.type.selectedIndex].value
  }
  
  if (f.fund)
    fillSelect("fund", getCodes(sel_tow, sel_produkt, sel_group, sel_segment, sel_type))
}


//----------------------------------------------------------------------------
// funkcje do obsługi frameMenu
//----------------------------------------------------------------------------
// niepotrzebne - nadpisuje tylko właściwą strukturę
// var frameTab = new Array();

function openp(link){
  var nw = window.open(link,'1','width=560,height=450');
  return void(0);
}

function a() {}

function showFrameMenu(kod,tab,frame){
  var d = document.getElementById('frame_menu');
  d.style.left = xMOUSE;
  var moveUp = 0;
  if(navigator.appName != 'Microsoft Internet Explorer'){
    moveUp = frame.document.body.scrollTop;
  }
  d.style.top = yMOUSE - 15 - moveUp;
  var i;
  var str = '<div class="frameMenu" id="frameMenu">';
  if(frameTab != 'undefined'){
    for(i=0;i<frameTab.length;i++){
      if(frameTab[i][0] == 1){
        str += '<div class="frameMenuOption"><a href="javascript:openp(\'' + frameTab[i][2] + kod + frameTab[i][3] + '\')">' + frameTab[i][1] + '</a></div>';
      }else{
        str += '<div class="frameMenuOption"><a href="' + frameTab[i][2] + '?fund=' + kod + '" target="_blank">' + frameTab[i][1] + '</a></div>';
      }
    }
  }
  if(tab != 'undef'){
    for(i=0;i<tab.length;i++){
      if(tab[i][0] == 1){
        str += '<div class="frameMenuOption"><a href="javascript:openp(\'' + tab[i][2] + kod + tab[i][3] + '\')">' + tab[i][1] + '</a></div>';
      }else{
        str += '<div class="frameMenuOption"><a href="' + tab[i][2] + kod + tab[i][3] + '" target="_blank">' + tab[i][1] + '</a></div>';
      }
    }
  }
  d.innerHTML = str + '</div><div align="right" class="exit" id="exit"><p align=right style="margin-top: 0px; margin-bottom: 0px; margin-right: 0px; padding: 0px;"><a href="javascript:hideFrameMenu()" style="text-decoration: none; color: black;">&nbsp;x&nbsp;</a></p></div>';
  if(navigator.appName == 'Microsoft Internet Explorer'){
    document.getElementById('exit').style.left = 100;
    document.getElementById('frameMenu').style.width = 110
  }
  d.style.display='';
  return void(0);
}

function showFrameMenu2(kod,tab){
  var d = document.getElementById('frame_menu');
  d.style.left = xMOUSE;
  d.style.top = yMOUSE - 15;
  var i;
  var str = '<div class="frameMenu" id="frameMenu">';
  if(frameTab != 'undefined'){
    for(i=0;i<frameTab.length;i++){
      if(frameTab[i][0] == 1){
        str += '<div class="frameMenuOption"><a href="javascript:openp(\'' + frameTab[i][2] + kod + frameTab[i][3] + '\')">' + frameTab[i][1] + '</a></div>';
      }else{
        str += '<div class="frameMenuOption"><a href="' + frameTab[i][2] + '?fund=' + kod + '" target="_blank">' + frameTab[i][1] + '</a></div>';
      }
    }
  }
  if(tab != 'undef'){
    for(i=0;i<tab.length;i++){
      if(tab[i][0] == 1){
        str += '<div class="frameMenuOption"><a href="javascript:openp(\'' + tab[i][2] + kod + tab[i][3] + '\')">' + tab[i][1] + '</a></div>';
      }else{
        str += '<div class="frameMenuOption"><a href="' + tab[i][2] + kod + tab[i][3] + '" target="_blank">' + tab[i][1] + '</a></div>';
      }
    }
  }
  d.innerHTML = str + '</div><div align="right" class="exit" id="exit"><p align=right style="margin-top: 0px; margin-bottom: 0px; margin-right: 0px; padding: 0px;"><a href="javascript:hideFrameMenu()" style="text-decoration: none; color: black;">&nbsp;x&nbsp;</a></p></div>';
  if(navigator.appName == 'Microsoft Internet Explorer'){
    document.getElementById('exit').style.left = 100;
    document.getElementById('frameMenu').style.width = 110
  }
  d.style.display='';
  return void(0);
}

function hideFrameMenu(){
  var d = document.getElementById('frame_menu');
  d.style.display='none';
  return void(0);
}

function addFrameOption(tablica,czy_popup,opis,adres,parametry){
  tablica[tablica.length] = [czy_popup, opis, adres, parametry];
}

function indexOf(arr, obj){
    for(var i=0; i<arr.length; i++){
        if(arr[i]==obj){
            return i;
        }
    }
    return -1;
}
