//provides page specific menu controls

/***** PAGE MENU *****/
function PageMenu() {}

PageMenu.menu_items = {};
PageMenu.menu_item_ids = [];

PageMenu.active_menu_item_id = null;
PageMenu.next_menu_item_id = null;
PageMenu.is_changing_mi = false;

PageMenu.active_submenu_item_id = null;
PageMenu.next_submenu_item_id = null;
PageMenu.is_changing_smi = false;

PageMenu.addMenuItem = function(id, value, label, action, submenu_id, submenu_items) {
	PageMenu.menu_items[id] = new PageMenuItem(id, value, label, action, submenu_id, submenu_items);
	PageMenu.menu_item_ids.push(id);
}

PageMenu.selectFirstItem = function() {
	PageMenu.next_menu_item_id = PageMenu.menu_item_ids[0];
	PageMenu.changeActiveMenuItem();
}

PageMenu.changeActiveMenuItem = function() {
	if (PageMenu.active_menu_item_id && PageMenu.next_menu_item_id) {
		PageMenu.is_changing_mi = true;
		PageMenu.changeMenuItemAction1();
	} else if (PageMenu.next_menu_item_id) { //no menu item yet selected
		PageMenu.is_changing_mi = true;
		PageMenu.changeMenuItemAction2();
	}
	PageMenu.executeMenuItemAction();
}

PageMenu.changeMenuItemAction1 = function() { //deselect active item
	PageMenu.menu_items[PageMenu.next_menu_item_id].setAsActive();
	PageMenu.menu_items[PageMenu.active_menu_item_id].deselectAction1();
}

PageMenu.changeMenuItemAction2 = function() { //select new item
	PageMenu.menu_items[PageMenu.next_menu_item_id].selectAction1();
}

PageMenu.menuItemChangeComplete = function() {
	PageMenu.active_menu_item_id = PageMenu.next_menu_item_id;
	PageMenu.next_menu_item_id = null;
	PageMenu.is_changing_mi = false;
}

PageMenu.executeMenuItemAction = function() {
	if (PageMenu.menu_items[PageMenu.next_menu_item_id].action) {
		eval(PageMenu.menu_items[PageMenu.next_menu_item_id].action);
	}
}

PageMenu.changeActiveSubmenuItem = function() {
	if (PageMenu.active_submenu_item_id && PageMenu.next_submenu_item_id) {
		PageMenu.is_changing_smi = true;
		PageMenu.changeSubmenuItemAction1();
	} else if (PageMenu.next_submenu_item_id) { //no submenu item yet selected
		PageMenu.is_changing_smi = true;
		PageMenu.changeSubmenuItemAction2();
	}
}

PageMenu.changeSubmenuItemAction1 = function() { //deselect active item
	PageMenu.menu_items[PageMenu.active_menu_item_id].submenu_items[PageMenu.active_submenu_item_id].deselectAction1();
}

PageMenu.changeSubmenuItemAction2 = function() { //select new item
	PageMenu.menu_items[PageMenu.active_menu_item_id].submenu_items[PageMenu.next_submenu_item_id].selectAction1();
}

PageMenu.changeSubmenuItemAction3 = function() {

}

PageMenu.submenuItemChangeComplete = function() {
	PageMenu.active_submenu_item_id = PageMenu.next_submenu_item_id;
	PageMenu.next_submenu_item_id = null;
	PageMenu.is_changing_smi = false;
	PageMenu.executeSubmenuItemAction();
}

PageMenu.executeSubmenuItemAction = function() {
	if (PageMenu.menu_items[PageMenu.active_menu_item_id].submenu_items[PageMenu.active_submenu_item_id].action) {
		eval(PageMenu.menu_items[PageMenu.active_menu_item_id].submenu_items[PageMenu.active_submenu_item_id].action);
	}
}

PageMenu.isValidMenuItemValue = function(menu_item_value) {
	var match = false;
	
	for (var i in PageMenu.menu_items) {
		if (Utils.iStringCompPageMenu(menu_items[i].value, menu_item_value)) match = true;
	}
	
	return match;
}

PageMenu.isValidSubmenuItemValue = function(menu_item_value, submenu_item_value) {
	var match = false;
	
	for (var i in PageMenu.menu_items) {
		if (Utils.iStringComp(PageMenu.menu_items[i].value, menu_item_value)) {
			var menu_item = PageMenu.menu_items[i];
			for (var j in menu_item.submenu_items) {
				if (Utils.iStringComp(menu_item.submenu_items[j].value, submenu_item_value)) {
					match = true;
				}
			}
		}
	}
	
	return match;
}

