
//----------------------------------------------------------------------------------------------------------------------

function Menu() {
	var self = this;	
	// Check the screen size we are running on.
	if ( Helper.isLargeScreen() ) {
		// Handle clicks from menu buttons to activate the relevant pages. 
		var updatesButton = document.getElementById( "button_updates" );
		updatesButton.onclick = function() {
			 self.activate( Menu.UPDATES_SCREEN );
		};
		var newgameButton = document.getElementById( "button_newgame" );
		newgameButton.onclick = function() {
			 self.activate( Menu.NEWGAME_SCREEN );
		};
		var inboxButton = document.getElementById( "button_inbox" );
		inboxButton.onclick = function() {
			 self.activate( Menu.INBOX_SCREEN );
		};
		var outboxButton = document.getElementById( "button_outbox" );
		outboxButton.onclick = function() {
			 self.activate( Menu.OUTBOX_SCREEN );
		};
		var settingsButton = document.getElementById( "button_settings" );
		settingsButton.onclick = function() {
			 self.activate( Menu.SETTINGS_SCREEN );
		};

		// Assign functionality to top bar buttons.
		var logoutButton = document.getElementById( "button_logout" );
		logoutButton.onclick = function() { widgetMenu.activate( Menu.LOGIN_SCREEN ); };

		var exitButton = document.getElementById( "button_exit" );
		exitButton.onclick = function() { 
			alert( StringTable.Code.safariCloseWarning );
			//window.close(); 
		};
				
	} else {
		// Create phone's softmenu.
		this.miRefreshFatBookie = new MenuItem( StringTable.Code.menuRefreshFatBookie, 9000 );
		
		var miUpdates = new MenuItem( StringTable.Code.menuUpdates, 9001 );
		var miNewgame = new MenuItem( StringTable.Code.menuNewgame, 9002 );
		var miInbox = new MenuItem( StringTable.Code.menuInbox, 9003 );
		var miOutbox = new MenuItem( StringTable.Code.menuOutbox, 9004 );
		var miSettings = new MenuItem( StringTable.Code.menuSettings, 9005 );
		var miLogout = new MenuItem( StringTable.Code.menuLogout, 9006 );
	
	  	// Assign a callback function for the menu items
	  	this.miRefreshFatBookie.onSelect = function () { updatesScreen.onRefreshClicked(); };
	  	
		miUpdates.onSelect = function () { self.activate( Menu.UPDATES_SCREEN ); };
	  	miNewgame.onSelect = function () { self.activate( Menu.NEWGAME_SCREEN ); };
		miInbox.onSelect = function () { self.activate( Menu.INBOX_SCREEN ); };
		miOutbox.onSelect = function () { self.activate( Menu.OUTBOX_SCREEN ); };
	  	miSettings.onSelect = function () { self.activate( Menu.SETTINGS_SCREEN ); };
		miLogout.onSelect = function () { widgetMenu.activate( Menu.LOGIN_SCREEN ); };
		
		// Add them to the top-level menu. Don't forget to dim out
		// the "Update FatBookie" menu item since it is only shown on the
		// Update screen for faster navigation.
		this.miRefreshFatBookie.setDimmed( true );
		menu.append( this.miRefreshFatBookie );
		
		menu.append( miUpdates );
		menu.append( miNewgame );
		menu.append( miInbox );
		menu.append( miOutbox );
		menu.append( miSettings );		
		menu.append( miLogout );		
	}
}

//----------------------------------------------------------------------------------------------------------------------

