var TheCarbonAccount = window.TheCarbonAccount || {};
TheCarbonAccount.switcher = (function() {
    var $E = YAHOO.util.Event;
    var $D = YAHOO.util.Dom;
    
    var container;
    var currentClass;
    
    function clickHandler(ev) {
        //$E.stopEvent(ev);
        showPanel(this.href.split('#')[1]);
    }
    
    var last_num = -1;
    function showPanel(id) {
        if ($D.get(id) && id != currentClass && 
                $D.hasClass(id, 'switchContainer')) {
            $D.replaceClass(container, currentClass, id);
            currentClass = id;
            
            var num = id.substring("switcherPanelobj".length);
            var toHighlight;
            if (toHighlight = document.getElementById('container_'+num)) {
                toHighlight.style.background='#999';
            }
            if(last_num > -1) {
                document.getElementById('container_'+last_num).style.background='';
            }
            last_num = num;
        }
    }
    
    var currentHash = '';
    function checkFragment() {
        if (location.hash != currentHash) {
            currentHash = location.hash;
            showPanel(currentHash.replace('#', 'switcherPanel'));
        }
    }
    
    function init() {
        container = $D.get('switcher');
        // currentClass is the last class in the space separated list
        var bits = container.className.split(' ');
        currentClass = bits[bits.length - 1];
    
        // The panels are defined by the targets of links in ul#emissionsList
        var links = document.getElementsBySelector('ul#switcherList li a');
    
        // Set up the link handlers
        for (var i = 0, link; link = links[i]; i++) {
            $E.on(link, 'click', clickHandler);
        }

		// re-assign the ids so that there is no visible jump
		var panels = document.getElementsBySelector('div#switcher div.switchContainer');
        for (var i = 0; i < panels.length; i++) {
            panels[i].id = 'switcherPanel' + panels[i].id;
        }

        checkFragment();
        setInterval(checkFragment, 100);
    }
    
    return {
        'init': init,
        'showPanel': showPanel
    }
})();
