
/* begin headnavigation animated menu 
   Written by Frederik Van Zande, guided by the sitepoint DHTMl book
*/
/*	Event Cache uses an anonymous function to create a hidden scope chain.
	This is to prevent scoping issues. */
var EventCache = function(){
	var listEvents = [];
	
	return {
		listEvents : listEvents,
	
		add : function(node, sEventName, fHandler, bCapture){
			listEvents.push(arguments);
		},
	
		flush : function(){
			var i, item;
			for(i = listEvents.length - 1; i >= 0; i = i - 1){
				item = listEvents[i];
				
				if(item[0].removeEventListener){
					item[0].removeEventListener(item[1], item[2], item[3]);
				};
				
				/* From this point on we need the event names to be prefixed with 'on" */
				if(item[1].substring(0, 2) != "on"){
					item[1] = "on" + item[1];
				};
				
				if(item[0].detachEvent){
					item[0].detachEvent(item[1], item[2]);
				};
				
				item[0][item[1]] = null;
			};
		}
	};
}();

sM = {
  init: function() {
    var uls = document.getElementsByTagName('ul');
    for (var u = 0; u < uls.length; u++) {
       if (uls[u].id.search('site-menu') == -1) continue;
      var lis = uls[u].getElementsByTagName('li');
      for (var i = 0; i < lis.length; i++) {
        var node = lis[i];
        if (node.nodeName.toLowerCase() == 'li' &&
            node.getElementsByTagName('ul').length > 0) {
			for (var j=0;j<node.getElementsByTagName('ul').length;j++){
				node.getElementsByTagName('ul')[j].h=1;
				}
          sM.addEvent(node, 'mouseover', sM.getMoverFor(node), false);
          sM.addEvent(node, 'mouseout', sM.getMoutFor(node), false);
		  
          //if (uls[u].id=='left_category'){
			//	sM.addEvent(node, 'click', sM.getMclickFor(node), false);
		   //}else{
			//	sM.addEvent(node, 'mouseover', sM.getMoverFor(node), false);
            //    sM.addEvent(node, 'mouseout', sM.getMoutFor(node), false);
			//}
			node.getElementsByTagName('a')[0].className += ' subheader';
          node.isIn = false;
        }
      }
    }
  },
  
   getMclickFor: function(node) {
    return function(e) { sM.mclick(e, node); };
  },
  getMoverFor: function(node) {
    return function(e) { sM.mover(e, node); };
  },
  
  getMoutFor: function(node) {
    return function(e) { sM.mout(e, node); };
  },

  mclick: function(e, targetElement) {
    var el = window.event ? targetElement : e ? e.currentTarget : null;
    if (!el) return;
    clearTimeout(el.outTimeout);
      for (var i = 0; i < el.childNodes.length; i++) {
        var node = el.childNodes[i];
        if (node.nodeName.toLowerCase() == 'ul') {
          // Stop current animation
          clearInterval(node.intervalID);
          // Assign initial visible area
          node.clippingRectangle = [0, 0, 24, 0];
          // Save full width and height
          node.style.display = 'block';
          node.savedOW = node.offsetWidth;
          node.savedOH = node.offsetHeight;
          node.style.display = 'none';
          // Start animation
		  if (node.h == 1){
				node.intervalID = setInterval(function() { sM.showMenu(node); }, 8);
				node.h = 0;
				el.className='on';
			}else{
				node.intervalID = setInterval(function() { sM.hideMenu(node); }, 8);
				node.h = 1;
				el.className='';
			}
         
          break;
        }
      }
    el.className += '';   // Force IE to recompute styles
  },

  mover: function(e, targetElement) {
    var el = window.event ? targetElement : e ? e.currentTarget : null;
    if (!el) return;
    clearTimeout(el.outTimeout);
    if (!el.isIn) {
      for (var i = 0; i < el.childNodes.length; i++) {
        var node = el.childNodes[i];
        if (node.nodeName.toLowerCase() == 'ul') {
          // Stop current animation
          clearInterval(node.intervalID);
          // Assign initial visible area
          node.clippingRectangle = [0, 0, 24, 0];
          // Save full width and height
          node.style.display = 'block';
          node.savedOW = node.offsetWidth;
          node.savedOH = node.offsetHeight;
          node.style.display = 'none';
          // Start animation
				node.intervalID = setInterval(function() { sM.showMenu(node); }, 18);
          break;
        }
      }
    }
    el.isIn = true;
    el.className += '';   // Force IE to recompute styles
  },

  mout: function(e, targetElement) {
    var el = window.event ? targetElement : e ? e.currentTarget : null;
    if (!el) return;
    el.outTimeout = setTimeout(function() { sM.mout2(el); }, 100);
  },

  mout2: function(el) {
    for (var i = 0; i < el.childNodes.length; i++) {
      var node = el.childNodes[i];
      if (node.nodeName.toLowerCase() == 'ul') {
        // Stop current animation
        clearInterval(node.intervalID);
        // Start animation
        node.intervalID = setInterval(function() { sM.hideMenu(node); }, 10);
        break;
      }
    }
    el.isIn = false;
  },
  
  showMenu: function(el) {
    el.clippingRectangle[1] = el.savedOW;
    if (el.clippingRectangle[1] >= el.savedOW) {
      el.clippingRectangle[1] = el.savedOW;
      el.clippingRectangle[2] += 15;
      if (el.clippingRectangle[2] >= el.savedOH) {
        el.clippingRectangle[2] = el.savedOH;
        clearInterval(el.intervalID);
        // reset the clip: browser-specific
        if (document.all && !window.opera) {
          el.style.clip = 'rect(auto)';
        } else {
          el.style.clip = '';
        }
        //return;
      }
    }
    el.style.clip = 'rect(' + el.clippingRectangle.join('px ') + 'px)';
    el.style.display = 'inline';
  },

  hideMenu: function(el) {
    el.clippingRectangle[2] -= 10;
    if (el.clippingRectangle[2] <= 0) {
      el.clippingRectangle[2] = 10;
      if (el.clippingRectangle[1] <= el.savedOW) {
        clearInterval(el.intervalID);
        // reset the clip: browser-specific
        if (document.all && !window.opera) {
          el.style.clip = 'rect(auto)';
        } else {
          el.style.clip = '';
        }
        el.style.display = 'none';
        return;
      }
    }
    el.style.clip = 'rect(' + el.clippingRectangle.join('px ') + 'px)';
  },

  addEvent: function(elm, evType, fn, useCapture) {
    // cross-browser event handling for IE5+, NS6 and Mozilla
    // By Scott Andrew
    if (elm.addEventListener) {
      elm.addEventListener(evType, fn, useCapture);
      return true;
    } else if (elm.attachEvent) {
      var r = elm.attachEvent('on' + evType, fn);
      EventCache.add(elm, evType, fn);
      return r;
    } else {
      elm['on' + evType] = fn;
    }
  }
};

sM.addEvent(window, 'load', sM.init, false);
sM.addEvent(window, 'unload', EventCache.flush, false);