/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/* FUNZIONI VALIDAZIONE FORM */
var genericChecks = [];
var specificChecks = {
	"required": {"check": "trim(input.val())==''", "error": "input.attr('errorRequired') || input.attr('error') || 'Il campo non puo\\' essere vuoto'", "eval": true},
	"pattern": {"check": "!(new RegExp(input.attr('pattern'))).test(input.val())", "error": "input.attr('errorPattern') || input.attr('error') || 'Il campo contiene un valore in formato non valido'", "eval": true},
	"min": {"check": "input.val()*1<input.attr('min')*1", "error": "input.attr('errorMin') || input.attr('error') || 'Inserire un valore non inferiore a '+input.attr('min')", "eval": true},
	"max": {"check": "input.val()*1>input.attr('max')*1", "error": "input.attr('errorMax') || input.attr('error') || 'Inserire un valore non superiore a '+input.attr('max')", "eval": true},
	"minlength": {"check": "trim(input.val()).length<input.attr('minlength')*1", "error": "input.attr('errorMinlength') || input.attr('error') || 'Il testo nel campo deve essere lungo almeno '+input.attr('minlength')+' caratteri'", "eval": true},
	"maxlength": {"check": "trim(input.val()).length>input.attr('maxlength')*1", "error": "input.attr('errorMaxlength') || input.attr('error') || 'Il testo nel campo non deve essere piu\\' lungo di '+input.attr('maxlength')+' caratteri'", "eval": true},
	"equals": {"check": "input.val()!=$('#'+input.attr('equals')).val()", "error": "input.attr('errorEquals') || input.attr('error') || 'Il valore del campo non corrisponde al campo di controllo'", "eval": true},
	"custom": {"check": "eval(input.attr('custom'))", "error": "input.attr('errorCustom') || input.attr('error') || 'Il campo contiene un valore non valido'", "eval": true}
};
var lastcheck = true;

/**
 * Verifica la validit‡ di un form esaminandone prima i singoli campi di input e poi applicando
 * i genericChecks.
 *
 * @uses genericChecks
 * @param {object} ilForm form da controllare
 * @return {bool} risultato della verifica
 */
function checkForm(ilForm) {
	var ok = true;
	lastcheck = true;
	var errorText = '';
	var errorOpt = '';

	ilForm = $(ilForm);
	ilForm.find('input, select, textarea').each(function () {
		$(this).css('border','').blur();
		ok = ok && lastcheck;
	});

	if(!ok)	{
		alert('Sono stati individuati degli errori nei valori inseriti!\n\nSposta il mouse sui campi evidenziati per visualizzare una descrizione dell\'errore.');
		return false;
	}
	else {
		var i = 0;
		for(i in genericChecks) {
			if(eval(genericChecks[i].check)) {
				var error = genericChecks[i].eval ? eval(genericChecks[i].error): genericChecks[i].error;
				if(!genericChecks[i].optional) errorText += error;
				else errorOpt += error;
			}
		}
	}

	if(errorText != '') {
		alert('Sono stati individuati i seguenti errori:\n\n'+errorText);
		return false;
	}
	else if(errorOpt != '') {
		errorOpt = 'Sono stati individuati i seguenti problemi:\n\n'+errorOpt+'\nConfermi i dati inseriti?';
		return confirm(errorOpt);
	}
	else return true;
}

/**
 * Verifica la validit‡ di un singolo campo input del form applicando gli specificChecks.
 *
 * @uses specificChecks
 * @param {object} input campo da verificare
 * @param {array} conditions verifiche da applicare
 */
function checkInput(input, conditions) {
	var errorText = '';
	var i = 0;
	input = $(input);

	if(!input.attr('disabled')) {
		for(i in conditions) {
			if(eval(specificChecks[conditions[i]].check)) {
				errorText = specificChecks[conditions[i]].eval ? eval(specificChecks[conditions[i]].error): specificChecks[conditions[i]].error;

				input.css('border','2px solid red').attr('title',errorText);
				lastcheck = false;
				return lastcheck;
			}
		}
	}

	input.css('border','1px solid green').removeAttr('title');
	lastcheck = true;
	return lastcheck;
}
/* FINE FUNZIONI VALIDAZIONE FORM */

$(function() {
    //inizializzazione del datepicker
    $.datepicker.regional['it'] = {
		closeText: 'Fine',
		prevText: 'Prec',
		nextText: 'Succ',
		currentText: 'Oggi',
		monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno',
		'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'],
		monthNamesShort: ['Gen', 'Feb', 'Mar', 'Apr', 'Mag', 'Giu',
		'Lug', 'Ago', 'Set', 'Ott', 'Nov', 'Dic'],
		dayNames: ['Domenica', 'Lunedì', 'Martedì', 'Mercoledì', 'Giovedì', 'Venerdì', 'Sabato'],
		dayNamesShort: ['Dom', 'Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab'],
		dayNamesMin: ['Do','Lu','Ma','Me','Gi','Ve','Sa'],
		weekHeader: 'Wk',
		dateFormat: 'mm/dd/yy',
		firstDay: 1,
		isRTL: false,
		showMonthAfterYear: false,
		yearSuffix: ''}
    $.datepicker.setDefaults( $.datepicker.regional[ "it" ] );
    $(".datepicker").datepicker({
        changeMonth: true,
        changeYear: true
    });
    
    //inizializzazione della galleria immagini
    $("a[rel^='prettyPhoto']").prettyPhoto();
});
