//===================================
//=================================== JS LAYER FUNCTIONS
//===================================

//    Index of functions
//    ==================
//
//    GetBrowser
//    lyrFetch
//    ie
//
//    lyrShow
//    lyrHide
//    lyrHideAll
//    lyrHideAllExcept
//    lyrVisible
//    lyrToggle
//
//    lyrMove
//
//    lyrZorder
//    lyrOnTop
//    lyrShowTop
//    lyrToggleTop
//
//    GetScrollTop
//    lyrAlignOnWindow
//    lyrDisplacePx
//    GetWindowHeight
//    GetWindowWidth

    var arLyr = new Array();            // array of all layers

    function GetBrowser()
    {
       if (document.layers)         return("NN4");
       if (document.all)            return("IE");
       if (document.getElementById) return("NN6");
       return("duh???");
    }

    function lyrFetch(stLyName)
    {
        switch(GetBrowser()){
            case "NN4":
                return document.layers[stLyName];
            case "IE":
                return document.all[stLyName].style;
            case "NN6":
                return document.getElementById(stLyName).style;
            }
    }

    function ie()
    {
        return (GetBrowser() == "IE");
    }


    function LayerCensus(){        var stID;

        switch(GetBrowser()){
            case "IE":
                var arDiv = document.all.tags("div");

                for (i=0; i<arDiv.length; i++){
                    err = 0;
                    try {
                        z = parseInt(arDiv[i].style.zIndex);
                        }
                    catch(q){
                        err = 1;
                        ctErr++;
                        }
                    if (err==0){                        arLyr[arLyr.length] = arDiv[i].style;
                        }
                    }

                break;

            case "NN4":
                for (i=0; i<document.layers.length; i++){
                    arLyr[arLyr.length] = document.layers[i];
                    }
                break;

            case "NN6":
                var arDiv = document.getElementsByTagName("div");

//                alert('arDiv.length = ' + arDiv.length);

                for (i=0; i<arDiv.length; i++){                    stID = arDiv[i].id;

                    err = 0;
                    try {
                        z = parseInt(arDiv[i].style.zIndex);
                        }
                    catch(q){
                        err = 1;
                        ctErr++;
                        }
                    if (err==0){
                        arLyr[arLyr.length] = arDiv[i].style;
//                      alert(stID + ' OK');
                        }
                    else {//                      alert(stID + ' error');
                        }
                    }
            }

        }


    function lyrShow(lname)
    {
         if (lname == '') return;

         var layer   = lyrFetch(lname);

         switch (GetBrowser()){
            case "IE":
                layer.visibility = 'visible';
                break;
            case "NN4":
                layer.visibility = 'show';
                break;
            case "NN6":
                layer.visibility = 'visible';
             }

    }

    function lyrHide(lname)
    {
        var layer    = lyrFetch(lname);

        switch (GetBrowser()){
            case "IE":
                layer.visibility = 'hidden';
                break;
            case "NN4":
                layer.visibility = 'hide';
                break;
            case "NN6":
                layer.visibility = 'hidden';
            }
    }

    function lyrShowList()
    {
        for(i=0;i<arguments.length;i++){            lyrShow(arguments[i]);
            }
    }
    function lyrShowVect(stVect){
        var ar = stVect.split('|');
        for(i=0;i<ar.length;i++){
            lyrShow(ar[i]);
            }
        }

    function lyrHideList()
    {
        for(i=0;i<arguments.length;i++){
            lyrHide(arguments[i]);
            }
    }

    function lyrHideVect(stVect){        var ar = stVect.split('|');
        for(i=0;i<ar.length;i++){
            lyrHide(ar[i]);
            }
        }

    function lyrHideAll()
    {
        var i;

        switch(GetBrowser()){
            case "IE":
                var arDiv = document.all.tags("div");
                var stId;

                for (i=0; i<arDiv.length; i++){
                    stId = arDiv[i].id;
                    if (stId.substring(0,2) == 'ly'){
                        lyrHide(stId);
                        }
                    }
                break;

            case "NN4":
                for (i=0; i<document.layers.length; i++){
                    lyrHide(document.layers[i].name);
                    }
            break;

            case "NN6":
                var arDiv = document.getElementsByTagName("div");
                var stId;

                for (i=0; i<arDiv.length; i++){
                    stId = arDiv[i].id;
                    if (stId.substring(0,2) == 'ly'){
                        lyrHide(stId);
                        }
                    }
                }
    }



    function lyrHideAllExcept()
    {
        var i, j,
            exceptions = lyrHideAllExcept.arguments,
            stLyr,
            flExcept;

        switch(GetBrowser()){
            case "IE":
                var arDiv = document.all.tags("div");

                for (i=0; i<arDiv.length; i++){
                    stLyr = arDiv[i].id;
                    if (stLyr.substring(0,2) == 'ly'){
                        flExcept = 0;
                        for (j=0; j<exceptions.length; j++){
                            if (stLyr == exceptions[j]){
                                flExcept = 1;
                                break;
                                }
                            }
                        if (!flExcept) lyrHide(stLyr);
                        }
                    }
                break;


            case "NN4":
                for (i=0; i<document.layers.length; i++){
                    stLyr = document.layers[i].name;
                    flExcept = 0;
                    for (j=0; j<exceptions.length; j++){
                        if (stLyr == exceptions[j]){
                            flExcept = 1;
                            break;
                            }
                        }
                    if (!flExcept) lyrHide(stLyr);
                    }
                break;

            case "NN6":
                var arDiv = document.getElementsByTagName("div");

                for (i=0; i<arDiv.length; i++){
                    stLyr = arDiv[i].id;
                    if (stLyr.substring(0,2) == 'ly'){
                        flExcept = 0;
                        for (j=0; j<exceptions.length; j++){
                            if (stLyr == exceptions[j]){
                                flExcept = 1;
                                break;
                                }
                            }
                        if (!flExcept) {
                            lyrHide(stLyr);
                            }
                        }
                    }
                break;

            }
    }


    function lyrVisible(lname)
    {
         if (lname == '') return 0;

         var layer   = lyrFetch(lname);

         switch (GetBrowser()){
            case "IE":
                return (layer.visibility == 'visible');
                break;
            case "NN4":
                return (layer.visibility == 'show');
                break;
            case "NN6":
                return (layer.visibility == 'visible');
             }

    }

    function lyrToggle(lname)
    {
        if (lyrVisible(lname)){
            lyrHide(lname);
            }
        else {
            lyrShow(lname);
            }
    }


    function lyrMove(lname, x, y)
    {
        var layer = lyrFetch(lname);
        var px = "px";

        switch(GetBrowser()){
            case "IE":
                layer.left = x+px;
                layer.top = y+px;
                break;

            case "NN4":
                layer.left = x+px;
                layer.top = y+px;
                break;

            case "NN6":
                layer.left = x+px;
                layer.top = y+px;
                break;
            }
    }


    function lyrZorder(lname, z)
    {
        var lyr = lyrFetch(lname);

        lyr.zIndex = z;

    }


    function lyrZMax()
    {        var lyCur;

        if (arLyr.length == 0) LayerCensus();

        zMax = -1;
        for (i=0; i < arLyr.length; i++){
            lyCur = arLyr[i];
            z = parseInt(lyCur.zIndex);
            if (z > zMax) zMax = z;
            }
        return zMax;
    }

    function lyrOnTop(lname)
    {        var lyr, i, lyCur, z, zLyr, zMax;
        var stZeds    = '';

        lyr = lyrFetch(lname);
        zLyr = parseInt(lyr.zIndex);

        if (arLyr.length == 0) LayerCensus();

        zMax = -1;
        for (i=0; i < arLyr.length; i++){
            lyCur = arLyr[i];
            z = parseInt(lyCur.zIndex);
            if (z > zLyr){                lyCur.zIndex = z - 1;
                }
            if (z > zMax) zMax = z;
            }
        lyr.zIndex = zMax;

    }

    function lyrToBack(lname)
    {
        var lyr, i, lyCur, z;

        if (arLyr.length == 0) LayerCensus();

        lyr = lyrFetch(lname);

        for (i=0; i < arLyr.length; i++){            lyCur = arLyr[i];
            if (lyCur.zIndex != lyr.zIndex){
                lyCur.zIndex = parseInt(lyCur.zIndex) + 1;
                }
            }
        lyr.zIndex = 0;
    }

    //-------------------------------------- Show a layer on top of all others
    function lyrShowTop(lname)
    {        lyrShow(lname);
        lyrOnTop(lname);
    }

    function lyrToggleTop(lname)
    {
        if (lyrVisible(lname)){
            lyrHide(lname);
            }
        else {
            lyrShowTop(lname);
            }
    }

    function lyrShowAt(lname, x, y){
        var lyr = lyrFetch(lname);

        lyr.left = x+'px';
        lyr.top = y+'px';
        lyrShowTop(lname);
        }

    //-------------------------------------- get window scroll top
    function GetScrollTop()
    {
        return ie() ? document.body.scrollTop : window.pageYOffset;
    }


    //-------------------------------------- Align layer relative to scrolled window

    function lyrAlignOnWindow(lyName, xInit, yInit)
    {
        var scrollTop  = GetScrollTop();
        lyrMove(lyName, xInit, yInit + scrollTop);
    }

    //-------------------------------------- displace a layer (pixel-aligned)
    function lyrDisplacePx(lname, dx, dy)
    {
        var lyr = lyrFetch(lname);

        stX = lyr.left;
        stX = stX.substr(0, stX.length-2);
        lyr.left = ((stX.valueOf()*1) + dx) + 'px';

        stY = lyr.top;
        stY = stY.substr(0, stY.length-2);
        lyr.top = ((stY.valueOf()*1) + dy) + 'px';
    }


    function GetWindowHeight()
    {
        return ie() ? document.body.offsetHeight : window.innerHeight;
    }

    function GetWindowWidth()
    {
        return ie() ? document.body.offsetWidth : window.innerWidth;
    }

    function mkBgLayerFor(lname, idBg, stStyle)
    {
        var zMax = lyrZMax();

        elSrc = document.getElementById(lname);
        wd = elSrc.offsetWidth;
        ht = elSrc.offsetHeight;
        if (!document.all) ht -= 15;        // NS kludge but probably doesn't always work
        x  = elSrc.offsetLeft;
        y  = elSrc.offsetTop;
        stBg = '\<div id="div' + idBg +
                       '" style="background-color:transparent;' +
                               'position:absolute;'+
                               'width:'   + wd + 'px;' +
                               'height:'  + ht + 'px;' +
                               'left:'    + x  + 'px;' +
                               'top:'     + y  + 'px;' +
                               'overflow:hidden;'     +
                               'z-index:' + (zMax+1) + ';' +
                               '"\>'+
                        '\<span class="' + stStyle + '"\>' +
                        '\<table id="' + idBg +
                             '" width=' + wd +
                             ' height=' + ht + '\>' +
                             '\<tr\>\<td\>&nbsp;\<\/td\>\<\/tr\>' +
                        '\<\/table\>\n' +
                        '\<\/span\>' +
                        '\<\/div\>\n';
        document.write(stBg);
        LayerCensus();
        lyrShow(idBg);
        lyrOnTop(lname);
    }

