
var mForm = {
	fid : null,
	btn : 'regSubmit',
	init : function(formid) {
		if (!$(formid)) return false;
		mForm.fid = formid;
		Event.observe($(mForm.fid), 'submit', mForm.checkForm);
		//if ($('tipoUtente1').checked) enableThis($('tipoUtente1'), 1);
		//if ($('tipoUtente2').checked) enableThis($('tipoUtente2'), 1);
	},
	
	enableThis : function(obj, isChecked) {
		if (isChecked && obj.name=='tipoUtente') {
			nameDiv = 'dynreg' + obj.value;
			if (!$(nameDiv)) return;
			var hides = [1,2,3].without(obj.value);
			//otherDiv = (obj.value == 1) ? 'dynreg2' : 'dnreg1';
			$(nameDiv).show();
			hides.each(function(i) {
				$('dynreg'+i).descendants().each(function(d){
					if (d.type == 'text') 	d.value = '';
					if (d.type == 'select') d.selectedIndex = 0;
				});
				$('dynreg'+i).hide();
			});
		}
		if (isChecked && obj.name=='w') {
			nameDiv = 'dynreg' + obj.value;
			switch (obj.value) {
				case '1': case '3':
				$('dynreg2').hide();
				$('dynreg2').descendants().each(function(d) {
					if (d.type == 'checkbox') 	d.checked = false;
				});
				break;
				
				case '2':
				$(nameDiv).show();
			}
		}
	},
	
	checkForm : function() {
		if ($('msg')) $('msg').remove();
		var div 	= document.createElement('div');
		div.id 		= 'msg';
		var ul		= document.createElement('ul');
		var msg		= "";
		
		$$('.regErr').each(function(p) { p.removeClassName('regErr')});
		var elems   = $A(Form.getElements($(mForm.fid)));
		
		switch (mForm.fid) {
			
			case 'srcForm' :
				var okRad = false;
				var okText  = true;	
				var okDate  = true;	
				var errText = new Array();
				elems.each(function(f) {
					if (f.up('div').style.display == 'none') return;
					switch (f.type) {
						case 'radio' :
							okRad = okRad ? okRad : (f.checked) ? true : false;
						break;
						
						case 'text' :
							switch (f.name) {
								case 'search' : 
								if (f.value.strip().blank()) {
									errText.push(f.id);
									okText = false;
								}
								break;
								
								case 'dp':
								case 'db':
								if (!f.value.strip().blank() && !f.value.strip().match(/^\d{1,2}\/\d{1,2}\/\d{4}$/)) {
									errText.push(f.id);
									okDate = false;
								}
								break;
							}
						break;
					}
				});
				var ok = okRad && okText && okDate;
				
				if (!ok) {
					if (!okText) {
						msg += "<li>Inserire la chiave di ricerca</li>";
						errText.each(function(t) {
							$(t).up('p').addClassName("regErr");
							$(t).up('p').previous('p').addClassName("regErr");
						});
					}
					if (!okRad) {
						$('w1').up('p').addClassName("regErr");
						$('w2').up('p').addClassName("regErr");
						msg += "<li>Selezionare il tipo di risorsa da cercare</li>";
					}
					if (!okDate) {
						msg += "<li>Verificare il formato della data per l'intervallo temporale</li>";
					}
					ul.innerHTML = msg;
					div.appendChild(ul);
					$('formReg').insertBefore(div, $('formReg').firstDescendant());
					return false;
				}	
			break;	
			
			case 'regForm' :
			
				var okText  = true;	
				var okRadT 	= false;
				var okRadS 	= false;
				var okCbox  = true;
				var errSel  = false;
				var errText = new Array();
				var okMail 	  = mForm.checkMail($('email').value);
				var EqualMail = $('email').value == $('email2').value ? true : false;
				var EqualPass = $('pass').value == $('pass2').value ? true : false;
				
				elems.each(function(f) {
					if (f.up('div').style.display == 'none') return;
					if (f.name=='collaborazioni[]') return;
					switch (f.type) {
						case 'radio' :
							if (f.name=='tipoUtente')
								okRadT = okRadT ? okRadT : (f.checked) ? true : false;
							if (f.name=='sex')
								okRadS = okRadS ? okRadS : (f.checked) ? true : false;
						break;
						case 'text' : case 'password' :
							if (f.value.strip().blank()) errText.push(f.id);
							okText = !okText ? okText : (f.value.strip().blank()) ? false : true;
						break;
						case 'checkbox' :
							okCbox = !okCbox ? okCbox : (f.checked) ? true : false;
					}
					if (f.tagName == 'SELECT') {
						errSel = (f.selectedIndex>0) ? false : true;
					}
				});
				var ok = okRadT && okRadS && okText && okCbox && okMail && EqualMail && EqualPass && !errSel;
				
				if (!ok) {
					if (!okText) {
						msg += "<li>Compilare tutti i campi di testo</li>";
						errText.each(function(t) {
							$(t).up('p').addClassName("regErr");
							$(t).up('p').previous('p').addClassName("regErr");
						});
					}
					if (!okRadS) {
						$('sexm').up('p').addClassName("regErr");
						$('sexf').up('p').addClassName("regErr");
						msg += "<li>Selezionare il sesso</li>";
					}
					if (!okMail && !errText.include('email')) {
						msg += "<li>Verificare l'indirizzo email</li>";
						$('email').up('p').addClassName("regErr");
						$('email').up('p').previous('p').addClassName("regErr");
					}
					if (!EqualMail) {
						msg += "<li>L'indirizzo email di conferma non coincide</li>";
						$('email2').up('p').addClassName("regErr");
						$('email2').up('p').previous('p').addClassName("regErr");
					}
					if (!okRadT) {
						$('tipoUtente1').up('p').addClassName("regErr");
						$('tipoUtente2').up('p').addClassName("regErr");
						$('tipoUtente3').up('p').addClassName("regErr");
						msg += "<li>Selezionare il tipo di persona</li>";
					}
					
					if (errSel) {
						$('loc').up('p').addClassName("regErr");
						$('loc').up('p').previous('p').addClassName("regErr");
						msg += "<li>Selezionare il comune di nascita</li>";
					}
					
					if (!EqualPass) {
						msg += "<li>La password di conferma non coincide</li>";
						$('pass2').up('p').addClassName("regErr");
						$('pass2').up('p').previous('p').addClassName("regErr");
					}
					if (!okCbox) {
						if (!$('tdpersonali').checked) {
							$('tdpersonali').up('p').addClassName("regErr");
							msg += "<li>E' necessario accettare il trattamento dei dati</li>";
						}
						if (!$('regole').checked) {
							$('regole').up('p').addClassName("regErr");
							msg += "<li>E' necessario accettare i termini di utilizzo</li>";
						}				
					}
					
					var h3 = document.createElement('h3');
					h3.innerHTML = 'Si sono verificati i seguenti errori:';
					div.appendChild(h3);
					ul.innerHTML = msg;
					div.appendChild(ul);
					$('formReg').insertBefore(div, $('formReg').firstDescendant());
					return false;
				}
			break;
		}
		
		
		
		
		/*
		var okText  = true;	
		var okRadT 	= false;
		var okRadS 	= false;
		var okCbox  = true;
		var errSel  = false;
		var errText = new Array();
		var okMail 	  = mForm.checkMail($('email').value);
		var EqualMail = $('email').value == $('email2').value ? true : false;
		var EqualPass = $('pass').value == $('pass2').value ? true : false;
		
		//var cf = 
		
		elems.each(function(f) {
			if (f.up('div').style.display == 'none') return;
			//if (f.title) {alert(f.name); return; }
			switch (f.type) {
				case 'radio' :
					if (f.name=='tipoUtente')
						okRadT = okRadT ? okRadT : (f.checked) ? true : false;
					if (f.name=='sex')
						okRadS = okRadS ? okRadS : (f.checked) ? true : false;
				break;
				case 'text' : case 'password' :
					if (f.value.strip().blank()) errText.push(f.id);
					okText = !okText ? okText : (f.value.strip().blank()) ? false : true;
				break;
				case 'checkbox' :
					okCbox = !okCbox ? okCbox : (f.checked) ? true : false;
			}
			if (f.tagName == 'SELECT') {
				errSel = (f.selectedIndex>0) ? false : true;
				
			}
			
		});
		var ok = okRadT && okRadS && okText && okCbox && okMail && EqualMail && EqualPass && !errSel;
		
		
		if (!ok) {
			if (!okText) {
				msg += "<li>Compilare tutti i campi di testo</li>";
				errText.each(function(t) {
					$(t).up('p').addClassName("regErr");
					$(t).up('p').previous('p').addClassName("regErr");
				});
			}
			if (!okRadS) {
				$('sexm').up('p').addClassName("regErr");
				$('sexf').up('p').addClassName("regErr");
				msg += "<li>Selezionare il sesso</li>";
			}
			if (!okMail && !errText.include('email')) {
				msg += "<li>Verificare l'indirizzo email</li>";
				$('email').up('p').addClassName("regErr");
				$('email').up('p').previous('p').addClassName("regErr");
			}
			if (!EqualMail) {
				msg += "<li>L'indirizzo email di conferma non coincide</li>";
				$('email2').up('p').addClassName("regErr");
				$('email2').up('p').previous('p').addClassName("regErr");
			}
			if (!okRadT) {
				$('tipoUtente1').up('p').addClassName("regErr");
				$('tipoUtente2').up('p').addClassName("regErr");
				$('tipoUtente3').up('p').addClassName("regErr");
				msg += "<li>Selezionare il tipo di persona</li>";
			}
			
			if (errSel) {
				$('loc').up('p').addClassName("regErr");
				$('loc').up('p').previous('p').addClassName("regErr");
				msg += "<li>Selezionare il comune di nascita</li>";
			}
			
			
			if (!EqualPass) {
				msg += "<li>La password di conferma non coincide</li>";
				$('pass2').up('p').addClassName("regErr");
				$('pass2').up('p').previous('p').addClassName("regErr");
			}
			if (!okCbox) {
				if (!$('tdpersonali').checked) {
					$('tdpersonali').up('p').addClassName("regErr");
					msg += "<li>E' necessario accettare il trattamento dei dati</li>";
				}
				if (!$('regole').checked) {
					$('regole').up('p').addClassName("regErr");
					msg += "<li>E' necessario accettare i termini di utilizzo</li>";
				}				
			}
			
			var h3 = document.createElement('h3');
			h3.innerHTML = 'Si sono verificati i seguenti errori:';
			div.appendChild(h3);
			ul.innerHTML = msg;
			div.appendChild(ul);
			$('formReg').insertBefore(div, $('formReg').firstDescendant());
			return false;
		}
		*/
		$(mForm.fid).submit();
	},
	
	checkMail : function(emailStr) {
		var checkTLD		=	1;
		var knownDomsPat	=	/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
		var emailPat 		= 	/^(.+)@(.+)$/;
		var specialChars	=	"\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
		var validChars		=	"\[^\\s" + specialChars + "\]";
		var quotedUser		=	"(\"[^\"]*\")";
		var ipDomainPat		=	/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
		var atom			=	validChars + '+';
		var word			=	"(" + atom + "|" + quotedUser + ")";
		var userPat			=	new RegExp("^" + word + "(\\." + word + ")*$");
		var domainPat		=	new RegExp("^" + atom + "(\\." + atom +")*$");
		var matchArray		=	emailStr.match(emailPat);
	
		if (matchArray == null) {
			return false;
		}
	
		var user  	= 	matchArray[1];
		var domain 	=	matchArray[2];
		
		for (i=0; i<user.length; i++) {
			if (user.charCodeAt(i)>127) {
				return false;
		   }
		}
		
		for (i=0; i<domain.length; i++) {
			if (domain.charCodeAt(i)>127) {
			return false;
		   }
		}
		
		if (user.match(userPat) == null) {
			return false;
		}
		
		var IPArray	=	domain.match(ipDomainPat);
		if (IPArray != null) {
			for (var i = 1; i <= 4; i++) {
				if (IPArray[i]>255) {
					return false;
		   		}
			}
			return true;
		}
		
		var atomPat	=	new RegExp("^" + atom + "$");
		var domArr	=	domain.split(".");
		var len		=	domArr.length;
		for (i = 0; i<len; i++) {
		if (domArr[i].search(atomPat) == -1) {
			return false;
		   }
		}
		
		if (checkTLD && domArr[domArr.length-1].length != 2 && 
		domArr[domArr.length-1].search(knownDomsPat) == -1) {
			return false;
		}
		
		if (len<2) {
			return false;
		}
		
		return true;
	}
}


Event.observe(window, 'load', function() {
	mForm.init('regForm');
	mForm.init('srcForm');
});	
