                                                          /*===================\
+========================================================/  ppm_tabmenu object  \
|                                                                               |
| Verzió            : 1.0                                                       |
| Létrehozás dátuma : 2003.05.08.                                               |
|                                                                               |
+-FUNKCIÓ :---------------------------------------------------------------------+
|                                                                               |
|   A tabmenu egy olyan kliens oldali objektum, amely meghatározott             |
|   szélességben több sorba rendezi a tabulátorokat.                            |
|                                                                               |
+-SZÜKSÉGESEK :-----------------------------------------------------------------+
|                                                                               |
|  - img.js                                                                     |
|  - egy vagy több css definíció a tabulátor sornak TD, tabulátor cellának TD,  |
|    kiválasztott tabulátor cellának TD és a tabulátor link-nek A               |
|                                                                               |
+-PARAMÉTEREK :-----------------------------------------------------------------+
|                                                                               |
|  - ContainerId  : A tabulátokat hordozó tábla azonosítója, megadása kötelező  |
|  - objName      : A létrehozott objektumváltozó neve, megadása kötelező       |
|  - tablineWidth : A tabulátor sorok szélessége, opcionális. Amenyiben nincs   |
|                   megadva akkor a szélesség a befoglaló tábla szélessége az   |
|                   objektum létrehozásának pillanatában.                       |
|                                                                               |
+-TULAJDONSÁGOK :---------------------------------------------------------------+
|                                                                               |
|  - objname      : az létrehozott objektum azonosítójának neve                 |
|  - width        : a tabulátorsor maximált szélessége                          |
|  - container    : Tabmenu befoglaló tábla objektuma                           |
|  - tabs         : ppm_mnuLink objektumok tömbje                               |
|  - lineClasses  : tabsor stílusok tömbje. Egynél több elem esetén a stílusok  |
|                   soronként alternálnak.                                      |
|                   Alapértelemzés: [0] = "ppm_tabline"                         |
|  - tabClasses   : tabgomb stílusok tömbje. Ugyanazzal a névvel kell legyen TD |
|                   és A stílus is. Egynél több elem esetén a stílusok          |
|                   soronként alternálnak.                                      |
|                   Alapértelemzés: [0] = "ppm_tabbtn"                          |
|  - tabSepImg    : a tabulátor elválasztó képek prefixe. Automatikusan lesz    |
|                   kiegészítve a grl és grr kiegészítőkkel jelölt állapotban.  |
|                   Egynél több elem esetén a prefixek soronként alternálnak    |
|                   Alapértelemzés: [0] = "sep"                                 |
|  - tabSepExt    : Elválasztó képek kiterjesztése                              |
|                   Alapértelemzés: "jpg"                                       |
|  - tabSepWidth  : az elválasztó képek szélessége, minden állapotú             |
|                   elválasztónak ugyanakkorának kell lennie                    |
|  - tabSepHeight : az elválsztó képek magassága                                |
|  - imgPath      : az elválsztó képek könyvtára. Egy tabmenü objektumhoz       |
|                   tartozó képeknek egy könyvtárban kell lenniük               |
|                   Alapértelemzés: "/skin/tabmenu/"                            |
|  - minLine      : A minimálisan kirajzolandó sorok száma. Ha nincs megadva    |
|                   akkor annyi sor kerül kirajzolásra amennyibe a tabulátorok  |
|                   elférnek                                                    |
|  - maxLine      : A maximálisan engedélyezett sorok száma. Csak annyi         |
|                   tabulátor lesz kirajzolva amennyi ezekben elfér.            |
|                                                                               |
+-METÓDUSOK :-------------------------------------------------------------------+
|                                                                               |
|  - clearMnu  : Törli az objektumhoz tartozó táblából a sorokat                |
|  - addTab    : Új tabulátort ad a lista végére. Paraméterek: tabulátor címke, |
|                menü események, esemény célja                                  |
|  - delTab    : töröl egy tabulátort a listából. Paraméter: törölt elem indexe |
|  - delTabs   : törli az összes tabulátort a listából                          |
|  - loadTabs  : Egy string alapján feltölti a tabulátorok listáját. Az egyes   |
|                tabulátorokat a "_¤_" karaktersornak kell elválasztania. Egy   |
|                tabulátort jelentő stringen belül a címkét, az eseményeket és  |
|                a célt a "_|_" jelsor kell határolja. Egymás után meghívva     |
|                bővíti a listát.                                               |
|  - writeTabs : Megrajzolja vagy újrarajzolja a tabmenüt. Paraméterül kaphat   |
|                egy a loadTabs-éval azonos formátumú sztringet. Szemben a      |
|                loadTabs függvénnyel ez nem bővíti, hanem lecseréli a meglévő  |
|                tabulátorokat.                                                 |
|  - marktab   : Egér esemény, a kurzor alatti tabulátort emeli ki              |
|  - unmarktab : Egér esemény, a kurzor távozása után visszaállítja a tabulátor |
|                eredeti alakját.                                               |
|                                                                               |
+-TESZTELVE :-------------------------------------------------------------------+
|                                                                               |
|  - Internet Explorer : 6.0                                                    |
|  - Netscape          : 7.01                                                   |
|  - Opera             : 7.03                                                   |
|                                                                               |
+===============================================================================+
| File created by:                                                        Boza  |
+==============================================================================*/




  /*========\
 /  Methods  \_______________________________________________________________
|__________________________________________________________________________*/
function ppmtabmenu_clear() {
    while (this.container.rows.length > 0) this.container.deleteRow(0);
}

