
//------------------------ EvaaFE (Evaa FrontEnd) -----------------------------------------
var EvaaFE = {
	onloadExecuted: false,

	onload: function(){ // Called in frontend.js (to ensure all variables have been defined)
		EvaaFE.Feedback.setup();
		EvaaFE.RegForm.setup();
		EvaaFE.onloadExecuted = true;
	}

};


//------------------------ EvaaFE.RegForm (Evaa Registration Form) ------------------------
EvaaFE.RegForm = {
	gotChanges: false,
	silenceSaveOnExitPrompt: false,
	onBeforeUnloadPrompted: false,
	inProgress: false,
	heartbeat: null,

	setup: function(){
		if($('Evaa_Form') == null)	{
			EvaaFE.RegForm.inProgress = false;
			return ;
		}

		if(EvaaFE.RegForm.heartbeat == null){
			EvaaFE.RegForm.heartbeat = new Evaa.Heartbeat(840000); // Send heartbeat every 14min
			EvaaFE.RegForm.heartbeat.start();
		}

		EvaaFE.RegForm.inProgress = true;
		//Registration is in progress. Observe for changes
		new Form.EventObserver('Evaa_Form', EvaaFE.RegForm.changeObserved);

	},

	end: function(){
		EvaaFE.RegForm.inProgress = false;
		EvaaFE.RegForm.gotChanges = false;
		if(EvaaFE.RegForm.heartbeat != null){
			EvaaFE.RegForm.heartbeat.stop();
		}
	},

	changeObserved: function(element, value){
		if(EvaaFE.RegForm.gotChanges){
			return ; // if we've already registered a change, don't do anything
		}
		EvaaFE.RegForm.preparePromptSaveOnExit();
		EvaaFE.RegForm.gotChanges = true;
	},

	preparePromptSaveOnExit: function(){
		EvaaWindow.Events.register("beforeunload", EvaaFE.RegForm.onBeforeUnload);
		EvaaWindow.Events.register("unload", EvaaFE.RegForm.unload);
	},

	promptSaveOnExit: function(){
		if(EvaaFE.RegForm.gotChanges && EvaaFE.RegForm.inProgress ){
			var discard = confirm("Your changes have not been saved yet. Discard your changes?");
			if(discard){
				EvaaFE.RegForm.silenceSaveOnExitPrompt = true;
			}
			return discard;
		}
		return true;
	},

	onBeforeUnload: function(){
		if(EvaaFE.RegForm.silenceSaveOnExitPrompt){
			return;
		}

		if(EvaaFE.RegForm.gotChanges && EvaaFE.RegForm.inProgress ){
			EvaaFE.RegForm.onBeforeUnloadPrompted = true;
			return "Your changes have not been saved yet. Leaving this page will discard your changes. ";
		}
	},

	unload: function(){
		if(EvaaFE.RegForm.silenceSaveOnExitPrompt
				|| EvaaFE.RegForm.onBeforeUnloadPrompted){ // In case we're dealing with a browser that doesn't handle the onbeforeunload event
			return true;
		}

		if(EvaaFE.RegForm.gotChanges && EvaaFE.RegForm.inProgress ){
			alert("Your changes have not been saved yet. Leaving this page will discard your changes. ");
		}
	}

}



//------------------------ EvaaFE.Feedback (Feedback mechanism) ---------------------------
EvaaFE.Feedback = {

	setup: function(){
		if($('Evaa_Feedback')==null){
			new Insertion.Top(document.body,
				'<div id="Evaa_Feedback" class="Evaa_Feedback_default" style="visibility:hidden;" onclick="EvaaFE.Feedback.clear();">' +
					'<div id="Evaa_FeedbackMessage" class="Evaa_FeedbackMessage_default"></div>' +
				'</div>');
		}
	},

	show: function(message){
		Element.update('Evaa_FeedbackMessage', message);
		if (message == ''){
			this.clear();
		}
		else{
			var feedbackFx = new Fx.Style('Evaa_Feedback', 'opacity').custom(0,1);
		}
	},

	clear: function(){
		//Hide feedback only if it is currently being shown
		if(Element.getStyle($('Evaa_Feedback'), 'opacity') > 0 &&
		   Element.getStyle($('Evaa_Feedback'), 'visibility') != 'hidden'){

		   	var feedbackFx = new Fx.Style('Evaa_Feedback', 'opacity').custom(1,0);
		}
	}
}



//------------------------ EvaaFE.Navigation (Form navigation) ----------------------------
EvaaFE.Navigation = {

	next: function(current_step){
		EvaaAJAX.Update("Evaa_Form", current_step, "_next", "_evaa_step&" + Form.serialize("Evaa_Form"));
	},

	back: function(current_step){
		EvaaAJAX.Update("Evaa_Form", current_step, "_previous", "_evaa_step&" + Form.serialize("Evaa_Form"));
	},

	cancel: function(){
		if(EvaaFE.RegForm.promptSaveOnExit()){
			EvaaFE.RegForm.end();
			window.location = '?';
		}
	},

	cancelAndGoto: function(goto_step){
		if(EvaaFE.RegForm.promptSaveOnExit()){
			EvaaFE.RegForm.end();
			EvaaAJAX.Update("Evaa_Form", goto_step, "_goto", "&_evaa_step");
		}
	},

	saveAndEndAndGoto: function(current_step, goto_step){
		EvaaAJAX.Update("Evaa_Form", current_step, "_next", "_goto=" + goto_step + "&_evaa_step&_evaa_saveandend&" + Form.serialize("Evaa_Form"));
	},

	finish: function(current_step){
		EvaaAJAX.Update("Evaa_Form", current_step, "_finish", "_evaa_step&" + Form.serialize("Evaa_Form"));
	},

	finishAndNoDashboard: function(current_step){
		EvaaAJAX.Update("Evaa_Form", current_step, "_finish", "_evaa_step&nodashboardstep" + Form.serialize("Evaa_Form"));
	},


	_goto: function(current_step, goto_step){
		EvaaAJAX.Update("Evaa_Form", current_step, "_next", "_goto=" + goto_step + "&_evaa_step&" + Form.serialize("Evaa_Form"));
	},

	load: function(participantId){
		EvaaAJAX.Update("Evaa_Form", "_StartRegistrationStep_", "_goto", "&_evaa_step&_evaa_restart_registration&participantId="+participantId);
	},

	loadAndGoto: function(participantId, goto_step){
		EvaaAJAX.Update("Evaa_Form", goto_step, "_goto", "&_evaa_step&_evaa_restart_registration&participantId="+participantId);
	},


	startNew: function(){
		EvaaAJAX.Update("Evaa_Form", "_StartRegistrationStep_", "_goto", "&_evaa_step&_evaa_restart_registration");
	}

}



EvaaFE.UploadHandler = function(uploadIdentifier, uploadedFilename, error){
	if(error == ""){
		$(uploadIdentifier).value = uploadedFilename;
	}else{
		$(uploadIdentifier).value = "";
	}
}
