function validatorAjax(path, params, name, convertType, inputErrorText, fonction, paramFonction)
{
	if(path == '') return false;
	if(name.substr(0,6)=='input_') {
		var inputName = "#"+name;
	} else {
		var inputName = "#input_"+name;
	}
	
	
	if(convertType !== undefined && convertType!='') {
		var inputName = "#text_"+name;
    }
	
	//console.log(inputName);
    // Note : inputName may contain '[]' and cannot be used with jquery
    var $input = $(document.getElementById(inputName.replace('#','')));
    params['value'] = $input.val();
	if(inputErrorText!==undefined && inputErrorText){
        $input = $(document.getElementById("text_"+name));
    }
    
    if(params['value'].length==0) {
        $input.removeClass( "error white-tooltip" );
        $input.attr("data-original-title",'');
        // return true;
    }

    arr = path.split('/');
    pathAlown = arr[arr.length-1];

    switch (pathAlown) {
        case 'isStringSansEspace':

            if(isStringSansEspace(
                $input,
                '',
                params['value'],
                $input.attr('data-validator-size-min') ?? params['sizeMin'], // TODO : implement data-validator everywhere
                $input.attr('data-validator-size-max') ?? params['sizeMax']
            )){
                if(fonction!==undefined && fonction)
                {
                    myFunc(eval(fonction), eval(paramFonction));
                }
            }else{
                if(fonction!==undefined && fonction)
                {
                    let newParams = eval(paramFonction);
                    newParams.push(true);
                    myFunc(eval(fonction), newParams);
                }
            }
        break;
        case 'isStringAvecEspace':
            if(isStringAvecEspace(
                $input,
                '',
                params['value'],
                $input.attr('data-validator-size-min') ?? params['sizeMin'], // TODO : implement data-validator everywhere
                $input.attr('data-validator-size-max') ?? params['sizeMax']
            )){
                if(fonction!==undefined && fonction)
                {
                    myFunc(eval(fonction), eval(paramFonction));
                }
            }else{
                if(fonction!==undefined && fonction)
                {
                    let newParams = eval(paramFonction);
                    newParams.push(true);
                    myFunc(eval(fonction), newParams);
                }
            }
        break;
        case 'adresseMail':
            if(adresseMail($input,'',params['value'],params['sizeMin'],params['sizeMax'], '', params['type'])){
                if(fonction!==undefined && fonction)
                {
                    myFunc(eval(fonction), eval(paramFonction));
                }
            }else{
                if(fonction!==undefined && fonction)
                {
                    let newParams = eval(paramFonction);
                    newParams.push(true);
                    myFunc(eval(fonction), newParams);
                }
            }
        break;
        default:
            $.ajax
            ({
                url: path,
                type: 'POST',
                dataType: 'html',
                data: params,
                success: function (htmlData)
                {
                    nonBloquant = false;
                    if (htmlData.indexOf('#NB#') === 0) {
                        nonBloquant = true;
                        htmlData = htmlData.substring(4);
                    }

                    htmlData = htmlData.substring(6);
                    if (nonBloquant) {
                        htmlData = messageAttention+' : '+htmlData;
                    }
                    
                    $input.attr("data-original-title", htmlData);

                    if(htmlData !='')
                    {
                        $input.addClass( "error white-tooltip" );
                        $input.removeClass( "nonBloquant"); 
                        
                        $input.attr("data-non-bloquant", 'false');
                        
                        if(fonction!==undefined && fonction)
                        {
                            let newParams = eval(paramFonction);
                            if (nonBloquant) {} else {
                                newParams.push(true);
                            }
                            
                            myFunc(eval(fonction), newParams);
                        }
                    }
                    else
                    {
                        $input.attr("data-non-bloquant", 'false');
                        $input.removeClass( "nonBloquant" ); 
                        $input.removeClass( "error white-tooltip" );
                        if(fonction!==undefined && fonction)
                        {
                            myFunc(eval(fonction), eval(paramFonction));
                        }
                    }

                    if (nonBloquant) {
                        $input.attr("data-non-bloquant", 'true');
                        $input.addClass( "nonBloquant" );
                    }
                }
            });
      
        break;  
    }
}


