﻿var AtlasMenu = function(associatedElement) 
{
    this._associatedElement = $get(associatedElement);
    this._hoverClass = "atlas-menu-hover";
    this._mouseOverHandler = null;
    this._mouseOutHandler = null;
};

AtlasMenu.prototype = 
{
    initialize : function() 
    {
        this._mouseOverHandler = Function.createDelegate(this, this._onMouseOver);
        this._mouseOutHandler = Function.createDelegate(this, this._onMouseOut);

        var menus = this._associatedElement.getElementsByTagName("UL");
        var items = null;
        var iFrame = null;
        
        for (var i = 0; i < menus.length; i++)
        {
            if (menus[i].className == "atlas-menu")
            {
                items = menus[i].getElementsByTagName("LI");

                for (var k = 0; k < items.length; k++)
                {
                    $addHandler(items[k], "mouseover", this._mouseOverHandler);
                    $addHandler(items[k], "mouseout", this._mouseOutHandler);
                }
            }
        }
    },
    
    dispose : function() 
    {
        var menus = this._associatedElement.getElementsByTagName("UL");
        var items = null;
        
        for (var i = 0; i < menus.length; i++)
        {
            if (menus[i].className == "atlas-menu")
            {
                items = menus[i].getElementsByTagName("LI");

                for (var k = 0; k < items.length; k++)
                {
                    $removeHandler(items[k], "mouseover", this._mouseOverHandler);
                    $removeHandler(items[k], "mouseout", this._mouseOutHandler);
                }
            }
        }
    },

    _onMouseOver : function(e) 
    {
        this._addClass(e.target, this._hoverClass);
        return;
    },
    
    _onMouseOut : function(e) 
    {
        this._removeClass(e.target, this._hoverClass);
        return;
    },

    _addClass : function(e, classToAdd) 
    {
        if (this._hasAnyClass(e)) 
        {
            if (!this._hasClass(e, classToAdd))
                e.className = e.className + ' ' + classToAdd;
        }
        else if (this._canHaveClass(e))
            e.className = classToAdd;
    },
    
    _canHaveClass : function(e) 
    {
        return ((e != null) && (e.className != null));
    },

    _hasAnyClass : function(e) 
    {
        return (this._canHaveClass(e) && (e.className.length > 0));
    },

    _hasClass : function(e, specificClass) 
    {
        return (this._hasAnyClass(e) && (e.className.indexOf(specificClass) > -1));
    },

    _swapClass : function(e, oldClass, newClass) 
    {
        if (this._hasAnyClass(e))
            e.className = e.className.replace(new RegExp(oldClass, "gi"), newClass);
    },

    _removeClass : function(e, classToRemove) 
    {
        this._swapClass(e, classToRemove, '');
    }
};

if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();