var validForm
var errore

function setErrorOn(id, testoErrore) {
	if ($('p-' + id)) {
		$('p-' + id).addClassName('errore')
	}
	if ($(id)) {
		$(id).addClassName('errore')
	}
	validForm = false
	if (!errore) {
		errore = testoErrore
	}
}

function unsetErrorOn(id) {
	if ($('p-' + id)) {
		$('p-' + id).removeClassName('errore')
	}
	if ($(id)) {
		$(id).removeClassName('errore')
	}
}

function validateField(id, testoErrore) {
	if (!Field.present(id)) {
		setErrorOn(id, testoErrore)
	} else {
		unsetErrorOn(id)
	}
}

var reg = /^ *([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4}) *$/;

function validateMail(id, testoErrore) {
	if (!Field.present(id) || !reg.test(Field.getValue(id))) {
		setErrorOn(id, testoErrore)
	} else {
		unsetErrorOn(id)
	}
}

function getRB(id) {
	el = Form.getInputs('form-feedback','radio',id).find(function(radio) { return radio.checked })
	if (el) {
		return el.value
	} else {
		return undefined
	}
}

function validateRadio(id, testoErrore) {
	if (getRB(id)) {
		unsetErrorOn(id)
	} else {
		setErrorOn(id, testoErrore)
	}
}

function validateAltro(id, value, textfield, testoErrore) {
	if (getRB(id) == value) {
		if ($(textfield).disabled) {
			$(textfield).enable()
		}
		validateField(textfield, testoErrore)
	} else {
		unsetErrorOn(textfield)
		$(textfield).clear()
		if (!$(textfield).disabled) {
			$(textfield).disable()
		}
	}
}

function validateFeedbackForm() {
	validForm = true
	errore = null
	validateField('nome', 'Specificare il nome')
	validateField('cognome', 'Specificare il cognome')
	validateField('notaio-in', 'Specificare il distretto notarile')
	validateAltro('associato', 'si', 'associato-a', 'Non è stato specificato il campo dello studio associato')
	validateAltro('software', 'altro', 'altro-sw', 'Specificare il software utilizzato')
	validateAltro('punto-forza', 'altro', 'punto-forza-altro', 'Specificare il punto di forza del software utilizzato')
	validateAltro('punto-debole', 'altro', 'punto-debole-altro', 'Specificare il punto debole del software utilizzato')
	validateAltro('cambiare', 'altro', 'cambio-sistema-altro', 'Specificare i motivi per i quali si sarebbe disposti a cambiare sistema informativo')
	validateField('nota', 'Specificare cosa ne pensa, alla luce di quanto ha visionato, della soluzione SINFON ASP')
	validateMail('mail', 'Specificare un indirizzo mail valido')
	validateField('telefono', 'Specificare un recapito telefonico')

	validateRadio('mono-multi', 'Specificare se lo studio è monodomicilio o Multirecapito')
	validateRadio('associato', 'Specificare se lo studio è associato')
	validateRadio('numero-pc', 'Specificare il numero di PC')
	validateRadio('software', 'Specificare il sofware utilizzato')
	validateRadio('backup', 'Specificare ogni quanto viene fatto il backup dei dati')
	validateRadio('server', 'Specificare ogni quanto viene sostituito il server')
	validateRadio('firew', 'Specificare se è presente un firewall nel vostro sistema informativo')
	validateRadio('percezione', 'Specificare se ha percezione di quanto spende per il suo sistema informativo oggi')
	validateRadio('cambiare', 'Specificare quale parametro La indurrebbe a cambiare sistema informativo')
	validateRadio('punto-forza', 'Specificare il punto di forza del software utilizzato')
	validateRadio('punto-debole', 'Specificare il punto debole del software utilizzato')
	validateRadio('testimonianza', 'Specificare la testimonianza video l\'ha più colpita')
	if (getRB('accetto') && getRB('accetto') == 'S') {
		unsetErrorOn('accetto')
	} else {
		setErrorOn('accetto', '&Egrave; necessario sottoscrivere l\'informativa sulla privacy')
	}
	if (validForm) {
		$('invia').show()
		$('testo-errore').hide()
	} else {
		$('invia').hide()
		$('testo-errore').innerHTML = errore
		$('testo-errore').show()
	}
}

function redirect() {
	location.href = "/";
}

function showConfirm() {
	grazie = new Element('p')
	grazie.setAttribute('id', 'grazie')
	grazie.insert('<h1>Grazie per aver aver compilato il form</h1><p style="margin-bottom: 100px"></p>')
	$('messaggio_conferma').insert(grazie)
	new Effect.Fade(grazie, { delay: 5, duration: 2, from: 1, to: 0, afterFinish: redirect })
}

function request() {
	Form.request('form-feedback', {
		onSuccess: function(transport) {
			new Effect.Fade('invio-in-corso', { duration: 1, from: 1, to: 0, afterFinish: showConfirm })
		},
		onFailure: function(transport) {
			$('tutto-il-form').insert('errore')
		}
	})
}

function doIt() {
	richiesta_in_corso = new Element('p')
	richiesta_in_corso.setAttribute('id', 'invio-in-corso')
	richiesta_in_corso.insert('Invio in corso')
	richiesta_in_corso.setStyle('font-size: 17px; font-weight: bold; margin-bottom: 100px')
	$('messaggio_conferma').insert(richiesta_in_corso)
	new Effect.Fade(richiesta_in_corso, { duration: 1, from: 0, to: 1, afterFinish: request })
}

function doRequest(event) {
	event.stop()
	new Effect.Fade('tutto-il-form', { duration: 1, from: 1, to: 0, afterFinish: doIt })
}

function initFeedbackForm() {
	$('associato-a').disable()
	$('altro-sw').disable()
	$('punto-forza-altro').disable()
	$('punto-debole-altro').disable()
	$('cambio-sistema-altro').disable()
	new Form.Observer('form-feedback', .5, validateFeedbackForm)
	new Form.Element.Observer('nome', .5, validateFeedbackForm)
	new Form.Element.Observer('cognome', .5, validateFeedbackForm)
	new Form.Element.Observer('notaio-in', .5, validateFeedbackForm)
	new Form.Element.Observer('associato-a', .5, validateFeedbackForm)
	new Form.Element.Observer('altro-sw', .5, validateFeedbackForm)
	new Form.Element.Observer('punto-forza-altro', .5, validateFeedbackForm)
	new Form.Element.Observer('punto-debole-altro', .5, validateFeedbackForm)
	new Form.Element.Observer('cambio-sistema-altro', .5, validateFeedbackForm)
	new Form.Element.Observer('telefono', .5, validateFeedbackForm)
	new Form.Element.Observer('mail', .5, validateFeedbackForm)
	new Form.Element.Observer('nota', .5, validateFeedbackForm)
	new Event.observe('invia', 'click', doRequest)
}
