/**
* @author Emanuel 
* 
* js di utility per la validazione dei campi 
*
*/


/** VARIABILI */

// Declaring required variables
var digits = "0123456789";
// non-digit characters which are allowed in phone numbers
var phoneNumberDelimiters = "()- ";
// characters which are allowed in international phone numbers
// (a leading + is OK)
var validWorldPhoneChars = phoneNumberDelimiters + "+";
// Minimum no of digits in an international phone no.
var minDigitsInIPhoneNumber = 1;



/** Funzione trim 
	Elimina gli spazi all'interno di una stringa
*/
function trim(stringa) {
	if (stringa != null) {
		while (stringa.indexOf(" ") != -1) {
			stringa = stringa.replace(" ", "");
		}
	}
	return stringa;
}


/** Controllo textfield */
function validaField(id_elemento) {
	var elemento;
	value = prendiElementoDaId(id_elemento).value;
	value = trim(value);
	if (value == null || value == "") {
		return false;
	} else {
		return true;
	}
}


/** Controllo radiobutton */
function validaRadio(id_elemento) {
	if (!prendiElementoDaId(id_elemento).checked == true) {
		return false;
	} else {
		return true;
	}
}


/** Controllo indirizzo Email */
function validaEmail(mail) {
	var emailStr = prendiElementoDaId(mail).value;
	if (emailStr == null || trim(emailStr) == "") {
		return false;
	}
	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) {
		/* Too many/few @'s or something; basically, this address doesn't
     even fit the general mould of a valid e-mail address. */
//		alert("Email address seems incorrect (check @ and .'s)");
		return false;
	}
	var user = matchArray[1];
	var domain = matchArray[2];
	if (user.match(userPat) == null) {
    // user is not valid
//		alert("The username doesn't seem to be valid.");
		return false;
	}
	var IPArray = domain.match(ipDomainPat);
	if (IPArray != null) {
    // this is an IP address
		for (var i = 1; i <= 4; i++) {
			if (IPArray[i] > 255) {
//				alert("Destination IP address is invalid!");
				return false;
			}
		}
		return true;
	}
	var domainArray = domain.match(domainPat);
	if (domainArray == null) {
//		alert("The domain name doesn't seem to be valid.");
		return false;
	}
	var atomPat = new RegExp(atom, "g");
	var domArr = domain.match(atomPat);
	var len = domArr.length;
	if (domArr[domArr.length - 1].length < 2 || domArr[domArr.length - 1].length > 3) {
   // the address must end in a two letter or three letter word.
//		alert("The address must end in a three-letter domain, or two letter country.");
		return false;
	}

// Make sure there's a host name preceding the domain.
	if (len < 2) {
		return false;
	}
	return true;
}


/** Controllo numeri */
function validaNumber(id_elemento) {
	var s = prendiElementoDaId(id_elemento).value;
	var i;
	for (i = 0; i < s.length; i++) {   
        // Check that current character is number.
		var c = s.charAt(i);
		if (((c < "0") || (c > "9"))) {
			return false;
		}
	}
	return true;
}

function validaDecimale(id_elemento)//fun 1
{
    var varValue = document.getElementById(id_elemento).value;

    if(isNaN(varValue))
    {
        document.getElementById (id_elemento).value="";
        document.getElementById(id_elemento).focus();        
        return false;
    }
    else if (varValue == 0.00)
    {
        document.getElementById(id_elemento).value=0;
        document.getElementById(id_elemento).focus();        
        return false;    
    }
    else
    {
        return true; 
    }
}

function validaNumberTelephon(id_elemento) {
	var s = prendiElementoDaId(id_elemento).value;
	var i;
	for (i = 0; i < s.length; i++) {   
        // Check that current character is number.
		var c = s.charAt(i);
		if(c != "+"){
			if (((c < "0") || (c > "9"))) {
				return false;
			}
		}
	}
	return true;
}

/* Controllo Formato valuta*/
function validaValuta(id_elemento) {
	var s = prendiElementoDaId(id_elemento).value;
	var i;
	for (i = 0; i < s.length; i++) {   
        // Check that current character is number.
		var c = s.charAt(i);
		if (((c < "0") || (c > "9")) && c != ".") {
			return false;
		}
	}
	return true;
}

