var isIE = false;

var http_request = false;
var CategoryID = 0, pending = 0, timeout = 0, itemCount = 1, readEventTrigger = 0;
var idArr = Array('7777'), nameArr = Array('pokus'), childArr = Array('0');
var treeLevel = 0, eiTOP = 1, ei = 0, jsDebugStr = 'JS_DEBUG<BR>';

var menuStateArr = new Array();
for(i=0; i<5; i++) menuStateArr[i] = new Array();

var menuRestoreItem = false, menuState = '', menuInitFlag=false, menuInitPending = false;
var bobek = false;
var readedArr = Array();
var innerBuff = Array();

function wrDebug(str) {}

function GetCookieVal(offset) {
    var endstr = document.cookie.indexOf (';', offset);
    if(endstr == -1) endstr = document.cookie.length;
    return unescape(document.cookie.substring(offset, endstr));
}

function getCookie(cookName) {
    var arg = cookName + '=';
    var alen = arg.length;
    var clen = document.cookie.length;
    var i = 0;
    while(i < clen) {
        var j = i + alen;
        if(document.cookie.substring(i, j) == arg) return GetCookieVal(j);
        i = document.cookie.indexOf(' ', i) + 1;
        if(i == 0) break;
    }
    return null;
}

function writeCookie() {
    for(i=0; i<5; i++) {
        document.cookie = 'menustate_'+i+'='+menuStateArr[i].toString();
    }

}

function readCookie() {
    var lastState = '';
    var cookArr = null;
    var key = '', val = '', subOrg = '', subEnd = '', subLen = 0;
    for(iTOP = 0; iTOP < 5; iTOP++) {
        var cookStr = getCookie('menustate_'+iTOP); //!!vraci string s obsahem pole
        if(cookStr) {
            cookArr = cookStr.split(','); //nova vetev pole
            for(i in cookArr) menuStateArr[iTOP][i] = cookArr[i];
        }
    }
    var debugStr = '', i2=0;
    for(i=0; i<5; i++) {
        debugStr += (i+': ');
        subLen = menuStateArr[i].length;
        for(i2=0; i2<subLen; i2++) {
            debugStr += menuStateArr[i][i2].toString() + ', ';
        }
        debugStr += ' X ';
    }
}

function itemReadEvent() {
    var skipFlag = false, debStr = ('itemReadEvent() ei='+ei+' eiTOP='+eiTOP+' eiMAX='+eiMAX);
    if(menuInitFlag) { //jsme po nacteni 0.patra, zacina rozbaleni
        menuInitFlag = false;
        menuInitPending = true;
        debStr+=(' <B>menuInitPending=TRUE</B>');
    }
    if(menuInitPending) { //jsme uvnitr rozlozeneho cyklu
        if(ei < eiMAX) {
            menuRestoreItem = document.getElementById('img_'+menuStateArr[eiTOP][ei++]);
            if(menuRestoreItem) {
                treeMenuClick();
                wrDebug(debStr);
                return false;
            } else skipFlag = true;
        }
        if(ei >= eiMAX) {
            ei = 0;
            eiTOP++;
            skipFlag = true;
        }
        if(eiTOP >= 4) { 
            menuInitPending = false;
            ei=0;
            eiTOP=0;
            debStr+=(' <B>menuInitPending=FALSE</B>');
            wrDebug(debStr);
            return false;
        }
        else eiMAX = menuStateArr[eiTOP].length; //ev.nova hodn. po inkr.

        if(skipFlag && menuInitPending) {
            wrDebug(debStr+' <B>skipFlag=TRUE</B>');
            itemReadEvent();
            return false;
        }
    }
    wrDebug(debStr);
}

function treeMenuInit() {
    //vykresleni 0.patra - volat jako body.onLoad
    if(window.navigator.appName == 'Netscape') isIE = false; else isIE = true;
    readCookie();
    eiTOP = 0;
    ei = 0;
    eiMAX = menuStateArr[eiTOP].length;
    menuInitFlag = true;
    wrDebug('treeMenuInit: nacitam 0..');
    getCategoryContent(0);
}

