karw.formCaptcha = new Class({
	
	Implements: [Events,Options],
	
	hashCode: null,
	putObject: null,
	formId: 'captchaform',
	prevFormId: 'promoform',
	formElement: null,
	prevFormElement: null,
	loader: null,
	UID:null,
	
	initialize: function(hash){
		if($chk(hash)){
			this.hashCode = hash;
		}else{
			this.hashCode = "";
		}
		this.formElement = $(this.formId);
		this.prevFormElement = $(this.prevFormId);
		this.loader = new karw.Loader();
		if($chk(this.hashCode)){
			this.retreiveCustomer();
		}else{
			this.formElement.setStyle('display','block');
			this.fetchFormData();			
		}
		 $('captchaImage2').set('src',karw.context+'/IGGammaServices/resources/client/captcha?'+ Math.random());
		
	},
	
	fetchFormData: function(){
		this.formElement.getElement('input.surname').value = this.prevFormElement.getElement('input.surname').value;
		this.formElement.getElement('input.zipcode').value = this.prevFormElement.getElement('input.zipcode').value;
		this.formElement.getElement('input.email').value = this.prevFormElement.getElement('input.email').value;
		
		this.enableSubmit();
	},
	
	retreiveCustomer: function(){
		karw.setShowGenericFormError(false);
		this.loader.show();
		var request = new Request.JSON({
			url: karw.context+ '/IGGammaServices/resources/client/customer/'+this.hashCode+'?random='+Math.random(),
			method: 'get',
			onSuccess: this.fillCustomerData.bind(this),
			onFailure: this.failMessage.bind(this)
		}).send();	
	},
	
	fillCustomerData: function(response){
		this.loader.hide();
		
		this.UID = response.id;
		if($type(response.initials) != "object"){
			this.formElement.getElement('input.initials').value = response.initials;
		}
		if($type(response.prefix) != "object"){
			this.formElement.getElement('input.prefix').value = response.prefix;
		}
		if($type(response.surname) != "object"){
			this.formElement.getElement('input.surname').value = response.surname;
		}		
		if($type(response.address.city) != "object"){
			this.formElement.getElement('input.city').value = response.address.city;
		}
		if($type(response.address.street) != "object"){
			this.formElement.getElement('input.street').value = response.address.street;
		}
		if($type(response.phone) != "object"){
			this.formElement.getElement('input.phone').value = response.phone;
		}
		this.formElement.getElements('option[class=country]').each(function(item,index){
			if(item.value == response.address.country){
				item.selected = true;
			}
		}.bind(this));
		
		if($type(response.address.number) != "object"){
			this.formElement.getElement('input.number').value = response.address.number;
		}
		if($type(response.address.zipcode) != "object"){
			this.formElement.getElement('input.zipcode').value = response.address.zipcode;
		}
		if($type(response.address.numberSuffix) != "object"){
			this.formElement.getElement('input.numbersuffix').value = response.address.numberSuffix;
		}
		if($type(response.email) != "object"){
			this.formElement.getElement('input.email').value = response.email;
		}
		
		this.formElement.getElements('input[class=sex]').each(function(item,index){

			if(item.value == response.sex){
				item.checked = true;
			}
		}.bind(this));
		
		this.formElement.setStyle('display','block');
		
		this.enableSubmit();
	},
	
	enableSubmit: function(){
		this.submitButton = this.formElement.getElement('.btn-verzenden');
		this.submitButton.addEvent('click',this.submitAction.bind(this));
	},
	
	changeCaptcha: function(){
		 $('captchaImage2').set('src',karw.context+'/IGGammaServices/resources/client/captcha?'+ Math.random());
	},
	
	submitAction: function(){
		karw.setShowGenericFormError(false);
		this.loader.show();
		
		var promoValue = $('promoform').getElement('input.promo').value;
		if($('promoform').getElement('input.code')){
			var codeValue = $('promoform').getElement('input.code').value;
		}
		else {
			var answerValue = $('promoform').getElement('textarea.answer').value;
		}
		var barcodeValue = $('promoform').getElement('input.barcode').value;
		var captchaValue = this.formElement.getElement('input.captcha').value;
		
		var initial = this.formElement.getElement('input.initials').value;
		var prefix = this.formElement.getElement('input.prefix').value;
		var surname = this.formElement.getElement('input.surname').value;
		var city = this.formElement.getElement('input.city').value;
		var street = this.formElement.getElement('input.street').value;
		var phone = this.formElement.getElement('input.phone').value;
		var country="";
		this.formElement.getElements('option[class=country]').each(function(item,index){
			if(item.selected === true){
				country = item.value;
			}
		}.bind(this));
		var number = this.formElement.getElement('input.number').value;
		var zipcode = this.formElement.getElement('input.zipcode').value;
		var numbers = this.formElement.getElement('input.numbersuffix').value;
		var email = this.formElement.getElement('input.email').value;

		var sex = null;
		this.formElement.getElements('input[class=sex]').each(function(item,index){
			if(item.checked === true){
				sex = item.value;
			}
		}.bind(this));
		
		var checkbox2 = this.formElement.getElement('input[id=agree]');
		
		if(checkbox2.checked === true)
			var agree = true;
		else
			var agree = false;
		
		var checkbox3 = this.formElement.getElement('input[id=partnerOptin]');
		
		if(checkbox3 && checkbox3.checked === true)
			var partneroptin = true;
		else
			var partneroptin = false;
		
		if($chk(codeValue)) {
			var hashObject = {"code": codeValue, "barcode": barcodeValue, "agree": agree, "hash": this.hashCode, "partnerOptIn": partneroptin, "captcha":captchaValue,"promo":promoValue,"city":city,"country":country,"id":this.UID,"number":number,numberSuffix:"","street":street,"zipcode":zipcode,"email":email,"id":this.UID,"initials": initial, "optIn":true,"phone":phone,"prefix":prefix,"sex":sex,"surname":surname}
		}
		else {
			var hashObject = {"answer": answerValue, "barcode": barcodeValue, "agree": agree, "hash": this.hashCode, "partnerOptIn": partneroptin, "captcha":captchaValue,"promo":promoValue,"city":city,"country":country,"id":this.UID,"number":number,numberSuffix:"","street":street,"zipcode":zipcode,"email":email,"id":this.UID,"initials": initial, "optIn":true,"phone":phone,"prefix":prefix,"sex":sex,"surname":surname}
		}
		
//		url:  karw.context+'/IGGammaServices/resources/client/promo?code='+codeValue+'&barcode='+barcodeValue+'&agree='+agree+'&captcha='+captchaValue+'&hash='+this.hashCode+'&partnerOptIn='+partneroptin,
		var request = new Request({
			url:  karw.context+'/IGGammaServices/resources/client/promo',
			emulation:false,
			method: 'post',
			data: hashObject,
			onSuccess: this.doSubmitAction.bind(this),
			onFailure: this.failMessage.bind(this)
		});
		request.send();
		
		//this.doSubmitAction();
	
	},
	
	
	
	doSubmitAction: function(response){
		this.loader.hide();
		this.formElement.setStyle('display','none');
		$('success').setStyle('display','block');
		
	},
	
	failMessage: function(xhr){
		this.loader.hide();
		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 == 'CUSTOMER_UNKNOWN' || xhr.responseText == 'INVALID_CREDENTIALS' ){
				var errorArea2 = this.formElement.getElement('div.error_unknown');
				errorArea2.setStyles({'opacity':'1','border-color':'#ff0000'});
			}
			else if(xhr.responseText == 'ALREADY_PARTICIPATED') {
				var errorArea2 = this.formElement.getElement('div.error_eenkeer');
				errorArea2.setStyles({'opacity':'1','border-color':'#ff0000'});
			}
			else {
				var errorArea3 = this.formElement.getElement('div.error_unknown2');
				errorArea3.setStyles({'opacity':'1','border-color':'#ff0000'});
				errorArea3.getElement('p').set('text', "Er gaat helaas iets mis: " + xhr.responseText);
			}
		} else if(xhr.status == "409"){
			var responseTextArray = xhr.responseText.split(", ");
			
			for(i=0;i<responseTextArray.length;i++){
				var error = responseTextArray[i].split(" ");
				if(error[0] == "INVALID_CAPTCHA"){
					var errorArea = this.formElement.getElement('.error_captchacheck');
					errorArea.setStyles({'opacity':'1','border-color':'#ff0000'});					
				}
				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]);
					}
					if(!$chk(field)){
						break;
					}
					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, '2');
						}
						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'});
				}
				if(error[0] == "EMAIL_EXISTS" ){
					var field = this.formElement.getElement('input.email');
					if(field === null){
						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 = $('error_email_exists');
					if(errorArea){
						errorArea.removeClass('hidden');						
					}
					
				}
				if(error[0] == "NO_PARTNER_OPTIN" ){
					
					var field = this.formElement.getElement('.error_partner');
					
					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_partner');
					
					if(errorArea){
						errorArea.setStyles({'opacity':'1','border-color':'#ff0000'});						
					}
				}
			}
		} else {
			karw.setShowGenericFormError(true);
		};
		this.changeCaptcha();
	}
});