/*************************************************************************************************************************
***************************************************Request.DivWin*********************************************************
*************************************************************************************************************************/
Request.DivWin = new Class({
	Extends: Request.HTML,
	options: {
		div_id: "DivWin",
		div_style: "0",
		div_display: "",
		div_overflow: "S",
		div_close: true,
		div_resize: true,
		div_height: "300px",
		div_width: "400px",
		div_position: 'R',
		div_left: "400px",
		div_top: "200px",
		div_resizable: true,
		div_dragable: true,
		
		div_title: "TITOLO",
		update: null,
		onComplete: Class.empty,
		evalScripts: true,
		evalResponse: false,
		url : null
	},
	
	initialize: function(options, url){
		if (options || url){
			if (!document.adv_div_win){
				document.adv_div_win=new Array();
			}
			if (!this.num_obj) {
				this.num_obj=document.adv_div_win.length;
				document.adv_div_win[this.num_obj]=this;
			}
			
			
			if (!this.base){
				var nl=document.getElementsByTagName('script');
				for (i=0; i<nl.length; i++) {
					src = nl[i].src;

					if (src && src.indexOf("advance.mootools") != -1) {
						this.base = src.substring(0, src.lastIndexOf('/')+1);
					}
				}
			}
			if(!$("advanceCSS")){
				var style= new Element("link", {
					'rel': 'stylesheet',
				  'type': 'text/css',
				  'href': this.base+'advance/advance.mootools.css?p=6',
					'id': 'advanceCSS'
				});
				style.inject($(document.body).getPrevious(),'bottom');
			}

			this.addEvent('onComplete', this.onComplete);
			this.setOptions(options);
			this.options.div_id=this.options.div_id+this.num_obj;
			this.div_contenuto=this.options.div_id+"_cont";
			this.obj_div_mod=null;
			
	
			if (!['post', 'get'].contains(this.options.method)){
				this._method = '_method=' + this.options.method;
				this.options.method = 'post';
			}
			this.parent();
			this.setHeader('X-Requested-With', 'XMLHttpRequest');
			this.setHeader('Accept', 'text/javascript, text/html, application/xml, text/xml, */*');
			if (url){
				this.options.url = url;
			}
		}
	},
	
	onComplete: function(){
		if (this.response && this.response.text){
			if (this.obj_div_cont) this.obj_div_cont.empty().set("html", this.response.text);
			if (this.options.evalScripts) $exec(this.response.javascript);
			
		}else{
			this.response=new Object();
		}
		this.obj_div_cont.removeClass("ajax-loading");
		//this.fireEvent('onSuccess', [this.response.text, this.response.xml], 20);
	},
	alertbox: function(){
		alert (this.options.div_id);
	},
	createBox: function(){
		if ($(this.options.div_id))$(this.options.div_id).destroy();
		if (this.options.div_modale=="S"){
			if (this.obj_div_mod)this.obj_div_mod.destroy();
			
			this.obj_div_mod= new Element("div", {
		    'id': this.options.div_id+"_mod",
		    'class': "div_win_mod"+this.options.div_style,
		    'styles': {
	        'zIndex': 1000+(this.num_obj*2)
	    	}
			});
			this.obj_div_mod.style.display=this.options.div_display;
			this.obj_div_mod.injectTop(document.body);
		}
		
		
		this.obj_div= new Element("div", {
	    'id': this.options.div_id,
	    'class': "div_win_ext"+this.options.div_style,
	    'styles': {
        'position': 'absolute',
        'zIndex': 1000+(this.num_obj*2)+1
    	}
		});
		this.obj_div.style.display=this.options.div_display;

		/*
		** posiziono il div
		*/
		if (this.options.div_position=="R"){
			this.obj_div.style.left=(parseInt(window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft, 10)+parseInt(this.options.div_left, 10))+"px";
			this.obj_div.style.top=(parseInt(window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop, 10)+parseInt(this.options.div_top, 10))+"px";
		}else if (this.options.div_position=="A"){
			this.obj_div.style.left=this.options.div_left;
			this.obj_div.style.top=this.options.div_top;
		}else{
			var el=$(this.options.div_position);
			if (el){
				this.obj_div.style.left=(parseInt(el.getPosition().x, 10)+parseInt(this.options.div_left, 10))+"px";
				this.obj_div.style.top=(parseInt(el.getPosition().y, 10)+parseInt(this.options.div_top, 10))+"px";
			}else{
				this.obj_div.style.left=(parseInt(window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft, 10)+parseInt(this.options.div_left, 10))+"px";
				this.obj_div.style.top=(parseInt(window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop, 10)+parseInt(this.options.div_top, 10))+"px";	
			}
		}
		
		this.obj_div.injectBottom(document.body);
		
		
		/*aggiungo i bottoni se abilitati*/
		var bottoni="";
		if (this.options.div_close)bottoni+="<div class=\"div_win_close"+this.options.div_style+" adv_cursor_hand\" id=\""+this.options.div_id+"_close\" onclick=\"javascript:document.adv_div_win["+this.num_obj+"].close()\"></div>";
		if (this.options.div_resize)bottoni+="<div class=\"div_win_toggle_min"+this.options.div_style+" adv_cursor_hand\" id=\""+this.options.div_id+"_toggle\"  onclick=\"javascript:document.adv_div_win["+this.num_obj+"].toggle()\"></div></td>";
		
		/* 
		** a seconda se devo attivare le barre di scorrimento o meno creo la struttura, cioè se devo creare con le barre 
		** inserisco il contenuto in un div altrimenti direttamente nel td
		*/
		var contenuto="";
		if (this.options.div_overflow=="S") contenuto="<td class=\"div_win_cm"+this.options.div_style+" ajax-loading\" id=\""+this.options.div_id+"_cont\"></td>";
		else contenuto="<td class=\"div_win_cm"+this.options.div_style+"\" id=\""+this.options.div_id+"_td_cont\"><div class=\"div_win_cmd"+this.options.div_style+" ajax-loading\" id=\""+this.options.div_id+"_cont\"></div></td>";
			
		
		
		this.obj_div.innerHTML=
			"<table cellpadding=\"0\" cellspacing=\"0\" >"+
			"<tbody><tr><td class=\"div_win_lt"+this.options.div_style+"\" id=\""+this.options.div_id+"_lt\"></td>"+
			"<td  class=\"div_win_ct"+this.options.div_style+"\" id=\""+this.options.div_id+"_title\">"+this.options.div_title+"</td>"+
			"<td class=\"div_win_rt"+this.options.div_style+"\" id=\""+this.options.div_id+"_rt\"><div class=\"div_win_rtdiv"+this.options.div_style+"\">"+
			bottoni+
			"</div></td></tr><tr id=\""+this.options.div_id+"_r_middle\" id=\""+this.options.div_id+"_lm\"><td class=\"div_win_lm"+this.options.div_style+"\"></td>"+
			contenuto+
			"<td class=\"div_win_rm"+this.options.div_style+"\" id=\""+this.options.div_id+"_rm\"></td>"+
			"</tr><tr id=\""+this.options.div_id+"_r_bottom\"><td class=\"div_win_lb"+this.options.div_style+"\" id=\""+this.options.div_id+"_lb\"></td>"+
			"<td class=\"div_win_cb"+this.options.div_style+"\" id=\""+this.options.div_id+"_cb\"></td><td class=\"div_win_rb"+this.options.div_style+"\" id=\""+this.options.div_id+"_rb\"></td>"+
			"</tr></tbody></table>";
			
		this.obj_div_cont=$(this.options.div_id+"_cont");
		this.obj_div_cont.style.width=this.options.div_width;
		this.obj_div_cont.style.height=this.options.div_height;
		this.obj_div_title=$(this.options.div_id+"_title");
		
		
		
		if (this.options.div_dragable){
			new Drag.Move(this.options.div_id, {'handle': this.options.div_id+"_title"});
			$(this.options.div_id+"_title").addClass("adv_cursor_hand");
		}
		if (this.options.div_resizable){
			this.obj_div_cont.makeResizable({'handle': this.options.div_id+"_cb", modifiers: {x: false, y: 'height'}});
			$(this.options.div_id+"_cb").addClass("div_win_cbr"+this.options.div_style);
			this.obj_div_cont.makeResizable({'handle': this.options.div_id+"_rb"});
			$(this.options.div_id+"_rb").addClass("div_win_rbr"+this.options.div_style);
			this.obj_div_cont.makeResizable({'handle': this.options.div_id+"_rm", modifiers: {x: 'width', y: false}});
			$(this.options.div_id+"_rm").addClass("div_win_rmr"+this.options.div_style);
		}
		this.maximized=true;
	},
	
	open: function(options){
		
		options = $extend(this.options, options);
		
		//if (url)options.url=url;
		
		if (options.url && options.url!=""){
			
			if (options.url.indexOf("_div_cont=")==-1){
				options.url=options.url+ (options.url.contains('?') ? '&' : '?') +"_div_cont="+options.div_id+"_cont&_div_num="+this.num_obj;
			}
			this.createBox();
			return this.send(options);
		}else{
			this.onComplete();
			return this;
		}
	},
	
	
	close: function(){
		if (this.options.div_modale=="S"){
			if (this.obj_div_mod)this.obj_div_mod.destroy();
		}
		this.obj_div.destroy();
	},

	toggle: function(){
		if (this.maximized){
			$(this.options.div_id+"_title").style.width=$(this.options.div_id+"_cont").style.width;
			$(this.options.div_id+"_r_middle").style.display="none";
			$(this.options.div_id+"_r_bottom").style.display="none";
			$(this.options.div_id+"_toggle").removeClass("div_win_toggle_min"+this.options.div_style);
			$(this.options.div_id+"_toggle").addClass("div_win_toggle_max"+this.options.div_style);
			
			this.maximized=false;
		}else{
			$(this.options.div_id+"_r_middle").style.display="";
			$(this.options.div_id+"_r_bottom").style.display="";
			$(this.options.div_id+"_toggle").removeClass("div_win_toggle_max"+this.options.div_style);
			$(this.options.div_id+"_toggle").addClass("div_win_toggle_min"+this.options.div_style);
			this.maximized=true;
			$(this.options.div_id+"_title").style.width="";
		}
	},
	show: function(){
		if (this.options.div_modale=="S" && this.obj_div_mod){
			this.obj_div_mod.style.display="";
		}
		this.obj_div.style.display="";
	},
	hide: function(){
		if (this.options.div_modale=="S" && this.obj_div_mod){
			this.obj_div_mod.style.display="none";
		}
		this.obj_div.style.display="none";
	},
	
	setTitle: function(title){
		this.obj_div_title.set("html", title);
		this.options.div_title=title;
	}
});

