karw.formPromo = new Class({
	
	Implements: [Events,Options],
	
	hashCode: null,

	formId: 'promoform',
	formElement: null,
	//couponValue: null,
	answerValue: null,
	promoValue: null,
	barcodeValue: null,
	zipValue: null,
	surnameValue: null,
	countryValue: null,
	emailValue: null,	
	
	loader: null,
	
	initialize: function(){
		this.formElement = $(this.formId);
		this.loader = new karw.Loader();
		$('new_captcha').addEvent('click',this.changeCaptcha.bind(this));
		this.enableSubmit();
		
	},
	changeCaptcha: function(){
		 $('captchaImage2').set('src',karw.context+'/IGGammaServices/resources/client/captcha?'+ Math.random());
	},
	
	retreiveFields: function(){
//		if(this.formElement.getElement('input.code') != null){
//			this.couponValue = this.formElement.getElement('input.code').value;
//		}
		if(this.formElement.getElement('textarea.answer') != null){
			this.answerValue = this.formElement.getElement('textarea.answer').value;
		}
		this.promoValue = this.formElement.getElement('input.promo').value;
		this.barcodeValue = this.formElement.getElement('input.barcode').value;
		this.zipValue = this.formElement.getElement('input.zipcode').value;
		this.surnameValue = this.formElement.getElement('input.surname').value;
		this.emailValue = this.formElement.getElement('input.email').value;
		this.formElement.getElements('option[class=country]').each(function(item,index){
			if(item.selected === true){
				this.countryValue = item.value;
			}
		}.bind(this));
		
	},
	
	enableSubmit: function(){
		this.submitButton = this.formElement.getElement('.btn-verzenden');
		this.submitButton.addEvent('click',this.submitAction.bind(this));
	},
	submitAction: function(){
		karw.setShowGenericFormError(false);
		this.loader.setMessage("Uw gegevens worden opgehaald");
		this.loader.show();
		this.retreiveFields();
		
		var request = new Request({
			url: karw.context+ '/IGGammaServices/resources/client/hashforpromo',
			method:'get',
			onSuccess: this.doSubmitAction.bind(this),
			onFailure: this.failMessage.bind(this)
		}).send('promo='+this.promoValue+'&barcode='+this.barcodeValue+'&zipcode='+this.zipValue+'&country='+this.countryValue+'&surname='+this.surnameValue+'&email='+this.emailValue+'&answer='+this.answerValue+'&random='+Math.random());	
//	}).send('promo='+this.promoValue+'&barcode='+this.barcodeValue+'&code='+this.couponValue+'&zipcode='+this.zipValue+'&country='+this.countryValue+'&surname='+this.surnameValue+'&email='+this.emailValue+'&answer='+this.answerValue+'&random='+Math.random());	
		
	},
	doSubmitAction: function(response){
		this.loader.hide();
		this.formElement.setStyle('display','none');
		var captcha = new karw.formCaptcha(response);
		
	},
	
	failMessage: function(xhr){
		this.loader.hide();
		var errorArea = $('error_email_exists');
		if(errorArea){
			errorArea.addClass('hidden');						
		}
		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") || (xhr.status == "409")){
			
			if(xhr.responseText == 'CUSTOMER_UNKNOWN'){
				this.formElement.setStyle('display','none');
				var captcha = new karw.formCaptcha();
			}
			
			if (xhr.responseText == 'INVALID_CREDENTIALS' ){
				var errorArea2 = this.formElement.getElement('div.error_unknown');
				errorArea2.setStyles({'opacity':'1','border-color':'#ff0000'});
			}
		
			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] == "INVALID_CODE" ){
					var field = this.formElement.getElement('.error_code');
					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_code');
					if(errorArea){
						errorArea.setStyles({'opacity':'1','border-color':'#ff0000'});						
					}
				}
				if(error[0] == "ALREADY_EXISTS" ){
					var field = this.formElement.getElement('.error_exists');
					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_exists');
					if(errorArea){
						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');						
					}
					
				}
				
			}
		} else {
			karw.setShowGenericFormError(true);
		}
		this.changeCaptcha();
	}
});