var Nav = {
	navItem : null,
	navContainer : null,
	targetW : null,
	targetX : null,
	PE : null,
	hover : null,
	initialized : false,

	initialize : function() {
		if (!this.initialized) {
			this._mouseOver = this.mouseOver.bindAsEventListener(this);
			this._mouseOut = this.mouseOut.bindAsEventListener(this);
			this._setSelected = this.setSelected.bindAsEventListener(this);
			this.navItems = $('nav').down('ul').childElements();
			this.hover = $('nav_hover');
			this.setHover(this.navItems[0]);
			this.PE = new PeriodicalExecuter(this.setHover.bind(this), .05);
			this._setSelected(this.navItems[0]);
			this.createEvents();
			this.initialized = true;
		}
	},

	createEvents : function() {
		for (var i=0; i<this.navItems.length; i++) {
			var navItem = this.navItems[i];
			navItem.observe('mouseover', this._mouseOver);
			navItem.observe('mouseout', this._mouseOut);
			navItem.observe('click', this._setSelected);
		}
	},

	mouseOver : function(event) {
		var _this = Event.findElement(event, 'li');
		this.targetW = _this.getWidth();
		this.targetX = Position.positionedOffset(_this)[0];
		this.selected.addClassName('off');
	},

	mouseOut : function(event) {
		this.targetW = this.selected.getWidth();
		this.targetX = Position.positionedOffset(this.selected)[0];
		this.selected.removeClassName('off');
	},

	setHover : function() {
		var hoverX = Position.positionedOffset(this.hover)[0];
		var hoverW = this.hover.getWidth();
		var moveX = this.targetX - hoverX < 0 ? Math.floor((this.targetX - hoverX) * .2) : Math.ceil((this.targetX - hoverX) *.2);
		var moveW = this.targetW - hoverW < 0 ? Math.floor((this.targetW - hoverW) * .2) : Math.ceil((this.targetW - hoverW) *.2);
		this.hover.setStyle({
			left: moveX + hoverX + 'px',
			width: hoverW + moveW + 'px'
		});
	},

	setSelected : function(event) {
		if (!event.nodeName) {
			var elem = Event.findElement(event, 'li');	
		} else {
			var elem = event;	
		}
		this.selected = elem;
		this.targetX = Position.positionedOffset(this.selected)[0];
		this.targetW = this.selected.getWidth();
		this.setHover();
	}
}