/*******************************
 * FUNZIONI PER LA VALIDAZIONE *
 *******************************/
var multipleOption = null;

function validateCore(input, field, field2, type, isRequired, formId, urlValidationField, urlValidation, fieldLabel){
    var value = input.val();
    var error = jQuery('#err_'+ input.attr('name'))
    if ((input.attr('type')=='checkbox' || input.attr('type')=='radio') && !input.attr('checked')){
        value = "";
    }
    var url ='';
    if (typeof type !== 'undefined'){
        url = urlValidationField + '&field=' + field + '&validatefunction=' + field2;
    }else{
        url = urlValidation + '&field=' + field + '&value=' + value;
        if (typeof field2 !== 'undefined'){
            url = url + '&secondValue=' + jQuery('#'+field2).val();
        }
    }
    
    url = url + "&" + jQuery('#'+ formId).serialize() + '&isRequired=' + isRequired;
    if(fieldLabel){
    	url = url + "&fieldLabel=" + fieldLabel;
    }
    
   // alert(urlValidationField);
    jQuery.ajax({
        type:'get',cache:false,dataType: "html",
        url: url,
        beforeSend: function(){
          if ( !input.hasClass('validated') ){ input.addClass('validated'); }
          error.html('<img src="/design/images/loader.gif" width="16" height="16" />');
        },
        success: function(data){ error.html(data); }
    });
}

/**
 * Accetta un array del tipo:
 * {field:'ripetiPassword',field2:'password',when:'onBlur', type:'Field'}
 * @param args un array json contenente il nome del primo campo, del secondo, quando deve partire la validazione e il tipo di campo
 * @return
 */
function validate( args ){
	//console.log("validate: "+args.isRequired);
    var field = args.field;
    var input = jQuery('#'+field);
    if (typeof input.attr('type') === 'undefined'){
            input = jQuery('input[name="'+ field +'"]');
            input.each(function( element, i ){
                jQuery(this).focus(function(){ 
                	var previousMultipleOption = null;
                	if (multipleOption != null){ previousMultipleOption = multipleOption; }
                	multipleOption = {'field':field , 'field2': args.field2, 'type': args.type, 'previousMultipleOption': previousMultipleOption , 'isRequired': args.isRequired, 'formId':args.formId, 'urlValidationField':args.urlValidationField, 'urlValidation':args.urlValidation, 'fieldLabel':args.fieldLabel};
                });
            });
    }
    else{
        validateField( input, field, args.field2, args.when, args.type, args.isRequired, args.formId, args.urlValidationField, args.urlValidation, args.fieldLabel);
    }
}

function validateField( input, field, field2, when , type, isRequired, formId, urlValidationField, urlValidation, fieldLabel){
	if (when == 'onBlur'){
		input.blur(function(){ validateCore(input,field,field2, type, isRequired, formId, urlValidationField, urlValidation, fieldLabel); });
	}else{
		input.change(function(){ input.removeClass('validateEmpty');validateCore(input,field,field2, type, isRequired, formId, urlValidationField, urlValidation, fieldLabel); });
		input.blur(function(){if (input.val() == "" && !input.hasClass('validateEmpty')) { input.addClass('validateEmpty');validateCore( input,field,field2,type, isRequired, formId, urlValidationField, urlValidation, fieldLabel) ;} });
	}
}

/**
 * Richiamata quando si esce da una radio option perché clicco al di fuori di un elemento 
 * della form o su un elemento form che non sia una option dello stesso tag multiplo. 
 * @param inputField il tag nel quale sono entrato o ho cliccato.
 * @return
 */
function validateOption(inputField){
	//console.log (multipleOption);
	if (multipleOption != null){//se ero entrato in un radio button
        var previousMultipleOption = multipleOption.previousMultipleOption;
        if (previousMultipleOption != null){
        	fieldName = previousMultipleOption.field;
        	field2 = previousMultipleOption.field2;
        	type = previousMultipleOption.type;
        	isRequired = previousMultipleOption.isRequired;
        	formId = previousMultipleOption.formId;
        	urlValidationField = previousMultipleOption.urlValidationField;
        	urlValidation =previousMultipleOption.urlValidation;
        	fieldLabel=previousMultipleOption.fieldLabel;
        }else{
        	fieldName = multipleOption.field;
        	field2 = multipleOption.field2;
        	type = multipleOption.type;
        	isRequired = multipleOption.isRequired;
        	formId = multipleOption.formId;
        	urlValidationField = multipleOption.urlValidationField;
        	urlValidation = multipleOption.urlValidation;
        	fieldLabel=multipleOption.fieldLabel;
        }
		if ( fieldName != (inputField.attr('name')) ){//e ne sono uscito
            var inputRadio = jQuery('input[name="'+ fieldName +'"]:checked');
            if (typeof inputRadio.val() === 'undefined'){
                inputRadio = jQuery('input[name="'+ fieldName +'"]');
            }
            validateCore(inputRadio, fieldName , field2 , type, isRequired , formId, urlValidationField, urlValidation, fieldLabel);//valido il radio selezionato se esiste
            multipleOption = null;
        }
    }
}