function treeMenuClick(evt) {
    //bezparametrova nahrada TreeMenuShow kvuli prasoidni implementaci eventu v DOM
    var eventSrc = false;
    if(menuRestoreItem) {
        eventSrc = menuRestoreItem;
        menuRestoreItem = false;
    } //je to rozbaleni volane z initu
    else {
        eventSrc = (evt.target) ? evt.target : evt.srcElement
    } //je to klik
    var thesub, theimage;
    var imageid, idx, enableGet=true;
    var idStr = eventSrc.id;
    idStr = idStr.substr(4, idStr.length-4); //cislo za 'img_'

    wrDebug('treeMenuClick() id='+idStr);
    thesub = document.getElementById(idStr);
    treeLevel = thesub.tabIndex;
    imageid = "img_"+idStr;
    theimage = document.getElementById(imageid);
    if(thesub.style.display == 'block') { //collapse...
        thesub.style.display = 'none';
        theimage.src = '/images/c.png';
        if(! menuInitPending) { //!!!MODIFIKACE menuStatArr
            for(i in menuStateArr[treeLevel])
                if(menuStateArr[treeLevel][i] == idStr) { //nalezeno
                    menuStateArr[treeLevel].splice(i, 1); //vyhodit ze sezn.rozbalenych
                    break;
                }
            writeCookie();
        }
    } else { //expand/display...
        thesub.style.display = 'block';
        theimage.src = '/images/e.png';
        if(! menuInitPending) {
            menuStateArr[treeLevel].push(idStr); //pridat do sezn.rozbalenych
            writeCookie();
        }
        for(i in readedArr) if(readedArr[i] == idStr) {
            enableGet = false;
            break;
        } //nenacitat uz nactene
        if(enableGet) getCategoryContent(idStr); //ajax v akci
    }
}

function getCategoryContent(catID) 
{ //tohle zavolat z onclick fce na krizku
    http_request = false;
    CategoryID = catID;
    wrDebug('getCategoryContent('+catID+')');
    if(window.XMLHttpRequest) { // Mozilla atp.
        http_request = new XMLHttpRequest();
    } else if(window.ActiveXObject) { // IE :-((
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) { }
        }
    }
    if(! http_request) {
        alert('Lituji, ale váš prohlížeč nepodporuje Ajax...:-(');
        return false;
    }
    idArr = Array();
    nameArr = Array();
    childArr = Array();
    itemCount = 0; /*timeout = 50;*/
    pending = 1;
    http_request.onreadystatechange = httpStateChange; //priradit eventhandler
    http_request.open('GET', 'TreeMenuAjax.php?CategoryID='+CategoryID, true);
    http_request.send(null);
    timeout = setTimeout("itemReadEvent();", 4000);
    if(pending) return false;
    else return true;
}

