
Ext.namespace('validation');
 

validation.app = function() {

	var capchaNum	= 5;
	var submitBtnId = 'button_submit';


	var validated_el 	= {};
	var error_mess		= Array();
	

	/* ----------------------------------------------------- 
	
		Validate blank field
	
	-------------------------------------------------------*/
	
	var valid_blankField = function(e){

		function validate(){
			
			var el;
			
			if(e.isComposite){
				for(var name in e.elements){
					if(!e.elements[name].prototype){
						valid_blankField(e.elements[name]);
					}
				}
				return;
			}
			else if(e.target){
				el = Ext.fly(e.target);
			}
			
			else{
				el = Ext.fly(e);	
			}
			
			if(Ext.isEmpty(el.getValue())){
				validation_manager(el, false);
				if(lang == 'fr'){
					error_mess.push('Vous devez remplir tous les champs obligatoires');
				}
				else{
					error_mess.push('You must field fill all fields with a star');
				}
				
				return false;
			}
			
			else{
				validation_manager(el, true);	
			}
		}
		
		if(e.type == 'keypress'){
			setTimeout(validate,1000);	
		}
		else{
			validate();
		}
	};

	
	/* ----------------------------------------------------- 
	
		Validate email
	
	-------------------------------------------------------*/
	
	var valid_email = function(e){
		
		function validate(){
			
			var el;
			
			if(e.isComposite){
				for(var name in e.elements){
					if(!e.elements[name].prototype){
						valid_email(e.elements[name]);
					}
				}
				return;
			}
			else if(e.target){
				el = Ext.fly(e.target);
			}
			
			else{
				el = Ext.fly(e);	
			}
		
			var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
			
			if (!filter.test(el.getValue())){
				validation_manager(el, false);
				if(lang == 'fr'){
					error_mess.push('L\'adresse courriel est invalide');
				}
				else{
					error_mess.push('Your e-mail address is invalid');
				}
				
				return false;
			}	
			else{
				validation_manager(el, true);
			}
		}
		
		if(e.type == 'keypress'){
			setTimeout(validate,1000);	
		}
		else{
			validate();
		}
	};
	
	/* ----------------------------------------------------- 
	
		Validate email
	
	-------------------------------------------------------*/
	
	var valid_capcha = function(e, element){
		
		function validate(){
			
			var el;
			
			if(e.isComposite){
				for(var name in e.elements){
					if(!e.elements[name].prototype){
						valid_capcha(e.elements[name]);
					}
				}
				return;
			}
			else if(e.target){
				el = Ext.fly(e.target);
			}
			
			else{
				el = Ext.fly(e);	
			}
			
			if(el.getValue().length != capchaNum){
				validation_manager(el, false);
				if(lang == 'fr'){
					error_mess.push('Le code de sécurité doit comporter '+capchaNum+' caractères');
				}
				else{
					error_mess.push('Your security code must have '+capchaNum+' characters');
				}
				
				return false;
			}	
			else{
				validation_manager(el, true);
			}
		}
		
		if(e.type == 'keypress'){
			setTimeout(validate,1000);	
		}
		else{
			validate();
		}
	};
	
	/* ----------------------------------------------------- 
	
		validation_manager
	
	-------------------------------------------------------*/

	var validation_manager = function(el, valid){

		
		if(!valid){
			
			if(el.hasClass('form_accepted_field')){
				el.replaceClass('form_accepted_field','form_error_field');
			}
			else{
				el.addClass('form_error_field');
			}
			
			return false;
		}
		else{
			
			if(el.hasClass('form_error_field')){
				el.replaceClass('form_error_field','form_accepted_field');
			}
			else{
				el.addClass('form_accepted_field');
			}
			
		}
		
	};
	
	/* ----------------------------------------------------- 
	
		Submit_form
	
	-------------------------------------------------------*/

	var submit_form = function(e, evt, ob){
		
		error_mess = [];
		
		Ext.DomHelper.overwrite(
				Ext.fly('form_error_panel'),
				''
		);
		
		for(var name in validated_el)
		{
			if(validated_el[name].getCount() > 0){
				
				
				if(name == 'nonBlankEl'){
					valid_blankField(validated_el[name]);
				}
				if(name == 'emailEl'){
					valid_email(validated_el[name]);
				}
				if(name == 'captchaEl'){
					valid_capcha(validated_el[name]);
				}
			}	
		}
		
		if(!Ext.isEmpty(error_mess)){
					
			Ext.DomHelper.overwrite(
				Ext.fly('form_error_panel'),
				error_mess[0]
			);

			return false;
		}
		
		else{
			
			Ext.Ajax.request({
				url		: 'php_ajax/contact_send.php',
				method	: 'POST',
				form	: 'my_form',
			   	scoop	: this,
				success	: function(response){
					
					var responses 	= Ext.decode(response.responseText);
					var message		= responses.message;
					
					if(responses.success === false){	
						Ext.DomHelper.overwrite(Ext.fly('form_error_panel'),message);
					}
					
					else{
						
						var input_els 	= Ext.select('.dynamic_form');
						var el			= input_els.elements;
						
						for(var name in el)
						{
							var ext_el = Ext.fly(el[name]);
							
							ext_el.removeClass('form_accepted_field');
							
							if(el[name].value){	
								el[name].value = "";
							}
						}
						
						var returnMsg = "";
						
						if(lang == 'fr'){
							returnMsg = "Merci!";						}
						else{
							returnMsg = "Thank you!";
						}
						
						Ext.DomHelper.overwrite(Ext.fly('form_error_panel'),returnMsg);
					}  
				}
			});
		}
		
	};
	

    return {
		
        init: function(){
			
			validated_el.nonBlankEl = Ext.select('*[non_blank=true]');
            this.setNoBlankEvt(validated_el.nonBlankEl);
			
			validated_el.emailEl = Ext.select('*[valid_email=true]');
            this.setValidEmailEvt(validated_el.emailEl);
        
			validated_el.captchaEl = Ext.select('*[captcha=true]');
            this.setValidCapchaEvt(validated_el.captchaEl);
			
			Ext.get(submitBtnId).on('click', submit_form);
			
		},
		
		/* Set no blank field event */
		setNoBlankEvt : function(els){
			els.addListener('blur',  valid_blankField);
			els.addListener('keypress', valid_blankField);
		},
		
		/* Set cvalid email field event */
		setValidEmailEvt : function(els){
			els.addListener('blur', valid_email);
			els.addListener('keypress',valid_email);
		},
		
		/* Set captcha for 5 characters field event */
		setValidCapchaEvt : function(els){
			els.addListener('blur', valid_capcha);
			els.addListener('keypress',valid_capcha);
		}
    };
}();

Ext.onReady(validation.app.init, validation.app);
