var _canc_ = 46;
var _tab_ = 9;
var _backsp_ = 8;

// VARIABLE DECLARATIONS
var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyz"
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
// whitespace characters
var whitespace = " \t\n\r";
var specchar_a = "'%<>;"
var specchar_b = '"'
var specchar = specchar_a + specchar_b

// my personal stops
var mystop = digits + lowercaseLetters + uppercaseLetters + whitespace ;
var mystop2 = specchar_a + specchar_b + whitespace ;
var permission_invalid = specchar + "{}[]\|,./?!@#$%^&*()" +"\/"
var permission_invalidpuntosi = specchar + "{}[]\|,/?!@#$%^&*()" +"\/"
var permission_invalidazienda = specchar + "{}[]\|,/?!@#$%^*()" +"\/"
var permission_invalidindirizzo = specchar + "{}[]\|,.?!@#$%^&*()" +"\/"
var permission_invalidcivico = specchar + "{}[]|,.?!@#$%^&*()";



function num()
{
/*
	blocca l'evento di pressione tasto e si assicura che passino solo i numeri e i tasti canc, backspace, e tab.
	si imposta: OnKeyDown="return num()"
*/
//alert(event.keyCode);
if(event.keyCode>=48 && event.keyCode<=57 ||  event.keyCode==_backsp_ ||  event.keyCode==_tab_ || event.keyCode==_canc_) return true;
else return false;
} 

var defaultEmptyOK = false;
//var validRegExpEmail = /^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/;
//lo commento perch  non mi accetta il formato numeri@qualsiasicosa.qualsiasicosa
var validRegExpEmail = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-]{2,})+\.)+([a-zA-Z0-9]{2,})+$/;
//var CONST_PERMISSION = new RegExp(/[\"'`~!@#$%^&*()\-+=\[\]\\{}|\;:/?.>,<\s]/)
var validNumber = /^[0-9\.]*$/;


function isValidMail(e) {
if (e=="")return true;
return validRegExpEmail.test(e);
}

function isNumber(e) {
if (e=="")return true;
return validNumber.test(e);
}


//function isValidEmail(obj)
//{
//	alert(validRegExpEmail.test(strEmail));
//	strEmail = obj.value;
//	return validRegExpEmail.test(strEmail);
//}

function check_input (obj,bag) {
  var ckOK = bag;
  var ckStr = obj.value;
  if (ckStr.length > 0) {
    var ok = true;
    for (i=0; i < ckStr.length;  i++)  {
      for (j=0; j < ckOK.length;  j++)
        if (ckStr.charAt(i) == ckOK.charAt(j)) {
          ok = true;
          break;
        }
        else 
          ok=false;
      if (!ok)  break;
    }
    if (!ok){
      return (false);
    }
  }
  return (true);
}

// Removes all characters which appear in string bag from string s.

function stripCharsInBag (s, bag)

{   var i;
    var returnString = "";

    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
	returnarray = new Array()
	if( returnString != s)
		returnarray[1] = 1
	else
		returnarray[1] = 0

	returnarray[2] = returnString

//	var str = new String(s);
//
//	if (str.search(CONST_PERMISSION) >= 0)
//	{
//		returnarray[3] = 1;
//	}
//	else
//	{
//		returnarray[3] = 0;
//	}
	return returnarray
}

  
  
//**--------------------------------------------------------------
//elimina i punti delle migliaia e sostituisce la virgola con il 
//punto dei decimali
//---------------------------------------------------------------**

function formatta_numeri(stringa)
{
  var i, lung, lung2, posizione, intero, decimale,posizioneintero;
  var esiste=false
  var risultato=""
  lung=stringa.length;
	//elimina il punto delle migliaia  
 for (i = 0; i < lung; i++)
	{
	if (stringa.charAt(i) == ".")
        {
		stringa=stringa.replace(".","");
		}
    }
//sostituisce la virgola dei decimali con il punto  
  nuovastringa = stringa.replace(",", ".");
  lung2=nuovastringa.length;
  
  for (i = 0; i < lung2; i++)
	{
		if (nuovastringa.charAt(i) == ".")
		   {
				   esiste=true 
				   posizione=i
				   intero=nuovastringa.substr(0,posizione)
				   posizioneintero=intero.length+3;
				   decimale=(nuovastringa.substr(posizione+1,2))
				   nuovastringa=intero + "." + decimale				  
								
		   }
		 else 
			{
			esiste=false
			}
     }
 
 //controlla se c' una parte decimale     
    if (esiste == true) 
    {
       risultato =(intero + "."+ decimale)
    }
     else
    { 
      risultato = (nuovastringa)
    }
   
   return(risultato)
}


//----------------------------------------------
//sostituisce in valore la virgola col punto
//----------------------------------------------
function changepv(valore)
{
	var s=String(valore)
	s=s.replace(",",".");
    return (s)
}