PageMenu.getMenuItemIdForValue = function(menu_item_value) {
	var id = null;
	
	for (var i in PageMenu.menu_items) {
		if (Utils.iStringComp(PageMenu.menu_items[i].value, menu_item_value)) id = PageMenu.menu_items[i].id;
	}
	
	return id;
}

PageMenu.getSubmenuItemIdForValue = function(menu_item_id, submenu_item_value) {
	var id = false;
	
	var menu_item = PageMenu.menu_items[menu_item_id];
	for (var i in menu_item.submenu_items) {
		if (Utils.iStringComp(menu_item.submenu_items[i].value, submenu_item_value)) id = menu_item.submenu_items[i].id;
	}

	return id;
}



/***** PAGE MENU ITEM *****/
function PageMenuItem(id, value, label, action, submenu_id, submenu_items) {
	this.id = id;
	this.value = value;
	this.label = label;
	this.action = action;
	
	this.submenu_id = submenu_id;
	this.submenu_items = {};
	this.submenu_item_ids = [];
	for (var i in submenu_items) {
		this.submenu_items[submenu_items[i].id] = new PageSubmenuItem(submenu_items[i].id, submenu_items[i].value, submenu_items[i].label, submenu_items[i].action, this);
		this.submenu_item_ids.push(submenu_items[i].id);
	}
}

PageMenuItem.prototype.setAsActive = function() {
	Utils.setClassName(this.id, "pageMenuItemActive");
}

PageMenuItem.prototype.select = function() {
	if (this.id != PageMenu.active_menu_item_id && !PageMenu.is_changing_mi && !PageMenu.is_changing_smi) {
		PageMenu.next_menu_item_id = this.id;
		PageMenu.changeActiveMenuItem();
	}
}

PageMenuItem.prototype.deselectAction1 = function() {
	Utils.setClassName(this.id, "pageMenuItem");
	Transform.animateTransform({obj_id: this.submenu_id, opacity: {start: 1, end: 0}, anim_secs: 0.33, fps: 30, exec_on_finish: "PageMenu.menu_items."+this.id+".deselectAction2()"});
}

PageMenuItem.prototype.deselectAction2 = function() {
	Utils.setDisplay(this.submenu_id, "none");
	Utils.setOpacity(this.submenu_id, 0);
	this.submenu_items[PageMenu.active_submenu_item_id].reset();
	PageMenu.changeMenuItemAction2();
}

PageMenuItem.prototype.selectAction1 = function() {
	Utils.setClassName(this.id, "pageMenuItemActive");
	Utils.setOpacity(this.submenu_id, 0);
	Utils.setDisplay(this.submenu_id, "inherit");
	Transform.animateTransform({obj_id: this.submenu_id, opacity: {start: 0, end: 1}, anim_secs: 0.33, fps: 30, exec_on_finish: "PageMenu.menu_items."+this.id+".selectAction2()"});
}

PageMenuItem.prototype.selectAction2 = function() {
	PageMenu.menuItemChangeComplete();
	PageMenu.active_submenu_item_id = null;
	if (!PageMenu.next_submenu_item_id) PageMenu.next_submenu_item_id = this.submenu_item_ids[0];
	PageMenu.changeActiveSubmenuItem();
}



/***** PAGE SUBMENU ITEM *****/
function PageSubmenuItem(id, value, label, action, parent_menu) {
	this.id = id;
	this.value = value;
	this.label = label;
	this.action = action;
	
	this.parent_menu = parent_menu;
}

PageSubmenuItem.prototype.select = function() {
	if (this.id != PageMenu.active_submenu_item_id && !PageMenu.is_changing_mi && !PageMenu.is_changing_smi) {
		PageMenu.next_submenu_item_id = this.id;
		PageMenu.changeActiveSubmenuItem();
	}
}

PageSubmenuItem.prototype.reset = function() {
	Utils.setClassName(this.id, "pageSubmenuItem");
}

PageSubmenuItem.prototype.deselectAction1 = function() {
	Utils.setClassName(this.id, "pageSubmenuItem");
	this.deselectAction2();
}

PageSubmenuItem.prototype.deselectAction2 = function() {
	PageMenu.changeSubmenuItemAction2();
}

PageSubmenuItem.prototype.selectAction1 = function() {
	Utils.setClassName(this.id, "pageSubmenuItemActive");
	this.selectAction2();
}

PageSubmenuItem.prototype.selectAction2 = function() {
	PageMenu.submenuItemChangeComplete();
}

