// globalny stan menu
var menuGotowe = false;
// zapisanie par obrazków w pamięci podręcznej przeglądarki
if (document.images) {
    var obrazkiNormalne = new Array();
    obrazkiNormalne["wstep"] = new Image(20, 100);
    obrazkiNormalne["wstep"].src = "grafika/wstep_off.gif";
    obrazkiNormalne["psy"] = new Image(20, 100);
    obrazkiNormalne["psy"].src  = "grafika/psy_off.gif";
    obrazkiNormalne["galerie"] = new Image(20, 100);
    obrazkiNormalne["galerie"].src  = "grafika/galerie_off.gif";
    obrazkiNormalne["linki"] = new Image(20, 100);
    obrazkiNormalne["linki"].src  = "grafika/linki_off.gif";
    
    var obrazkiWyroznione = new Array();
    obrazkiWyroznione["wstep"] = new Image(20, 100);
    obrazkiWyroznione["wstep"].src = "grafika/wstep_on.gif";
    obrazkiWyroznione["psy"] = new Image(20, 100);
    obrazkiWyroznione["psy"].src  = "grafika/psy_on.gif";
    obrazkiWyroznione["galerie"] = new Image(20, 100);
    obrazkiWyroznione["galerie"].src  = "grafika/galerie_on.gif";
    obrazkiWyroznione["linki"] = new Image(20, 100);
    obrazkiWyroznione["linki"].src  = "grafika/linki_on.gif";
}

function stylElementu(element, WlasnoscStyluIE, WlasnoscStyluCSS) {
    if (element.currentStyle) {
        return element.currentStyle[WlasnoscStyluIE];
    } else if (window.getComputedStyle) {
        var styl = window.getComputedStyle(element, "");
        return styl.getPropertyValue(WlasnoscStyluCSS);
    }
    return "";
}

// zmienna przechowuje wartośc najważniejszych właściwości
// arkusza stylów określającego wygląd menu
var WartosciRegulCSS = {elementMenuWysokosc:"18px",
                        elementMenuWysokoscLinii:"1.4em",
                        menuSzerokoscRamki:"2px",
                        menuWypelnienie:"3px",
                        domyslnaCzcionkaBody:"12px"
                       };

// określenie zawartości menu i informacji na temat obrazków i hiperłączy
var menu = new Array();
menu[0] = {pasekMenuIdObrazka:"menuImg_1",
           pasekMenuObrazekNormalny:obrazkiNormalne["wstep"],
           pasekMenuObrazekWyrozniony:obrazkiWyroznione["wstep"],
           opcjeMenu:[],
           identyfikatorElementu:""
          };
menu[1] = {pasekMenuIdObrazka:"menuImg_2",
           pasekMenuObrazekNormalny:obrazkiNormalne["psy"],
           pasekMenuObrazekWyrozniony:obrazkiWyroznione["psy"],
           opcjeMenu:[ {tekst:"Samba", adresURL:"samba.html"},
                       {tekst:"Tygrys", adresURL:"tygrys.html"},
                       {tekst:"Jula", adresURL:"jula.html"},
                       {tekst:"Cyryl", adresURL:"cyryl.html"}
                     ],
           identyfikatorElementu:""
          };