//----------------------------------------------
//sostituisce in valore il punto con la virgola 
//----------------------------------------------
function changevp(valore)
{
	var s=String(valore)
	s=s.replace(".",",");
    return (s)
}


//-------------------------------------------------------------
//arrotonda il valore number alla cifra decimale x, default   2
//-------------------------------------------------------------
function arrotonda(number,X) 
{
	number=changepv(number)
	X = (!X ? 2 : X);
	number=Math.round(number*Math.pow(10,X))/Math.pow(10,X);
	return changevp(number)
}

// Removes all characters which do NOT appear in string bag 
// from string s.

function stripCharsNotInBag (s, bag)

{   var i;
    var returnString = "";

    // Search through string's characters one by one.
    // If character is in bag, append to returnString.

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) != -1) returnString += c;
    }

	returnarray = new Array()
	if( returnString != s)
		returnarray[1] = 1
	else
		returnarray[1] = 0

	returnarray[2] = returnString
	var str = new String(s);

//	if (str.search(CONST_PERMISSION) >= 0)
//	{
//		returnarray[3] = 1;
//	}
//	else
//	{
//		returnarray[3] = 0;
//	}

	return returnarray
}

	function nulltoempty(varname)
	{
		if (varname == null)
			varname = ""
		else
		{
			if (varname == 'null')
				varname = ""
		}

		return varname;
	}







function CtrlAlfa(x)
	{
		var x = window.event.keyCode
			if (((x <= 47) || (x >= 58)) && (x!= 13)) 
				{
					event.returnValue = false
				}
	}

// -----------------------------------------------------------------------------------------------------------------------------------------------------------------------
// ---- permette la digitazione di soli numeri ---- permette la digitazione di soli numeri ---- permette la digitazione di soli numeri ----
// ----  onkeypress="CtrlNumeri(this)"
// -----------------------------------------------------------------------------------------------------------------------------------------------------------------------


function CtrlNumeri(x)
	{
		var x = window.event.keyCode
			if ((x <= 47) || (x >= 58)) 
				{
					event.returnValue = false
				}
	}

function CtrlNumeri_Meno(x)
	{
		var x = window.event.keyCode
			if ( (!((x > 47)&&(x < 58))) && (x != 45)) 
				{
					event.returnValue = false
				}
	}

function CtrlTel(x)
	{
		var x = window.event.keyCode
			if ((x < 47) || (x >= 58) && (x != 47) ) 
				{
					event.returnValue = false
				}
	}


function CtrlComune(x)
	{
		var x = window.event.keyCode
				if (((x < 65) || (x > 90)) && ((x < 97) || (x > 122)) && (x!= 32) && (x!= 39) && (x!= 13))
				{
					event.returnValue = false
				}
	}

function CtrlLettera(x)
	{
		var x = window.event.keyCode		
				if (((x < 65) || (x > 90)) && ((x < 97) || (x > 122)) && (x!= 32) && (x!= 39) && (x!=38) && (x!=46))
				{
					event.returnValue = false
				}
	}


function CtrlTitoloProf(x)
	{
		var x = window.event.keyCode		
				if (((x < 65) || (x > 90)) && ((x < 97) || (x > 122)) && (x!= 32) && (x!= 39) && (x!=38) && (x!=46))
				{
					event.returnValue = false
				}
	}

function AlfaNumLettere(x)
    {
    var x = window.event.keyCode	
      if (((((x <= 47) || (x >= 58)) && (x!= 13)))&&((((x < 65) || (x > 90)) && ((x < 97) || (x > 122)) && (x!= 32) && (x!= 39) && (x!=38) && (x!=46)) ))
       				event.returnValue = false
    }




function isValidDate(dateStr)
{
	
	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/; // requires 4 digit year
	var matchArray = dateStr.match(datePat); // is the format ok?

	if (matchArray == null) {
		alert('Data non valida')
		return -1 ;
	}
	

	month = matchArray[1]; // parse date into variables
	day = matchArray[3];
	year = matchArray[4];
	
	if (month < 1 || month > 12) { // check month range
		alert('Data non valida (controllare mese)')
		return -1;
	}

	if (day < 1 || day > 31) {
		alert('Data non valida (controllare giorno)')
		return -1;
	}
	
	if ((month==4 || month==6 || month==9 || month==11) && day==31) 
	{
		alert('Data non valida')
		return -1;
	}

	if (month == 2) 
	{ // check for february 29th
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day>29 || (day==29 && !isleap)) 
		{
			alert('Data non valida (anno non bisestile)')
			return -1;
	   }
	}
	
	if (year <= 1900) {
		alert('Data non valida (controllare anno)')
		return -1;
	}
	
	return 0;
}


