﻿var rr;
if (!rr) rr = {}

rr.navigation = function() {
    this._displayDefault = this.Clear;
    this._mouse = new njs.ui.Mouse();

    this._mainNavSet = new njs.RadioSet();
    this._subNavSet = new njs.RadioSet();
}

rr.navigation.prototype.AddNavPair = function(mainnav, subnav, subnavContainer, isDefault) {
	this._init(mainnav, subnav, isDefault);
    this._wireEvents(mainnav, subnav, subnavContainer);
}

rr.navigation.prototype.DisplayDefault = function(e, subnavdom, mainnavdom) {
    if (njs.Util.IsDecendentOf(this._mouse.ToEle(e), subnavdom)) return;
    if (njs.Util.IsDecendentOf(this._mouse.FromEle(e), mainnavdom)) return;
    this._displayDefault();
}

rr.navigation.prototype.Clear = function() {
    this._mainNavSet.Clear();
    this._subNavSet.Clear();
}

rr.navigation.prototype._init = function(mainnav, subnav, isDefault) {
    this._mainNavSet.AddRadio(mainnav);
    this._subNavSet.AddRadio(subnav);

    if (isDefault) {
        this._displayDefault = function() {
            subnav.Invoke();
            mainnav.Invoke(); 
        };
        njs.Util.AddClassNameTo(subnav.dom, "selected");
        subnav.Invoke();
    }	
    njs.Util.RemoveClassNameFrom(subnav.dom, "elementHidden");
}

rr.navigation.prototype._wireEvents = function(mainnav, subnav, subnavContainer) {
    njs.Util.AddEvent({
        Dom: mainnav.dom,
        Event: "mouseover",
        Action: function() {
            subnav.Invoke.call(subnav);
            mainnav.Invoke.call(mainnav);
        },
        Scope: this
    });

    njs.Util.AddEvent({
        Dom: mainnav.dom,
        Event: "mouseout",
        Action: function(e) {
            this.DisplayDefault(e, subnav.dom, mainnav.dom);
        },
        Scope: this
    });

    njs.Util.AddEvent({
        Dom: subnavContainer,
        Event: "mouseout",
        Action: function(e) {
            this.DisplayDefault(e, subnavContainer, mainnav.dom);
        },
        Scope: this
    });
}