Request.DivWin.getInstance=function (num){
	return document.adv_div_win[parseInt(num, 10)];
}

/*************************************************************************************************************************
*********************************************Request.AutoComplete*********************************************************
*************************************************************************************************************************/
Request.AutoComplete = new Class({
	Extends: Request.HTML,
	options: {
		id_target: null,

		div_style: "0",
		div_height: "147px",
		div_width: "127px",
		
		text_class: "",
		text_style: "width:300px",
		text_name: "",
		text_value: "",
		
		hidden_name: "",
		hidden_value: "",
		
		post_function:null,
		post_param:null,
		
		empty_function:null,
		empty_param:null,
		
		limit_result:50, 
		limit_char_start:0,
		path_img: "",
		path_js: "",
		query: "",
		custom_url: false,

		update: null,
		onComplete: Class.empty,
		evalScripts: true,
		evalResponse: false,
		method: 'get',
		url : "advance/autocomplete.php"
	},
	
	initialize: function(options, url){
		if (!document.adv_autocomplete){
			document.adv_autocomplete=new Array();
		}
		if (!this.num_obj) {
			this.num_obj=document.adv_autocomplete.length;
			document.adv_autocomplete[this.num_obj]=this;
		}
		if (!this.base){
			var nl=document.getElementsByTagName('script');
			for (i=0; i<nl.length; i++) {
				src = nl[i].src;

				if (src && src.indexOf("advance.mootools") != -1) {
					this.base = src.substring(0, src.lastIndexOf('/')+1);
				}
			}
		}
		if(!$("advanceCSS")){
			var style= new Element("link", {
				'rel': 'stylesheet',
			  'type': 'text/css',
			  'href': this.base+'advance/advance.mootools.css?p=61',
				'id': 'advanceCSS'
			});
			style.inject($(document.body).getPrevious(),'bottom');
		}
		
		if (options["url"] && options["url"]!="" || url){
			this.options.custom_url=true;
		}else{
			this.options.url=this.base+this.options.url;
			this.options.path_js=this.base;
		}
		
		this.addEvent('onSuccess', this.onComplete);
		this.setOptions(options);
		
		if (!this.options.hidden_value || this.options.hidden_value=="") this.options.hidden_value="0";
		
		if (!['post', 'get'].contains(this.options.method)){
			this.options.method = 'get';
			this._method = '_method=' + this.options.method;
			
		}
		this.parent();
		this.setHeader('X-Requested-With', 'XMLHttpRequest');
		this.setHeader('Accept', 'text/javascript, text/html, application/xml, text/xml, */*');
		if (url){
			this.options.url = url;
		}
		this.timeOut = null;
		if (this.options.custom_url==true || (this.options.custom_url==false && this.options.path_js && this.options.path_js!="")){
			if (this.options.custom_url==true || (this.options.custom_url==false && this.options.query && this.options.query!="")){
				
				this.obj_target=$(this.options.id_target);
				if (this.obj_target){
					
					if (this.options.hidden_name!="" && this.options.text_name!=""){
					
						this.obj_hidden= new Element("input", {
							'type': 'hidden',
							'name': this.options.hidden_name,
							'id': this.options.hidden_name,
							'value': this.options.hidden_value
						});
						
						this.obj_text= new Element("input", {
							'type': "text",
							'name': this.options.text_name,
							'id': this.options.text_name,
							'value': this.options.text_value,
							'class': this.options.text_class,
							'style': this.options.text_style,
							'lang': this.num_obj,
							'autocomplete': 'off'
						});
						this.obj_anchor= new Element("div", {});
						
						if (this.obj_hidden && this.obj_text && this.obj_anchor) {
							this.obj_target.adopt(this.obj_hidden, this.obj_text, this.obj_anchor);
							
							this.obj_text.addEvent("focus", document.adv_autocomplete[this.num_obj].focus);
							
							this.obj_text.addEvent("blur", document.adv_autocomplete[this.num_obj].blur);
							
							this.selection=-1;
							this.mouseOver=false;

							
						}else{
							alert ("Unable to create autocomplete object. (3)");
						}
					}else{
						alert ("Unable to create autocomplete object. (2)");
					}
				}else{
					alert ("Unable to create autocomplete object. (1)");
				}
			}else{
				alert ("Unable to create autocomplete object. (5)");
			}
		}else{
			alert ("Unable to create autocomplete object. (6)");
		}
	},
	
	
	focus: function(e){
		var index=parseInt(e.target.lang,10);
		document.adv_autocomplete[index].obj_text.addEvent("keydown", document.adv_autocomplete[index].keydown);
		Event.Keys.shift = 16;
		Event.Keys.ctrl = 17;
		Event.Keys.alt = 18;
		Event.Keys.bloc = 20;
	},
	
	blur: function(e){
		var index=parseInt(e.target.lang,10);
		document.adv_autocomplete[index].obj_text.removeEvent("keydown");
		if (document.adv_autocomplete[index].obj_div && !document.adv_autocomplete[index].mouseOver){
			document.adv_autocomplete[index].empty.delay(200, document.adv_autocomplete[index]);
		}
	},
	
	keydown: function(e){
		var index=parseInt(e.target.lang,10);
		var obj=document.adv_autocomplete[index];
		var obj_div=obj.obj_div;
		if (obj_div && obj_div.style.display=="" && ["up", "down", "enter", "esc", "tab"].contains(e.key)){
			e.stop();
			if (e.key=="up"){
				if (obj.selection>0){
					obj.risultati[obj.selection].removeClass("selected");
					obj.selection-=1;
					obj.risultati[obj.selection].addClass("selected");
					obj.risultati[obj.selection].scrollIntoView(false);
				}
			}else if (e.key=="down"){
				if (obj.selection < (obj.risultati.length - 1) ){
					obj.risultati[obj.selection].removeClass("selected");
					obj.selection+=1;
					obj.risultati[obj.selection].addClass("selected");
					obj.risultati[obj.selection].scrollIntoView(false);
				}
			}else if (e.key=="enter" || e.key=="tab"){
				obj.select();
			}else if (e.key=="esc"){
				/*
				 * non sono impazzito faccio diversamente dall'invio perchÃš il pulsante esc sembra funzionare diversamente e 
				 * non riesco a vuotare i campi, sembra che browser anche se gli ho detto di stoppare gli eventi faccia come voglia 
				 * rimettendo i dati precedenti, allora chiamo la funzione temporizzata
				 */
				obj.empty.delay(200, obj);
			}
		}
		
		if (!["shift", "up", "down", "enter", "esc", "tab", "ctrl", "alt", "bloc", "left", "right"].contains(e.key)){
			if (this.timeOut){
				window.clearTimeout(this.timeOut);
				this.timeOut=null;
			}
			this.timeOut=obj.open.delay(400, obj);
		}
	},
	
	select: function(){
		if (this.risultati && this.risultati.length>this.selection && this.obj_text.value!=this.risultati[this.selection].lang){
			
			this.obj_text.value=this.risultati[this.selection].lang;
			this.obj_hidden.value=this.risultati[this.selection].id;
			if (this.options.post_function){
				this.options.post_function(this.risultati[this.selection], this.options.post_param);
			}
			this.hide();
		}else{
			this.empty();
		}
	},
	
	empty: function(){
		if (this.risultati && this.risultati.length>this.selection && this.risultati[this.selection] && this.obj_text.value!=this.risultati[this.selection].lang){
			this.obj_text.value="";
			this.obj_hidden.value="0";
			
			if (this.options.empty_function){
				this.options.empty_function(this.risultati[this.selection], this.options.empty_param);
			}
		}
		this.hide();
	},
		
	
	open: function(){
		if (this.options.limit_char_start <= this.obj_text.value.length) {
			var options=this.options;
			options.correctUrl=options.url;
			
			var pos=this.obj_anchor.getPosition();
			
			
			if (this.obj_div){
				this.obj_div.empty();
				this.obj_div.style.top=(this.options.div_top | pos.y);
				this.obj_div.style.left=(this.options.div_left | pos.x);
				this.obj_div.style.width=this.options.div_width;
				this.obj_div.style.height=this.options.div_height;
				this.obj_div.addClass("ajax-loading");
			}else{
				this.obj_div=new Element("div", {
			    	'id': this.options.id_target+this.num_obj,
			    	'num_obj': this.num_obj,
			    	'class': "autocomplete"+this.options.div_style+" ajax-loading",
			    	'styles': {
				        'top': (this.options.div_top | pos.y)+"px",
				        'left': (this.options.div_left | pos.x)+"px",
				        'width': this.options.div_width,
				        'height': this.options.div_height
					}
				});
				this.obj_div.injectTop(document.body);
			}
			this.show();
			
			if (options.url && options.url!=""){
				
				
				options.url=options.url+ (options.url.contains('?') ? '&' : '?') +
					"key="+this.obj_text.value+
					"&limit="+options.limit_result+
					"&path_img="+options.path_img+
					"&query="+options.query;
				
				options.update=this.obj_div;
	
				this.send(options);
				options.url=options.correctUrl;
				return this; 
			}else{
				alert ("Unable to start autocomplete. (4)");
				return this;
			}
		}
	},

	
	
	onComplete: function(){
		if (this.response && this.response.text){
			if (this.obj_div) {
					this.obj_div.empty().set("html", this.response.text);
					this.risultati=this.obj_div.getElements('li');
					
					if (this.risultati.length>0){
						this.risultati[0].addClass("selected");
						this.selection=0;
						this.risultati[0].scrollIntoView(false);
					}
					this.risultati.each(this.addMouseEvent, this);
					
					
					this.obj_div.removeClass("ajax-loading");
			}
		}
	},
	
	
	addMouseEvent: function (item, index){
		item.addEvent("mouseover", this.mouseEnterOption);
		item.addEvent("click", this.mouseClickOption);
	},
	
	mouseEnterOption: function (e){
		var ris=$(e.target);
		while (ris && ris.tagName!="LI"){
  		if (ris.getParent()) ris=ris.getParent();
  	}
		if (ris){
			var obj_div=ris.getParent().getParent();
			if (obj_div){
				var index=parseInt(obj_div.getProperty("num_obj"));
				var obj=document.adv_autocomplete[index];
				obj.mouseOver=true;
				obj.risultati[obj.selection].removeClass("selected");
				obj.selection=obj.risultati.indexOf(ris);
				obj.risultati[obj.selection].addClass("selected");
			}
		}
	},
	
	mouseClickOption: function (e){
		var ris=$(e.target);
		while (ris && ris.tagName!="LI"){
  		if (ris.getParent()) ris=ris.getParent();
  	}
		if (ris){
			var obj_div=ris.getParent().getParent();
			var index=parseInt(obj_div.getProperty("num_obj"));
			var obj=document.adv_autocomplete[index];
			obj.select();
		}
	},
	
	mouseOutDiv: function (e){
		var obj_div=$(e.target);
		while (obj_div && obj_div.tagName!="DIV"){
  		if (obj_div.getParent()) obj_div=obj_div.getParent();
  	}
		if (obj_div){
			var index=parseInt(obj_div.getProperty("num_obj"));
			var obj=document.adv_autocomplete[index];
			obj.mouseOver=false;
		}
	},
	
	
	show: function(){
		this.obj_div.style.display="";
		this.obj_div.addEvent("mouseleave", this.mouseOutDiv);
	},
	
	hide: function(){
		this.obj_div.style.display="none";
		this.obj_div.removeEvent("mouseleave");
		this.mouseOver=false;
		
	}
});