function isValidDateII(dateStr)
{
	
	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/; // requires 4 digit year
	var matchArray = dateStr.match(datePat); // is the format ok?

	if (matchArray == null) {
		return false ;
	}
	

	day= matchArray[1]; // parse date into variables
	month = matchArray[3];
	year = matchArray[4];
	
	if (month < 1 || month > 12) { // check month range
		return false;
	}

	if (day < 1 || day > 31) {
		return false;
	}
	
	if ((month==4 || month==6 || month==9 || month==11) && day==31) 
	{
		return false;
	}

	if (month == 2) 
	{ // check for february 29th
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day>29 || (day==29 && !isleap)) 
		{
			return false;
	   }
	}
	
	if (year <= 1900) {
		return false;
	}
	
	return true;
}



function dateDiff(input) 
{
	var date=input;
	date = date.toString();
	
	// conversione dal formato GG/MM/AAAA a quello MM/GG/AAAA
	var format_date = date.substring(3,5) + '/' + date.substring(0,2) + '/' + date.substring(6,10) 
		
	date1 = new Date();
	diff  = new Date();

	date1temp = new Date(format_date);
	date1.setTime(date1temp.getTime());

	
	/*if (isValidDate(format_date)==0)
	{
		date1temp = new Date(format_date);
		date1.setTime(date1temp.getTime());
	}
	else
		return 1; // otherwise exits
	*/
	

	// sets difference date to difference of first date and second date
	var d = new Date
	
	diff.setTime(date1.getTime() - d.getTime());
	timediff = diff.getTime();

	days = (Math.floor(timediff / (1000 * 60 * 60 * 24))+1); 
	
	if ((days<-60)||(days>20))
		return false
	else
		return true;
}



// funzione trim 

	String.prototype.trim = function()
	{
    // Use a regular expression to replace leading and trailing 
    // spaces with the empty string
    return this.replace(/(^\s*)|(\s*$)/g, "");
	}
	

function isbn2EAN(ISBNString, strIdCopyElement){
	/*
	dato un isbn ritorna l'EAN corrispondente
	se strIdCopyElement  NULL allora ritona l'EAN come stringa altrimenti lo scrive nel value di document.getElementById(strIdCopyElement)
	*/

	var PPonderato = Array();
	var SommaPPonderato, RestoPassaggio2;



	// controlli
	if(ISBNString.length <10) return false; // se non sono 10 caratteri esco
	if(String(parseInt(1+ISBNString)).length <10) return false;  // se non sono 9 cifre numeriche esco (metto l'1 da parte e controllo che siano 10 senn  se il numero inizia per 0 il parseinte me lo leva)

	//estraggo i primi 9 caratteri e ricavo il prodotto ponderato.. (m09oltiplico pe ri pesi che sono 1 e 3 alternati)
	
	PPonderato[0] = 9 * 1;
	PPonderato[1] = 7 * 3;
	PPonderato[2] = 8 * 1;
	PPonderato[3] = parseInt(ISBNString.charAt(0)) * 3;
	PPonderato[4] = parseInt(ISBNString.charAt(1)) * 1;
	PPonderato[5] = parseInt(ISBNString.charAt(2)) * 3;
	PPonderato[6] = parseInt(ISBNString.charAt(3)) * 1;
	PPonderato[7] = parseInt(ISBNString.charAt(4)) * 3;
	PPonderato[8] = parseInt(ISBNString.charAt(5)) * 1;
	PPonderato[9] = parseInt(ISBNString.charAt(6)) * 3;
	PPonderato[10] = parseInt(ISBNString.charAt(7)) * 1;
	PPonderato[11] = parseInt(ISBNString.charAt(8)) * 3;
	
	SommaPPonderato = PPonderato[0] + PPonderato[1] + PPonderato[2] + PPonderato[3] + PPonderato[4] + PPonderato[5] + PPonderato[6] + PPonderato[7] + PPonderato[8] + PPonderato[9] + PPonderato[10] + PPonderato[11];

	// calcolo il resto di SommaPPonderato/10 (Passaggio 2)
	RestoPassaggio2 = SommaPPonderato % 10;

	// se il resto  0 allora il numerodicontrollo   0 altrimenti  uguale a 10 - il resto
	NumeroControllo = (RestoPassaggio2 == 0)?(0):(10-RestoPassaggio2);



	var	EAN = "";
	for(var y = 0; y < 9; y++) {
	EAN += String(ISBNString.charAt(y));
	}

	EAN = "978" + EAN + NumeroControllo;

/*
alert(PPonderato[3]);
alert(SommaPPonderato);
alert(RestoPassaggio2);
alert(NumeroControllo);
alert(EAN);
*/
	
	if(strIdCopyElement == null) return EAN;
	else {
			document.getElementById(strIdCopyElement).value = EAN;
			return true;
		}

		
}

function isset(varname){
  return(typeof(window[varname])!='undefined');
}

