
if ( ! PhareLannion ) var PhareLannion = {};
if ( ! PhareLannion.Widget ) PhareLannion.Widget = {};

/* Build a new object Image to manage mouse events (mouse over and mouse out). */
PhareLannion.Widget.HeaderMenuButton = function(element, options)
{
	this.element = this.getElement(element);
	
	PhareLannion.Widget.HeaderMenuButton.setOptions ( this, options, true );
	this.isOver = false;
	
	this.attachBehaviors();
};

/* Create and initialize properties of the object. */
PhareLannion.Widget.HeaderMenuButton.setOptions = function(obj, optionsObj, ignoreUndefinedProps)
{
	if ( ! optionsObj )
		return;
	for ( var optionName in optionsObj )
	{
		if ( ignoreUndefinedProps && optionsObj[optionName] == undefined )
			continue;
		obj[optionName] = optionsObj[optionName];
	}
};

/* Attach events listeners. */
PhareLannion.Widget.HeaderMenuButton.prototype.attachBehaviors = function()
{
	var self = this;
	PhareLannion.Widget.HeaderMenuButton.addEventListener(this.element, 'mouseover', function ( e ) { return self.onMouseOver ( e ); }, false);
	PhareLannion.Widget.HeaderMenuButton.addEventListener(this.element, 'mouseout', function ( e ) { return self.onMouseOut ( e ); }, false);
};

/* On mouser over the object. */
PhareLannion.Widget.HeaderMenuButton.prototype.onMouseOver = function ( e )
{
	
	if ( this.isOver == false )
	{	
//		this.element.src = this.over;
		PhareLannion.Widget.HeaderMenuButton.removeClassName(this.element, this.out);
		PhareLannion.Widget.HeaderMenuButton.addClassName(this.element, this.over);
		this.isOver = true;
	}	
	
	if ( e.preventDefault ) e.preventDefault();
    else e.returnValue = false;
    if ( e.stopPropagation ) e.stopPropagation();
    else e.cancelBubble = true;
    return false;
};

/* On mouser out the object. */
PhareLannion.Widget.HeaderMenuButton.prototype.onMouseOut = function ( e )
{
	if ( this.isOver == true )
	{	
//		this.element.src = this.out;
		PhareLannion.Widget.HeaderMenuButton.removeClassName(this.element, this.over);
		PhareLannion.Widget.HeaderMenuButton.addClassName(this.element, this.out);
		this.isOver = false;
	}	
	
	if ( e.preventDefault ) e.preventDefault();
    else e.returnValue = false;
    if ( e.stopPropagation ) e.stopPropagation();
    else e.cancelBubble = true;
    return false;
};

/* Retrieve the image. */
PhareLannion.Widget.HeaderMenuButton.prototype.getElement = function ( ele )
{
	if ( ele && typeof ele == 'string' )
	{	
		if ( document.all )
			return document.all[ele];
		else
			return document.getElementById(ele);
	}	
	return null;
};

/* Add an event listener to the document. */
PhareLannion.Widget.HeaderMenuButton.addEventListener = function ( element, eventType, handler, capture )
{
	try
	{
		if ( element.addEventListener )
			element.addEventListener(eventType, handler, capture);
		else if ( element.attachEvent )
			element.attachEvent('on' + eventType, handler);
	}
	catch ( e ) {}
};

//add css class on an element
PhareLannion.Widget.HeaderMenuButton.addClassName = function(ele, className)
{
    if ( ! ele || ! className || ( ele.className && ele.className.search(new RegExp('\\b' + className + '\\b') ) != -1) )
        return;
       
    ele.className += (ele.className ? ' ' : '') + className;
};

// remove css class on an element
PhareLannion.Widget.HeaderMenuButton.removeClassName = function(ele, className)
{
    if ( ! ele || ! className || ( ele.className && ele.className.search(new RegExp('\\b' + className + '\\b') ) == -1) )
        return;
       
    ele.className = ele.className.replace(new RegExp('\\s*\\b' + className + '\\b', 'g'), '');
};
