
/**
 * jQuery formRequired plugin
 * @name jquery.formRequired.js
 * @author Kazimierz Sajkowski (ksajkowski@gmail.com)
 * @version 0.1
 * @date 2010.02.11
 */

jQuery.fn.formRequired = function(options) {
	var settings = jQuery.extend({
		form_alert_class: "alert_bg",
		form_required_class: "required",
		form_required_or_class: "required_or",
		alert_text_container: "div.alert_msg",
		alert_text: "",
		form_not_submitable_class: "incomplete",
		form_submit_class: "#btn_send, .btn_send"
	}, options);

	return this.each(function() {
		
		var inputs = "";
		
		if (settings.form_required_class!="") {
			inputs += "."+settings.form_required_class;
		}
		if (settings.form_required_or_class!="") {
			inputs += " ."+settings.form_required_or_class;
		}
		
		//odznaczanie jesli zostaly wypelnione
		jQuery(this).find(inputs).change(function() {
			if (jQuery(this).val()=="" || jQuery(this).val()==0) {
				jQuery(this).addClass(settings.form_alert_class);
			}
			else {
				jQuery(this).removeClass(settings.form_alert_class);
			}
		});
		
		//mapowanie przycisków wysyłających (zazwyczaj divów je udających)
		if (settings.form_submit_class!="") {
			jQuery(this).find(settings.form_submit_class).click(function() {
				jQuery(this).parent("form").submit();
			});
		}
		
		//warunki, które trzeba spełnić przed wysłaniem
		jQuery(this).submit(function() {
			var submit = true;
			var submit_or = false;
		
			//required
			jQuery(this).find("."+settings.form_required_class).each(function() {
				jQuery(this).removeClass(settings.form_alert_class);
				if (jQuery(this).val()=="" || jQuery(this).val()==0) {
					jQuery(this).addClass(settings.form_alert_class);
					submit = false;
				}
			});
			
			//required_or
			jQuery(this).find("."+settings.form_required_or_class).each(function() {
				if (jQuery(this).val()!="" && jQuery(this).val()!=0) {
					//w pierwszej petli tylko sprawdzamy, czy w ogole gdzies jest wypelnione i czy ma sie wykonac wlasciwe sprawdzenie
					submit_or = true;
				}
			});
			
			if (submit_or) {
				//a jesli faktycznie ktoras jest uzupeniona to reguly sa takie same jak dla zwyklego required
				jQuery(this).find("."+settings.form_required_or_class).each(function() {
					jQuery(this).removeClass(settings.form_alert_class);
					if (jQuery(this).val()=="" || jQuery(this).val()==0) {
						jQuery(this).addClass(settings.form_alert_class);
						submit = false;
					}
				});
			}
			
			if (submit==false) {
				jQuery(this).addClass(settings.form_not_submitable_class);
				if (settings.alert_text!="") {
					alert(settings.alert_text);
				}
				else {
					alert(jQuery(this).find(settings.alert_text_container).html());
				}
			}
			else {
				jQuery(this).removeClass(settings.form_not_submitable_class);
			}
			
			return submit;
		});
	});
};
