﻿/*
DezinerFolio.com Simple Accordians.

Author  : G.S.Navin Raj Kumar
Website : http://dezinerfolio.com

*/

/*
* The Variable names have been compressed to achive a higher level of compression.
*/

// Prototype Method to get the element based on ID
function $(d) {
    return document.getElementById(d);
}

// set or get the current display style of the div
function dsp(d, v) {
    if (v == undefined) {
        return d.style.display;
    } else {
        d.style.display = v;
    }
}

// set or get the height of a div.
function sh(d, v) {
    // if you are getting the height then display must be block to return the absolute height
    if (v == undefined) {
        if (dsp(d) != 'none' && dsp(d) != '') {
            return d.offsetHeight;
        }
        viz = d.style.visibility;
        d.style.visibility = 'hidden';
        o = dsp(d);
        dsp(d, 'block');
        r = parseInt(d.offsetHeight);
        dsp(d, o);
        d.style.visibility = viz;
        return r;
    } else {
        d.style.height = v;
    }
}
/*
* Variable 'S' defines the speed of the accordian
* Variable 'T' defines the refresh rate of the accordian
*/
s = 7;
t = 10;

//Collapse Timer is triggered as a setInterval to reduce the height of the div exponentially.
function ct(d) {
    d = $(d);
    if (sh(d) > 0) {
        v = Math.round(sh(d) / d.s);
        v = (v < 1) ? 1 : v;
        v = (sh(d) - v);
        sh(d, v + 'px');
        d.style.opacity = (v / d.maxh);
        d.style.filter = 'alpha(opacity=' + (v * 100 / d.maxh) + ');';
    } else {
        sh(d, 0);
        dsp(d, 'none');
        clearInterval(d.t);
    }
}

//Expand Timer is triggered as a setInterval to increase the height of the div exponentially.
function et(d) {
    d = $(d);
    if (sh(d) < d.maxh) {
        v = Math.round((d.maxh - sh(d)) / d.s);
        v = (v < 1) ? 1 : v;
        v = (sh(d) + v);
        sh(d, v + 'px');
        d.style.opacity = (v / d.maxh);
        d.style.filter = 'alpha(opacity=' + (v * 100 / d.maxh) + ');';
    } else {
        sh(d, d.maxh);
        clearInterval(d.t);
    }
}

// Collapse Initializer
function cl(d) {
    if (d.className = "iam-show") {
        d.className = "hidefirst";
        d.style.display = 'none';
        d.style.overflow = 'hidden';
    }
    if (dsp(d) == 'block') {
        clearInterval(d.t);
        d.t = setInterval('ct("' + d.id + '")', t);
    }
}

//Expand Initializer
function ex(d) {
    if (dsp(d) == 'none') {
        dsp(d, 'block');
        d.style.height = '0px';
        clearInterval(d.t);
        d.t = setInterval('et("' + d.id + '")', t);
    } else {
        cl(d);
        cc(d.name);
    }
}

// Removes Classname from the given div.
function cc(n, v) {
    s = n.className.split(/\s+/);
    for (p = 0; p < s.length; p++) {
        if (s[p] == v + n.tc) {
            s.splice(p, 1);
            n.className = s.join(' ');
            break;
        }
    }
}
//Accordian Initializer
function Accordian(d, s, tc) {
    var cLoc;
    cLoc = location.pathname;   //Grab the current pathname
    cLoc = cLoc.toLowerCase();  //Set to lower
    cLoc = cLoc.split("/");     //Split into array via the / character
    cLoc = cLoc[1];             //Set the var to our array...
    //alert('cLoc: ' + cLoc[1]); //This will be undefined if we're in root.
    
    // get all the elements that have id as content
    l = $(d).getElementsByTagName('div');
    c = [];
    for (i = 0; i < l.length; i++) {
        h = l[i].id;
        if (h.substr(h.lastIndexOf('_') + 1) == 'content') { c.push(h);}
    }
    sel = null;
    //then search through headers
    for (i = 0; i < l.length; i++) {
        h = l[i].id;
        if (h.substr(h.lastIndexOf('_') + 1) == 'header') {
            d = $(h.substr(0, h.lastIndexOf('_')) + '_content');
            if (d == null){
                alert("d is null!");
                alert(h);
                alert(h.substr(h.lastIndexOf('_') + 1));
                alert((h.substr(0, h.lastIndexOf('_')) + '_content'));
            }
            if (d != null) {
                //+MTR; add bit here to expand the nav of our current location...
                if (cLoc[1] != undefined) {
                    //alert('Checking ' + d.id + ' to ' + cLoc); 
                    // Debug making sure only checking the content divs.
                    if (d.id.toLowerCase().match(cLoc) != null) {
                        //alert('You are at ' + d.id);
                        d.className = "iam-show";
                    }
                }
                if (d.className != "iam-show") {
                    d.style.display = 'none';
                    d.style.overflow = 'hidden';
                }
                d.maxh = sh(d);
                d.s = (s == undefined) ? 7 : s;
                h = $(h);
                h.tc = tc;
                h.c = c;
                // set the onclick function for each header.
                h.onclick = function() {
                    for (i = 0; i < this.c.length; i++) {
                        cn = this.c[i];
                        n = cn.substr(0, cn.lastIndexOf('_'));
                        if ((n + '_header') == this.id) {
                            ex($(n + '_content'));
                            n = $(n + '_header');
                            cc(n, '__');
                            n.className = n.className + ' ' + n.tc;
                        } else {
                            cl($(n + '_content'));
                            cc($(n + '_header'), '');
                        }
                    }
                }
                if (h.className.match(/selected+/) != undefined) { sel = h; }
            }
        }
    }
    if (sel != undefined) { sel.onclick(); }
}