menu[2] = {pasekMenuIdObrazka:"menuImg_3", 
           pasekMenuObrazekNormalny:obrazkiNormalne["galerie"],
           pasekMenuObrazekWyrozniony:obrazkiWyroznione["galerie"],
           opcjeMenu:[
                       {tekst:"Dzieci Cyryla", adresURL:"g48.html"},
                       {tekst:"Lato 08", adresURL:"g47.html"},
                       {tekst:"Jesień 08", adresURL:"g46.html"},
                       {tekst:"Samba", adresURL:"g5.html"},
                       {tekst:"Tygrys", adresURL:"g6.html"},
                       {tekst:"Wystawa Championów 02", adresURL:"gch02.html"},
                       {tekst:"Zima 03/04", adresURL:"g1.html"},
                       {tekst:"Wiosna 04", adresURL:"g2.html"},
                       {tekst:"Lato 04", adresURL:"g3.html"},
                       {tekst:"Jesień 04", adresURL:"g4.html"},
                       {tekst:"Ambra RG", adresURL:"g7.html"},
                       {tekst:"Ajax RG", adresURL:"g27.html"},
                       {tekst:"Bukta RG", adresURL:"g8.html"},
                       {tekst:"Bergo RG", adresURL:"g9.html"},
                       {tekst:"Bayard RG", adresURL:"g11.html"},
                       {tekst:"Contra RG", adresURL:"g29.html"},
                       {tekst:"Castor RG", adresURL:"g31.html"},
                       {tekst:"Calypso RG", adresURL:"g35.html"},
                       {tekst:"Zima 04/05", adresURL:"g10.html"},
                       {tekst:"Miot C 1", adresURL:"g12.html"},
                       {tekst:"Miot C 2", adresURL:"g13.html"},
                       {tekst:"Miot C 3", adresURL:"g14.html"},
                       {tekst:"Miot C 10", adresURL:"g21.html"},
                       {tekst:"Miot C 12", adresURL:"g23.html"},
                       {tekst:"Miot C 13", adresURL:"g24.html"},
                       {tekst:"Miot C 14", adresURL:"g25.html"},
                       {tekst:"Lato/Jesień 05", adresURL:"g26.html"},
                       {tekst:"Przechlewko 05", adresURL:"g28.html"},
                       {tekst:"Jesień/Zima 05/06", adresURL:"g30.html"},
                       {tekst:"Styczeń 06", adresURL:"g32.html"},
                       {tekst:"Wiosna 06", adresURL:"g33.html"},
                       {tekst:"Wiosna 06 cz. II", adresURL:"g34.html"},
                       {tekst:"Lato 06", adresURL:"g36.html"},
                       {tekst:"Jesień 06", adresURL:"g38.html"},
                       {tekst:"Światowa Wystawa Poznań", adresURL:"g37.html"},
                       {tekst:"Wiosna 07", adresURL:"g41.html"},
                       {tekst:"Wystawa Poznań 07", adresURL:"g43.html"},
                       {tekst:"Jesień 07", adresURL:"g44.html"},
                       {tekst:"Zima 07/08", adresURL:"g45.html"},
                       {tekst:"Wiosna-lato 09", adresURL:"g50.html"}
                     ],
           identyfikatorElementu:""
          };
menu[3] = {pasekMenuIdObrazka:"menuImg_4",
           pasekMenuObrazekNormalny:obrazkiNormalne["linki"],
           pasekMenuObrazekWyrozniony:obrazkiWyroznione["linki"],
           opcjeMenu:[ {tekst:"Sławski Rewir", adresURL:"rewir.html"},
                       {tekst:"ZKWP", adresURL:"http://www.zkwp.org.pl/"},
                       {tekst:"Labrador.pl", adresURL:"http://www.labrador.pl/"},
                       {tekst:"Fundacja Labrador", adresURL:"http://www.fundacja.labrador.pl/"},
                       {tekst:"Bellatrix", adresURL:"http://www.bellatrix-lab.com/"},
                       {tekst:"Jankowa chatka", adresURL:"http://www.jankowachatka.prv.pl/"},
                       {tekst:"Arcturus", adresURL:"http://www.arcturus-pl.com/"},
                       {tekst:"Mieszko", adresURL:"http://www.chartpolskimieszko.republika.pl/"},
                       {tekst:"Rodowody", adresURL:"http://www.republika.pl/rodowody/"},
                       {tekst:"LabradorNet", adresURL:"http://www.labradornet.com/"},
                       {tekst:"Forum Miłośników Chartów", adresURL:"http://www.psy.mgt.pl/psy"},
                       {tekst:"Energetyk", adresURL:"http://www.enrgetyk.9g.pl/"},
                       {tekst:"Digart", adresURL:"http://www.digart.pl/"}
                     ],
           identyfikatorElementu:""
          };

// stworzenie tablicy mieszającej dla obiektów menu, 
// zawierającej indeksy łańcuchowe odpowiadające identyfikatorom
function tworzTabliceMieszajace() {
    for (var i = 0; i < menu.length; i++) {
        menu[menu[i].identyfikatorElementu] = menu[i];
        menu[menu[i].pasekMenuIdObrazka] = menu[i];
    }
}

// określenie procedur obsługi zdarzeń dla obrazków tworzących menu
function przypiszZdarzeniaEtykiet() {
    var element;
    for (var i = 0; i < menu.length; i++) {
        element = document.getElementById(menu[i].pasekMenuIdObrazka);
        element.onmouseover = zamien;
        element.onmouseout = zamien;
    }
}

