 function trim(stringa) {
     while (stringa.substring(0,1).match(/[\t\ ]/))
     {
         stringa = stringa.substring(1, stringa.length);
     }
     while (stringa.substring(stringa.length-1, stringa.length).match(/[\t\ ]/))
     {
         stringa = stringa.substring(0,stringa.length-1);
     }
     return stringa;
 }
 
function jsJumpTo(id,obj,len) {
    var x,t,ok_go;
    ok_go = false;
    if (!id)
	return ;
    x = $(id);
    if (!x || !obj)
	return;
    if (!len)
	len = 0;
    t = obj.type.toString().toUpperCase();
    if (t=='TEXT' || t=='TEXTAREA') {
	if (obj.value.length == len) 
	    ok_go = true;
    }
    if (ok_go)
	x.focus();
}

function do_autoprint(doc) {
		var url = doc;
		if (!url.match(/\?/))
			url = url + "?";
		else
			url = url + "&";
		url = url + "do_autoprint=1";
		open(url,"stampa","scrollbars=1,menubar=0,statusbar=0");
}

function ITDate2Time(data) {
    var g,m,a,data;
    var obj;
    if (!data) {
	obj = new Date();
        g = obj.getDate(); g = ''+g;
	if (g.length < 2)
	    g = '0'+g;
        m = obj.getMonth()+1; m = '' + m;
        if (m.length < 2)
		m = '0'+m;
        a = obj.getFullYear();
    }
    else {
        a = data.toString().substr(6,4);
	m = data.toString().substr(3,2);
        if (m.length < 2)
	    m = "0"+m;
        g = data.toString().substr(0,2);
	if (g.length < 2)
	    g = "0"+g;
    }
    obj = new Date();
    obj.setMonth(m-1);
    obj.setDate(g);
    obj.setFullYear(a);
    obj.setHours(0);
    obj.setMinutes(0);
    obj.setSeconds(0);
    //alert(g+'-'+m+'-'+a+' -- '+obj.getTime());
    return obj.getTime();
}


function ITDateAdd(data,val,tipo) {
    var g,m,a,t,obj;
    if (data == '') {
	obj = new Date();
	obj.setHours(0);
	obj.setMinutes(0);
	obj.setSeconds(0);
	g = obj.getDate(); g = ''+g;
	if (g.length < 2) g = '0'+g;
	m = obj.getMonth()+1; m = ''+m;
	if (m.length < 2) m = '0'+m;
	a = obj.getFullYear();
	data = g+'/'+m+'/'+a;
    }
    a = data.toString().substr(6,4);
    m = data.toString().substr(3,2);
    if (m.length < 2)
        m = "0"+m;
    d = data.toString().substr(0,2);
    if (d.length < 2)
        d = "0"+d;
    if (val < 0)
	val = val * (-1);
    a = 0 + parseInt(a,10);
    m = 0 + parseInt(m,10);
    g = 0 + parseInt(g,10);
    if (tipo == 'y')
	a += val;
    if (tipo == 'm') {
	m += val;
	while (m > 12) {
	    a ++;
	    m -= 12;
	}
    }    
    if (tipo == 'd') {
	t = IDDate2Time(g+'/'+m+'/'+a);
	t += (val * 24 * 60 *60 *1000); // millisecondi
	obj = new Date();
	obj.setTime(t);
	g = ''+obj.getDate();
	m = obj.getMonth(); m ++;
	a = obj.getFullYear();
    }
    g = ''+g;
    m = ''+m;
    a = ''+a;
    if (g.length < 2) g = '0'+g;
    if (m.length < 2) m = '0'+m;
    return g+'/'+m+'/'+a;
}

function lockField(id,val,keepval) {
    if (!id) return;
    var dpers = $(id);
    var tipo;
    if (dpers) {
	tipo = dpers.type.toString().toUpperCase();
	if (tipo == 'TEXT' || tipo == 'TEXTAREA') {
	    if (!keepval)
			dpers.value = val;
	}
	dpers.readOnly = dpers.readonly = true;
	dpers.onfocus = function() { this.blur(); };
    }
}

