var speed = 7;
var eventsEnabled = true;
function jsfOnLoadHideElements(jh)
{
    var jhs = document.getElementsByClassName(jh,null,null);
    for(var i=0; i<jhs.length; i++)
    {
        jhs[i].style.display="none";
    }
}
function jsfOnLoadShowElements(js)
{
    var jhs = document.getElementsByClassName(js,null,null);
    for(var i=0; i<jhs.length; i++)
    {
        jhs[i].style.display="";
    }
}
//extend an object with addition methods/properties
function jsfExtendObject(d, s)
{
    for (p in s)
    {
        d[p] = s[p];
    }
    return d;
}
function jsfOnLoadAttachHideShow(trg,hsi,hse,caf,imp,imm)
{
    //get all raw triggers
    var tgs = document.getElementsByClassName(trg,null,"a");
    
    //get all raw elements
    var elm = document.getElementsByClassName(hse,null,null);
    //for all the raw triggers with/without numbers
    var reg = new RegExp("(^|\\w*)"+hsi+"(\\d*|([\\w* ]))");
    
    //set up hide/show element attributes and methods
    for(var i=0; i<elm.length; i++)
    {
        //if i have an associated image, let me control it's hide/show
        //get all images associated with me
        elm[i] = jsfExtendObject(elm[i],
            {
                hide:function()
                {
                    if (eventsEnabled) {
                        eventsEnabled = false;
                        //this.style.display = "none";
                        jstHide(this);
                        this.hidden = true;
                        for(var i=0;i<this.images.length;i++)
                        {
                            if(this.images[i].className.match(imp))
                            {
                                this.images[i].style.display="";
                            }
                            if(this.images[i].className.match(imm))
                            {
                                this.images[i].style.display="none";
                            }
                        }
                    }
                },
                show:function()
                {
                    if (eventsEnabled) {
                        eventsEnabled = false;
                        //this.style.display = "";
                        jstShow(this);
                        this.hidden = false;
                        for(var i=0;i<this.images.length;i++)
                        {
                            if(this.images[i].className.match(imp))
                            {
                                this.images[i].style.display="none";
                            }
                            if(this.images[i].className.match(imm))
                            {
                                this.images[i].style.display="";
                            }
                        }
                    }
                },
                toggle:function()
                {
                    if(this.hidden)
                    {
                        this.show();
                    }
                    else
                    {
                        this.hide();
                    }
                },
                init:function()
                {
                    this.hidden = this.style.display===""?false:true;
                    this.images = document.getElementsByClassName(reg.exec(this.className)[0],null,"span");
                    for(var i=0;i<this.images.length;i++)
                    {
                        if(this.images[i].className.match(imp))
                        {
                            this.images[i].style.display=this.hidden?"":"none";
                        }
                        if(this.images[i].className.match(imm))
                        {
                            this.images[i].style.display=this.hidden?"none":"";
                        }
                    }
                },
                hidden:false,
                hsElement:true,
                images:[]
            }
        );
        elm[i].init();
    }
    //set up all the triggers with the elements
    for(var i=0; i<tgs.length; i++)
    {
        tgs[i] = jsfExtendObject(tgs[i],
            {
                onclick:function()
                {
                    //get all elements that match the item class
                    var els = document.getElementsByClassName(reg.exec(this.className)[0],null,null);
                    //only close elements not controlled by me
                    if(this.className.match(caf) && caf.length>0)
                    {
                        ael = document.getElementsByClassName(hse,null,null);
                        for(var j=0;j<ael.length;j++)
                        {
                            if(ael[j].className.match(caf) && reg.exec(this.className)[0]!=reg.exec(ael[j].className)[0])
                            {
                                ael[j].hide();
                            }
                        }
                    }
                    for(var j=0; j<els.length; j++)
                    {
                        //hide/show anything that isn't the trigger
                        if(els[j].hsElement)
                        {
                            els[j].toggle();
                        }
                    }
                    return false;
                }
            }
        );
    }
}
/**
* jsfAttachEvent
* Author: Nick Bogaerts 13/11/2007
* Description: creates hide/show functionality for all uls except the last within divs with class sRootClassName.
*/
function jsfOnLoadCreateHideShows(sRootClassName, sSeparator, sAClassName, iSkip) {
    var iHSCounter = 0;
    var inCM = (window.location.search.indexOf("debug")!=-1);
    var oRootDivs = document.getElementsByClassName(sRootClassName, null, "DIV");
    for (var i = 0; i < oRootDivs.length; i++) {
        var oChildDivs = oRootDivs[i].getElementsByTagName("DIV");
        var oHSDivs = new Array();
        for (var j = 0; j < oChildDivs.length; j++)
          if (oChildDivs[j].className.match(sRootClassName))
            oHSDivs.push(oChildDivs[j]);
        for (var i = iSkip; i; i--) oHSDivs.pop();
        for (var oHSDiv = oHSDivs.pop(); oHSDiv; oHSDiv = oHSDivs.pop()) {
            if (!inCM && divEmpty(oHSDiv)) {
              oHSDiv.style.display="none";
              continue;
            }
            var sRadix = oHSDiv.className.substr(oHSDiv.className.indexOf(sRootClassName) + sRootClassName.length + sSeparator.length);
            var bStartHidden = sRadix.indexOf("hidden") === 0;
            if (bStartHidden) sRadix = sRadix.substr("hidden".length + sSeparator.length);
            var sHideText = sRadix.substr(0, sRadix.indexOf(sSeparator));
            var sShowText = sRadix.substr(sRadix.indexOf(sSeparator) + sSeparator.length);
            insertHideShow(oHSDiv, sRootClassName, sHideText, sShowText, sAClassName, bStartHidden);
        }
    } 
    
    function insertHideShow(oElm, sRoot, sHideText, sShowText, sAClassName, bStartHidden) {
        if (oElm.className.match("noHS")) return;
        var oUls = oElm.getElementsByTagName("DIV");
        var oPs = oElm.getElementsByTagName("H2");
        if (!oPs.length) oPs = oElm.getElementsByTagName("P");
        if (oUls.length && oPs.length) {
            if (bStartHidden) oUls[0].className += " jstHide"
            oUls[0].className += " " + sRoot + "Elm " + sRoot + "Item" + iHSCounter;
            var oHideSpan = document.createElement("SPAN");
            oHideSpan.innerHTML = sHideText;
            oHideSpan.className = sRoot + "Plus " + sRoot + "Item" + iHSCounter;
            var oShowSpan = document.createElement("SPAN");
            oShowSpan.innerHTML = sShowText;
            oShowSpan.className = sRoot + "Minus " + sRoot + "Item" + iHSCounter;
            var oA = document.createElement("A");
            oA.href = "#";
            oA.className = sAClassName + " " + sRoot + "Trg " + sRoot + "Item" + iHSCounter;
            oA.appendChild(oHideSpan);
            oA.appendChild(oShowSpan);
            oPs[0].appendChild(oA);
            iHSCounter++;
        }
    }
    
    function divEmpty (d) {
        var dCnt = isMSIE ? d.innerText : d.textContent;
        var hCnt = d.getElementsByTagName("h2");
        if (!hCnt.length) hCnt = d.getElementsByTagName("p");
        if (!hCnt.length) return true;
        if (d.className && d.className.indexOf("noRemove")!=-1)
          return false;
        hCnt = isMSIE ? hCnt[0].innerText : hCnt[0].textContent;
        dCnt = dCnt.substr(dCnt.indexOf(hCnt)+hCnt.length);
        if (dCnt==null || dCnt=="") return true;
        if (dCnt.match(/^[\s\012\015]*$/)) return true; 
        return false;
    }
}
var hsQueue = [];
function jstShow(elm) {
    var oHt = elm.offsetHeight;
    elm.style.display = '';
    var fHt = elm.offsetHeight;
    elm.style.overflow = 'hidden';
    elm.style.height = oHt + 1 + 'px';
    hsQueue.push(Array(elm,'show',fHt));
    glideProc(hsQueue[0]);
}
function jstHide(elm) {
    elm.style.height = elm.offsetHeight + 'px';
    elm.style.overflow = 'hidden';
    hsQueue.push(Array(elm,'hide',null));
    glideProc(hsQueue[0]);
}
function glideShow(elm,ht) {
    if(elm.offsetHeight+speed < ht) {
        elm.style.height = Number(Number(elm.style.height.replace(/[^0-9]/g,"")) + speed) + String('px');
        var t = setTimeout("glideProc(hsQueue[0]);",1);
    }
    else {
        elm.style.height = 'auto';
        elm.style.overflow = '';
        hsQueue.shift();
        eventsEnabled = true;
    }
}
function glideHide(elm) {
    var ht = elm.style.height.replace(/[^0-9]/g,"");
    if(ht-speed > 0) {
        elm.style.height = Number(ht - speed) + String('px');
        var t = setTimeout("glideProc(hsQueue[0]);",1);
    }
    else {
        elm.style.display = 'none';
        elm.style.height = '';
        elm.style.overflow = '';
        hsQueue.shift();
        eventsEnabled = true;
    }
}
function glideProc(attr) {
    if(attr) {
        if(attr[1] == 'hide') {
            glideHide(attr[0]);
        }
        else if(attr[1] == 'show') {
            glideShow(attr[0],attr[2]);
        }
    }
}
function jsfOnLoad()
{
    var sRoot = "jstAutoHS";
    var sRoot2 = "jstAutoHS2";
    if (!isMSIE || MSIEVersion > 5.2) jsfOnLoadCreateHideShows(sRoot, "_", "hShowHide", 1);
    if (!isMSIE || MSIEVersion > 5.2) jsfOnLoadCreateHideShows(sRoot2, "_", "hShowHide", 0);
    jsfOnLoadHideElements("jstHide");
    jsfOnLoadShowElements("jstShow");
    if (!isMSIE || MSIEVersion > 5.2) jsfOnLoadAttachHideShow(sRoot + "Trg", sRoot + "Item", sRoot + "Elm","jstHideAllFirst", sRoot + "Plus", sRoot + "Minus");
    if (!isMSIE || MSIEVersion > 5.2) jsfOnLoadAttachHideShow(sRoot2 + "Trg", sRoot2 + "Item", sRoot2 + "Elm","jstHideAllFirst", sRoot2 + "Plus", sRoot2 + "Minus");
    jsfOnLoadAttachHideShow("jstHsTrg","jstHsItem","jstHsElm","jstHideAllFirst","jstHsPlus","jstHsMinus");
}
jsfAttachEvent(window,'load',jsfOnLoad);