// funkcja generuje elementy div menu oraz ich zawartość.
// wszystkie te operacje są niewidoczne dla użytkownika i wykonywane 
// na etapie tworzenia strony
function tworzMenu() {
    var menuElementDIV, opcjaMenu, hiperlaczeOpcjiMenu, obrazekPaskaMenu, wezelTekstowy, offsetLewo, offsetGora;
    
    // określenie podstawowych parametrów modyfikacji całkowitej wysokości 
    // elementów div tworzących menu
    
    var opcjaMenyWys = 0;
    var wielkoscCzcionkiBody = parseInt(stylElementu(document.body, "fontSize", "font-size"));
    // sprawdzamy czy wielkość czcionki w przeglądarce została zmieniona przez użytkownika
    // oraz czy nowa wielkość została zarejestrowana jako właściwość użytego stylu
    if (wielkoscCzcionkiBody == parseInt(WartosciRegulCSS.domyslnaCzcionkaBody)) {
        opcjaMenyWys = (parseFloat(WartosciRegulCSS.elementMenuWysokosc));
    } else {
        // działa dobrze w Netscapie 7
        opcjaMenyWys = parseInt(parseFloat(WartosciRegulCSS.elementMenuWysokoscLinii) * wielkoscCzcionkiBody);
    }
    var aktualizacjaWysokosci = parseInt(WartosciRegulCSS.menuWypelnienie) + 
        parseInt(WartosciRegulCSS.menuSzerokoscRamki);
    if (navigator.appName == "Microsoft Internet Explorer" && 
        navigator.userAgent.indexOf("Win") != -1 && 
        (typeof document.compatMode == "undefined" || 
        document.compatMode == "BackCompat")) {
        aktualizacjaWysokosci = aktualizacjaWysokosci;
    }
    
    // wykorzystujemy tablicę menu do sterowania przebiegiem pętli
    // generującej elementy div
    for (var i = 0; i < menu.length; i++) {
        menuElementDIV = document.createElement("div");
        menuElementDIV.id = "popupmenu" + i;
        // zachowujemy identyfikator menu jako właściwość komórki tablicy menu
        menu[i].identyfikatorElementu = "popupmenu" + i;
        menuElementDIV.className = "pojemnikMenu";
        if (menu[i].opcjeMenu.length > 0) {
            menuElementDIV.style.height = (opcjaMenyWys * menu[i].opcjeMenu.length) - 
            aktualizacjaWysokosci + "px";
        } else {
            // nie wyświetlamy żadnego elementu div menu, jeśli menu jest puste
            menuElementDIV.style.display = "none";
        }
        // definicja procedur obsługi zdarzeń
        menuElementDIV.onmouseover = zachowajMenu;
        menuElementDIV.onmouseout = zadajUkrycia;

        // określenie kolejności przesłaniania, na wypadek gdyby na stronie były
        // wykorzystywane warstwy
        menuElementDIV.style.zIndex = 1000;
        
        // generacja elementów opcji menu umieszczanych wewnątrz elementu div
        for (var j = 0; j < menu[i].opcjeMenu.length; j++) {
            opcjaMenu = document.createElement("div");
            opcjaMenu.id = "popupmenuItem_" + i + "_" + j;
            opcjaMenu.className = "elementMenu";
            opcjaMenu.onmouseover = przelaczPodswietlenie;
            opcjaMenu.onmouseout = przelaczPodswietlenie;
            opcjaMenu.onclick = ukryjMenu;
            opcjaMenu.style.top = opcjaMenyWys * j + "px";
            hiperlaczeOpcjiMenu = document.createElement("a");
            hiperlaczeOpcjiMenu.href = menu[i].opcjeMenu[j].adresURL;
            hiperlaczeOpcjiMenu.className = "elementMenu";
            hiperlaczeOpcjiMenu.onmouseover = przelaczPodswietlenie;
            hiperlaczeOpcjiMenu.onmouseout = przelaczPodswietlenie;
            wezelTekstowy = document.createTextNode(menu[i].opcjeMenu[j].tekst);
            hiperlaczeOpcjiMenu.appendChild(wezelTekstowy);
            opcjaMenu.appendChild(hiperlaczeOpcjiMenu);
            menuElementDIV.appendChild(opcjaMenu);
        }
        // dołączenie każdego elementu div menu do elementu body
        document.body.appendChild(menuElementDIV);
    }
    tworzTabliceMieszajace();
    przypiszZdarzeniaEtykiet();
    // wstępne rozmieszczenie menu
    for (i = 0; i < menu.length; i++) {
        rozmiescMenu(menu[i].identyfikatorElementu);
    }
    menuGotowe = true;
}

// inicjalizacja zmiennej globalnej ułatwiającej ukrywanie menu
var licznikCzasu;

