
// Basic Regular Expression Definition
var reSelect        = /^select/
var reNotEmpty      = /\w/
var reName          = /^[a-z][a-zàèìòùéçñ\s\`\'\.,\-()°\\^\"]*$/i
//var reWord          = /^\w[\wàèìòùéçñ\`\'\.,\-\°\s()/\^?*\[\]\@\"]*$/i
//var reWords         = /^\w[\wàèìòùéçñ\`\'\.,\-\°\s()/\^?*\[\]\@\"]*$/i
var reNumeric52     = /^[0-9][0-9]?[0-9]?(\.[0-9][0-9])?$/i
var reReal          = /^[0-9]+(\.[0-9]*)?$/i
var reInt           = /^\-?\d+$/
var reNaturalInt    = /^[1-9]\d*$/
var reNatural0Int   = /^\d+$/
var reDay           = /^(0?[1-9]|[12][0-9]|3[01])$/
var reMonth         = /^(0?[1-9]|1[0-2])$/
var reYear          = /^(20|19)?\d\d$/
var reCAP           = /^\d\d\d\d\d$/
var reIVA           = /^\d\d\d\d\d\d\d\d\d\d\d$/
var reSiglaProv     = /^[a-z][a-z]$/i
var reEmail         = /^\w[\w\-\.]*@\w[\w\-\.]*\.[a-z]{2,3}$/i
var reTarga         = /^[a-z0-9]{5,10}$/i
var rePassword      = /^.{4,16}$/
var reCodiceFiscale = /^[A-Z]{6,6}\d\d[A-EHLMPRST]([04][1-9]|[1256][0-9]|[37][01])[A-ILM]\d\d\d[A-Z]$/i
var reCodiceSocieta = /^[A-Z][A-Z]\.[0-9][0-9]\.[0-9][0-9][0-9]/i
var reCodiceProdotto= /^[0-9][0-9][0-9]/i
var reCodiceOrdine	= /^[0-9][0-9][0-9][0-9][0-9]/i
var reCodiceFattura	= /^NIFCEU[0-9][0-9][0-9][0-9][0-9][0-9]/i



var reTime			= /^[012][0-9]:[0-5][0-9]/

// To think about
var reTelFisso      = /^\d[\d \.\/]*[\w()\d\s]*$/
var reTelCell       = /^\d[\d \.\/]*[\w()\d\s]*$/
var reTel           = reTelCell
//var rePartitaIva  = /^\w{6,6}\d\d\w\d\d\w\d\d\d\w$/
//var rePatente     = /\w/



function showError(e, value, type, label, par1, par2) {
	switch (type) {
		case 'text':
			if (value) alert('"' + value + '" non è un valore valido per il campo "' + label + '".')
			else alert('Non è stato specificato un valore valido per il campo "' + label + '".')
			break;

		case 'date':
			if (value) alert('"' + value + '" non è una data valida per il campo "' + label + '".')
			else alert('Non è stata specificata una data valida per il campo "' + label + '".')
			break;

		case 'time':
			if (value) alert('"' + value + '" non è un\' ora valida per il campo "' + label + '" (HH:MM).')
			else alert('Non è stata specificata un\' ora valida per il campo "' + label + '".')
			break;

		case 'int':
			if (value) alert('"' + value + '" non è una numero compreso tra '+par1+' e '+par2+' per il campo "' + label + '".')
			else alert('Non è stato specificata un numero compreso tra '+par1+' e '+par2+' per il campo "' + label + '".')
			break;

		case 'real':
			if (value) alert('"' + value + '" non è una numero compreso tra '+par1+'.0 e '+par2+'.0 per il campo "' + label + '".')
			else alert('Non è stato specificata un numero compreso tra '+par1+'.0 e '+par2+'.0 per il campo "' + label + '".')
			break;

		case 'checkbox':
			alert('Il campo "' + label + '" non è stato spuntato')
			break;

		case 'confirmPassword':
			alert('Il valore del campo '+label+' non coincide con '+par1+'.')
			break;

		case 'password':
			if (value) alert('"' + value + '" non è una password valida per il campo "' + label + '".')
			else alert('Non è stato specificato nessuna password per il campo "' + label + '".')
			break;

		case 'radio':
		case 'select':
			alert('Non è stata selezionata nessuna voce per il campo "' + label + '".')
			break;

		case 'singleRadio':
			alert('Il campo "' + label + '" non è stato selezionato')
			break;
	}
	if (type != 'radio' && type != 'singleRadio') e.focus()
	return false
}


function testRE(e, re, label) {
	if (e.value && re.test(e.value)) return true
	else return (label ? showError(e, e.value, 'text', label) : false)
}


function testOptRE(e, re, label) {
	if (e.value == null || e.value == '') return true
	else return testRE(e, re, label)
}


function testInt(e, min, max, label) {
	if (e.value == '' + parseInt(e.value, 10) && e.value >= min && e.value <=max) return true
	else return (label ? showError(e, e.value, 'int', label, min, max) : false)
}


function testOptInt(e, min, max, label) {
	if (e.value==null || e.value=='') return true
	else return testInt(e, min, max, label)
}


function testReal(e, min, max, label) {
	tmp = parseFloat(e.value)
	if (tmp && tmp >= min && tmp <=max) return true
    else return (label ? showError(e, e.value, 'real', label, min, max) : false)
	return true
}


function testOptReal(e, min, max, label) {
	if (e.value==null || e.value=='') return true
    else return testReal(e, min, max, label)
}


function testSelect(e, firstValidIndex, label) {
	if (e.selectedIndex >= firstValidIndex) return true
	else return (label ? showError(e, false, 'select', label) : false)
}


function testSelectOption(e, value) {
	for (var i=0; i<e.options.length; i++) {
		if (e.options[i].selected && e.options[i].value == value) return true
	}
	return false
}


function testDate(e, label) {
	var dmy = e.value.split('/')
	if (reDay.test(dmy[0]) && reMonth.test(dmy[1]) && reYear.test(dmy[2])) {

		var d = parseInt(dmy[0], 10)
		var m = parseInt(dmy[1], 10)
		var y = parseInt(dmy[2], 10)

		// Con il passare degli anni aggiustare l'assegnazione automatica del secolo
		if (y < 10) y += 2000
		else if (y < 100) y += 1900

		var bisestile = (y % 4 == 0 && (y % 100 != 0 || y % 400 == 0) ? 1 : 0);

		if ( m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12 || (m==2 && d<=28+bisestile) ||
			 ((m==4 || m==6 || m==9 || m==11) && d <=30) ) {
			e.value = (d < 10 ? '0' : '') + d + '/' + (m < 10 ? '0' : '') + m + '/' + y
			return true
		}
	}
	return (label ? showError(e, e.value, 'date', label) : false)
}


function testOptDate(e, label) {
	if (e.value == null || e.value == '') return true
	else return testDate(e, label)
}


function testPasswords(e1, e2, label1, label2) {
	if (!rePassword.test(e1.value)) return (label1 ? showError(e1, e1.value, 'password', label1) : false)
	if (e1.value != e2.value) {
		if (label1 && label2) showError(e1, e1.value, 'confirmPassword', label1, label2)
		e2.focus()
		return false
	} else return true
}


function testCheckBox(e, label) {
	if (label && !e.checked) showError(e, e.value, 'checkbox', label)
	return e.checked
}


function testRadio(e, label) {
	if (e.type) {
		if (e.checked) return true
		return (label ? showError(e, e.value, 'singleRadio', label) : false)
	} else {
		for (var i=0; i<e.length; i++) {
			if (e[i].checked) return true
		}
		return  (label ? showError(e[0], false, 'radio', label) : false)
	}
}


function testRadioElement(e, value) {
	for (var i=0; i<e.length; i++) {
		if (e[i].checked && e[i].value == value) return true
	}
	return false
}


function checkForm(formId, checksToDo) {
	var v
	if (typeof checksToDo != 'object') return true
	for (i=0; i<checksToDo.length; i++) {
		eval('v = '+checksToDo[i])
		if (!v) return false
	}
	return true
}


function checkAndSubmit(formId, checksToDo) {
	if (checkForm(formId, checksToDo)) {
		formId.submit()
		return true
	} else return false
}

