karw.formRegister = new Class({
	
	Implements: [Events,Options],
	
	
	formId: 'register',
	formElement: null,
	jsonPostFix: 'register',
	submitButton: null,	
	resetButton: null,
	
	loader: null,
	
	sexValue: null,
	initialsValue: null,
	prefixValue: null,
	surnameValue: null,
	emailValue: null,
	emailCheckValue: null,
	optinValue: null,
	countryValue: null, 
	karweiKaartValue: null,
	urlregister: null,
	
	initialize: function(formElement){
		
		this.formElement = $(this.formId);
		this.jsonPostFix = this.formElement.id;
		this.enableSubmit();
		this.loader = new karw.Loader();
		this.loader.hide();
	},
	
	enableSubmit: function(){
		this.formElement.getElement('input[id=karweikaart]').addEvent('click',function(){
			if(this.formElement.getElement('input[id=karweikaart]').checked === false){
				$('cardarea').setStyle('display','none');
			}else{
				$('cardarea').setStyle('display','block');
			}
		}.bind(this));
		
		
		
		this.submitButton = this.formElement.getElement('.btn-verzenden');
		this.submitButton.addEvent('click',this.submitAction.bind(this));
	},
	
	retreiveFields: function(){
		$$('#'+this.formId+' input.sex').each(function(item,index){
			
			if(item.checked === true){
				this.sexValue = item.value;
			}
		}.bind(this));

		this.initialsValue = this.formElement.getElement('input[id=initials]').value;
		this.prefixValue = this.formElement.getElement('input[id=prefix]').value;
		this.surnameValue = this.formElement.getElement('input[id=surname]').value;
		this.emailValue = this.formElement.getElement('input[id=email]').value;
		this.emailCheckValue = this.formElement.getElement('input[id=emailcheck]').value;
		this.barcodeValue = this.formElement.getElement('input[id=barcode]').value;
		this.zipcodeValue = this.formElement.getElement('input[id=zipcode]').value;
		this.formElement.getElements('option[class=country]').each(function(item,index){
			if(item.selected === true){
				this.countryValue = item.value;
			}
		}.bind(this));
		
		var checkbox = this.formElement.getElement('input[id=optin]');
		
		if(checkbox.checked === true)
			this.optinValue = true;
		else
			this.optinValue = false;
		
		var checkbox2 = this.formElement.getElement('input[id=karweikaart]');
		
		if(checkbox2.checked === true)
			this.karweiKaartValue = true;
		else
			this.karweiKaartValue = false;
		
		if(this.karweiKaartValue === false){
			this.urlregister = '/IGKarweiServices/resources/client/registration?source=KHweb-' + gTemplateName + '&random='+Math.random();
		}else{
			this.urlregister = '/IGKarweiServices/resources/client/registrationWithCard?source=KHweb-' + gTemplateName + '&random='+Math.random();
		}
		
		//this.barcodeValue = this.formElement.getElement('input[id=initials]');
		//this.zipValue = this.formElement.getElement('input[id=initials]');
	},
	
	submitAction: function(){
		
		this.loader.show();
		this.retreiveFields();
		if(this.karweiKaartValue === false){
			var compare = this.compareEmail();
		}else{
			var compare = true;
		}
		if(compare){
			var postObject = {
				sex: this.sexValue,
				initials: this.initialsValue,
				prefix: this.prefixValue,
				surname: this.surnameValue,
				email: this.emailValue,
				optIn: this.optinValue,
				barcode: this.barcodeValue,
				zipcode: this.zipcodeValue,
				country: this.countryValue
			};
			
			var request = new Request({
				url: karw.context+ this.urlregister,
				method:'post',
				data: postObject,
				onSuccess: this.doSubmitAction.bind(this),
				onFailure: this.doSubmitActionFailure.bind(this)
			}).send();
		}else{
			this.loader.hide();
		}
	},
	compareEmail: function(){
		resetErrors(this.formElement);
		if(this.emailValue != this.emailCheckValue){
			
			var field = this.formElement.getElement('input#emailcheck');
			var mainElement = setFault(field);
			return false;
		}else{
			return true;
		}
	},
	
	doSubmitAction: function(jsonResponse){
		this.loader.hide();
		if(jsonResponse == "REGISTRATION_OK"){
			var successArea = $('success');
			successArea.setStyle('display','block');
			var formArea = this.formElement.getElement('div.form-section');
			var buttonArea = this.formElement.getElement('div.btn-holder');
			
			formArea.setStyle('display','none');
			buttonArea.setStyle('display','none');
		}else{
			this.formElement.setStyle('display','none');
			var change = new karw.formChange(jsonResponse, this.formElement);
		}
		// Sitecatalyst tracking
		trackNewLetterRegister(this.barcodeValue, this.sexValue, this.zipcodeValue);
	},
	
	doSubmitActionFailure: function(xhr){
		// Sitecatalyst tracking
		s.sendFormEvent('e', s.pageName, this.formId, xhr.responseText);
		
		this.loader.hide();
		var optin_field = this.formElement.getElement('span#optin_text');
		optin_field.setStyle('color','#515D5B');
		
		resetErrors(this.formElement);
		if(xhr.status == "422"){
	
			if(xhr.responseText == 'NEW_CARD'){
				this.formElement.setStyle('display','none');
				var newcard = new karw.formNewcard();				
			}
			if(xhr.responseText == 'NO_CUSTOMER'){
				this.formElement.setStyle('display','none');
				var nocustomer = new karw.formNoCustomer();				
			}
			if(xhr.responseText == 'INVALID_CARD'){
				var field = this.formElement.getElement('input#barcode');
				var mainElement = setFault(field);
			}
			if(xhr.responseText == 'ZIPCODE_DOESNT_MATCH'){
				var field = this.formElement.getElement('input#zipcode');

				var mainElement = setFault(field);
				var errorArea = mainElement.getElement('.error_zipcodecheck');
				if(errorArea){
					showErrorMessage(errorArea, '#p_kaart');
				}
			}
			if(xhr.responseText == 'ALREADY_REGISTERED'){
				var field = this.formElement.getElement('input#email');
				
				var mainElement = setFault(field);
				var errorArea = mainElement.getElement('.sub-area');
				
				if(errorArea){
					showErrorMessage(errorArea, '.email_exists');
				}
			}
			if(xhr.responseText == 'HAS_CARD'){
				var field = this.formElement.getElement('input#email');
				
				var mainElement = setFault(field);
				var errorArea = mainElement.getElement('.sub-area');
				
				if(errorArea){
					showErrorMessage(errorArea, '.email_hascard');
				}
			}
		}
		if(xhr.status == "409"){
			var responseTextArray = xhr.responseText.split(", ");
			
			for(i=0;i<responseTextArray.length;i++){
				var error = responseTextArray[i].split(" ");
				if(error[0] == "PARAMETER_MISSING" || error[0] == "PARAMETER_INVALID"){
					var field = this.formElement.getElement('input.'+error[1]);
					if(field === null){
						var field = this.formElement.getElement('input#'+error[1]);
					}
					var mainElement = setFault(field);

					if(error[1] == 'zipcode'){
						var errorArea = mainElement.getElement('.sub-area');
						if(errorArea){
							forms_showZipcodeError(errorArea, this.formElement, '1');
						}
					}
					else if(error[1] == 'email'){
						var errorArea = mainElement.getElement('.sub-area');
						if(errorArea){
							showErrorMessage(errorArea, '.email_valid');
						}
					}
				}
				if(error[0] == "NO_OPTIN" ){
					var field = this.formElement.getElement('span#optin_text');
					field.setStyle('color','#ff0000');
					setFault(field);
				}
			}
		}
	}

});
