He.Bootstrap('He.Components.LinkSet'); He.RequireComponent('He.Application'); He.Components.LinkSet.OnDOMReady = function() { He.Components.LinkSet.Activate(); }; He.Components.LinkSet.Activate = function(_parent) { if(!_parent) { var sets = $$('ul.linkset'); } else { //var sets = _parent.select('ul.linkset'); } if(sets && sets.length) { var n = sets.length; for(var i = 0; i < n; ++i) { var items = []; var set = sets[i]; var childs = set.childNodes; var m = childs.length; for(var j = 0; j < m; ++j) { var li = childs[j]; if(li.nodeType == 1 && li.nodeName.toUpperCase() == 'LI') { var cb = li.onclick; li.onclick = He.Components.LinkSet.OnClick.bind(li,cb); } } } } }; He.Components.LinkSet.OnClick = function(cb) { var ul = this.parentNode; while(ul.parentNode && ul.nodeName.toUpperCase() != 'UL') { ul = ul.parentNode; } He.Components.LinkSet.Refresh(ul,this,cb); }; He.Components.LinkSet.Refresh = function(ul,current,cb) { var childs = ul.childNodes; var m = childs.length; for(var i = 0; i < m; ++i) { var li = childs[i]; if(li.nodeType == 1 && li.nodeName.toUpperCase() == 'LI') { li = $(li); var link = li.select('A')[0]; if(li == current || li.id == current) { if(He.IsFunction(ul.LabelUpdate)) { var label = link.text; if(label == '') { label = link.textContent; } ul.LabelUpdate(label); } link.addClassName('active'); li.addClassName('active'); } else { link.removeClassName('active'); li.removeClassName('active'); } } } // Element.addClassName(this,'active'); if(cb) { if(typeof(cb) == 'function') { return cb(); } else if(typeof(cb) == 'string') { var js = cb.indexOf('javascript:'); if(js > -1) { cb = cb.substr(js + 11); } return eval(cb); } } return false; }; He.Components.LinkSet.CurrentBackChannel = function(_feedback) { if(!He.IsObject(_feedback)) { return; } for(var n in _feedback) { var linkset = $('main-navigation_' + _feedback[n].gsub('-', '')); //var linkset = $(n); if(linkset) { He.Components.LinkSet.Refresh($('main-navigation'),'main-navigation_' + _feedback[n].gsub('-', '')); // He.Components.LinkSet.Refresh(linkset,n + '_' + _feedback[n]); } } return; if(!He.IsArray(_feedback)) { return; } var n = _feedback.length; for(var i = 0; i < n; ++i) { if(_feedback[i]) { var linkset = $('linkset_' + i); if(linkset) { He.Components.LinkSet.Refresh(linkset,'linkset_' + i + '_' + _feedback[i]); } } } }; /* loadAccordions */ He.Components.LinkSet.currentToggle = null; He.Components.LinkSet.resizeSpeed = 0.45; He.Components.LinkSet.accordionsSize = new Array(); He.Components.LinkSet.canIClick = true; He.Components.LinkSet.loadAccordions = function() { var accordions = $$('#linkset_accordions .accordion_toggle'); accordions.each(function(accordion,index) { var container = accordion.next(0); He.Components.LinkSet.currentToggle = accordions[0].next(0); He.Components.LinkSet.accordionsSize[index] = $(container).getHeight(); $(container).setStyle({ display: 'none' }); var Link = $(accordion).childElements() Event.observe(Link[0], 'click', function () { if(He.Components.LinkSet.canIClick) { He.Components.LinkSet.canIClick = false; if(He.Components.LinkSet.currentToggle==null) { He.Components.LinkSet.currentToggle = container } else if(He.Components.LinkSet.currentToggle != container) { if(He.Components.LinkSet.currentToggle.style.display != 'none') { new Effect.SlideUp(He.Components.LinkSet.currentToggle, { duration: He.Components.LinkSet.resizeSpeed, beforeStart:function() { He.Components.LinkSet.currentToggle.previous(0).removeClassName('accordion_toggle_active') } }); } He.Components.LinkSet.currentToggle = container; } if(container.style.display == 'none') { container.previous(0).addClassName('accordion_toggle_active'); new Effect.SlideDown(container, { duration: He.Components.LinkSet.resizeSpeed, afterFinish: function() { $(container).setStyle({ height: He.Components.LinkSet.accordionsSize[index] }); // IE bug He.Components.LinkSet.canIClick = true; } }); } else { container.previous(0).removeClassName('accordion_toggle_active'); new Effect.SlideUp(container,{ duration: He.Components.LinkSet.resizeSpeed, afterFinish: function(){ He.Components.LinkSet.canIClick = true; } }); } } }); }); } He.WhenReadyCall('He.Application',function() { He.Application.RegisterBackChannel('LinkSetCurrent',He.Components.LinkSet.CurrentBackChannel); }); He.OnDOMReady(He.Components.LinkSet.OnDOMReady); document.observe('clickedlink:wrap',He.Components.LinkSet.Activate);