oRcsf.RegisterObject('Module_News_Newsletterform');
var RCSF_Project_Module_News_Newsletterform =
{
	 msExtends			: 'RCSF_Base_Form'
	 ,miAskedForDate	: 0
	 ,moForm			: {}
	 
	/**
	 * Handles things that should be done after the document has fully loaded
	 *
	 */
	,OnDomLoaded : function()
	{
		// Assign form handlers
		var o_form = this.moForm = $('btn_submit').up('form');
		$('btn_submit').observe('click', this.SubmitForm.bind(this, o_form));
		if($('btn_showvoorwaarden'))
			$('btn_showvoorwaarden').observe('click', this.OpenVoorwaarden.bind(this));
		if($('btn_close'))
			$('btn_close').observe('click', this.CloseVoorwaarden.bind(this));
		$('a_main-s_firstname').focus();
	}
	
	/**
	 * Submits the form
	 */
	,SubmitForm: function(oForm, event){
		event.stop();
		
		this.moForm = oForm;
		var o_request_options = {
			s_mode: 'data',
			s_module: 'news',
			s_controller: 'newsletter',
			s_action: 'validate',
			o_scope: this,
			s_callback: 'OnValidated'
		};
		
		var o_data = this.GetFormData(oForm);
		
		this.moCore.RequestServer(o_data, o_request_options);
	}
	
	,OnValidated : function(oData)
	{
		this.HideAllErrors();
		if(oData.s_status == 'error')
		{
			this.ShowFieldErrors(oData);
		}
		else
		{
			if (this.miAskedForDate == 1) {
				this.SubmitRealForm();
			}
			else {
				/* FIRST CHECK DATE */
				this.CheckDate();
			}
		}
	}
	
	
	/**
	 * Submits the form
	 */
	,CheckDate : function()
	{
		
			var o_request_options = {
				s_mode: 'data',
				s_module: 'news',
				s_controller: 'newsletter',
				s_action: 'checkdate',
				o_scope: this,
				s_callback: 'OnDateChecked'
			};
			
			var o_data = this.GetFormData(this.moForm);
			
			this.moCore.RequestServer(o_data, o_request_options);
			
			return false;
		
	}
	/**
	 * On date checked
	 */
	,OnDateChecked: function(oData)
	{
		if(oData.s_status == 'error' && this.miAskedForDate == 0)
		{
			this.miAskedForDate = 1;
			$('newsletter_msg').update('Weet je zeker dat je je geboortedatum niet wilt invullen? Crystal Clear verrast je met een leuk kadootje op je verjaardag!');
			$('newsletter_msg').show();
			return;
		}
		else 
		{
			this.SubmitRealForm();
		}
		
		
	}
	
	/**
	 * Submits the form
	 */
	,SubmitRealForm: function()
	{
			var o_request_options = {
				s_mode: 'data',
				s_module: 'news',
				s_controller: 'newsletter',
				s_action: 'submitform',
				o_scope: this,
				s_callback: 'OnFormSubmitted'
			};
			
			var o_data = this.GetFormData(this.moForm);
			
			this.moCore.RequestServer(o_data, o_request_options);
		
	}
	
	,OnFormSubmitted : function(oData)
	{
		this.HideAllErrors();
		if(oData.s_status == 'error')
		{
			this.ShowFieldErrors(oData);
		}
		else
		{
			var i_h = $('newsletterform').getHeight();
			$('newsletter_confirmation').style.height = i_h + 'px';
			$('newsletter_confirmation').update(oData.s_confirmation);
			
			// track the vertelverder form
			pageTracker._trackEvent('Formulier','Nieuwsbrief aanmelden','vanuit aanmelding');
			
			Effect.Fade('newsletterform',{duration: 0.5,afterFinish : function(){
				Effect.Appear('newsletter_confirmation',{duration: 0.5 });
			}});		
		}
	}
	
	,ShowFieldErrors : function(oData) 
	{
		var i_count = 0;
			
		$('newsletter_msg').update(oData.s_message);
	
		for (var s_field in oData.a_errors)
		{
			// Set reference to current field
			var o_cur_label = $('label-' + s_field);
			var o_cur_field = oData.a_errors[s_field];
			
			// Check if there is an error message for that field
			if(o_cur_label)
			{
				if(i_count < 1) $(s_field).focus(); i_count++;
				o_cur_label.addClassName('error');
				$(s_field).addClassName('error');
				i_count++;
			}
		}
	}
	
	,HideAllErrors : function() 
	{
		// Swaps the old error fields to hidden
		$$('.field_info .error').each(function(oEl)
			{
				oEl.removeClassName('error');
			}
		);
	}
	
	,OpenVoorwaarden : function() 
	{
		new Dialog.Box('voorwaarden_text');
		$('voorwaarden_text').show();
	}
	
	,CloseVoorwaarden : function() 
	{
		$('voorwaarden_text').hide();
	}
}
	