﻿var erroriF=new Array();
erroriF["empty"]		= "non pu&ograve; essere vuoto";
erroriF["minChar"]		= "deve essere lungo almeno ";
erroriF["maxChar"]		= "deve essere lungo al massimo ";
erroriF["contains"]		= "deve contenere il carattere ";
erroriF["equalTo"]		= "deve essere uguale al campo ";
erroriF["gruppoChecked"]= "deve essere selezionato";
erroriF["mail"]			= "deve essere una mail valida";
erroriF["numerico"]		= "deve essere numerico";
erroriF["valueZero"]	= "deve essere selezionato";
erroriF["altroEqualTo"]	= "deve essere compilato";
erroriF["data"]			= "deve essere una data valida";
erroriF["min"]			= "deve essere maggiore di ";
erroriF["max"]			= "deve essere al massimo ";
erroriF["maxChecked"]	= "non pu&ograve; avere pi&ugrave; di "
erroriF["minChecked"]	= "non pu&ograve; avere meno di "

str_il_campo			= "Il campo";
str_la_domanda			= "Il campo domanda";
str_e					= "e";
str_errori_modulo		= "Errori nella compilazione del modulo";
str_chiudi				= "Chiudi";
str_risposte			= "risposte";

(function($){
	$.fn.extend( {
		verificaForm: function(options){
		var defaults = {
			cambiaClass: "campoSbagliato",
			tipoVisualizzazione: 1
		};
		var options = $.extend(defaults, options);
		
		$(this).bind("submit",function(){
			idForm=$(this).attr("id");
			strErr="";
			primoCampo=""
			$("#"+ idForm +" :input").filter("[type!='submit']").filter("[type!='reset']").each(function(){
				$(this).removeClass(options.cambiaClass);
				if($(this).hasClass("campoDomanda"))
					_str_il_campo=str_la_domanda;
				else
					_str_il_campo=str_il_campo;
				
				strErrInput="";
				inId=$(this).attr("id");		inClass=$(this).attr("class");
				inLabel=$(this).parents("label").html();
				inTitle=$(this).attr("title");	inName=$(this).attr("name");
				inLabelFor=$("label[for='"+ inId +"']").html();
				
				if(inTitle!=null)	inLabel=inTitle;
				if(inLabel==null||inLabel=='')	inLabel=inLabelFor;
				if(inLabel==null)	inLabel=inName;
				if(inLabel==null)	inLabel='';
				inLabel=inLabel.replace(/<[^>]*>.?(<[^>]*>)?/g, "").replace("*","").replace(/(\n)*(\t)*/g, "").replace(" {2,*}"," ");
				
				if(inClass!=null){
					var expre = new RegExp("(:[^}]*[}])","g");
					var trovato = inClass.match(expre);
					if (trovato != null) {
						for (var i = 0; i < trovato.length; i++) {
							strErrInput+=verificaCampo(inId,trovato[i]);
						}
					}
				}
				if(strErrInput.length>0){
					if(options.cambiaClass!="")
						$(this).filter("[type!='checkbox']").filter("[type!='radio']").filter("[type!='select']").addClass(options.cambiaClass);
					strErr+=_str_il_campo +" '"+ inLabel +"' "+ strErrInput +"<br />";
					
					if(primoCampo=="")		primoCampo=inId;
				}
			});	
			
			if(strErr.length){
				mostraMessaggio(options.tipoVisualizzazione,str_errori_modulo,strErr,"negativo","mostraErrori");
				$("#"+ primoCampo).focus();
				return false;
			}//$("form.verificaForm").verificaForm();
		});
			
		function ___getPageSize() {var xScroll, yScroll;if (window.innerHeight && window.scrollMaxY) {xScroll = window.innerWidth + window.scrollMaxX;yScroll = window.innerHeight + window.scrollMaxY;} else if (document.body.scrollHeight > document.body.offsetHeight){ xScroll = document.body.scrollWidth;yScroll = document.body.scrollHeight;} else { xScroll = document.body.offsetWidth;yScroll = document.body.offsetHeight;}var windowWidth, windowHeight;if (self.innerHeight) {if(document.documentElement.clientWidth){windowWidth = document.documentElement.clientWidth; } else {windowWidth = self.innerWidth;}windowHeight = self.innerHeight;} else if (document.documentElement && document.documentElement.clientHeight) {windowWidth = document.documentElement.clientWidth;windowHeight = document.documentElement.clientHeight;} else if (document.body) {windowWidth = document.body.clientWidth;windowHeight = document.body.clientHeight;}if(yScroll < windowHeight){pageHeight = windowHeight;} else { pageHeight = yScroll;}if(xScroll < windowWidth){pageWidth = xScroll;} else {pageWidth = windowWidth;}arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight);return arrayPageSize;};
			
		function ___getPageScroll() {var xScroll, yScroll;if (self.pageYOffset) {yScroll = self.pageYOffset;xScroll = self.pageXOffset;} else if (document.documentElement && document.documentElement.scrollTop) {	 yScroll = document.documentElement.scrollTop;xScroll = document.documentElement.scrollLeft;} else if (document.body) {yScroll = document.body.scrollTop;xScroll = document.body.scrollLeft;	}arrayPageScroll = new Array(xScroll,yScroll);return arrayPageScroll;};
			
		function mostraMessaggio(tipologia,titoloMsg,msg,classe,idDiv){
			/*	TIPOLOGIA:	1= Creo div centrato
							2= Mostro alert classico
							3= Mostro in un div esistente {serve anche l'idDiv}
				CLASSE:		Parametro per la classe del div in cui mostro il messaggio*/
			if(tipologia==1){
				$('embed, object, select').css({ 'visibility' : 'hidden' });
				$("body").append("<div id=\"velinaMessaggio\">&nbsp;</div><div id=\"mostraMessaggio\"><div class=\"dim2 "+ classe +"\">"+ titoloMsg +"</div><span class=\"dim3\">"+ msg +"<br /><br /><a href=\"javascript:void(0)\" class=\"chiudiDivMessaggio\">"+ str_chiudi +"</a></span></div>");
				cssMessaggio("mostraMessaggio");
			}
			else if(tipologia==2)
				alert(titoloMsg.replace("<br />","\n") +"\n"+ msg.replace(/<br \/>/g,"\n"));
			else if(tipologia==3){
				$("#"+ idDiv).html("<span class=\"titolo\">"+ titoloMsg +"</span><span class=\"descrizione\">"+ msg +"</span>");
				$("#"+ idDiv).show();
				$().scrollTo($("#"+ idDiv),800);
			}
		}
		function cssMessaggio(id){
			var arrPageSizes = ___getPageSize();		var arrPageScroll= ___getPageScroll();
			$("#"+id).hide();
			altoPage=arrPageSizes[3];					largoPage=arrPageSizes[2];
			alto=$("#"+id).height();					largo=$("#"+id).width();
			topo=((altoPage-alto)/2)+arrPageScroll[1];	
			lefto=((largoPage-largo)/2)+arrPageScroll[0];
			$("#velinaMessaggio").hide().css({ 
					backgroundColor: '#000', opacity:'0.8', width: arrPageSizes[0], height: arrPageSizes[1]
				}).fadeIn(
				function(){$("#"+id).hide().css({top:topo,left:lefto}).show();}
			);
			$(".chiudiDivMessaggio,#velinaMessaggio").click(function(){ killMessaggio();});
		
			$(window).resize(function() {
				// Get page sizes
				var arrPageSizes = ___getPageSize();		var arrPageScroll= ___getPageScroll();
				altoPage=arrPageSizes[3];					largoPage=arrPageSizes[2];
				alto=$("#"+id).height();					largo=$("#"+id).width();
				topo=((altoPage-alto)/2)+arrPageScroll[1];	
				lefto=((largoPage-largo)/2)+arrPageScroll[0];
				// Style overlay and show it
				$('#velinaMessaggio').css({	width: arrPageSizes[0], height: arrPageSizes[1]});
				// Get page scroll
				var arrPageScroll = ___getPageScroll();
				// Calculate top and left offset for the jquery-lightbox div object and show it
				$("#"+id).css({top: topo, left: lefto });
			});
		}
		function killMessaggio(){
			$(".campoErrore:first").focus();
			$('embed, object, select').css({ 'visibility' : 'visible' });
			$("#mostraMessaggio").remove();
			$("#mostraMessaggioPage").remove();
			$("#velinaMessaggio").fadeOut(function() { $("#velinaMessaggio").remove(); });
		}
	
		function verificaCampo(inId,classe){
			inpValue	=	$("#"+ inId).val();
			inpName		=	$("#"+ inId).attr("name");
			errInput	=	"";
			
			opzioni= new Array;
			opzioni['verificaCheck']='';//Se non vuoto verifico le altre opzioni solo nel caso in cui il campo sia checked
			opzioni['altroEqualTo']='';	//Se il campo passato è uguale al valore allora verifico il campo. idcampo$valore
			opzioni['altroGreaterThen']='';	//Se il campo passato è maggiore al valore allora verifico il campo. idcampo$valore
			opzioni['altroNotChecked']='';	//Se il campo passato risulta checked allora verifico il campo
			opzioni['alwaysCheck']=1;	//Se zero verifica le altre opzioni solo nel caso il campo sia compilato
			opzioni['minChar']=0;		//Numero minimo di caratteri
			opzioni['maxChar']=0;		//Numero massimo di caratteri
			opzioni['contains']='';		//Il campo deve contenere la stringa passata
			opzioni['empty']=0;			//Il campo non può essere vuoto
			opzioni['equalTo']='';		//Il campo deve essere uguale a quello passato
			opzioni['gruppoChecked']=0;	//Verifico che almeno un elemento con quel nome sia checked
			opzioni['mail']=0;			//Il campo deve contenere una mail corretta
			opzioni['numerico']=0;		//Il campo deve contenere un valore numerico
			opzioni['valueZero']=0;		//Il campo non può essere 0
			opzioni['data']=0;			//Il campo deve contenere una data valida
			opzioni['min']='';			//Valore minimo del campo
			opzioni['max']='';			//Valore massimo del campo
			opzioni['maxChecked']='';	//Numero massimo di checkbox selezionati
			opzioni['minChecked']='';	//Numero minimo di checkbox selezionati
			
			var expre = new RegExp("{([^}]*)}","g");
			var opts = classe.match(expre);
			cosaVerifico=classe.replace(opts,"").replace(":","");
			if (opts != "{}") {
				opts=opts[0].replace("{","").replace("}","");
				opts=opts.split(";");
				for (var i = 0; i < opts.length; i++) {
					if(opts[i].length){
						opzione=opts[i].split("|");
						opzioni[opzione[0]]=opzione[1];
					}
				}
			}
			verificoCampo=0;
			if(opzioni['verificaCheck']!=''){
				if($("#"+ opzioni['verificaCheck']).is(":checked"))	verificoCampo=1;
			}
			else if(opzioni['altroEqualTo']!=''){
				idAltro=opzioni['altroEqualTo'].split("$")[0];
				valueAltro=opzioni['altroEqualTo'].split("$")[1];
				if($("#"+ idAltro).is(":radio")){
					idAltro=$("#"+ idAltro).parents("div").attr("id");
					tipology=" input:checked";
				}else
					tipology="";
				if(valueAltro==$("#"+ idAltro + tipology).val())
																	verificoCampo=1;
			}
			else if(opzioni['altroNotChecked']!=''){
				idAltro=opzioni['altroNotChecked'];
				idAltro=$("#"+ idAltro).parents("div").attr("id");
				tipology=" input:checked";
				if($("#"+ idAltro + tipology).length==0)
																	verificoCampo=1;
			}
			else if(opzioni['altroGreaterThen']!=''){
				idAltro=opzioni['altroGreaterThen'].split("$")[0];
				valueAltro=opzioni['altroGreaterThen'].split("$")[1];
				if($("#"+ idAltro).is(":radio")){
					idAltro=$("#"+ idAltro).parents("div").attr("id");
					tipology=" input:checked";
				}else
					tipology="";
				if(Number($("#"+ idAltro + tipology).val())>=Number(valueAltro))
																	verificoCampo=1;
			}
			else if(opzioni['alwaysCheck']==1)						verificoCampo=1;
			else													verificoCampo=inpValue.length ? 1 : 0;
			
			switch(cosaVerifico){
				case "testo":
					if(verificoCampo==1){
						if(opzioni['empty']==1){
							if(inpValue.length==0){
								errInput+=errInput!='' ? " "+ str_e +" " : "";
								errInput+=erroriF["empty"];
							}
						}
						if(opzioni['minChar']>0){
							if(inpValue.length<opzioni['minChar']){
								errInput+=errInput!='' ? " "+ str_e +" " : "";
								errInput+=erroriF["minChar"] + opzioni['minChar'] +" caratteri";
							}
						}
						if(opzioni['maxChar']>0){
							if(inpValue.length>opzioni['maxChar']){
								errInput+=errInput!='' ? " "+ str_e +" " : "";
								errInput+=erroriF["maxChar"] + opzioni['maxChar'] +" caratteri";
							}
						}
						if(opzioni['contains']!=''){
							if(inpValue.indexOf(opzioni['contains'])==-1){
								errInput+=errInput!='' ? " "+ str_e +" " : "";
								errInput+=erroriF["contains"] + opzioni['contains'];
							}
						}
						if(opzioni['mail']==1){
							if(!inpValue.match(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})$/)){
								errInput+=errInput!='' ? " "+ str_e +" " : "";
								errInput+=erroriF["mail"];
							}
						}
						if(opzioni['equalTo']!=''){
							confronta=$("#"+ opzioni['equalTo']).val();
							labelConfronta=$("#"+ opzioni['equalTo']).parents("label").html();
							titleConfronta=$("#"+ opzioni['equalTo']).attr("title");	nameConfronta=$("#"+ opzioni['equalTo']).attr("name");
							labelForConfronta=$("label[for='"+ opzioni['equalTo'] +"']").html();

							if(titleConfronta.length)	labelConfronta=titleConfronta;
							if(labelConfronta==null)	labelConfronta=labelForConfronta;
							if(labelConfronta==null)	labelConfronta=nameConfronta;
							labelConfronta=labelConfronta.replace(/<[^>]*>.?(<[^>]*>)?/g, "").replace("*","").replace(/(\n)*(\t)*/g, "").replace(" {2,*}"," ");

							if(inpValue!=confronta){
								errInput+=errInput!='' ? " "+ str_e +" " : "";
								errInput+=erroriF["equalTo"] + labelConfronta;
							}
						}
						if(opzioni['numerico']==1){
							inpValue=inpValue.replace(",",".");
							if(isNaN(inpValue)){
								errInput+=errInput!='' ? " "+ str_e +" " : "";
								errInput+=erroriF["numerico"];
							}
						}
						if(opzioni['data']==1){
							//Formato della data dd-mm-yyyy. il separatore puo' essere qualsiasi carattere.
							obj=inpValue.replace(/[^\d]/g,"0");
							gg=obj.substr(0,2);	mm=obj.substr(3,2);	aa=obj.substr(6,4);
							strdata=gg+"/"+mm+"/"+aa;
							dteDate=new Date(aa,mm-1,gg);
							daa=dteDate.getFullYear().toString();
							dmm=(dteDate.getMonth()+1).toString();
								dmm=dmm.length==1?"0"+dmm:dmm
							dgg=dteDate.getDate().toString();
								dgg=dgg.length==1?"0"+dgg:dgg
							dddata=dgg+"/"+dmm+"/"+daa
							
							if (dddata!=strdata){
								errInput+=errInput!='' ? " "+ str_e +" " : "";
								errInput+=erroriF["data"];
							}
						}
						if(opzioni['min']!=''){
							if(isNaN(inpValue)||Number(inpValue)<opzioni['min']){
								errInput+=errInput!='' ? " "+ str_e +" " : "";
								errInput+=erroriF["min"] + opzioni['min'];
							}
						}
						if(opzioni['max']!=''){
							if(isNaN(inpValue)||Number(inpValue)>opzioni['max']){
								errInput+=errInput!='' ? " "+ str_e +" " : "";
								errInput+=erroriF["max"] + opzioni['max'];
							}
						}
					}
					
					break;
				case "checkbox":
					if(verificoCampo==1){
						grId=$("#"+ inId).parents("div").attr("id");
						if(opzioni['gruppoChecked']==1){
							if($("#"+ grId +" input:checked").length<1){
								errInput+=errInput!='' ? " "+ str_e +" " : "";
								errInput+=erroriF["gruppoChecked"];
							}
						}
						if(opzioni['maxChecked']!=''){
							if($("#"+ grId +" input:checked").length>opzioni['maxChecked']){
								errInput+=errInput!='' ? " "+ str_e +" " : "";
								errInput+=erroriF["maxChecked"] + opzioni['maxChecked'] +" "+ str_risposte;
							}
						}
						if(opzioni['minChecked']!=''){
							if($("#"+ grId +" input:checked").length<opzioni['minChecked']){
								errInput+=errInput!='' ? " "+ str_e +" " : "";
								errInput+=erroriF["minChecked"] + opzioni['minChecked'] +" "+ str_risposte;
							}
						}
					}
					
					break;
				case "select":
					if(verificoCampo==1){
						if(opzioni['valueZero']==1){
							if($("select[name='"+ inpName +"']").val()==0){
								errInput+=errInput!='' ? " "+ str_e +" " : "";
								errInput+=erroriF["valueZero"];
							}
						}
					}
					break;
			}
			return errInput;
	  	}
		}
	});
})(jQuery);