// funkcja wywoływana w zdarzeniach mouseover wewnątrz menu, w celu 
// anulowania żądań ukrycia menu zgłaszanych (między innymi) przez zdarzenia mouseout
// generowanych przez obrazki stanowiące opcje menu
function zachowajMenu() {
    clearTimeout(licznikCzasu);
}

function anulujWszystko() {
    zachowajMenu();
    menuGotowe = false;
}

// funkcja wywoływana podczas obsługi zdarzeń mouseout, w celu 
// ukrycia wszystkich menu po 1/4 sekundy, chyba że żądanie zostanie anulowane
function zadajUkrycia() {
    licznikCzasu = setTimeout("ukryjMenu()", 250);
}

// brutalne ukrycie wszystkich menu i odtworzenie normalnego stanu obrazków na 
// pasku menu
function ukryjMenu() {
    for (var i = 0; i < menu.length; i++) {
       document.getElementById(menu[i].pasekMenuIdObrazka).src = menu[i].pasekMenuObrazekNormalny.src;
       var menuElem = document.getElementById(menu[i].identyfikatorElementu)
       menuElem.style.visibility = "hidden";
    }
}

// funkcja określa położenie elementu div tuż przed jego wyświetleniem
function rozmiescMenu(identyfikatorMenu){
    // wykorzystujemy obrazek paska menu jako punkt odniesienia dla div-a
    var obrazekPaskaMenu = document.getElementById(menu[identyfikatorMenu].pasekMenuIdObrazka);
    var offsetSlad = obrazekPaskaMenu;
    var offsetLewo = 0;
    var offsetGora = 0;
    while (offsetSlad) {
        offsetLewo += offsetSlad.offsetLeft;
        offsetGora += offsetSlad.offsetTop;
        offsetSlad = offsetSlad.offsetParent;
    }
    if (navigator.userAgent.indexOf("Mac") != -1 && 
        typeof document.body.leftMargin != "undefined") {
        offsetLewo += document.body.leftMargin;
        offsetGora += document.body.topMargin;
    }
    var elementDIVMenu = document.getElementById(identyfikatorMenu);
    elementDIVMenu.style.left = offsetLewo + "px";
    elementDIVMenu.style.top = offsetGora + obrazekPaskaMenu.height + "px";
}

// wyświetlenie konkretnego elementu div menu
function pokazMenu(identyfikatorMenu) {
    if (menuGotowe) {
        zachowajMenu();
        ukryjMenu();
        rozmiescMenu(identyfikatorMenu);
        var menuElem = document.getElementById(identyfikatorMenu);
        menuElem.style.visibility = "visible";
    }
}

// podmienianie obrazków wyświetlanych w menu, wywoływana podczas obsługi
// zdarzeń myszy, zamienia style obrazków
function przelaczPodswietlenie(zdarzenie) {
    zdarzenie = (zdarzenie) ? zdarzenie : ((event) ? event : null);
    if (typeof menuGotowe != "undefined") {
        if (menuGotowe && zdarzenie) {
            var element = (zdarzenie.target) ? zdarzenie.target : zdarzenie.srcElement;
            if (element.nodeType == 3) {
                element = element.parentNode;
            }
            if (zdarzenie.type == "mouseover") {
                zachowajMenu();
                element.className ="elementMenuWyrozniony";
            } else {
                element.className ="elementMenu";
                zadajUkrycia();
            }
            zdarzenie.cancelBubble = true;
        }
    }
}

function zamien(zdarzenie) {
    zdarzenie = (zdarzenie) ? zdarzenie : ((event) ? event : null);
    if (typeof menuGotowe != "undefined") {
        if (zdarzenie && (document.getElementById && document.styleSheets) && menuGotowe) {
            var element = (zdarzenie.target) ? zdarzenie.target : zdarzenie.srcElement;
            if (element.className == "menuImg") {
                if (zdarzenie.type == "mouseover") {
                    pokazMenu(menu[element.id].identyfikatorElementu);
                    element.src = menu[element.id].pasekMenuObrazekWyrozniony.src;
                } else if (zdarzenie.type == "mouseout") {
                    zadajUkrycia();
                }
                zdarzenie.cancelBubble = true;
            }
        }
    }
}

// tworzy menu wyłącznie w przypadku gdy są dostępne niezbędne możliwości
function inicjujMenu() {
    if (document.getElementById && document.styleSheets) {
        setTimeout("tworzMenu()", 5);
        window.onunload=anulujWszystko;
    }
}