/*************************************************************************************************************************
******************************************************Banners*************************************************************
*************************************************************************************************************************/
var Banners = new Class({

	Implements: [Chain, Events, Options],

	options: {

		banners: null,
		bannerSelector: '.advBanners'
	},

	initialize: function(options){
		
		this.xhr = new Browser.Request();
		this.setOptions(options);
		
		if (!this.base){
			var nl=document.getElementsByTagName('script');
			for (i=0; i<nl.length; i++) {
				src = nl[i].src;

				if (src && src.indexOf("advance.mootools") != -1) {
					this.base = src.substring(0, src.lastIndexOf('/')+1);
				}
			}
		}
		
		var local_options={};
		
		//This code will send a data object via a GET request and alert the retrieved data.
		local_options["url"]=this.base+'advance/banner.php'; 
		local_options["onComplete"]=this.onComplete.bind(this);
		local_options["onFailure"]=this.failure;
		
		this.request = new Request.JSON(local_options);
		
		//this.request=new Request.HTML(local_options);
		
	},

	send: function(options){
		var elems=null;
		if (this.banners){
			elems= this.banners;
		}else if (this.options.bannerSelector){
			elems= $$(this.options.bannerSelector);
		}else{
			elems= $$(".advBanners");
		}
		if (elems && elems.length>0){
			var i=0;
			var data="";
			while (i<elems.length){
				if (i)data+=",";
				data+=elems[i].get("id_position");
				i++;
			}
			
			this.request.get({'banners': data});
		}
	},

	cancel: function(){
		this.request.cancel();
		return this;
	}, 
	onComplete: function(listBanners){
		var i=0;
		while (listBanners && i<listBanners.length){
			var elem=$$( this.options.bannerSelector + listBanners[i]["id_position"]);
			if (elem && elem[0]){
				(elem[0]).set("html", listBanners[i]["ds_code"]);
			}
			i++;
		}
	}, 
	failure: function(){
		//alert ("Can't load the banners");
	}
});