Menu.prototype.activate = function( screenId ) {	
	widget.prepareForTransition( "fade" ); 
	
	// Don't display the widget menu on login screen.
	if ( Helper.isLargeScreen() ) {
		Helper.show( "menu_strip", screenId != Menu.LOGIN_SCREEN );	

		// Show login and logout buttons on the top bar. Do this only on large screens since on
		// small screens they are available from the softmenu.
		Helper.show( "button_logout", screenId != Menu.LOGIN_SCREEN );
		Helper.show( "button_exit", screenId != Menu.LOGIN_SCREEN );			
	} else {
		if ( screenId == Menu.LOGIN_SCREEN ) {
			menu.hideSoftkeys();
		} else {
			menu.showSoftkeys();
		}
		
		// Show the specific menu items only on pages they are
		// intended for.
		this.miRefreshFatBookie.setDimmed( screenId != Menu.UPDATES_SCREEN );
	}	

	// Show the desired screen.
	Helper.show( Menu.LOGIN_SCREEN, screenId == Menu.LOGIN_SCREEN );
	Helper.show( Menu.UPDATES_SCREEN, screenId == Menu.UPDATES_SCREEN );
	Helper.show( Menu.INBOX_SCREEN, screenId == Menu.INBOX_SCREEN );
	Helper.show( Menu.OUTBOX_SCREEN, screenId == Menu.OUTBOX_SCREEN );
	Helper.show( Menu.VIEW_MESSAGE_SCREEN, screenId == Menu.VIEW_MESSAGE_SCREEN );
	Helper.show( Menu.REPLY_SCREEN, screenId == Menu.REPLY_SCREEN );
	Helper.show( Menu.NEWGAME_SCREEN, screenId == Menu.NEWGAME_SCREEN );
	Helper.show( Menu.GAME_OPTIONS_SCREEN, screenId == Menu.GAME_OPTIONS_SCREEN );
	Helper.show( Menu.PUBLISH_GAME_SCREEN, screenId == Menu.PUBLISH_GAME_SCREEN );
	Helper.show( Menu.INVITE_FRIENS_SCREEN, screenId == Menu.INVITE_FRIENS_SCREEN );
	Helper.show( Menu.SETTINGS_SCREEN, screenId == Menu.SETTINGS_SCREEN );
	
	// On big screens, update the menu strip manually.
	if ( Helper.isLargeScreen() ) {
		// Activate the selected button.
		this._activateButton( screenId );
	}	
	
	// Known Issue: Below line doesn't work if the activation comes from widget's submenu.
	//              widget.performTransition();
	setTimeout ( "widget.performTransition();", 0 );

	// Let the screen know it's being activated.
	if ( screenId == Menu.LOGIN_SCREEN ) {
		loginScreen.onActivated();
	} else if ( screenId == Menu.UPDATES_SCREEN ) {
		updatesScreen.onActivated();
	} else if ( screenId == Menu.INBOX_SCREEN ) {
		inboxScreen.onActivated();
	} else if ( screenId == Menu.OUTBOX_SCREEN ) {
		outboxScreen.onActivated();
	} else if ( screenId == Menu.VIEW_MESSAGE_SCREEN ) {
		messageScreen.onActivated();
	} else if ( screenId == Menu.REPLY_SCREEN ) {
		replyScreen.onActivated();
	} else if ( screenId == Menu.NEWGAME_SCREEN ) {
		newgameScreen.onActivated();
	} else if ( screenId == Menu.GAME_OPTIONS_SCREEN ) {
		gameOptionsScreen.onActivated();
	} else if ( screenId == Menu.PUBLISH_GAME_SCREEN ) {
		publishGameScreen.onActivated();
	}  else if ( screenId == Menu.INVITE_FRIENS_SCREEN ) {
		inviteFriendsScreen.onActivated();
	} else if ( screenId == Menu.SETTINGS_SCREEN ) {
		settingsScreen.onActivated();
	} 

	var previousScreen = this.activeScreen; 	
	this.activeScreen = screenId;

	if ( Helper.isLargeScreen() &&( screenId == Menu.LOGIN_SCREEN || previousScreen == Menu.LOGIN_SCREEN ) ) {
		// Do a manual resize to update the different screen layout on the login
		// screen where the menu isn't shown. 
		resizeNormalView();
	}

}

//----------------------------------------------------------------------------------------------------------------------

Menu.prototype._activateButton = function( screenId ) {
	// Activate or deactivate menu buttons. Since the button is a composite of an
	// image and text (allows localization), we need to change the styling of the
	// button container (div) and not the link (a).
	Helper.activate( "button_container_updates", screenId == Menu.UPDATES_SCREEN );
	Helper.activate( "button_container_newgame", screenId == Menu.NEWGAME_SCREEN );
	Helper.activate( "button_container_inbox", screenId == Menu.INBOX_SCREEN );
	Helper.activate( "button_container_outbox", screenId == Menu.OUTBOX_SCREEN );
	Helper.activate( "button_container_settings", screenId == Menu.SETTINGS_SCREEN );

	// For screens not linked to menu button, activate parent screen button
	if( screenId == Menu.VIEW_MESSAGE_SCREEN || screenId == Menu.REPLY_SCREEN )
	{
		Helper.activate( "button_container_outbox", messageScreen.show == "outbox" ); 
		Helper.activate( "button_container_inbox", messageScreen.show == "inbox" ); 
	}

	if( screenId == Menu.GAME_OPTIONS_SCREEN )
		Helper.activate( "button_container_newgame", 1 == 1 ); 

	if( screenId == Menu.PUBLISH_GAME_SCREEN )
		Helper.activate( "button_container_newgame", 1 == 1 ); 

	if( screenId == Menu.INVITE_FRIENS_SCREEN )
		Helper.activate( "button_container_newgame", 1 == 1 ); 

}

//----------------------------------------------------------------------------------------------------------------------

// Must be div ids defined in main.html
Menu.LOGIN_SCREEN = "login";
Menu.UPDATES_SCREEN = "updates";
Menu.INBOX_SCREEN = "inbox";
Menu.OUTBOX_SCREEN = "outbox";
Menu.VIEW_MESSAGE_SCREEN = "view_message";
Menu.REPLY_SCREEN = "reply_message";
Menu.NEWGAME_SCREEN = "set_game";
Menu.GAME_OPTIONS_SCREEN = "game_options";
Menu.PUBLISH_GAME_SCREEN = "publish_game";
Menu.INVITE_FRIENS_SCREEN = "invite_friends";
Menu.SETTINGS_SCREEN = "settings";

//----------------------------------------------------------------------------------------------------------------------

