/*******************************
 * FUNZIONI PER LA VALIDAZIONE *
 *******************************/
var multipleOption = null;

function validateCore(input, field, field2, type, isRequired, formId, urlValidationField, urlValidation, fieldLabel){
    var value = input.val();
    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'); }
          input.parent().next().html('<img src="/design/images/loader.gif" width="16" height="16" />');
        },
        success: function(data){
        	input.parent().next().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;
        }
    }
}

/**********************
 * FUNZIONI GENERICHE *
 **********************/
function getParameter(param) {
    var pairs, qs = null, index, map = {};
    //if(url == undef){
      qs = window.location.search.substr(1);
    /*}else{
      index = url.indexOf('?');
      if(index == -1) return {};
      qs = url.substring(index+1);
    }*/
    pairs = qs.split('&');
    if (pairs == "") return {};
    for (var i = 0; i < pairs.length; ++i)
    {
      var p = pairs[i].split('=');
      if(p.length != 2) continue;
      map[p[0]] = decodeURIComponent(p[1].replace(/\+/g, " "));
    }
    if (!(typeof param === 'undefined' || param =='' || param==null )) return map[param];
    //console.log(map);
    return map;        
}

// Aggiunge la pagina ai preferiti
function addbookmark(pagina,titolo){
		window.external.AddFavorite(pagina,titolo);
}
// stampa...
function stampa() {
	self.print();
}

function goUrl(url) {
	document.location.href = url;
}

function loadComuni(provincia, selected, url, fieldId) {
	jQuery.ajax({
		type: 'get',
		cache: false,
		dataType: "html",
		url: url,
		data: ({provincia : provincia, selected : selected}),
		success: function(data){
			jQuery('#'+ fieldId).html(data);
		},
		error: function(XHR, textStatus, errorThrown){
			//alert(textStatus);
		}
	});
}


function setBirthDate(formId, urlValidationField, urlValidation) {
	var dob = new Array();
	var date = jQuery('#DATA_DI_NASCITA').attr("value");
	dob = date.split("/");
	
	// setting della data di nascita di default
	jQuery("#bd_day").val( dob[0] ).attr('selected',true);
	jQuery("#bd_month").val( dob[1] ).attr('selected',true);
	jQuery("#bd_year").val( dob[2] ).attr('selected',true);

	
	jQuery('select[id^="bd"]').change(function() {
		value = jQuery(this).val();
		id = jQuery(this).attr("id");

		switch (id) {
			case "bd_day":
				dob[0] = value;
				break;
			case "bd_month":
				dob[1] = value;
				break;
			case "bd_year":
				dob[2] = value;
				break;
		}
		
		date = dob.join("/");
		jQuery('#DATA_DI_NASCITA').val(date);
		
	});
	
	jQuery('#bd_year').blur(function() {
		validateCore(jQuery('#DATA_DI_NASCITA'), 'DATA_DI_NASCITA', 'ValidationRuleHandler.isMajor%28%24this%29', 'Field', 'S', formId, urlValidationField, urlValidation); 
	});
	
}

function URLEncode (clearString) {
	  var output = '';
	  var x = 0;
	  clearString = clearString.toString();
	  var regex = /(^[a-zA-Z0-9_.]*)/;
	  while (x < clearString.length) {
	    var match = regex.exec(clearString.substr(x));
	    if (match != null && match.length > 1 && match[1] != '') {
	    	output += match[1];
	      x += match[1].length;
	    } else {
	      if (clearString[x] == ' ')
	        output += '+';
	      else {
	        var charCode = clearString.charCodeAt(x);
	        var hexVal = charCode.toString(16);
	        output += '%' + ( hexVal.length < 2 ? '0' : '' ) + hexVal.toUpperCase();
	      }
	      x++;
	    }
	  }
	  return output;
}