function ITDatePasqua(anno) {
	var a;
	var b;
	var c;
	var Y = 2007;
	var d;
	var e;
	var M;
	var N;
	var giorno;
	var mese;

	if (anno)
		Y = anno;
	else
		anno = Y;
		
	if (Y < 2099)
	{
		M = 24;
		N = 5;
	}
	else if (Y < 2199)
	{
		M = 24;
		N = 6;
	}
	else if (Y < 2299)
	{
		M = 25;
		N = 0;
	}
	else if (Y < 2399)
	{
		M = 26;
		N = 1;
	}
	else if(Y < 2499)
	{
		M = 25;
		N = 1;
	}
	   
	a = Y % 19;
	b = Y % 4;
	c = Y % 7;
	d = ((19*a) + M) % 30
	e = ((2*b) + (4*c) + (6*d) + N) % 7;

	if (d + e < 10)
	{
		giorno = d+e+22;
		mese = 3;
	}
	else{
		giorno = d+e-9;
		mese = 4;
	}

	if (giorno==26 && mese==4)
	{
		giorno = 19;
		mese = 4;
	}

	if (giorno==25 && mese==4 && d==28 && e==6 && a>10)
	{
		giorno=18;
		mese=4;
	}
	giorno = ''+giorno;
	if (giorno.toString().length < 2)
		giorno = '0'+giorno;
	mese = ''+mese;
	if (mese.toString().length < 2)
		mese = '0'+mese;
	return giorno+'-'+mese+'-'+anno;
}

function ITDateFestivo(dataita) {
	var date_festa = new Array()
	var index = 0;
	var pasqua;
	var giorno,mese,anno;
	var tmp,i;
	date_festa[index++] = "01/01";
	date_festa[index++] = "06/01";
	date_festa[index++] = "25/04";
	date_festa[index++] = "01/05";
	date_festa[index++] = "02/06";
	date_festa[index++] = "15/08";
	date_festa[index++] = "01/11";
	date_festa[index++] = "08/12";
	date_festa[index++] = "25/12";
	date_festa[index++] = "26/12";
	dataita = dataita.toString().replace("-","/");
	dataita = dataita.toString().replace("-","/");
	dataita = dataita.toString().replace("-","/");
	if (dataita == '') 
		return false;
	tmp = dataita.split('/');
	tmp[0] = ''+tmp[0];
	if (tmp[0].length < 2)
		tmp[0] = '0'+tmp[0];
	tmp[1] = ''+tmp[1];
	if (tmp[1].length < 2)
		tmp[1] = '0'+tmp[1];
	tmp[2] = ''+tmp[2];
	giorno = tmp[0];
	mese = tmp[1];
	anno = tmp[2];
	var data;
	data = new Date(parseInt(anno),parseInt(mese,10)-1,parseInt(giorno,10));
	if (data.getDay() == 0)
		return true;
	tmp = giorno + '/'+ mese;
	for (i=0;i<date_festa.length;i++)
		if (date_festa[i] == tmp)
			return true;
	pasqua = ITDatePasqua(anno);
	if (pasqua == (giorno + '-' + mese + '-' + anno))
		return true;
        var pasquetta;
	pasquetta = pasqua.split('-');
	pasquetta[0] = parseInt(pasquetta[0],10)+1;
	pasquetta[0] = ""+pasquetta[0];
	pasquetta[1] = ""+pasquetta[1];
	if (pasquetta[0].length < 2) pasquetta[0] = "0"+pasquetta[0];
	if (pasquetta[1].length < 2) pasquetta[1] = "0"+pasquetta[1];
	pasquetta = pasquetta[0]+'-'+pasquetta[1]+'-'+pasquetta[2];
	// alert(pasquetta+' '+giorno + '-' + mese + '-' + anno);
	if (pasquetta == (giorno + '-' + mese + '-' + anno))
		return true;
	return false;
}

function ITDatePrevNonFestivo(dataita) {
	var data, utime, ok, giorno, mese, anno;
	dataita = dataita.replace("-","/");
	dataita = dataita.replace("-","/");
	dataita = dataita.replace("-","/");
	tmp = dataita.split("/");
	tmp[0] = parseInt(tmp[0],10);
	tmp[1] = parseInt(tmp[1],10);
	tmp[2] = parseInt(tmp[2],10);
	data = new Date(tmp[2],tmp[1]-1,tmp[0]);
	ok = false;
	while (!ok) {
		data = data.add({ days: -1 });
		mese = data.getMonth()+1;
		mese = ''+mese; if (mese.length < 2) mese = '0'+mese;
		anno = data.getFullYear();
		giorno = data.getDate();
		giorno = ''+giorno; if (giorno.length < 2) giorno = '0'+giorno;
		if (!ITDateFestivo(giorno+'/'+mese+'/'+anno))
			ok = true;
	}
	return giorno+'/'+mese+'/'+anno;
}

