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();
	},
	
	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));
		
		//this.resetButton = this.formElement.getElement('.btn-reset');
		//this.resetButton.addEvent('click',karw.resetFields.bind(this,[this.formElement]));
	},
	
	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 = '/IGGammaServices/resources/client/registration?random='+Math.random();
		}else{
			this.urlregister = '/IGGammaServices/resources/client/registrationWithCard?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(){
		if(this.emailValue != this.emailCheckValue){
			var errorArea = this.formElement.getElements('.error_emailcheck');
			errorArea.setStyles({'opacity':'1','border-color':'#ff0000'});
			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);
		}
		// Sitecatalyst tracking
		trackNewLetterRegister(this.barcodeValue, this.sexValue, this.zipcodeValue);
	},
	
	doSubmitActionFailure: function(xhr){
		this.loader.hide();
		var optin_field = this.formElement.getElement('span#optin_text');
		optin_field.setStyle('color','#515D5B');
		
		this.formElement.getElements('.form-row').each(function(item,index){
			item.removeClass('fault');
		});
		this.formElement.getElements('.sub-area').each(function(item,index){
			item.setStyles({'opacity':'0'});
		});
		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 mainRow = false;
				while(mainRow === false){
					
					var field = field.getParent();
					if(field.hasClass('form-row')){
						var mainElement = field;
						mainRow = true;
					}
				}					
				
				mainElement.addClass('fault');
				var errorArea = mainElement.getElement('.sub-area');
				if(errorArea){
					errorArea.setStyles({'opacity':'1','border-color':'#ff0000'});						
				}
			}
			if(xhr.responseText == 'ZIPCODE_DOESNT_MATCH'){
				var field = this.formElement.getElement('input#zipcode');

				var mainRow = false;
				while(mainRow === false){
					
					var field = field.getParent();
					if(field.hasClass('form-row')){
						var mainElement = field;
						mainRow = true;
					}
				}					
				
				mainElement.addClass('fault');
				var errorArea = mainElement.getElement('.error_zipcodecheck2');
				if(errorArea){
					errorArea.setStyles({'opacity':'1','border-color':'#ff0000'});						
				}
			}
			if(xhr.responseText == 'ALREADY_REGISTERED'){
				var field = this.formElement.getElement('input#email');
				
				var mainRow = false;
				while(mainRow === false){
					
					var field = field.getParent();
					if(field.hasClass('form-row')){
						var mainElement = field;
						mainRow = true;
					}
				}					
				
				mainElement.addClass('fault');
				var errorArea = mainElement.getElement('.error_registercheck');

				if(errorArea){
					errorArea.setStyles({'opacity':'1','border-color':'#ff0000'});						
				}
			}
		}
		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 mainRow = false;
					while(mainRow === false){
						
						var field = field.getParent();
						if(field.hasClass('form-row')){
							var mainElement = field;
							mainRow = true;
						}
					}					
					
					mainElement.addClass('fault');
					var errorArea = mainElement.getElement('.sub-area');
					if(errorArea){
						if(error[1] == 'zipcode'){
							forms_showZipcodeError(errorArea, this.formElement, '1');
						}
						errorArea.setStyles({'opacity':'1','border-color':'#ff0000'});						
					}
					
				}
				if(error[0] == "NO_OPTIN" ){
					var field = this.formElement.getElement('span#optin_text');
					field.setStyle('color','#ff0000');
					var errorArea = this.formElement.getElement('.error_optin');
					errorArea.setStyles({'opacity':'1','border-color':'#ff0000'});
				}
			}
		}
	}

});