function adresseMail($input, nomChamp, value, sizeMin , sizeMax, messageSpecifique, type)
{
    var letters = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    var error = '';
    var size = sizeValidator(value, nomChamp, sizeMin, sizeMax);
    
    if(!type)
    {
        var result = letters.test(value);

        if(size!==false)
        {
            $input.addClass( "error white-tooltip" );
            $input.attr("data-original-title", size.substring(6));
            return false

        }else if(value != '' && !result)
        {
            var txt = window.oxaproc.trad['ValidatorEmail'];
            txt = txt.replace('@1@',nomChamp);
            error = "<br />"+txt;
                
            $input.addClass( "error white-tooltip" );
            $input.attr("data-original-title", error.substring(6));
            return false

        }else
        {
            $input.removeClass( "error white-tooltip" );
            $input.attr("data-original-title",'');
            return true;
        }
    }
    else
    {
        var array = value.split(",");
        for (let index = 0; index < array.length; index++) 
        {
            var result = letters.test(array[index]);
        }

        if(size!==false)
        {
            $input.addClass( "error white-tooltip" );
            $input.attr("data-original-title", size.substring(6));
            return false

        }else if(value != '' && !result)
        {
            var txt = window.oxaproc.trad['ValidatorEmail'];
            txt = txt.replace('@1@',nomChamp);
            error = "<br />"+txt;
                
            $input.addClass( "error white-tooltip" );
            $input.attr("data-original-title", error.substring(6));
            return false

        }else
        {
            $input.removeClass( "error white-tooltip" );
            $input.attr("data-original-title",'');
            return true;
        }         
    }

}

function isStringAvecEspace($input, nomChamp, value, sizeMin , sizeMax, messageSpecifique)
{
    var letters = /^[a-zA-Z0-9áàâäãåçéèêëíìîïñóòôöõúùûüýÿæœÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕØÚÙÛÜÝŸÆŒ@,;\-\_\.\s\t\n_:"'!?/%§µ*£$&#()°+=^`|\[\]{}~²<>\\€¨]+$/;
    var error = '';
    var result = letters.test(value);
    var size = sizeValidator(value, nomChamp, sizeMin, sizeMax);

    if (size !== false) {
        $input.addClass("error white-tooltip");
        $input.attr("data-original-title", size.substring(6));
        return false;
    } else {
        $input.removeClass("error white-tooltip");
        $input.attr("data-original-title",'');
        return true;
    }
}

function isStringSansEspace($input, nomChamp, value, sizeMin , sizeMax, messageSpecifique)
{
    var letters = /^[a-zA-Z0-9áàâäãåçéèêëíìîïñóòôöõúùûüýÿæœÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕØÚÙÛÜÝŸ|ÆŒ=+\-\./:_]+$/;
    var error = '';
    var result = letters.test(value);
    var size = sizeValidator(value, nomChamp, sizeMin, sizeMax);
    
    if (size!==false) {
        $input.addClass("error white-tooltip");
        $input.attr("data-original-title", size.substring(6));
        return false

    } else if(value.indexOf(' ') > 0) {
        var txt = window.oxaproc.trad['ValidatorChaineNoSpace'];
        txt = txt.replace('@1@',nomChamp);
        txt = txt.replace('@2@',sizeMin);
        txt = txt.replace('@3@',sizeMax);
        error = "<br />"+txt;
            
        $($input).addClass("error white-tooltip");
        $($input).attr("data-original-title", txt);
        return false;
    } else {
        $($input).removeClass("error white-tooltip");
        $($input).attr("data-original-title",'');
        return true;
    }
}

function isCode(inputName, nomChamp, value, sizeMin, sizeMax)
{
    let characters = /^[\\/:*?"<>|'%& ]$/;
    let error = '';
    let result = characters.test(value);
    let size = sizeValidator(value, nomChamp, sizeMin, sizeMax);

    if (size !== false) {
        $(inputName).addClass('error white-tooltip');
        $(inputName).attr('data-original-title', size.substring(6));

        return false;
    } else if (value !== '' && !result) {
        let txt = window.oxaproc.trad['ValidatorCode'];
        txt = txt.replace('@1@',nomChamp);
        txt = txt.replace('@2@',sizeMin);
        txt = txt.replace('@3@',sizeMax);
        error = "<br />"+txt;

        $(inputName).addClass('error white-tooltip');
        $(inputName).attr('data-original-title', error.substring(6));
        return false;
    } else {
        $(inputName).removeClass('error white-tooltip');
        $(inputName).attr('data-original-title', '');
        return true;
    }
}

function sizeValidator(value, nomChamp, sizeMin, sizeMax)
{
    if (value.length < sizeMin || value.length > sizeMax) {
        var txt = window.oxaproc.trad['ValidatorSize'];
        txt = txt.replace('@1@',nomChamp);
        txt = txt.replace('@2@',sizeMin);
        txt = txt.replace('@3@',sizeMax);
        return "<br />"+txt;
    } else {
        return false;
    }
}