function httpStateChange() { //handler udalosti prenosu dat
    var i = 0, Node = '', catID = '', catName = '';
    if(http_request.readyState == 4) {
        if(http_request.status == 200) { // !!! TADY SEBRAT A ZPRACOVAT DATA
            clearTimeout(timeout);
            var xmlDoc = http_request.responseXML;
            if(xmlDoc) {
                Node = xmlDoc.getElementsByTagName('ITEM_COUNT').item(0);
                itemCount = Node.firstChild.data;
                for(i = 1; i <= itemCount; i++) {
                    Node = xmlDoc.getElementsByTagName('CATID_'+i).item(0);
                    catID = Node.firstChild.data;
                    idArr.push(catID);
                    Node = xmlDoc.getElementsByTagName('CATNAME_'+i).item(0);
                    catName = Node.firstChild.data;
                    nameArr.push(catName);
                    Node = xmlDoc.getElementsByTagName('CATCHILDS_'+i).item(0);
                    catChilds = Node.firstChild.data;
                    childArr.push(catChilds);
                }

                //----MODIFIKACE DOKUMENTU----

                var parUL = document.getElementById(CategoryID);
                var LIsub = false, A1=false, A2=false, A1img=false, A2txt='', A1click='', ULsub=false;

                if(parUL) {
                    if(CategoryID == '0') parUL.tabIndex = 0;
                    for(i = 0; i != itemCount; i++) { //poplodit potomstvo
                        LIsub = document.createElement("LI"); //radek polozky
                        if(bobek) LIsub.className = 'treeimg_bobek';
                        ULsub = document.createElement("UL"); //..a zaklad jeho potomku
                        ULsub.id = idArr[i];
                        ULsub.style.display = 'none'; //zatim zabaleny
                        var tabIdx = parUL.tabIndex;
                        tabIdx++; //!!! UDAJ PRO RESTORE POPRVE -puv.
                        ULsub.tabIndex = tabIdx; //tabIdx++; //nove az po
                        if(childArr[i] != '0') { //kdyz ma deti..
                            A1img = document.createElement("IMG"); //ikona +/-
                            A1img.src = '/images/c.png'; //ted +
                            A1img.title = "expand";
                            A1img.border = "0";
                            A1img.id = "img_"+idArr[i];
                            A1img.style.cursor = 'pointer';
                            A1img.style.cursor = 'hand'; //troxu veproidni, lec funkcni v cemkoli
                            if(isIE) { // 3*fuj
                                A1img.attachEvent("onclick", treeMenuClick);
                            } else {
                                A1img.addEventListener("click", treeMenuClick, false);
                            }
                        }
                        A2 = document.createElement("A"); //link na kategorii
                        if(parUL.tabIndex % 2) {
                            A2.className = 'link_menu_orange';
                        } else {
                            A2.className = 'link_menu_gray';
                        }
                        if(CategoryID){
                            A2.href = 'CategoryListing.php?CategoryID='+idArr[i];
                        } else {
                            A2.href = 'Categories.php?CategoryID='+idArr[i]; //nulte patro
                        }
                        A2txt = document.createTextNode(nameArr[i]); //text linku
                        A2.appendChild(A2txt);
                        if(childArr[i] != '0') LIsub.appendChild(A1img);
                        LIsub.appendChild(A2); //link
                        LIsub.appendChild(ULsub); //pridat vnoreny zaklad dalsiho patra
                        parUL.appendChild(LIsub); //a cele to strcit do predka;-)
                    } 
                    readedArr.push(CategoryID); //zapsat do seznamu nactenych
                    if(! bobek) bobek = true; //v 0.neni, v dalsich bude
                    wrDebug('httpStateChange() CategoryID='+CategoryID);
                    itemReadEvent(); //pouziva se k samokliknuti pri restore v initu
                }
                pending = 0;
            }
        }
    }
}

function fullCateg(catID) {
    //zobrazi uplny obsah kat.na indexu po kilku na 'dalsi'
    http_request = false;
    CategoryID = catID;

    if(window.XMLHttpRequest) { // Mozilla atp.
        http_request = new XMLHttpRequest();
    } else if(window.ActiveXObject) { // IE :-((
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) { }
        }
    }
    
    if(! http_request) {
        alert('Lituji, ale váš prohlížeč nepodporuje Ajax...:-(');
        return false;
    }
    pending = 1;
    http_request.onreadystatechange = httpStateChange_index; //priradit eventhandler
    http_request.open('GET', 'FullCatAjax.php?CategoryID='+CategoryID+'&index=1', true);
    http_request.send(null);
    if(pending) return false;
    else return true;
}

function httpStateChange_index() 
{ //handler udalosti prenosu dat
    var i = 0, Node = '', catID = '', catName = '', divInner = '';
    if(http_request.readyState == 4) {
        if(http_request.status == 200) { // !!! TADY SEBRAT A ZPRACOVAT DATA
            var xmlDoc = http_request.responseXML;
            if(xmlDoc) {
                Node = xmlDoc.getElementsByTagName('DIVINNER').item(0);
                divInner = Node.firstChild.data;
                var targetDiv = document.getElementById('catDiv_'+CategoryID);
                innerBuff.push(new Array(CategoryID, targetDiv.innerHTML));
                targetDiv.innerHTML = divInner;
                pending = 0;
            }
        }
    }
}

function hideCateg(catID) {
    //onclick udalost pro skryti celeho obsahu kat.
    var targetDiv = document.getElementById('catDiv_'+catID);
    for(i in innerBuff) if(innerBuff[i][0] == catID) {
        targetDiv.innerHTML = innerBuff[i][1];
        break;
    } //mame nasysleno odminula
}

function imgClick() {
}

