/********************************************************************************************
* Gestione form
*
* @copyright www.ander-group.com
* @author    Luca Dioli <dioli-at-ander-group.ch>
*********************************************************************************************/

var msgBox = true;
var defaultMsg = "* = required fields";
var defaultFieldMsg = "Per favore completare questo campo.";
var defaultFieldNumberMsg = "Il valore inserito non é un numero.";

//MSG

function setMsg(){
	if(msgBox == true){
	    $("msgBox").innerHTML = "<br />I dati non sono stati inviati, per favore controllare che tutti i campi obbligatori siano stati compilati, in particolare assicurarsi di aver selezionato almeno un corso.";
	}
}

function setFieldMsg(idErrorBox,text){

	if(text == undefined){
	    text = defaultFieldMsg;
	}
	
	$(idErrorBox).show();
	$(idErrorBox).innerHTML = text;
}

function clearFieldMsg(idErrorBox){
	if($(idErrorBox)){
	$(idErrorBox).hide();
    $(idErrorBox).innerHTML = "";
		}
}

//FIELDS

function controlsKids(formObj,formName){
	
	var validator = new Validator();
	var eno = false;
	
	fields.setFormName(formName);
	
	for(i=0;i<fields.number();i++){
		field = fields.getField(i);
		validator.checkField(field);
	}
	
	if(formObj.sett1.value == "" && formObj.sett2.value == "" && formObj.sett3.value == "" && formObj.sett4.value == "" && formObj.sett5.value == ""){
	    eno = true;
	} 
	
	$("errore_corsi").hide();
	
	if(validator.errors() == false && eno == false){
	    form.submit();
	}
	else{ 
	    setMsg();
			if(eno == true){
					$("errore_corsi").show();
			}
	}
	
}

function controlsJunior(formObj,formName){
	
	var validator = new Validator();
	var eno = false;
	
	fields.setFormName(formName);
	
	for(i=0;i<fields.number();i++){
		field = fields.getField(i);
		validator.checkField(field);
	}
	
	if(formObj.capriasca.value == "" && formObj.mendrisio.value == "" && formObj.olivone1.value == "" && formObj.olivone2.value == "" && formObj.cari1.value == "" && formObj.locarno.value == "" && formObj.bellinzona1.value == "" && formObj.bellinzona2.value == "" && formObj.bellinzona3.value == ""){
	    eno = true;
	} 
	
	if(formObj.bellinzona1.value != "" && ( formObj.bellinzona1_1.value == "" || formObj.bellinzona1_2.value == "" || formObj.bellinzona1_3.value == "" || formObj.bellinzona1_4.value == "" )){
	    eno = true;
	}
	
	if(formObj.bellinzona2.value != "" && ( formObj.bellinzona2_1.value == "" || formObj.bellinzona2_2.value == "" || formObj.bellinzona2_3.value == "" || formObj.bellinzona2_4.value == "" )){
	    eno = true;
	}
	
	if(formObj.bellinzona3.value != "" && ( formObj.bellinzona3_1.value == "" || formObj.bellinzona3_2.value == "" || formObj.bellinzona3_3.value == "" || formObj.bellinzona3_4.value == "" )){
	    eno = true;
	}
	
	$("errore_corsi").hide();
	
	if(validator.errors() == false && eno == false){
	    form.submit();
	}
	else{ 
	    setMsg();
			if(eno == true){
					$("errore_corsi").show();
			}
	}
	
}

/**
 * Field Class
 *
 * @var idObj
 * @var checkType
 * @var formName
 *
 * @function getId()
 * @function getErrorId()
 * @function getType()
 * @function setFormName()
 */

function Field(idObj,checkType) {
    this.idObj = idObj;
	this.checkType = checkType;
	this.formName = "";
}

Field.prototype.idObj;
Field.prototype.checkType;
Field.prototype.formName;

Field.prototype.getId = function() {
    return this.idObj+"_"+this.formName;
}

Field.prototype.getErrorId = function() {
    return "error_"+this.idObj+"_"+this.formName;
}

Field.prototype.getType = function() {
    return this.checkType;
}

Field.prototype.setFormName = function(formName) {
    this.formName = formName;
}

/**
 * Fields Class
 *
 * @var formName
 * @var fields
 * @var n
 *
 * @function getFormName()
 * @function addField()
 * @function getField()
 * @function number()
 */
 
function Fields() {
    this.formName = "";
	this.fields = Array();
	this.n = 0;
}

Fields.prototype.formName;
Fields.prototype.fields;
Fields.prototype.n;

Fields.prototype.getFormName = function() {
    return this.formName;
}

