// JavaScript Utilities File

// Image Rollover Script

var Utils = {
	
	ddMenus: $A( new Array() ),

	init: function() {
		$$(".DropDownMenu").each( function(menu) {
			Utils.ddMenus.push( new DropDownMenu(menu) );
		} );
		$$("#containerNav a").each( function(a) {
			if ( !Element.hasClassName( a, "Active" ) ) {
				YAHOO.util.Event.addListener( a, "mouseover", Utils.navOn, a, true );
				YAHOO.util.Event.addListener( a, "mouseout", Utils.navOff, a, true );
			}				
		} );
	},
	
	navOn: function() {
		Utils.imgOn( this.getElementsByTagName("img")[0] );
	},
	
	navOff: function() {
		var img = this.getElementsByTagName("img")[0];
		if ( !Element.hasClassName( this, "Active") ) {
			Utils.imgOff( img );
		} else {
			img.src = img.src.replace( "_hover", "_on" );
		}
	},

	imgOn: function( img ) {
		img.src = img.src.replace( "_off", "_hover" );
		img.src = img.src.replace( "_on", "_hover" );
	},
	
	imgOff: function( img ) {
		img.src = img.src.replace( "_hover", "_off" );
	},
	
	findParentByClassName: function( el, className ) {
		var foundEl = "NULL";
		if ( this.hasClass( el.parentNode, className ) )
		{
			foundEl = el.parentNode;
		}
		else
		{
			foundEl = this.findParentByClassName( el.parentNode, className );
		}
		return foundEl;
	},
	
	addClass: function(element, className) {
		if (!this.hasClass(element, className)) {
			if (element.className) element.className += " " + className;
			else element.className = className;
		}
	},
	
	removeClass: function(element, className) {
		var regexp = new RegExp("(^|\\s)" + className + "(\\s|$)");
		element.className = element.className.replace(regexp, "$2");
	},
	
	hasClass: function(element, className) {
		var regexp = new RegExp("(^|\\s)" + className + "(\\s|$)");
		return regexp.test(element.className);
	}		

}

// Dropdown Menu Script

DropDownMenu = Class.create();
DropDownMenu.prototype = {

	initialize: function(elementRef) {
		this.HIDE_DELAY = 50;
		this.hideTimer = "";
		this.hasFocus = false;
		this.container = $(elementRef);
		this.boundTo = $( this.container.getAttribute("bindto") );
		this.navActive = Element.hasClassName( this.boundTo, "Active" );
		this.container.style.width = Number( this.container.getAttribute("menuwidth") || 150 ) + "px";
		this.leftOffset = Number( this.container.getAttribute("leftoffset") || 0 );
		this.topOffset = Number( this.container.getAttribute("topoffset") || 0 );		
		if ( this.boundTo != null ) {
			YAHOO.util.Event.addListener( this.boundTo, "mouseover", this.show, this, true );
			YAHOO.util.Event.addListener( this.boundTo, "mouseout", this.lazyHide, this, true );
		}
		this.group = this.container.getAttribute("menugroup") || "default";
		this.items = $A( this.container.getElementsByTagName("a") );
		this.items.each( function(a) {
			YAHOO.util.Event.addListener( a, "mouseover", this.show, this, true );
			YAHOO.util.Event.addListener( a, "mouseout", this.lazyHide, this, true );
		}.bind(this) );
	},
	
	show: function() {
		Utils.imgOn( this.boundTo.getElementsByTagName("img")[0] );
		Utils.ddMenus.each( function(m) {
			if ( m.group == this.group && m.container.id != this.container.id ) {
				m.hide();
			}
			if ( this.boundTo != null ) {
				navPos = Position.page( this.boundTo );
				Position.clone( this.boundTo, this.container, { setWidth: false, setHeight: false, offsetTop: this.topOffset, offsetLeft: this.leftOffset } );
			}
			clearTimeout( this.hideTimer );
			this.container.style.display = "block";
			this.hasFocus = true;
		}.bind(this) );
	},
	
	hide: function() {
		clearTimeout( this.hideTimer );
		this.hasFocus = false;
		this.container.style.display = "none";
		if ( !this.navActive ) {
			Utils.imgOff( this.boundTo.getElementsByTagName("img")[0] );
		} else {
			var img = this.boundTo.getElementsByTagName("img")[0];
			img.src = img.src.replace( "_hover", "_on" );
		}
	},
	
	lazyHide: function() {
		clearTimeout( this.hideTimer );
		this.hasFocus = false;
		var obj = this;
		this.hideTimer = setTimeout( function() {
			if ( !obj.hasFocus ) {	obj.hide(); }
		}, this.HIDE_DELAY );
	}

};

Event.observe( window, "load", Utils.init, false );
