/* ========= BASE PLUGIN FOR FORM VALIDATION  ========= */

/* plugin for form validation, give id to form and initialize plugin on dom load

*/

/*jQuery(document).ready(function() {
	jQuery('#newsletterSubmit').check_form2();
});*/

jQuery.fn.check_form2 = function(){
	
	var form = this;
	//console.log(jQuery(this).attr('id'));
	var containErrors = [];
	var objectErrors = {
		reqField : "* Please check your details correctly.",
		reqLetters : "No special characters allowed.",
		reqEmail : "* Please enter a valid email.",
		phone : "* Invalid phone number"
	}
	
	/* ========= CHECK THE RETURN VALUE OF FUNCTION VALIDFORM AND THEN SUBMIT OR NOT ========= */
	
	jQuery('#btnSubmit').click(function(){
		//form.preventDefault();
		if(validForm()){
			form.submit();
		}						   
	});
	
 	/*form.submit(function(e){
		e.preventDefault();
		if(validForm()){
			this.submit();
		}
	});*/
					
	var validForm = function(){
		
		containErrors = [];
		
		/* ========= REMOVE ERROR CLASSES ON INIT ========= */
		
		form.find('input:visible, select:visible, label, textarea:visible').each(function(e){
			jQuery(this).removeClass('errorField');	
			jQuery(this).removeClass('errorLabel');
		});
		
		/* ========= STANDARD REQUIRED VALIDATION FOR INPUT TYPE TEXT, SELECTS, INPUT TYPE CHECKBOX, TEXTAREAS ========= */
		
		form.find('input[type=text]:visible, input[type=checkbox]:visible, select:visible, textarea:visible').each(function(e){
			
			/* ========= ALL REQUIRED FIELDS HAVE CLASS reqField ========= */
			
			if((jQuery(this).hasClass('reqField'))){
				
				/* ========= REQUIRED VALIDATION FOR INPUT TYPE TEXT ========= */
				
				if((jQuery(this).attr('type') == 'text') && jQuery(this).val() == ''){
					if (!jQuery(this).hasClass('postcode')){
						containErrors.push(objectErrors.reqField);
						jQuery(this).addClass('errorField').prev('label').addClass('errorLabel');
					}
					
				}else{
					
					/* ========= INPUT TYPE TEXT IS NOT EMPTY, GO FOR SPECIFIC VALIDATIONS ========= */
					
					/* ========= EMAIL VALIDATION AND CONFIRM EMAIL VALIDATION ========= */
			
					if((jQuery(this).hasClass('mail'))){	
						var inputValue = String(jQuery(this).val());
						if(!inputValue.match(/^[a-z0-9._-]+@[a-z0-9.-]{2,}[.][a-z]{2,6}$/i)){
							containErrors.push(objectErrors.reqEmail);
							jQuery(this).addClass('errorField').prev('label').addClass('errorLabel');
						}else{
							
						}
					}
					
					/* ========= ONLY LETTERS VALIDATION, ALLOW SPACES, ESCAPE CHARS IN UNICODE  ========= */
			
					if((jQuery(this).hasClass('letters'))){	
						var inputValue = String(jQuery(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]+jQuery/i)){
							containErrors.push(objectErrors.reqLetters);
							jQuery(this).addClass('errorField').prev('label').addClass('errorLabel');
						}
					}
					
					/* ========= PASSWORD AND CONFIRM PASSWORD VALIDATION ========= */
			
					if((jQuery(this).hasClass('password'))){	
						jQuery(".txtPassword").match({match: '.txtConfPassword', error: 'confPassword'});
					}
					
					/* ========= ONLY NUMBERS VALIDATION ========= */
					
					if((jQuery(this).hasClass('numbers'))){	
						var inputValue = String(jQuery(this).val());
						if(!inputValue.match(/^[0-9]{10,20}jQuery/i)){
						//if(!inputValue.match(/^[0-9]{10}jQuery/i)){
							containErrors.push(objectErrors.reqField);
							jQuery(this).addClass('errorField').prev('label').addClass('errorLabel');
						}
					}
					
					if((jQuery(this).hasClass('phone'))){	
						var inputValue = String(jQuery(this).val());
						if(!inputValue.match(/^[0-9]{11}jQuery/i)){
						//if(!inputValue.match(/^[0-9]{10}jQuery/i)){
							containErrors.push(objectErrors.phone);
							jQuery(this).addClass('errorField').prev('label').addClass('errorLabel');
						}
					}
					
				}
				
				/* ========= END OF REQUIRED VALIDATION FOR INPUT TYPE TEXT ========= */
				
				/* ========= REQUIRED VALIDATION FOR INPUT TYPE CHECKBOX ========= */
				
					if((jQuery(this).attr('type') == 'checkbox') && jQuery(this).attr('checked') != true){
						containErrors.push(objectErrors.reqField);
						jQuery(this).parent().find('label.mainLabel').addClass('errorLabel');
						//console.log('1');
					}
				
				/* ========= REQUIRED VALIDATION FOR SELECT ========= */
				
				if((jQuery(this)[0].tagName.toLowerCase() == 'select') && jQuery(this).val() == 0){
					containErrors.push(objectErrors.reqField);
					jQuery(this).addClass('errorField').prev('label').addClass('errorLabel');
				}
				
				/* ========= REQUIRED VALIDATION FOR TEXTAREA ========= */
				
				if((jQuery(this)[0].tagName.toLowerCase() == 'textarea') && jQuery(this).val() == 0){
					containErrors.push(objectErrors.reqField);
					jQuery(this).addClass('errorField').prev('label').addClass('errorLabel');
				}
				
			}
			
			
			if((jQuery(this).hasClass('phone'))){
				if(jQuery(this).val() != ''){
					var inputValue = String(jQuery(this).val());
					if(!inputValue.match(/^[0-9]{11}jQuery/i)){
					//if(!inputValue.match(/^[0-9]{10}jQuery/i)){
						containErrors.push(objectErrors.phone);
						jQuery(this).addClass('errorField').prev('label').addClass('errorLabel');
					}
				}
			}
			
			if((jQuery(this).hasClass('onlyNumbers') && jQuery(this).val() != 0)){   
				var inputValue = String(jQuery(this).val());
				if(!inputValue.match(/^[0-9]+$/i)){
					containErrors.push(objectErrors.reqField);
					jQuery(this).addClass('errorField').prev('label').addClass('errorLabel');
				}
			}

			
		});
		
		/* ========= REQUIRED VALIDATION FOR INPUT TYPE RADIO  ========= */
		
		/* ========= REQUIRED VALIDATION FOR INPUT TYPE RADIO  ========= */
		
		var radio_groups = {}
		jQuery("input[type=radio]:visible").each(function(){
    		if((jQuery(this).hasClass('reqField'))){
				radio_groups[this.name] = true;
			}
		});
		for(group in radio_groups){
			if_checked = !!jQuery(":radio[name="+group+"]:checked").length;
			if(!if_checked){
				containErrors.push(objectErrors.reqField);
				jQuery('input[name='+ group+']').addClass('errorField').prev('label').addClass('errorLabel');
			}
		}
		
		
		/* ========= CHECK FOR FORM ERRORS ========= */
		
		if(containErrors.length > 0){
			//console.log(containErrors);
			writeErrors();
			return false;
		}else{
			return true;
		}
	};
	
	/* ========= FUNCTION TO MATCH 2 INPUTS VALUE ========= */
	
	jQuery.fn.match = function(m) {
		if(jQuery(this).val() != jQuery(m.match).val()) {
          containErrors.push(objectErrors[m.error]);
		  jQuery(this).addClass('errorField').prev('label').addClass('errorLabel');
		  jQuery(m.match).addClass('errorField').prev('label').addClass('errorLabel');
        };
	};
	

	/* ========= FUNCTION TO WRITE ERRORS  ========= */
	
	var writeErrors = function(){
		containErrors = containErrors.unique();
		containErrors.reverse();
		var errorContainer = jQuery("#displayErrors");
		errorContainer.html('');
		var html = '<ul>';
		for(var i = 0; i < containErrors.length; i++){
			html += '<li>'+ containErrors[i] +'</li>'
		}
		html += '</ul>';
		errorContainer.append(html);
		containErrors = [];
	};
	
}





