/*
Copyright (C) 2011 by BK I.T. Services (www.bkit.ca)
*/
(function($) {
	
	$.fn.bbvalidate = function(options) {
		
		var opts = $.extend({}, $.fn.bbvalidate.defaults, options);

		$(this).bind('submit', function(e){

			if(opts.debug) console.log('Form submitted');

			var $form = $(this);
			var errors = [];

			$form.find('.field-full-width-error').removeClass('field-full-width-error');
			
			$form.find('input,textarea,select').each(function(i,el){
				var error = false;
				var $el = $(el);
				
				if($el.hasClass('required') && $el.val() == '')
					error = true;
			
				if($el.hasClass('default') || $el.hasClass('indef')) {
					if($el.val() == $el.data('default'))
						error = true;
				}
				
				if($el.hasClass('phone')) {
					var stripped = $el.val().replace(/[\(\)\.\-\ ]/g, '');
					
					if(isNaN(parseInt(stripped)) || (stripped.length != 10 && stripped.length != 7 && stripped.length != 11))
					   error = true;
				}
				
				if(error == true)
					errors.push($el.attr('name'));
			});

			$form.find('.field-radio-required').each(function(){
				var error = true;
				
				$(this).find('input').each(function(){
					if($(this).is(':checked'))
						error = false;
				});
				
				if(error == true)
					errors.push($(this).find('input:first').attr('name'));

			})
			
			if(opts.debug) console.log('Form validation completed:', errors);

			if(errors.length > 0) {
				
				if(opts.showErrors == true) {
					var isQuoteForm = $form.hasClass('quote-form');
					var errorMsg = [];
					
					$.each(errors, function(i,error){
						var $field = $('input[name='+error+']:first');
						var label = $field.data('label');

						if(label == undefined) {
							label = error.replace('_',' ');
						}
						
						if(isQuoteForm == true)
							$field.closest('.field').addClass('field-full-width-error');
						
						errorMsg.push(label);
					});
					
					if(errorMsg.length > 0) {
						var msg = 'Whoops! Please complete your ';
						
						if(errorMsg.length > 1) {
							for (var i=0; i < errorMsg.length; i++) {
								msg += errorMsg[i];
								
								if(i == errorMsg.length - 2)
									msg += ' and ';
								else if(i != errorMsg.length - 1)
									msg += ', ';
									
							};
						} else {
							msg += errorMsg[0];
						}
						
						msg += '.';
						
						if(opts.debug)	console.log(msg, errorMsg);
						
						$('.error p').text(msg);
					}
				
					$('.error').show();
				}
				
			}
			if(opts.debug || errors.length > 0)
				e.preventDefault();
		});
	};

	$.fn.bbvalidate.defaults = {
		showErrors: true,
		debug: false
	};
	
})(jQuery);