var stampa_numero_progressivo = 0;

function stampa_form(tipo,idform,extra) {
	stampa_numero_progressivo ++;
	if (!extra)
		extra = '';
	else
		extra = '&'+extra;
	var nuova_finestra = window.open('/grafica/print_form.asp?tipo='+tipo+'&idform='+idform+extra,'stampa'+stampa_numero_progressivo,'status=0,toolbar=0,location=0,menubar=0,height=690,width=600,scrollbars=1')
	testo = $(idform);
	if (!testo) {
		nuova_finestra.close();
	}
}

var email_numero_progressivo = 0;

function email_form(tipo,idform,extra) {
	email_numero_progressivo ++;
	if (!extra)
		extra = '';
	else
		extra = '&'+extra;
	var nuova_finestra = window.open('/grafica/email_form.asp?tipo='+tipo+'&idform='+idform+extra,'email'+email_numero_progressivo,'status=0,toolbar=0,location=0,menubar=0,height=690,width=600,scrollbars=1')
	testo = $(idform);
	if (!testo) {
		nuova_finestra.close();
	}
}

function select_move_from(id_da,id_a) {
	var da,a,i;
	da = $(id_da);
	a  = $(id_a);
	if (!da || !a)
		return;
	for (i=da.options.length-1; i>=0; i--) {
		if (da.options[i].selected) {
			var elOptNew = document.createElement('option');
			elOptNew.text = da.options[i].text;
			elOptNew.value = da.options[i].value;
			try {
					 a.add(elOptNew, null); // standards compliant; doesn't work in IE
			}
			catch(ex) {
				  a.add(elOptNew); // IE only
			}
			da.remove(i);
		}
	}
}
	    
function select_delete_from(id_da,forza) {
	var da,i;
	da = $(id_da);
	if (!da)
		return;
	for (i=da.options.length-1; i>=0; i--) {
		if (da.options[i].selected || forza) {
			da.remove(i);
		}
	}
}

function letters2numbers(str) {
		// A=4, B=8, E=3, G=6, I=1 , L=1, O=0, S=5, S=2, T=7
		str = str+'';
		str = str.replace( "A", 4).replace( "a", 4);
		str = str.replace( "B", 8).replace( "b", 8);
		str = str.replace( "E", 3).replace( "e", 3);
		str = str.replace( "G", 6).replace( "g", 6);
		str = str.replace( "I", 1).replace( "i", 1);
		str = str.replace( "L", 1).replace( "l", 1);
		str = str.replace( "O", 0).replace( "o", 0);
		str = str.replace( "S", 5).replace( "s", 5);
		str = str.replace( "S", 2).replace( "s", 2);
		str = str.replace( "T", 7).replace( "t", 7);
		return str;
}

function numbers2letters(str) {
		// 4=A, 8=B, 3=E, 6=G, 1=1 , 1=L, 0=O, 5=S, 2=S, 7=T
		str = str+'';
		str = str.replace("4","A");
		str = str.replace("8","B");
		str = str.replace("3","E");
		str = str.replace("6","G");
		str = str.replace("1","I");
		str = str.replace("1","L");
		str = str.replace("0","O");
		str = str.replace("5","S");
		str = str.replace("2","S");
		str = str.replace("7","T");
		return str;
}
	
