var NavHighlight = {
   originalLink: null,
   effectParams: {
		duration: 0.5,
		transition: Effect.Transitions.Bounce
	},
	setup: function() {
      var theLink = arguments[0];
      var highlight = this.getHighlight();
      var innerHighlight = this.getInnerHighlight();
      
      if(theLink = $(theLink)) {
		   this.originalLink = theLink;
      
         var position = this.getPositioning(theLink);
      
         highlight.setStyle({left: (position.holderLeft + position.linkLeft - position.siteHeaderLeft) + 'px'});
         innerHighlight.setStyle({width: (position.linkWidth - 11) + 'px'});
      }
      
      if(!this.originalLink) highlight.setStyle({opacity: 0});
   },
   getHighlight: function(){ return $('nav_underline'); },
   getInnerHighlight: function() { return $('nav_underline_left'); },
   highlightLink: function(theLink) {
      var theLink = $(theLink);
      var position = this.getPositioning(theLink);
   	this.goTo(position);
   },
   unhighlightLink: function() {
      if(!this.originalLink) {
         this.effect = new Effect.Morph(this.getHighlight(), $H({
            style: 'opacity: 0'
         }).merge(this.effectParams));
         return false;
      }
      var position = this.getPositioning(this.originalLink);
      
		this.goTo(position);
   },
   getPositioning: function(theLink) {
		var holderLeft = Position.cumulativeOffset($$('#siteHeader ul.navigation').first())[0];
		//console.log('holderLeft: ' + holderLeft);
		var linkLeft = Position.cumulativeOffset(theLink)[0];
		linkLeft = linkLeft ? linkLeft - holderLeft + (/MSIE/.test(navigator.userAgent) ? 1 : 0) : 0 - holderLeft;
		//console.log('linkLeft: ' + linkLeft)
      var siteHeaderLeft = Position.cumulativeOffset($('siteHeader'))[0] || 0;
		//console.log('siteHeaderLeft' + siteHeaderLeft);
		var linkWidth = theLink.getDimensions().width;
		//console.log('linkWidth' + linkWidth);
		return {
         holderLeft: holderLeft,
         siteHeaderLeft: siteHeaderLeft,
         linkLeft: linkLeft,
         linkWidth: linkWidth
      };
   },
	goTo: function(position) {
		 	
   	var highlight = this.getHighlight();
   	var innerHighlight = this.getInnerHighlight();
   	
		if(this.effect) this.effect.cancel();
     	if(this.effectInner) this.effectInner.cancel();

		this.effect = new Effect.Morph(highlight, $H({
      	style: 'left: ' + (position.holderLeft + position.linkLeft - position.siteHeaderLeft) + 'px' + '; opacity: 1'
    	}).merge(this.effectParams));
     
     	this.effectInner = new Effect.Morph(innerHighlight, $H({
      	style: 'width: ' + (position.linkWidth - 11) + 'px' + '; opacity: 1'
     	}).merge(this.effectParams));
	},
	attachEvents: function() {
      $$('#siteHeader ul.navigation a').each(function(link) {
         Event.observe(link, 'mouseover', function(evt) {
            NavHighlight.highlightLink(Event.element(evt));
         });
         Event.observe(link, 'mouseout', function(evt) {
            NavHighlight.unhighlightLink();
         });
      });
   }
};

if(/MSIE 6/.test(navigator.userAgent) || /MSIE 7/.test(navigator.userAgent)) {
   Event.observe(window, 'load', NavHighlight.attachEvents);
} else {
   addDOMLoadEvent(NavHighlight.attachEvents);
}