Fields.prototype.addField = function(field) {
    this.fields[this.n] = field;
	this.n++;
}

Fields.prototype.getField = function(n) {
    return this.fields[n];
}

Fields.prototype.setFormName = function(formName) {
	this.formName = formName;												 
	for(i=0;i<this.n;i++){
		this.fields[i].setFormName(this.formName)
	}												 
}

Fields.prototype.number = function() {
    return this.n;
}





/**
 * Validator Class
 *
 * @var fieldObj
 * @var field
 * @var idErrorBox
 * @var error
 *
 * @function checkField()
 * @function checkEmptyField()
 * @function checkEmailField()
 * @function errors()
 */

function Validator() {
    this.fieldObj = "";
    this.field = "";
    this.idErrorBox = "";
    this.error = false;
}

Validator.prototype.field;
Validator.prototype.fieldObj;
Validator.prototype.idErrorBox;
Validator.prototype.error;

Validator.prototype.checkField = function(field) {

    this.field = field;
    this.fieldObj = $(this.field.getId());
    this.idErrorBox = this.field.getErrorId();
    
    var fieldType = field.getType();
    
	if(this.fieldObj != undefined){
		
		if(fieldType == "empty"){
		    this.checkEmptyField();
		}
		else if(fieldType == "email"){
		    this.checkEmailField();
		}
		else if(fieldType == "birthdate"){
		    this.checkBirthDate();
		}
		
	}
    
}

Validator.prototype.checkEmptyField = function() {
    
    var empty = false;
		
	if(this.fieldObj.type == "select-one"){//select...
    	for(x=0;x<this.fieldObj.length;x++){
    	
        	if(this.fieldObj[x].selected == true && this.fieldObj[x].value == ""){
            	empty = true;
        	}
    	}
	}
	else if(this.fieldObj.type == "radio"){//radio...
		
		if(this.fieldObj.checked == true){
			empty = false;
		}
		else{
			var checked = false
   	 		var id = this.fieldObj.id;
   	 		
	    	for(x=1;x<=5;x++){
	    		field = $(id+""+x);
	    		if(field != false){
	    		    try{
	    				if(field.checked == true){
            				checked = true;
            				break;
        				}
        			}
        			catch(err){
        				break
        			}
        		}
        		else{
        			break;
        		}
    		}
    		
    		if(checked == false){
    	    	empty = true;
    		}
    	}
    	
	}
	else{//input text...
   		if(this.fieldObj.value == ""){
   		    empty = true;
		}
	}
	
	if(empty == true){
	    setFieldMsg(this.idErrorBox);
		this.error = true;
	}	
	else{
		clearFieldMsg(this.idErrorBox);
	}
}

Validator.prototype.checkEmailField = function() {
    
    if(this.fieldObj.value == ""){
  		setFieldMsg(this.idErrorBox);
		return true;
	}
	else{
		
		clearFieldMsg(this.idErrorBox);
	
	    var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	    
	    if(reg.test(this.fieldObj.value) == false) {
	        setFieldMsg(this.idErrorBox,"Invalid e-mail");
	    	this.error = true;
	    }
	    else{
	        clearFieldMsg(this.idErrorBox);
	    }
	    
	}
}

Validator.prototype.checkBirthDate = function() {

	var empty = false;

    if(this.fieldObj.value == "" || $(this.field.getId()+"1").value == "" || $(this.field.getId()+"2").value == ""){
    	empty = true;
    }
    
    if(empty == true){
    	setFieldMsg(this.idErrorBox);
    	this.error = true;
    }
    else{
	    clearFieldMsg(this.idErrorBox);
	}
    
}

Validator.prototype.checkNumber = function() {

	if(this.fieldObj.value == ""){
  		setFieldMsg(this.idErrorBox);
		return true;
	}
	else{
		
		clearFieldMsg(this.idErrorBox);
	
	    var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	    
	    if(reg.test(this.fieldObj.value) == false) {
	        setFieldMsg(this.idErrorBox,defaultFieldNumberMsg);
	    	this.error = true;
	    }
	    else{
	        clearFieldMsg(this.idErrorBox);
	    }
	    
	}
    
}

Validator.prototype.errors = function() {
	return this.error;
}



function controls(formObj,formName){
	
	var validator = new Validator();
	var eno = false;
	
	fields.setFormName(formName);
	
	for(i=0;i<fields.number();i++){
		field = fields.getField(i);
		validator.checkField(field);
	}
	
	if(validator.errors() == false && eno == false){
	    form.submit();
	}
	else{ 
	    $("msgBox").innerHTML = "I dati non sono stati inviati, per favore controllare che tutti i campi obbligatori siano stati compilati";
	}
	
}
