/*
 * The controller is used to route UI events to the appropriate command
 * UI events are sent to the controller as an event message along with
 * an object containing any parameters associated with that event.  The
 * controller inspects the event message and forwards control to the 
 * appropriate command for execution.
 * 
 * Note that the parms value passed into the execute method is intended to
 * be an object literal.  This way an number of parameters can be passed in
 * and they can be referenced by name.
 */

if (!esg) var esg = {};
if (!esg.ident) esg.ident = {};

esg.ident.controller = {
	execute: function(eventMsg, parms) {
		var model = esg.ident.model;
		var views = esg.ident.views;

		switch (eventMsg) {

			case 'join':
				model.joinRoot = parms.root || model.joinRoot;
				views.join.validate(parms);
			break;				
			
			case 'callJoin':
				model.initializeJoin(parms);
				this.execute('executeCall'); 
			break;
 
			case 'callJoinComplete':
				$clear(views.failDelayHandle);
				//(confirm("join succeeded"))?views.join.render.joinSucceed():$empty();
				views.join.render.joinSucceed();
				views.clearSecureCookie();
			break;
            
			case 'callJoinFailure':
				$clear(views.failDelayHandle);
				views.join.render.joinFail(parms);
				views.clearSecureCookie(); 
			break; 

			case 'signIn':
				model.signInRoot = parms.root || model.signInRoot;
				views.signIn.validate(parms);
			break;	
		
			case 'callSignIn':
				model.initializeSignIn(parms);
				this.execute('executeCall'); 
			break;
 
			case 'callSignInComplete':
				$clear(views.failDelayHandle);
				views.signIn.render.signInSucceed();
				views.clearSecureCookie();
			break;
            
			case 'callSignInFailure':
				$clear(views.failDelayHandle);
				views.signIn.render.signInFail(parms);
				views.clearSecureCookie();
			break; 
			
			case 'callL2SignIn':
				model.initializeL2SignIn(parms);
				this.execute('executeCall');  
			break;
 
			case 'callL2SignInComplete':
				$clear(views.failDelayHandle);
				views.signIn.render.L2SignInSucceed();
				views.clearSecureCookie();
			break;
            
			case 'callL2SignInFailure':
				$clear(views.failDelayHandle);
				views.signIn.render.signInFail(parms);
				views.clearSecureCookie();				
			break;   
			
			case 'callSignOut':
				model.initializeSignOut(parms);
				// no cookie for sign out
				views.setFailDelay();
				views.scriptInsert();
			break;
 
			case 'callSignOutComplete':
				$clear(views.failDelayHandle);
				views.clearCookies();
				views.signOut.redirectUser();
			break;
			
			case 'callSignOutFailure':
				/* Because Sign Out is 'fire & forget', we do the same thing regardless */
				/* Binding doesn't work when closure created from function.pass() is used to fire this controller event, so full namespace reference is needed */
				esg.ident.controller.execute('callSignOutComplete');
			break;
			
			case 'renderLandingIdentityContent':
				views.landingIdentityServicesDialogObj.display(parms.dialog,parms.dynamicRedirect,parms.callBack);
			break;

			case 'executeCall':
				views.setUpCookie();
				views.setFailDelay();
				views.scriptInsert();
			break;
            
			default:
				// Unknown command; decode this and write it to the console
				console.error("Unknown command sent to Controller: Command: " + eventMsg +  "   Parameters: " + JSON.encode(parms));
			break;
		}
	}
}

