var SmartMenu = Class.create({

	'initialize': function(menu)
	{
		this.menu = $(menu);
		if (this.menu) {
			this.menuItems = this.menu.childElements();

			this.lookUp = [];
			this.lookUp.push(22);
			for (var i = 0; i < this.menuItems.length; i++) {
				this.lookUp[i + 1] = this.lookUp[i] + this.menuItems[i].getWidth();
			}

			this.extra = new Element('li', {'id':'extra-menu'});
			this.extraSub = this.extra.update('<span class="extra-menu-text">More menu items</span>').appendChild(new Element('ul'));

			this.updateMenu();

			Event.observe(window, 'resize', this.updateMenu.bindAsEventListener(this));
		}
	},

	'updateMenu': function()
	{

		var availableWidth = $$('body')[0].getWidth() - 160;
		if ($('quick-search')) {
			availableWidth = availableWidth - 190;
		}

		var amount = this.menuItems.length;
		for (var i = this.menuItems.length; i > 0; i--) {
			if (this.lookUp[i] <= availableWidth) {
				break;
			} else {
				amount--;
			}
		}

		for (var i = 0; i < this.menuItems.length; i++) {
			if (i >= amount) {
				if (this.menuItems[i].parentNode == this.menu) {

					this.menuItems[i].parentNode.removeChild(this.menuItems[i]);
					this.extraSub.appendChild(this.menuItems[i]);

					if (this.menuItems[i].hasClassName('active')) {
						this.extra.addClassName('active');
					}
				}
			} else if (this.menuItems[i].parentNode != this.menu) {
				this.menuItems[i].parentNode.removeChild(this.menuItems[i]);
				this.menu.appendChild(this.menuItems[i]);

				if (this.menuItems[i].hasClassName('active')) {
					this.extra.removeClassName('active');
				}
			}
		}

		if (this.extra.parentNode == this.menu) {
			this.menu.removeChild(this.extra);
		}
		if (amount < this.menuItems.length) {
			this.menu.appendChild(this.extra);

			if (!Object.isUndefined(window.pbHoverBehavior)) {
				pbHoverBehavior($$('#extra-menu', '#extra-menu *'));
			}
		}
	}
});