/** Controllo numero di telefono internazionale*/
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;
		}
	}
	return returnString;
}
function validaNumberForPhoneNumber(s) {
	var i;
	for (i = 0; i < s.length; i++) {   
        // Check that current character is number.
		var c = s.charAt(i);
		if (((c < "0") || (c > "9"))) {
			return false;
		}
	}
	return true;
}
function validaPhoneNumber(id_elemento) {
	var strPhone = prendiElementoDaId(id_elemento).value;
	s = stripCharsInBag(strPhone, validWorldPhoneChars);
	return (validaNumberForPhoneNumber(s) && s.length >= minDigitsInIPhoneNumber);
}


/** Controllo partita iva*/
function validaPIVA(id_elemento) {
	var pi = prendiElementoDaId(id_elemento).value;
	if (pi == "" || pi.length != 11) {
		return false;
	}
	validi = "0123456789";
	for (i = 0; i < 11; i++) {
		if (validi.indexOf(pi.charAt(i)) == -1) {
			return false;
		}
	}
	s = 0;
	for (i = 0; i <= 9; i += 2) {
		s += pi.charCodeAt(i) - "0".charCodeAt(0);
	}
	for (i = 1; i <= 9; i += 2) {
		c = 2 * (pi.charCodeAt(i) - "0".charCodeAt(0));
		if (c > 9) {
			c = c - 9;
		}
		s += c;
	}
	if ((10 - s % 10) % 10 != pi.charCodeAt(10) - "0".charCodeAt(0)) {
		return false;
	}
	return true;
}


/** Controllo codice fiscale */
function validaCF(id_elemento) {
	var validi, i, s, set1, set2, setpari, setdisp;
	var cf = prendiElementoDaId(id_elemento).value;
	
	if (cf == "") {
		return false;
	}
	
	cf = cf.toUpperCase();
	if (cf.length != 16) {
		return false;
	}
	
	validi = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	for (i = 0; i < 16; i++) {
		if (validi.indexOf(cf.charAt(i)) == -1) {
			return false;
		}
	}
	
	set1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	set2 = "ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ";
	setpari = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	setdisp = "BAKPLCQDREVOSFTGUHMINJWZYX";
	s = 0;
	for (i = 1; i <= 13; i += 2) {
		s += setpari.indexOf(set2.charAt(set1.indexOf(cf.charAt(i))));
	}
	for (i = 0; i <= 14; i += 2) {
		s += setdisp.indexOf(set2.charAt(set1.indexOf(cf.charAt(i))));
	}
	if (s % 26 != cf.charCodeAt(15) - "A".charCodeAt(0)) {
		return false;
	}
	return true;
}


/** Funzioni che producono un alert prima dell'eliminazione e poi eseguono Link.js*/
function DeleteAndLink(question,classPHP,valore){
	var answer = confirm(question);
	if (answer == true) {
		Link(classPHP,valore);
	}
}
		
function DeleteAndLinkDato(question,classPHP,valore,dato){
	var answer = confirm(question);
	if (answer == true) {
		LinkDato(classPHP,valore,dato);
	}
}
		
function DeleteAndLinkDatoParziale(question,classPHP,divdinamico,valore,dato){
var answer = confirm(question);
	if (answer == true) {
		LinkDatoParziale(classPHP,divdinamico,valore,dato);
	}
}
		

function PromptAndLinkDato(question,classPHP,valore,dato){
	var answer = prompt(question);
	if (answer != null && answer.length > 1) {
		dato += '&note='+answer;
		LinkDato(classPHP,valore,dato);
	}else{
		alert('Inserire la motivazione');
		answer = prompt(question);
		if (answer != null && answer.length > 1) {
			dato += '&note='+answer;
			LinkDato(classPHP,valore,dato);
		}else{
			alert('Errore.\nMotivazione mancante.\nL\'appuntamento non è stato cancellato.');
		}
	}
}
	
function PromptAndLinkDatoBollo(question,classPHP,valore,dato){
	var answer = prompt(question);
	
	dato += '&note='+answer;
	
	LinkDato(classPHP,valore,dato);

}
		
function PromptAndLinkDatoParziale(question,classPHP,divdinamico,valore,dato){
	var answer = prompt(question);
	if (answer != null && answer.length > 1) {
		dato += '&note='+answer;
		LinkDatoParziale(classPHP,divdinamico,valore,dato);
	}else{
		alert('Inserire la motivazione');
		answer = prompt(question);
		if (answer != null && answer.length > 1) {
			dato += '&note='+answer;
			LinkDatoParziale(classPHP,divdinamico,valore,dato);
		}else{
			alert('Errore.\nMotivazione mancante.\nL\'appuntamento non è stato cancellato.');
		}
	}
}