function ppmtabmenu_addTab(tabCapt, tabEvents, tabTarget) {
    this.tabs[this.tabs.length] = new ppm_mnuLink(tabCapt, tabEvents, tabTarget)
}

function ppmtabmenu_delTab(index) {
    newTabs = new Array();
    curIndx = 0
    if (index != curIndx)
    { //
        newTabs[newTabs.length] = this.tabs[curIndx]
        curIndx++
    }
    this.tabs = newTabs
}

function ppmtabmenu_delTabs() {
    this.tabs = new Array();
}

function ppmtabmenu_loadTabs(tabstr) {
    strtabs = tabstr.split("_¤_")
    for(key in strtabs) {
        tabcomp = strtabs[key].split("_|_")
        if (tabcomp[0])
        { //
            if (!tabcomp[1]) tabcomp[1] = "javascript:void(null)"
            if (!tabcomp[2]) tabcomp[2] = ""
            this.addTab(tabcomp[0], tabcomp[1], tabcomp[2])
        }
    }
}

function ppmtabmenu_getSepHtml(_path, _sepname, _sepext, _sepwidth, _sepheight, _sepindex, _menuname) {
    SepHtml = "<IMG SRC='" + _path + _sepname + "." + _sepext + "'"
    if (_sepwidth) SepHtml += " WIDTH=" + _sepwidth
    if (_sepheight) SepHtml += " HEIGHT=" + _sepheight
    SepHtml += " BORDER=0 ALT='' NAME='Sep_" + _menuname + "_" + _sepindex +"'>"
    return SepHtml;
}
function ppmtabmenu_writeTabs(tabstr) {
    if (tabstr)
    {
        this.delTabs()
        this.loadTabs(tabstr)
    }
    this.clearMnu();
    if (this.tabs.length)
    { // Ha vannak tabulátorok
        curTabClass = 0
        curSepImg = 0
        curTab = 0
        curTabLine = 0
        curSepIndex = 1
        do {
            curTabInRow = 0
            ppm_tabrow = this.container.insertRow(this.container.rows.length)
            ppm_tabline = ppm_tabrow.insertCell(ppm_tabrow.cells.length)
            ppm_tabline.className = this.lineClasses[curTabLine % this.lineClasses.length]
            curTabLine++
            ppm_tabline.innerHTML = "<TABLE border=0 cellpadding=0 cellspacing=0 ID=\"ppmTabLine_" + this.objname + "_" + curTabLine + "\"><TR></TR></TABLE>"

            LineIdStr = "ppmTabLine_" + this.objname + "_" + curTabLine
            if (document.all) ppm_tabline = document.all(LineIdStr)
            else ppm_tabline = document.getElementById(LineIdStr)

            NewTabRow = false
            while(!NewTabRow && (this.tabs.length-1 >= curTab)) {
                ppm_tab = ppm_tabline.rows[0].insertCell(ppm_tabline.rows[0].cells.length)
                ppm_tab.innerHTML = ppmtabmenu_getSepHtml(this.imgPath, this.tabSepImg[curSepImg % this.tabSepImg.length], this.tabSepExt, this.tabSepWidth, this.tabSepHeight, curSepIndex, this.objname)
                curSepIndex++

                ppm_tab = ppm_tabline.rows[0].insertCell(ppm_tabline.rows[0].cells.length)
                ppm_tab.className = this.tabClasses[curTabClass % this.tabClasses.length]
                ppm_tab.id = this.objname + "_ppm_tab_" + curSepIndex
                LinkHtml = "<A Class='" + this.tabClasses[curTabClass % this.tabClasses.length] + "' onMouseOver='" + this.objname + ".marktab("+curSepIndex+", "+curSepImg % this.tabSepImg.length+", " + curTabClass % this.tabClasses.length + ")' onMouseOut='" + this.objname + ".unmarktab("+curSepIndex+", "+curSepImg % this.tabSepImg.length+", " + curTabClass % this.tabClasses.length + ")' HREF='" + this.tabs[curTab].event + "'"
                if (this.tabs[curTab].target) LinkHtml += " TARGET='" + this.tabs[curTab].target + "'"
                LinkHtml += ">" + this.tabs[curTab].caption + "</A>"
                ppm_tab.innerHTML = LinkHtml

                if (ppm_tabline.offsetWidth + this.tabSepWidth > this.width)
                { //
                    if (curTabInRow) ppm_tabline.rows[0].deleteCell(ppm_tab.cellIndex)
                    else {
                        curTab++
                        ppm_tab = ppm_tabline.rows[0].insertCell(ppm_tabline.rows[0].cells.length)
                        ppm_tab.innerHTML = ppmtabmenu_getSepHtml(this.imgPath, this.tabSepImg[curSepImg % this.tabSepImg.length], this.tabSepExt, this.tabSepWidth, this.tabSepHeight, curSepIndex, this.objname)
                        curSepIndex++
                    }
                    NewTabRow = true
                } else {
                    curTabInRow++
                    curTab++
                }
            } 
            curTabClass++
            curSepImg++
        } while((this.tabs.length-1 >= curTab)&&((curTabLine < this.maxLine) || !this.maxLine))
        if (this.tabs.length-1 < curTab)
        {
            ppm_tab = ppm_tabline.rows[0].insertCell(ppm_tabline.rows[0].cells.length)
            ppm_tab.innerHTML = ppmtabmenu_getSepHtml(this.imgPath, this.tabSepImg[curSepImg % this.tabSepImg.length], this.tabSepExt, this.tabSepWidth, this.tabSepHeight, curSepIndex, this.objname)
        }
        while (curTabLine < this.minLine)
        {
            ppm_tabrow = this.container.insertRow(this.container.rows.length)
            ppm_tabline = ppm_tabrow.insertCell(ppm_tabrow.cells.length)
            ppm_tabline.className = this.lineClasses[curTabLine % this.lineClasses.length]
            ppm_tabline.innerHTML = "&nbsp;"
            curTabLine++
        }
    }
}