function passwordDebole(user,passwd,nome,cognome,email,blacklist) {
		var nome2, cognome2, login2, email2
		var msg;
				
		nome = nome+'';
		cognome = cognome +'';
		passwd = passwd+'';
		user = user+'';
		email = email+'';
		email2 = '';
		msg = '';

		passwd = passwd.toUpperCase();
		nome = nome.toUpperCase();
		nome2 = nome.replace(/([^a-zA-Z0-9]+)/ig,"");
		cognome = cognome.toUpperCase();
		cognome2 = cognome.replace(/([^a-zA-Z0-9]+)/ig,"");
		user = user.toUpperCase();
		login2 = user.replace(/([^a-zA-Z0-9]+)/ig,"");
		email = email.toUpperCase();
		email2 = email.replace(/([^a-zA-Z0-9]+)/ig,"");
		
		if (passwd.length < 8) {
			msg = "La password deve essere di almeno 8 caratteri";
		}
		else if (passwd.replace(/([^a-zA-Z0-9]+)/ig,"").length < 8 ) {
			msg = "La password deve contenere almeno 8 caratteri tra lettere e cifre numeriche";
		}
		else if (  passwd.replace(/([a-zA-Z]+)/ig,"") == "" ) {
			msg = "La password non pu&ograve; essere di sole lettere";
		}
		else if (  passwd.replace(/([0-9]+)/,"") == "" ) { 
			msg = "La password non pu&ograve; essere di sole cifre numeriche";
		}
		else if (  passwd.indexOf(cognome) >= 0 ) { 
			if (cognome != '') msg = "La password non deve contenere il cognome";
		}
		else if ( passwd.indexOf(nome) >= 0 ) { 
			if (nome != '') msg = "La password non deve contenere il nome";
		}
		else if (  passwd.indexOf( cognome2) >= 0 ||
			   passwd.indexOf(letters2numbers(cognome)) >= 0 ||
			   passwd.indexOf(numbers2letters(cognome)) >= 0 ||
			   passwd.indexOf(letters2numbers(cognome2)) >= 0 ||
			   passwd.indexOf(numbers2letters(cognome2)) >= 0 ||
			   numbers2letters(passwd).indexOf(numbers2letters(cognome)) >= 0 ||
			   numbers2letters(passwd).indexOf(numbers2letters(cognome2)) >= 0 
			   ) { 
					if (cognome != '') msg = "La password non deve contenere dati simili al cognome";
		}
		else if (  passwd.indexOf(nome2) >= 0 ||
			   passwd.indexOf(letters2numbers(nome)) >= 0 ||
			   passwd.indexOf(numbers2letters(nome)) >= 0 ||
			   passwd.indexOf(letters2numbers(nome2)) >= 0 ||
			   passwd.indexOf(numbers2letters(nome2)) >= 0 ||
			   numbers2letters(passwd).indexOf(numbers2letters(nome)) >= 0 ||
			   numbers2letters(passwd).indexOf(numbers2letters(nome2)) >= 0 			   
			   ) { 
					if (nome != '') msg = "La password non deve contenere dati simili al nome";
		}
		else if (  passwd.indexOf(user) >= 0 ) { 
			msg = "La password non deve contenere il nome utente";
		}
		else if (  passwd.indexOf( login2) >= 0 ||
			   passwd.indexOf(letters2numbers(user)) >= 0 ||
			   passwd.indexOf(numbers2letters(user)) >= 0 ||
			   passwd.indexOf(letters2numbers(login2)) >= 0 ||
			   passwd.indexOf(numbers2letters(login2)) >= 0 ||
			   numbers2letters(passwd).indexOf(numbers2letters(user)) >= 0 ||
			   numbers2letters(passwd).indexOf(numbers2letters(login2)) >= 0 
			   ) { 
					msg = "La password non deve contenere dati simili al nome utente";
		}
		else if (  passwd.indexOf(email) >= 0 ) { 
			if (email != '') msg = "La password non deve contenere l'indirizzo email";
		}
		else if (  passwd.indexOf( email2) >= 0||
			   passwd.indexOf(letters2numbers(email)) >= 0 ||
			   passwd.indexOf(numbers2letters(email)) >= 0 ||
			   passwd.indexOf(letters2numbers(email2)) >= 0 ||
			   passwd.indexOf(numbers2letters(email2)) >= 0 ||
			   numbers2letters(passwd).indexOf(numbers2letters(email)) >= 0 ||
			   numbers2letters(passwd).indexOf(numbers2letters(email2)) >= 0 
			   ) { 
					if (email != '') msg = "La password non deve contenere dati simili all'indirizzo email";
		}
		else if (blacklist && blacklist != '') {
			blacklist = blacklist.toUpperCase();
			var parole_blacklist = blacklist.split(",");
			var i,max, trov;
			max = parole_blacklist.length;
			trov = -1;
			for (i = 0; i < max; i++) {
				if (parole_blacklist[i] != '')  {
					/*
					alert(parole_blacklist[i]+'\n'+
						  numbers2letters(passwd)+'\n'+
						  numbers2letters(parole_blacklist[i])+'\n'+
						  (passwd.indexOf(parole_blacklist[i])>=0)+'\n'+
						  (numbers2letters(passwd).indexOf(numbers2letters(parole_blacklist[i]))>=0)
						  );
					*/
					if (passwd.indexOf(parole_blacklist[i]) >= 0 || numbers2letters(passwd).indexOf(numbers2letters(parole_blacklist[i]))>=0) {
						trov = i;
						break;
					}
				}
			}
			if (trov >= 0) 
				msg = 'Nella password non possono essere usate le seguenti, o simili, sequenze di caratteri: '+blacklist.replace(",",", ");
		}
	return msg;
}
