/****************
################# TEMPLATE PLUGIN FOR JQUERY FORM VALIDATION ################# 
****************/

$(document).ready(function() {
	$('#form_boite_idees').check_form();
	
	
});

/****************
################# INITS PLUGIN ################# 
****************/

jQuery.fn.check_form = function(){
	
	/****************
	################# DECLARE GLOBAL VARS, ARRAYS, OBJECTS ################# 
	****************/
	
	var form = this;
	var containErrors = [];
	var objectErrors = {
		reqField : "",
		mail : "Attention ! L'adresse email saisie n'est pas valide."
	}
	
	/****************
	################# FORM ON SUBMIT CHECKS RETURN VALUE OF validForm ################# 
	****************/
	
 	form.submit(function(e){
		e.preventDefault();
		if(validForm()){
			this.submit();	
			}
	});
	
	/****************
	################# CHECKS FOR ERRORS ON FORM ################# 
	****************/
	
	var validForm = function(){
		
		containErrors = [];
		
		form.find('span.errorSpan').each(function(e){
			$(this).removeClass('errorSpan');
		});
		
		
		/* ========= REMOVE ERROR CLASSES ON SUBMIT ========= */
		
		/*form.find('input:visible, select:visible, label, textarea:visible').each(function(e){
			$(this).removeClass('errorField');	
			$(this).removeClass('errorLabel');
		});*/
		
		/* ========= STANDARD REQUIRED VALIDATION FOR INPUT TYPE TEXT, SELECTS, INPUT TYPE CHECKBOX, TEXTAREAS ========= */
		
		form.find('input[type=text]:visible, select:visible, input[type=checkbox]:visible, textarea:visible').each(function(e){
			
			/* ========= ALL REQUIRED FIELDS HAVE CLASS reqField ========= */
			
			if(($(this).hasClass('reqField'))){
				
				/* ========= REQUIRED VALIDATION FOR INPUT TYPE TEXT ========= */
				
				if(($(this).attr('type') == 'text') && $(this).val() == ''){
					containErrors.push(objectErrors.reqField);
					$(this).parent().prev().find('span').addClass('errorSpan');
				}else{
					
					/* ========= INPUT TYPE TEXT IS NOT EMPTY, GO FOR SPECIFIC VALIDATIONS ========= */
					
					/* ========= EMAIL VALIDATION AND CONFIRM EMAIL VALIDATION ========= */
			
					if(($(this).hasClass('mail'))){	
						var inputValue = String($(this).val());
						if(!inputValue.match(/^[a-z0-9._-]+@[a-z0-9.-]{2,}[.][a-z]{2,6}$/i)){
							containErrors.push(objectErrors.mail);
							$(this).parent().prev().find('span').addClass('errorSpan');
						}
					}
					
					/* ========= ONLY NUMBERS VALIDATION, ALLOW SPACES, ESCAPE CHARS IN UNICODE  ========= */
					
					if(($(this).hasClass('numbers'))){	
						var inputValue = String($(this).val());
						if(!inputValue.match(/^\d{2}$/i)){
							containErrors.push(objectErrors.reqField);
							$(this).parent().prev().find('span').addClass('errorSpan');
						}
					}
					
					
					/* ========= ONLY LETTERS VALIDATION, ALLOW SPACES, ESCAPE CHARS IN UNICODE  ========= */
			
					if(($(this).hasClass('letters'))){	
						var inputValue = String($(this).val());
						/*
						u00E9 - �, u00e8 - �, u00e0 - �, u00e1 - �, u00e7 - �, u00f4 - �, u00f5 - �, u00ee - �, u00e3 - �, u00e2 - � 
						u00C9 - �, u00c8 - �, u00c0 - �, u00c1 - �, u00c7 - �, u00d4 - �, u00d5 - �, u00ce - �, u00c3 - �, u00c2 - �
						*/
						if(!inputValue.match(/^[-\u00E9\u00e8\u00e0\u00e1\u00e7\u00f4\u00f5\u00ee\u00e3\u00e2A-Za-z\s]+$/i)){
							containErrors.push(objectErrors.reqField);
							$(this).parent().prev().find('span').addClass('errorSpan');
						}
					}
					
					/* ========= PASSWORD AND CONFIRM PASSWORD VALIDATION ========= */
			
					if(($(this).hasClass('password'))){	
						$("#txtPassword").match({match: '#txtConfPassword', error: 'confPassword'});
					}
					
					/* ========= TELEPHONE VALIDATION ========= */
			
					if(($(this).hasClass('phone'))){	
						var inputValue = String($(this).val());
						if(!inputValue.match(/^[0]\d{9}$/i)){ 
							containErrors.push(objectErrors.reqField);
							//$(this).parent().prev().find('span').css('visibility','visible');
						}
					}
					
				}
				
				/* ========= END OF REQUIRED VALIDATION FOR INPUT TYPE TEXT ========= */
				
				/* ========= REQUIRED VALIDATION FOR SELECT ========= */
				
				if(($(this)[0].tagName.toLowerCase() == 'select') && $(this).val() == 0){
					containErrors.push(objectErrors.reqField);
					$(this).parent().prev().find('span').addClass('errorSpan');
				}
				
				/* ========= REQUIRED VALIDATION FOR INPUT TYPE CHECKBOX ========= */
				
				if(($(this).attr('type') == 'checkbox') && $(this).attr('checked') != true){
					containErrors.push(objectErrors.reqField);
					//$(this).parent().prev().find('span').css('visibility','visible');
				}
				
				/* ========= REQUIRED VALIDATION FOR TEXTAREA ========= */
				
				if(($(this)[0].tagName.toLowerCase() == 'textarea') && $(this).val() == ''){
					containErrors.push(objectErrors.reqField);
					$(this).parent().prev().find('span').addClass('errorSpan');
				}
			}
			
		});
		
		/* ========= REQUIRED VALIDATION FOR INPUT TYPE RADIO  ========= */
		
		var radio_groups = {}
		$("input[type=radio]:visible").each(function(){
    		if(($(this).hasClass('reqField'))){
				radio_groups[this.name] = true;
			}
		});
		for(group in radio_groups){
			if_checked = !!$(":radio[name="+group+"]:checked").length;
			if(!if_checked){
				containErrors.push(objectErrors.reqField);
				//$('input[name='+ group+']').parent().find('span').addClass('errorSpan');
				
				$('input[name='+ group+']').parents('.blockRowForm').find('.blockColMainLabel span').addClass('errorSpan');
				
			}
		}
		
		/* ========= REQUIRED VALIDATION FOR INPUT TYPE CHECKBOX SELECT AT LEAST 1 ========= */
		
		/*if($('.chkAccept:visible').length){
			if($('.chkAccept:checked').length == 0){
				containErrors.push(objectErrors.reqField);
				$('.chkAccept').parent().find('span').css('visibility','visible');
			}
		}*/
		
		/* ========= CHECK FOR FORM ERRORS ========= */
		
		if(containErrors.length > 0){
			writeErrors();
			return false;
		}else{
			return true;
		}
	};
	
	/* ========= FUNCTION TO WRITE ERRORS  ========= */
	
	var writeErrors = function(){
		containErrors = containErrors.unique();
		var errorContainer = $('#errorMsgBoitesIdees');
		errorContainer.html('');
		var html = '<ul>';
		for(var i = 0; i < containErrors.length; i++){
			html += '<li>'+ containErrors[i] +'</li>'
		}
		html += '</ul>';
		errorContainer.append(html);
		containErrors = [];
	};
	
	/* ========= FUNCTION TO MATCH 2 INPUTS VALUE ========= */
	
	$.fn.match = function(m) {
		if($(this).val() != $(m.match).val()) {
          containErrors.push(objectErrors[m.error]);
		  $(this).addClass('errorField').parent().prev().find('label').addClass('errorLabel');
		  $(m.match).addClass('errorField').parent().prev().find('label').addClass('errorLabel');
        };
	};
	
}