function ppmtabmenu_MarkTab(TabId, SepIndex, TabIndex)
{
    changeImage(this.imgPath + this.tabSepImg[SepIndex] + "grl." + this.tabSepExt, "Sep_" + this.objname + "_" + (TabId-1), "")
    oMnuCell = document.getElementById(this.objname + "_ppm_tab_" + TabId)
    oMnuCell.className = this.tabClasses[TabIndex] + "_sel";
    changeImage(this.imgPath + this.tabSepImg[SepIndex] + "grr." + this.tabSepExt, "Sep_" + this.objname + "_" + (TabId), "")
}

function ppmtabmenu_UnmarkTab(TabId, SepIndex, TabIndex)
{
    changeImage(this.imgPath + this.tabSepImg[SepIndex] + "." + this.tabSepExt, "Sep_" + this.objname + "_" + (TabId-1), "")
    oMnuCell = document.getElementById(this.objname + "_ppm_tab_" + TabId)
    oMnuCell.className = this.tabClasses[TabIndex];
    changeImage(this.imgPath + this.tabSepImg[SepIndex] + "." + this.tabSepExt, "Sep_" + this.objname + "_" + (TabId), "")
}


  /*=============\
 /  Constructors  \__________________________________________________________
|__________________________________________________________________________*/
function ppm_mnuLink(linkCapt, linkEvents, linkTarget)
{
    this.caption = linkCapt
    this.event = linkEvents
    this.target = linkTarget
}

function ppm_tabmenu(ContainerId, objName, tablineWidth) {

    if (document.all) MnuContainer = document.all(ContainerId)
    else MnuContainer = document.getElementById(ContainerId)

    if (MnuContainer.tagName == "TABLE")
    { // Ha a container egy tábla ...

        /* Property definition */
        this.objname = objName
        this.minLine = 0
        this.maxLine = 0
        if (tablineWidth) this.width = tablineWidth
        else this.width = MnuContainer.offsetWidth

        this.container = MnuContainer
        this.tabs = new Array()
        this.lineClasses = new Array("ppm_tabline")
        this.tabClasses = new Array("ppm_tabbtn")

        this.tabSepImg = new Array("sep")
        this.tabSepExt = "jpg"
        this.tabSepWidth = 0
        this.tabSepHeight = 0
        this.imgPath = "/skin/tabmenu/"

        /* Methods */
        this.clearMnu = ppmtabmenu_clear
        this.addTab = ppmtabmenu_addTab
        this.delTab = ppmtabmenu_delTab
        this.delTabs = ppmtabmenu_delTabs
        this.loadTabs = ppmtabmenu_loadTabs
        this.writeTabs = ppmtabmenu_writeTabs
        this.marktab = ppmtabmenu_MarkTab
        this.unmarktab = ppmtabmenu_UnmarkTab

        // A tábal sorainak eltávolítása
        this.clearMnu();
    } //else this = null;
}

