/*
*  checkForm.js
* ----------------------------------------------------------------------------
*	Copyright © 1995-2001 Intesys S.r.l. Verona (I). All rights reserved.
* ----------------------------------------------------------------------------
*  Data e versione:
*	15/11/2001 - 2.2
* ----------------------------------------------------------------------------
*  Descrizione:
*	Libreria Javascript per gestire i controlli sui campi di una form.
* ----------------------------------------------------------------------------
*
*	\n = new line
*	\r = carriage return
*	\t = tab
*	\n = form feed
*	\v = vertical tab
*	\w = [a-zA-Z0-9_]
*	\s = [ \t\n\r\f\v]
*	\d = [0-9]
*	.  = [^\n]
*/


// Basic Regular Expression Definition
var reSelect        = /^select/
var reNotEmpty      = /\w/
var reName          = /^[a-z][a-zàèìòùéçñ\`\'\.\s]*$/i
var reWord          = /^\w[\wàèìòùéçñ\`\'\.,\-\°]*$/i
var reWords         = /^\w[\wàèìòùéçñ\`\'\.,\-\°\s]*$/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 reMinute        = /^(0?[0-9]|[1-5][0-9])$/
var reHour          = /^(0?[0-9]|1[0-9]|2[0-3])$/
var reCAP           = /^\d\d\d\d\d$/
var reSiglaProv     = /^[a-z][a-z]$/i
var reEmail         = /^\w[\w\-\.]*@\w[\w\-\.]*\.[a-z]{2,4}$/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 reHourMinSec    = /^([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/

// To think about
var reTelFisso      = /^0\d{6,13}$/
var reTelCell       = /^\d{7,15}$/
var reTel           = reTelCell
var rePercento      = /^(100|[1-9]?[0-9])$/
var reEuro          = /^\d*([.]\d\d?)?$/
//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 'timestamp':
			if (value) alert('"' + value + '" non è un data/ora valida per il campo "' + label + '".')
			else alert('Non è stata specificata una data/ora valida per il campo "' + label + '".')
			break;

		case 'hour':
			if (value) alert('"' + value + '" non è un\'ora valida per il campo "' + label + '".')
			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 'checkbox':
			alert('Il campo "' + label + '" non è stato spuntato')
			break;

		case 'checkboxList':
			alert('Selezionare almenno una voce per il campo "' + label + '".')
			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' && typeof(e)=='object') 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 testSelect(e, firstValidIndex, label) {
	if (e.selectedIndex >= firstValidIndex) return true
	else return (label ? showError(e, false, 'select', label) : false)
}


function testSelectMultiple(e, label) {
	for (var i=0; i<e.options.length; i++) {
		if (e.options[i].selected && i>0 ) return true
	}
	return (label ? showError(e, false, 'select', label) : false)
}


function testSelectAlLeastOneOption(e, label) {
	return (e.options.length > 0 ? true : (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 testOra(e, label) {
	var hhmm = e.value.split(':')
	if (reHour.test(hhmm[0]) && reMinute.test(hhmm[1])) {
		return true
	}
	return (label ? showError(e, e.value, 'hour', label) : false)
}


function testOptOra(e, label) {
	if (e.value == null || e.value == '') return true
	else return testOra(e, label)
}


function testTimestamp(e, label) {
	var dh = e.value.split(' ')
	var dmy = dh[0].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) ) {

			if (typeof(dh[1])=='undefined' || reHourMinSec.test(dh[1]) ) {
		
				e.value = (d < 10 ? '0' : '') + d + '/' + (m < 10 ? '0' : '') + m + '/' + y + (typeof(dh[1]) != 'undefined' ? ' '  + dh[1] : '')
				return true
			}
		}
	}
	return (label ? showError(e, e.value, 'date', label) : false)
}


function testOptTimestamp(e, label) {
	if (e.value == null || e.value == '') return true
	else return testTimestamp(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 testCheckBoxList(formId, checkboxName, label) {
	for (var i=0; i<formId.elements.length; i++) {
		if (formId.elements[i].name == checkboxName
				&& formId.elements[i].checked) return true
	}
	return showError(false, false, 'checkboxList', label)
}


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 (var 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
	}
}
