(function($){  
 	
	$.fn.validateform = function(options) {  
      
		///////////////////////////////////////////////////////////////
		/////// SET DEFAULTS  
		  
		  var defaults = { 
			 requiredselector: 'required'
		   
		  };
		  
		///////////////////////////////////////////////////////////////
		/////// SET RADIOBUTTONS  
		
		 var radiobuttons = {
			/* leveringbutton: {
				 radioname:'levering',
				 msg:'Kies uw leveringtype'
			 				}*/
		 }
			 
		
			  
		///////////////////////////////////////////////////////////////
		/////// SET SPECIAL VALIDATIONS  
	
		  var specials = {
				invalidmail: 		{ 	
					msg:'Uw heeft een ongeldig e-mail adres ingevoerd.',
					selector: 'validateemail',
					pattern: new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i)
				
									},
				invalidpostcode: 	{ 	
					msg:'U heeft een ongeldige postcode ingevoerd.',
					selector: 'validatepostcode',
					pattern: new RegExp(/^[1-9][0-9]{3}\s?[a-zA-Z]{2}$/)
					
									},
				invalidnumber: 	{ 	
					msg:'Alleen cijfers a.u.b.',
					selector: 'validatenumber',
					pattern: new RegExp(/[0-9]+/)

				}
								
		  }
  
		
		//// loop trough validationforms
		
		  var options = $.extend(defaults, options);  
			  
		  return this.each(function() {  
		  
		  var obj = $(this);
			
			obj.submit(function () {
				
				return validateform(obj.selector);
			
			});
			
		
			/////////////////////////////////////////////////
			///////     loop trough required fields
			/////////////////////////////////////////////////
			
			function validateform(form)
			{
				var valid = 0;
				var reqinputs =0
				var reqspecials =0
				var submitform = true
				var submitspecial = true
				
				/// Select required text inputs
				var selector = $(form+" input[type='text']");
				var arr = jQuery.makeArray(selector);
				
				/// loop trought text inputs
				jQuery.each(arr, function() 
				{	
					var selector = $(this);
					
					///// validate requiring inputs
					if(selector.hasClass(options.requiredselector))
					{
						reqinputs++
						valid += validateinput(selector)
					}
					if(valid < reqinputs)
					{
						submitform = false;
					} else { submitform = true;}
					
					
					///// validate specials
					
					var specialstate = validatespecials(selector);
					
					reqspecials += !specialstate;
					if(specialstate){ inputmsg(false,selector);}
					
					if(reqspecials > 0)
					{
						submitspecial = false;
					} else { submitspecial = true;}
					
				
					
				});
				
				/// loop trought radio inputs
				if(radiobuttons > 0){
					jQuery.each(radiobuttons, function() 
					{	
						var selectorval = $("input[name='"+this.radioname+"']:checked").val();
						var selector = $("input[name='"+this.radioname+"']");
						if(selector && !validateradio(selectorval,selector,this.msg))
						{
							submitform = false;
						} 
						
					});
				}
				
				if(submitspecial && submitform){ return true; }
				else {return false;}
			}
			
			
			/////////////////////////////////////////////////
			///////     validate input
			/////////////////////////////////////////////////
			
			function validateinput(selector)
			{
				var valid = true;
				if(!selector.val())
				{ 
						handelinginputfaults(selector);
						valid = false;	
					
				}
				return valid;
			}
			
			function validateradio(selectorval,selector,msg)
			{
				var valid = true;
				if(selectorval == undefined)
				{ handelingspecialfaults(selector,msg); valid = false;}
				else {inputmsg(false,selector);}
				return valid;
			}
			
			function validatespecials(selector)
			{
				var returnspecials = true;
				
				jQuery.each(specials, function() 
				{
					// check if there is a value and if the selector is special
					if(selector.val() && selector.hasClass(this.selector))
					{
						
						if(!validatespecial(selector.val(),this.pattern))
						{
							returnspecials = false;
							handelingspecialfaults(selector,this.msg);
						} else {falseinput(true,selector); }
						
					}
					
				});
				
				return returnspecials;
			}
			
			/////////////////////////////////////////////////
			///////     Handeling false inputs
			/////////////////////////////////////////////////
			
			function handelinginputfaults(selector)
			{
				falseinput(false,selector);
				focusfield(selector);
				blurfield(selector);
			}
			
			function handelingspecialfaults(selector,msg)
			{
				handelinginputfaults(selector);
				inputmsg(true,selector,msg);
			}
			
			
			/////////////////////////////////////////////////
			///////     TO DO WHEN INPUT IS FALSE
			/////////////////////////////////////////////////
			
			function falseinput(state,selector)
			{
				if(!state)
				{ selector.css("border" , "1px solid #eb0808");}
				else { selector.css("border" , "1px solid #C0C0C0");}
			}
			
			function inputmsg(state,selector,msg)
			{
				if(state){
					
					if(!selector.siblings('.alertmsg.').length)
					{
						selector.parent().append('<div class="alertmsg" style="display:none;">'+msg+'</div>');
						selector.siblings('.alertmsg').slideDown();
					} else { selector.siblings('.alertmsg.').slideDown();}
					
				} else { selector.siblings('.alertmsg.').slideUp();  }
			}
			
			
			
			/////////////////////////////////////////////////
			///////     ON FOCUS AND ON BLUR HANDELING
			/////////////////////////////////////////////////
			
			
			function focusfield(selector)
			{selector.focus(function(){  falseinput(true,selector); inputmsg(false,selector); });}
			
			function blurfield(selector)
			{
				selector.blur(function(){ 
					if(selector.hasClass(options.requiredselector))
					{ validateinput(selector);} 
					validatespecials(selector);
				});
				
			}
			
			
			/////////////////////////////////////////////////
			///////     SPECIAL VALIDATIONS
			/////////////////////////////////////////////////
			
			function validatespecial(value,pattern)
			{
				
				var valid = pattern.test(value);
				return valid;
			}
			
			function validateorders()
			{
				var order = true;
				if($('.totalprice').val() == 0)
				{
					$('#noorders').html('U heeft nog geen bestelling geplaatst.');
					order = false;
				}
				
				return order;
			}
			
			});  
};  
})(jQuery);  
