/*
########################################
########################################
##									  ##
## F5 - Content Management System 	  ##
##									  ##
## Copyright © 2009					  ##
## 	Reload - Laboratorio Multimediale ##
## 	(http://www.reloadlab.it -		  ##
## 	info@reloadlab.it)				  ##
##									  ## 
## author:							  ##
## 	Domenico Gigante				  ##
## 	(domenico@reloadlab.it)			  ##
## 	Alessio Attanasio				  ##
##  (aatt@reloadlab.it)				  ##
##									  ##
########################################
########################################
*/

(function($){
	
	$.fn.checkForm = function(options){
		var f;
		var msg = [];
		var count = 0;
		var radio = {}
		var box = {};
		
		options = $.extend({}, options);
		
		if(this.length > 0){
			
			f = $(this.get(0));
			
			if(this.get(0).nodeName.toUpperCase() !== 'FORM'.toUpperCase()) return;
			
			// TEXT
			$('input[mandatory=1]:text', f).each(function (i, dom) {
				if ($.trim($(dom).val()) == "") {
					var label;
					if(dom.name) label = $('label[for=' + dom.name + ']').text();
					if(!label) label = dom.id;
					msg[count] = "Il campo '" + label + "' è vuoto.";
					count++;
				}
			});
			
			// PASSWORD
			$('input[mandatory=1]:password', f).each(function (i, dom) {
				if ($.trim($(dom).val()) == "") {
					var label;
					if(dom.name) label = $('label[for=' + dom.name + ']').text();
					if(!label) label = dom.id;
					msg[count] = "Il campo '" + label + "' è vuoto.";
					count++;
				}
			});
			
			// FILE
			$('input[mandatory=1]:file', f).each(function (i, dom) {
				if ($.trim($(dom).val()) == "") {
					var label;
					if(dom.name) label = $('label[for=' + dom.name + ']').text();
					if(!label) label = dom.id;
					msg[count] = "'" + label + "': Nessun file è stato selezionato.";
					count++;
				}
			});
			
			// TEXTAREA
			$('textarea[mandatory=1]', f).each(function (i, dom) {
				if ($.trim($(dom).val()) == "") {
					var label;
					if(dom.name) label = $('label[for=' + dom.name + ']').text();
					if(!label) label = dom.id;
					msg[count] = "'" + label + "': Il campo è vuoto.";
					count++;
				}
			});
			
			// SELECT
			$('select[mandatory=1]', f).each(function (i, dom) {
				if ($.trim($(dom).val()) == "") {
					var label;
					if(dom.name) label = $('label[for=' + dom.name + ']').text();
					if(!label) label = dom.id;
					msg[count] = "'" + label + "': Il menu non è stato selezionato.";
					count++;
				}
			});
			
			
			// RADIO
			$('input[mandatory=1]:radio', f).each(function (i, dom) {
				if(!radio[dom.name]) {
					radio[dom.name] = true;
					if ($('input[name=' + dom.name + ']:radio:checked', f).length == 0) {
						var label;
						if(dom.name) label = $('label[for=' + dom.name + ']').text();
						if(!label) label = dom.id;
						msg[count] = "'" + label + "': Nessun elemento è stato selezionato.";
						count++;
					}
				}
			});

			// CHECKBOX
			$('input[mandatory=1]:checkbox', f).each(function (i, dom) {
				if(!box[dom.name]) {
					box[dom.name] = true;
					if ($('input[name=' + dom.name + ']:checkbox:checked', f).length == 0) {
						var label;
						if(dom.name) label = $('label[for=' + dom.name + ']').text();
						if(!label) label = dom.id;
						msg[count] = "'" + label + "': Nessun elemento è stato selezionato.";
						count++;
					}
				}
			});
			
			// OTHER CHECK
			$('input, textarea, select', f).each(function (i, dom) {
				if ($.isArray(options[dom.id])) {
					if ($.isFunction(options[dom.id][0])) {
						resp = options[dom.id][0] ($(dom).val(), (typeof options[dom.id][1] == 'object') ? options[dom.id][1] : '');
						if (typeof resp == 'string' && resp.length > 0) {
							var label;
							if(dom.name) label = $('label[for=' + dom.name + ']').text();
							if(!label) label = dom.id;
							msg[count] = "'" + label + "': " + resp;
							count++;
						}
					}
				}
			});
			
			if (msg.length > 0) {
				alert("ERROR:\n" + msg.join("\n"));
				return false;
			} else {
				return true;
			}
			return false;
		}
	};
})(jQuery);

function checkEmail(email){
	var val_mail = /^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/i;
	if(email){
		if(val_mail.test(email)){
			return true;
		} else{
			return 'Il valore non è un indirizzo di posta elettronica valido.';
		}
	}
}

function checkChars (str, opt) {
	if (str) {
		if (str.length > opt.max) {
			return 'Il campo contiene più di ' + opt.max + ' caratteri.';	
		} else if (str.length < opt.min) {
			return 'Il campo contiene meno di ' + opt.min + ' caratteri.';	
		}
	}
	return true;
}

function isEqual (str, opt) {
	if (str) {
		if (str !== $j(isHash(opt.other)).val()) {
			var label;
			var dom = $(opt.other);
			if(dom.name) label = $j('label[for=' + dom.name + ']').text();
			if(!label) label = dom.id;
			return 'Il campo non è uguale a \'' + label + '\'';	
		}
	}
	return true;
}