/*************************************************************************************************************************
***************************************************FormValidator**********************************************************
*************************************************************************************************************************/
FormValidator.dissolveAdvice=function (field, className){
	var advice = field.retrieve('advice-' + className);
	field.store('advice' + className, false);
	if (advice.dissolve) (function(){advice.dissolve();}).delay(this);
	else (function(){advice.setStyle('display', 'none');}).delay(this); 
}

FormValidator.add('isCodiceFiscale', {
    errorMsg: 'Dovete inserire un codice fiscale valido.',
    test: function(field){

	    var sDato=field.get("value");
	    if (sDato.length>0) {
				if (sDato.length !=16)
					return false;
					
				sDato=sDato.toUpperCase();
				iChecksum=0;
				iPos=-1;
				iSum=0;
				bPari=true;
				sCaratteri = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
				sCodiciPari= "000102030405060708091011121314151617181920212223242500010203040506070809";
				sCodiciDispari="010005070913151719210204182011030608121416102225242301000507091315171921";
				for (iloop=0; iloop<16; iloop++) {
					sCheck=sDato.substr(iloop,1);
					iPos=((sCaratteri.indexOf(sCheck)+1)*2)-1;
					if ( (iloop%2) != 0) iSum = parseInt(sCodiciPari.substr(iPos-1,2),10);
					else iSum = parseInt(sCodiciDispari.substr(iPos-1,2),10);
					
					if (iloop != 15)iChecksum = iChecksum +	iSum;
				}
	
				if ((iChecksum % 26) !=	iSum)
					return FormValidator.getValidator('IsEmpty').test(field) || false;
				else {
					return FormValidator.getValidator('IsEmpty').test(field) || true;
					field.set("value", sDato)	;
				}
			}else{
				return FormValidator.getValidator('IsEmpty').test(field) || false;
			}
    }
});
FormValidator.add('isPartitaIva', {
    errorMsg: 'Dovete inserire una partita iva valida.',
    test: function(field){

		var sDato=field.get("value");
		if (sDato.length>0) {
			if(sDato.length !=11)
				return false;
	
				SOMMADISPARI=0;
				SOMMAPARI=0;
	
				for (i=0;i<9;i+=2){
					SOMMADISPARI+=sDato.substr(i,1)-'0';
					DIVQ=parseInt((2*(sDato.substr(i+1,1))-'0')/10,10);
					DIVR=(2*(sDato.substr(i+1,1)-'0') % 10);
					SOMMAPARI+= (DIVQ + DIVR);
				}
				SOMMACTR=SOMMADISPARI+SOMMAPARI;
				DIVI= ((10-(SOMMACTR % 10)) % 10);
				if ((sDato.substr(10,1)-'0')==DIVI)
					return FormValidator.getValidator('IsEmpty').test(field) || true;
				else
					return FormValidator.getValidator('IsEmpty').test(field) || false;
	    }else{
				return FormValidator.getValidator('IsEmpty').test(field) || false;
	    }
   }
});

