MP.prototype.Navigation = function (params, parent) {
	var proto = this;
	
	if (!params._enabled) {
		return false;
	}
	
	var proto = {};
	var container = $('<div id="mp-navigation"></div>').appendTo(params._container);
	
	proto = {
		_visible: true,
		_container: container,
		_element: $('<ul class="mp-navigation-list"></ul>').appendTo(container),
		_contents: {}
	}

	proto.Show = parent.Navigation_Show;
	proto.Hide = parent.Navigation_Hide;
	proto.Elements = parent.Navigation_Elements;
	proto.Resize = parent.Navigation_Resize;
	proto.Style = parent.Navigation_Style;

	setTimeout(function () {
		proto.Elements(params, parent);
		proto.Resize(params, parent);
		proto.Style(params, parent);
	}, 0);

	return proto;
};

MP.prototype.Navigation_Elements = function (params, parent) {
	var proto = this;
	
	var navigation,
		n;
		//depth = depth || 0;
	
	var parentNav = (params._navigation) ? params._navigation : parent.__navigation;
	
	for (n in params) {
		if (n === '_navigation' || n === '_background' || n === '_container' || n === '_enabled'){
			continue;
		}
		
		if (params.hasOwnProperty(n)) {
			navigation = params[n];
			navigation._parent = parentNav;
			
			if (!parentNav._contents) {
				parentNav._contents = [];
			}
			
			if (!parentNav._contents[n]) {
				parentNav._contents[n] = parent.Navigation_Element(navigation, parent, n)
			}
			
		}
	}
	
};

MP.prototype.Navigation_Element = function (params, parent, n) {
	params._hash = n;
	
	params._element = $('<li class="mp-navigation-element"></li>')
	.appendTo(params._parent._element)
	.click(function (e) {
		//Quickly hack in Page
		if (parent.__page && $(this).data()._page) {
			parent.__page.Load($(this).data(), parent);
		}
		
		e.preventDefault();
		
		return false;
	})
	.hover(function () {
		//Quickly hack in Description
		if (parent.__description && $(this).data()._description) {
			parent.__description.Text($(this).data(), parent);
			parent.__description.Show(params, parent);
		};
		
		parent.__navigation._container.css({
			zIndex: 1
		});
		
		parent.__overlay.Show(params, parent);

	}, function () {
		//Quickly hack in Description
		if (parent.__description) {
			parent.__description.Hide(params, parent);
		}
		
		parent.__navigation._container.css({
			zIndex: 0
		});
		
		parent.__overlay.Hide(params, parent);

		
	});
	
	var container = $('<div class="mp-navigation-element-container"></div>').appendTo(params._element);
	
	var title = $('<h1 class="mp-navigation-element-title"><span>' + params._title + '</span></h1>')
		.appendTo(container),
		
		icon = $('<img class="mp-navigation-element-icon" src="' + params._icon + '" />')
		.prependTo(title);
	
	if (params._src) {
		var url = $('<a class="mp-navigation-element-src" href="#' + n + '">');
		title
		.wrap(url)
		.data(params);
	};
	
	params._element.data(params);
	
	if (params._contents) {
		params._contents._navigation = {
			_element: $('<ul class="mp-navigation-list"></ul>'),
			_contents: []
		};
		
		params._contents._navigation._element
		.appendTo(container)
		.css({
			position: 'absolute',
			'min-width': $(params._contents._navigation._element).outerWidth(),
			left: '100%',
			top: 0
		});
		
		//depth ++;
		parent.Navigation_Elements(params._contents, parent);
	}
	
	return params;
	
};

MP.prototype.Navigation_Show = function (params, parent) {
	this._container.css({left: 0});
	
};

MP.prototype.Navigation_Hide = function (params, parent) {
	this._container.css({left: -parent.__navigation._container.outerWidth()});
};

MP.prototype.Navigation_Resize = function (params, parent) {
	
};

MP.prototype.Navigation_Style = function (params, parent) {
	var defaults = {
		main: 'li.mp-navigation-element { float: left; clear: both;} ul.mp-navigation-list li.mp-navigation-element ul.mp-navigation-list { display: none; } ul.mp-navigation-list li.mp-navigation-element:hover ul.mp-navigation-list { display: block; }'
	};
	
	$('#mp-navigation-style').remove();
	this._style = $('<style id="mp-navigation-style">' + defaults.main + '</style>')
	.appendTo('head');
};

