(function($) {
	$.fn.stFormValidation = function(options) {

		var opts = $.extend({}, $.fn.stFormValidation.defaults, options);

		return this.each(function() {
			var $self = $(this);
						
			var fieldAry;		// Array of inputs
			var status = true;	// If unsuccesful, set to false
			
			/**
			 * On form submit
			 */
			$self.submit(function() {
				$self.find('.'+opts.errorClass).removeClass(opts.errorClass);
				
				/**
				 * Find 'required' fields and check values
				 */
				fieldAry = $self.find('.'+opts.requiredClass + ', .' + opts.requiredEmailClass);
				
				var i;
				for (i=0;i< fieldAry.length;i++){
					if (!checkField($(fieldAry[i]))) {
						status = false;
					}
				}
				
				/**
				 * Check status and take from action
				 */
				if (!status) {
					return false;
				} else {
					return true;
				}
			});
			
			/**
			 * @function checkField
			 * @param {Object} $obj
			 */
			checkField = function($obj) {
				var $input = $($obj.find(':input')[0]);
				
				switch($input.attr('type')) {
					case 'text':
						if ($obj.hasClass(opts.requiredEmailClass)) {
							if (!checkEmail($input.val())) {
								addError($obj);
								return false;
							}
						} else {
							if ($input.val() === '') {
								addError($obj);
								return false;
							}
						}
						break;
					case 'textarea':
						if ($input.val() === '') {
							addError($obj);
							return false;
						}
						break;
					default:
						return false;
				}
				return true;
			};
			
			/**
			 * @function checkEmail
			 * @param {Object} str
			 */
			checkEmail = function(str) {
				var pattern = /^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\.([a-zA-Z])+([a-zA-Z])+/;
				if (pattern.test(str)) {
					return true;
				} else {
					return false;
				}
			};
			
			/**
			 * @function addError
			 * @param {Object} $obj
			 */
			addError = function($obj) {
				$obj.addClass(opts.errorClass);
			};
		});
	};

	$.fn.stFormValidation.defaults = {
		requiredClass: 'req',
		requiredEmailClass: 'req-email',
		errorClass: 'error'
	};
})(jQuery);

