/**
 * Fonctions génériques utilisées par les classes listview et treeview
 * 2010.09.16 10:31:26 Maxime Kohlhaas
 * 2010..
 */

/*************************************************************************************************************************/
/**													BOITE DE DIALOGUE													**/
/*************************************************************************************************************************/

/**
 * Fonction permettant de masquer les objets de la page HTML afin qu'ils ne superposent pas la dialog
 * @param hide Boolean True pour masquer, False pour réafficher
 * @use : Lors de l'initialisation de la dialog, utiliser les paramètres suivants :
 *  - close: hideObjectForDialog(false)
 *  - open: hideObjectForDialog(true)
 */
function hideObjectForDialog(hide) {
 if(hide === true) {
  $('object').hide();
 } else {
  var isOneOpen = false;
  $('.ui-dialog-content').each(function() {
   if($(this).dialog('isOpen')) isOneOpen = true;
  });
  if(!isOneOpen) {
   $('object').show();
  }
 }
}
/**
 * Fermeture de la boîte de dialogue 'message'
 */
var closeDialog = function() {
	$("#dialog-message").dialog('close');
};

/**
 * Ouverture de la boite de dialogue 'message'
 * @param title Le titre
 * @param msg Le message
 * @param type Le type (alert, error, info, confirm, wait)
 * @param image L'image à utiliser
 * @param callback La fonction
 */
var openDialog = function(title, msg, type, image, callback, plus) {
  var exists = $("#dialog-message");

  if(exists.size()>0){

  }else{
    $("body").append('<div id="dialog-message"></div>');
  }

  //$("#dialog-message").attr('title', title);
	var data='';
  if(typeof(image) != 'undefined' && image!=null && image!='' && image!='undefined'){
    data += '<img src="'+DIR_HTTP+'images/' + image
  					+ '" class="dialogimg" width="20px" height="20px"/>';
	}
	if(msg!='' && msg!='undefined' && msg!=undefined){
    data += msg+'<div style="clear:both;"></div>';
	}

  if(data!=''){
    $("#dialog-message").html(data);
  }

	$("#dialog-message").dialog( {
		modal : true,
		resizable : false,
		close:function(){hideObjectForDialog(false)},
    open:function(){hideObjectForDialog(true)}
	});

	$("#dialog-message").dialog('option', 'title', title);

	// réinit des fenêtres
	$("#dialog-message").dialog('option', 'width', 350);
	$("#dialog-message").dialog('option', 'height', 140);
	$("#dialog-message").dialog('option', 'position', 'center');

	switch (type) {
	case 'alert':
	case 'error':
	case 'info':
		$("#dialog-message").dialog('option', 'buttons', {
			Ok : function() {
				$(this).dialog('close');
			}
		});
		break;

	/**
	 *  Ajout d'une boîte personnalisée! la demande de doc
	 **/
	case 'alertproduit':

		$("#dialog-message").dialog('option', 'width', 790);
		$("#dialog-message").dialog('option', 'height', 'auto');
		$("#dialog-message").dialog('option', 'position', 'center');
		$("#dialog-message").dialog('option', 'buttons', {
			"Valider l'alerte produit" : function() {
			   /*$(this).each(function(index) {
            alert(index + ': ' + $(this).html());
          });*/

				if ( verifFormAlertp() == true) {
					$(this).dialog('close');
				}
			},
			'Annuler' : function() {
				$(this).dialog('close');
			}
		});

		break;
	case 'publiinfo':
		$("#dialog-message").dialog('option', 'width', 790);
		$("#dialog-message").dialog('option', 'height', 'auto');
		$("#dialog-message").dialog('option', 'position', 'center');
		$("#dialog-message").dialog('option', 'buttons', {
			"Demander la documentation" : function() {
				val = $("form#popin_publi #id_prod").val();
				//alert(val+" - "+plus);

				if (plus=='' || plus==null || plus=='null') ddoc_produit(null,val);
				else ddoc_produit([plus],val);
				//document.location.href=plus;
			},
			'Annuler' : function() {
				$(this).dialog('close');
			}
		});

		break;
	case 'transmettre':
		//_init_transmettre();

		$("#dialog-message").dialog('option', 'width', 625);
		$("#dialog-message").dialog('option', 'height', 'auto');
		$("#dialog-message").dialog('option', 'position', 'center');
		$("#dialog-message").dialog('option', 'buttons', {
			"Transmettre" : function() {
				verifFormTransmettre();
				$(this).dialog('close');
			},
			'Annuler' : function() {
				$(this).dialog('close');
			}
		});

		break;

	/**
	 *  Ajout d'une boîte personnalisée! la demande de doc
	 **/
	case 'ddoc':
		_init_ddoc();

		$("#dialog-message").dialog('option', 'width', 790);
		$("#dialog-message").dialog('option', 'height', 'auto');
		$("#dialog-message").dialog('option', 'position', 'center');
		$("#dialog-message").dialog('option', 'buttons', {
			"Valider la demande de documentation" : function() {
			   /*$(this).each(function(index) {
            alert(index + ': ' + $(this).html());
          });*/

       verifFormddoc();

			},
			'Annuler' : function() {
				$(this).dialog('close');
			}
		});

		break;
	case 'dex':

  	_init_dex();

    $("#dialog-message").dialog('option', 'width', 400);
    $("#dialog-message").dialog('option', 'height', 'auto');
    $("#dialog-message").dialog('option', 'position', 'center');
    $("#dialog-message").dialog('option', 'buttons', {
    	"Valider la demande" : function() {

       verifFormdex();

    	},
    	'Annuler' : function() {
    		$(this).dialog('close');
    	}
    });

	break;
	case 'deminfo':

	 _init_deminfo();

    $("#dialog-message").dialog('option', 'width', 950);
    $("#dialog-message").dialog('option', 'height', 'auto');
    $("#dialog-message").dialog('option', 'position', 'center');
    $("#dialog-message").dialog('option', 'buttons', {
    	"Valider la demande" : function() {

       verifFormdeminfo();

    	},
    	'Annuler' : function() {
    		$(this).dialog('close');
    	}
    });

	break;
	case 'confirm':
		$("#dialog-message").dialog('option', 'buttons', {
			Ok : function() {
				$(this).dialog('close');
				callback();
			},
			'Annuler' : function() {
				$(this).dialog('close');
			}
		});
		break;
	case 'wait':
		$("#dialog-message").dialog('option', 'buttons', {

		});
		break;
	default:
		break;
	}



};

/**
 * Ouverture de la boite de dialogue 'message'
 * @param title Le titre
 * @param msg Le message
 * @param type Le type (alert, error, info, confirm, wait)
 * @param image L'image à utiliser
 * @param callback La fonction
 */
var openCustomDialog = function(id, title, msg, type, image, callback) {
  var exists = $("#"+id);

  if(exists.size()>0){

  }else{
    $("body").append('<div id="'+id+'"></div>');
  }


  $("#"+id).attr('title', title);
	var data='';
  /*if(image!='' && image!='undefined'){
    data += '<img src="../images/' + image
  					+ '" class="dialogimg" width="20px" height="20px"/>';
	} */

	switch (type) {
  	case 'error':
    case 'alert':
    case 'confirm':
  	  icon = '<span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span>';
  	  break;
  	case 'info':
  	  icon = '<span class="ui-icon ui-icon-circle-check" style="float:left; margin:0 7px 50px 0;"></span>';
  	  break;
    case 'wait':
      icon="";
  		break;
  	case 'success':
  	  icon = '<span class="ui-icon ui-icon-circle-check" style="float:left; margin:0 7px 50px 0;"></span>';
  	  break;
  	default:
  	  icon="";
  	  break;
	}

	if(msg!='' && msg!='undefined' && msg!= undefined){
    data += '<p>'+ icon
  					+ msg + '</p>';
	}
	if(data!=''){
    $("#"+id).html(data);
  }

	$("#"+id).dialog( {
		modal : true,
		resizable : false,
		close:function(){hideObjectForDialog(false)},
    open:function(){hideObjectForDialog(true)}
	});

	// réinit des fenêtres
	$("#"+id).dialog('option', 'width', 350);
	$("#"+id).dialog('option', 'minHeight', 150);
	$("#"+id).dialog('option', 'position', 'center');

	switch (type) {
	case 'alert':
	case 'error':
	case 'info':
		$("#"+id).dialog('option', 'buttons', {
			Ok : function() {
				$(this).dialog('close');
			}
		});
		break;

	case 'confirm':
		$("#"+id).dialog('option', 'buttons', {
			Ok : function() {
				$(this).dialog('close');
				callback();
			},
			'Annuler' : function() {
				$(this).dialog('close');
			}
		});
		break;
	case 'wait':
		$("#"+id).dialog('option', 'buttons', {

		});
		break;
	default:
		break;
	}
};




/*************************************************************************************************************************/
/**													CHAMPS FORMULAIRE													**/
/*************************************************************************************************************************/

/**
 * Consitution du code html d'un élément de formulaire
 * @param fieldId Identifiant du champ à créer
 * @param TFieldParams Table des paramètre du champs contenant type, size, ...
 * @param data Le contenu de l'élément
 */
var createFormField = function(fieldId, TFieldParams, data) {
  if(data==null)data='';
  var html = '';
	if(_isset(TFieldParams)){
  	if(_isset_property(TFieldParams,'type')) {
  		switch(TFieldParams['type']) {
  			case 'HIDDEN':
  				html = '<input type="hidden" id="'+fieldId+'" name="'+fieldId+'" value="'+data+'" />';
  				break;
        case 'DATE':
  				html = '<input type="text" id="'+fieldId+'" class="datepicker" value="'+data+'" size="'+TFieldParams['size']+'"/>';
  				break;
  			case 'TIME':
  				break;
  			case 'INT':
  			  var onKeyPress="";
  			  if(_isset_property(TFieldParams,'onKeyPress')){
            onKeyPress = ' onKeyPress="javascript:'+TFieldParams['onKeyPress']+'"';
          }
          var onchange="";
  			  if(_isset_property(TFieldParams,'onchange')){
            onchange = ' onChange="javascript:'+TFieldParams['onchange']+'"';
          }
  				var size="";
  			  if(_isset_property(TFieldParams,'size')){
            size='size="'+TFieldParams['size']+'"';
  			  }

  				html = '<input type="text" name="'+fieldId+'" id="'+fieldId+'" class="text" value="'+data+'" '+size+' '+onKeyPress+' '+onchange+'"/>';
  				break;
  			case 'TEXTAREA':
  			  if(!_isset_property(TFieldParams,'rows')) {
  			  	TFieldParams['rows']=2;
  			  }
  			  var onKeyPress="";
  			  if(_isset_property(TFieldParams,'onKeyPress')){
            onKeyPress = ' onKeyPress="javascript:'+TFieldParams['onKeyPress']+'"';
          }
          var onchange="";
  			  if(_isset_property(TFieldParams,'onchange')){
            onchange = ' onChange="javascript:'+TFieldParams['onchange']+'"';
          }
  				html = '<textarea name="'+fieldId+'" id="'+fieldId+'" rows="'+TFieldParams['rows']+'" cols="'+TFieldParams['size']+'" class="text" '+onKeyPress+' '+onchange+'>'+data+'</textarea>';
  				break;
  			case 'CHECKBOX':
  			  var checked='';
          if(_isset_property(TFieldParams,'checked')){
            checked = TFieldParams['checked'];
          }
          var disabled='';
          if(_isset_property(TFieldParams,'disabled')){
            disabled = TFieldParams['disabled'];
          }
  				html = '<input type="checkbox" id="'+fieldId+'" name="'+fieldId+'" class="text" value="'+data+'" '+checked+' '+disabled+'/>';
  				break;
  			case 'RADIO':
  			  var checked='';
          if(_isset_property(TFieldParams,'checked')){
            checked = TFieldParams['checked'];
          }
  			  label = fieldId;
          if(_isset_property(TFieldParams,'groupname')){
            groupname = TFieldParams['groupname'];
            if(_isset_property(TFieldParams,'label')){
              label = TFieldParams['label'];
            }
            html = '<INPUT type="radio" id="'+fieldId+'" name="'+groupname+'" value="'+data+'" '+checked+'><label style="padding-right:5px;" for="'+fieldId+'">'+label+'</label>';
          }else{
            return "";
          }
          break;
        case 'SELECT':
        if(data=='')data=0;
          var theoptions = "";
          var selected = '';
          if(_isset_property(TFieldParams,'options')){
            var selectedindex = 0;
            for (x in TFieldParams['options']){
              if(x.substring(0,1)=='-'){
                current_val='';
              }else{
                current_val=x;
              }
              if(selectedindex == data || current_val == data){
                selected = 'SELECTED';
              }else{
                selected = '';
              }
              option = '<option value="'+current_val+'" '+selected+' >'+TFieldParams['options'][x]+'</option>'+"\n";
              theoptions += option;
              selectedindex++;
            }
          }else if(_isset_property(TFieldParams,'str_options')){
            var theoptions = TFieldParams['str_options'];
          }

          var onchange="";
          if(_isset_property(TFieldParams,'onchange')){
            onchange = ' onChange="javascript:'+TFieldParams['onchange']+'"';
          }
          html='<select name="'+fieldId+'" id="'+fieldId+'" class="text" '+onchange+' >'+theoptions+'</select>';
          break;
  			case 'CHAR':
  			default:
  			  var onKeyPress="";
  			  if(_isset_property(TFieldParams,'onKeyPress')){
            onKeyPress = ' onKeyPress="javascript:'+TFieldParams['onKeyPress']+'"';
          }
          var onchange="";
  			  if(_isset_property(TFieldParams,'onchange')){
            onchange = ' onChange="javascript:'+TFieldParams['onchange']+'"';
          }
          var size="";
  			  if(_isset_property(TFieldParams,'size')){
            size='size="'+TFieldParams['size']+'"';
  			  }

  				html = '<input type="text" name="'+fieldId+'" id="'+fieldId+'" class="text" value="'+data+'" '+size+' '+onKeyPress+' '+onchange+'"/>';
  				break;
  		}
		}
	}
	return html+"\n";
};
/**
 * Ajoute l'affichage du calendrier sur tous les élements input avec la classe datepicker
 */
var addCalendar = function() {
	$('input.datepicker').datepicker({
		showOn: 'button',
		buttonImage: '../images/calendar.png',
		buttonImageOnly: true,
		buttonText: 'Calendrier',
		showAnim: 'slideDown',
		changeMonth: true,
		changeYear: true,
		showButtonPanel: true,
		showOtherMonths: true,
		selectOtherMonths: true
	});
	$('input.datepicker').attr('readonly', 'readonly');
	$('input.datepicker').attr('class', 'text_readonly');
};


/*************************************************************************************************************************/
/**								ADAPTATION POUR PRODUITHEQUE DE BATIACTU 2010													                                **/
/*************************************************************************************************************************/


/**
 *   Fonctions utiles!
 **/
function _isset(varname){
  return(varname!='undefined');
}
function _isset_property(obj,varname){
  if(!obj[varname]){
    return false;
  }
  return true;
}

/**
 *  cette initialisation est effectuée
 *  Permet de gérer le comportement de la demande de doc
 **/
function arguments_cookies(offset){
  var endstr=document.cookie.indexOf (";", offset);
  if (endstr==-1) endstr=document.cookie.length;
  //return unescape(document.cookie.substring(offset, endstr));
  return decodeURIComponent(document.cookie.substring(offset, endstr));
}

function lire_cookie(nom) {
  var arg=nom+"=";
  var alen=arg.length;
  var clen=document.cookie.length;
  var i=0;
  while (i<clen){
    var j=i+alen;

    if (document.cookie.substring(i, j)==arg){
       //return unescape(arguments_cookies(j));
       valeur = arguments_cookies(j);

       valeur = strtr(valeur, {'`':'\'','[#EXC#]':'!','[#DOL#]':'$','[#PCT#]':'%','[#ESPERLUETE#]':'&','[#ETOILE#]':'*','[#PLUS#]':'+','[#ANTISLASH#]':'\\','[#PTVIRGULE#]':';','[#2PTS#]':':','[#GUILLEMET#]':'"','[#VIRGULE#]':',','[#SLASH#]':'/','[#PTINTERRO#]':'?'});

       return valeur;
    }

    i=document.cookie.indexOf(" ",i)+1;
    if (i==0) break;
  }
  return null;
}

function ecrire_cookie(nom, valeur, expires) {
  var d = new Date();
  d.setTime(d.getTime()+(86400*360*1000)); //+360jours
  //document.cookie=nom+"="+escape(valeur)+

  valeur = strtr(valeur, {'!':'[#EXC#]','$':'[#DOL#]','%':'[#PCT#]','&':'[#ESPERLUETE#]','*':'[#ETOILE#]','+':'[#PLUS#]','\\':'[#ANTISLASH#]',';':'[#PTVIRGULE#]',':':'[#2PTS#]','"':'[#GUILLEMET#]',',':'[#VIRGULE#]','/':'[#SLASH#]','?':'[#PTINTERRO#]'});

  document.cookie=nom+"="+encodeURIComponent(valeur)+
  ((expires==null) ? ("; expires="+d.toGMTString()): ("; expires="+expires.toGMTString()));
}

//var DIR_HTTP = 'http://cip137/cap/produits.batiactu.com/';
//var DIR_HTTP_SCRIPTS_CENTRE_DOC = 'http://cip137/cap/dev2.batiactu.com/cap_centredoc/scripts/';
//var DIR_HTTP_IMAGES_CENTRE_DOC = 'http://cip137/cap/dev2.batiactu.com/cap_centredoc/images/';

function _init_deminfo(){
  $("form#deminfo_form").submit( function(e) {
    var datas = $(this).serialize();
    donnees_form=datas.split('&');
    for(i=0;i<donnees_form.length;i++){
       current = donnees_form[i];
       var_form=current.split('=');
    }

    closeDialog();

    openDialog('Demande en cours', 'Merci de patienter...', 'wait', 'wait.gif');


      var urlsend = url_interface+'interface.php?mode=ENVOI_MAIL_DEMANDE_DOC';
      var msg_valid = 'Votre demande d\information a bien été envoyée.';

    $.ajax({
  		type: 'GET',
  		url: urlsend,
  		data: datas,
  		success: function() {
			   openDialog('Demande effectuée', msg_valid, 'info', 'info.png');
		},
		error: function(a,b,c){
			closeDialog();
			openDialog('Erreur', "Erreur lors de la demande\r\n"+c, 'error', 'error.png');
		}
  	});
    return false; // Pour empêcher le submit vers la page 'action'
  });
}

function _init_dex(){
  $("form#dex_form").submit( function(e) {
    var datas = $(this).serialize();
    donnees_form=datas.split('&');

    for(i=0;i<donnees_form.length;i++){
       current = donnees_form[i];
       var_form=current.split('=');
    }

    closeDialog();

    openDialog('Demande en cours', 'Merci de patienter...', 'wait', 'wait.gif');


      var urlsend = url_interface+'interface.php?mode=DEMANDE_EX';
      var msg_valid = 'Votre demande a bien été envoyée.';

    $.ajax({
  		type: 'GET',
  		url: urlsend,
  		data: datas,
  		success: function() {
			   openDialog('Demande effectuée', msg_valid, 'info', 'info.png');
		},
		error: function(a,b,c){
			closeDialog();
			openDialog('Erreur', "Erreur lors de la demande\r\n"+c, 'error', 'error.png');
		}
  	});
    return false; // Pour empêcher le submit vers la page 'action'
  });
}

function _init_ddoc(){
  $("form#ddoc_form").submit( function(e) {
    var datas = $(this).serialize();
    donnees_form=datas.split('&');
    var id_prod=undefined;
    for(i=0;i<donnees_form.length;i++){
       current = donnees_form[i];
       var_form=current.split('=');
       if((var_form[0]).substr(0,4)=='aff3' || (var_form[0]).substr(0,4)=='aff4' || (var_form[0]).substr(0,4)=='aff5' || var_form[0]=='id_prod'){
          id_prod=var_form[1];
       }
       if(var_form[0]=="type_ddoc"){
          var type_ddoc = var_form[1];
       }
       if(var_form[0]=="id_indus"){
          var id_indus = var_form[1];
       }
    }

    closeDialog();

    openDialog('Demande en cours', 'Merci de patienter...', 'wait', 'wait.gif');
    /*$.ajaxError(function() {
        closeDialog();
        openDialog('Erreur', 'Erreur lors de la demande', 'error', 'error.png');
    });

    $.getJSON(DIR_HTTP_SCRIPTS_CENTRE_DOC+'mailer_generate_send2.php', datas, function(myJSONobject){
      for(key in myJSONobject) {
        ecrire_cookie("produits_batiactu_form_["+key+"]",unescape(myJSONobject[key]));
      }
      openDialog('Demande effectuée', 'L\'enregistrement a été correctement effectué', 'info', 'info.png');
    });  */
    //if(id_prod==-1){


    if(type_ddoc=='indus' && id_indus>0){
      // demande de doc fabricant
      var urlsend = DIR_HTTP_SCRIPTS_CENTRE_DOC+'mailer_indus_send.php?';
      var msg_valid = 'Votre demande d\'informations à bien été envoyée.';
    }
	else{
      var urlsend = DIR_HTTP_SCRIPTS_CENTRE_DOC+'mailer_generate_send.php?';
      //var urlsend = DIR_HTTP_SCRIPTS_CENTRE_DOC+'mailer_indus_send.php?';
      var msg_valid = 'Votre demande de documentation a bien été envoyée.';
    }
    //alert(type_ddoc+' : '+urlsend) ;

    $.ajax({
  		type: 'GET',
		dataType: "json",
  		url: urlsend,
  		data: datas,
  		success: function(myJSONobject) {

        //ici on met tout dans le cookie !
        for(key in myJSONobject) {
          if(type_ddoc=='indus' && id_indus>0){
            ecrire_cookie("indus_batiactu_form_["+key+"]",myJSONobject[key]);
          }else{
            ecrire_cookie("produits_batiactu_form_["+key+"]",myJSONobject[key]);
          }
        }
        //a=data.split(',');
        //for(b in a){
           //var c=(a[b]).split('=');
           //if(c.length==2){
              //ecrire_cookie("produits_batiactu_form_["+c[0]+"]",unescape(c[1]));
           //}

       // }

			openDialog('Demande effectuée', msg_valid, 'info', 'info.png');
		},
		error: function(a,b,c){
			//alert(a);
			//alert(b);
			//alert(c);
			closeDialog();
			openDialog('Erreur', "Erreur lors de la demande\r\n"+c, 'error', 'error.png');
		}
  	});
    return false; // Pour empêcher le submit vers la page 'action'
  });
}

/******************************************************************/
/** fonction pour interdire la saisie de caractères particuliers **/
/** dans les input des demandes de doc                           **/
/******************************************************************/
function codeTouche(evenement)
{
        for (prop in evenement)
        {
                if(prop == 'which'){
                  return(evenement.which);
                }
        }
        return(evenement.keyCode);
}

function scanTouche(evenement)
{
        //var reCarValides = /\w/;
        var reCarNonValides =new RegExp("[\";:]","g");


        var codeDecimal  = codeTouche(evenement);
        switch(codeDecimal){
          case 0:
          case 8:
          return true;
          break;
        }
        //if(codeDecimal == 0 || codeDecimal == 8) return true;
        var car = String.fromCharCode(codeDecimal);
        var autorisation = reCarNonValides.test(car) || pressePapierNS6(evenement,car);


        return !autorisation;
        //return autorisation;
}
function scanToucheINT(evenement)
{
        var reCarNonValides =new RegExp("[0-9]","g");


        var codeDecimal  = codeTouche(evenement);
        switch(codeDecimal){
          case 0:
          case 8:
          case 46://point
          case 32://espace
          return true;
          break;
        }
        //if(codeDecimal == 0 || codeDecimal == 8) return true;
        var car = String.fromCharCode(codeDecimal);

        var autorisation = reCarNonValides.test(car) || pressePapierNS6(evenement,car);

        return autorisation;

}
function pressePapierNS6(evenement,touche)
{
        var rePressePapierNS = /[cvxz]/i;
        for (prop in evenement) if (prop == 'ctrlKey') isModifiers = true;
        if (isModifiers) return evenement.ctrlKey && rePressePapierNS.test(touche);
        else return false;
}
function scanChamp(objChamp)
{
	var reCarNonValides =new RegExp("[\":;]","g");

	if (reCarNonValides.test(objChamp.value))
	{
		origine = objChamp.value;
		var sortie = origine.replace(reCarNonValides,"");
    objChamp.value = sortie;
		//objChamp.focus();
		//openCustomDialog('copiercoller','Information', 'caractère(s) interdit(s) ignoré(s)!','error', 'error.png');
	}
}
function scanChampINT(objChamp)
{
	var reCarNonValides =new RegExp("[^0-9 .]","g");

	if (reCarNonValides.test(objChamp.value))
	{
		origine = objChamp.value;
		var sortie = origine.replace(reCarNonValides,"");
    objChamp.value = sortie;
		//objChamp.focus();
		//openCustomDialog('copiercoller','Information', 'caractère(s) interdit(s) ignoré(s)!','error', 'error.png');
	}
}
function strtr (str, from, to) {
    // http://kevin.vanzonneveld.net
    // +   original by: Brett Zamir (http://brett-zamir.me)
    // +      input by: uestla
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: Alan C
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: Taras Bogach
    // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
    // +      input by: jpfle
    // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
    // -   depends on: krsort
    // -   depends on: ini_set
    // *     example 1: $trans = {'hello' : 'hi', 'hi' : 'hello'};
    // *     example 1: strtr('hi all, I said hello', $trans)
    // *     returns 1: 'hello all, I said hi'
    // *     example 2: strtr('äaabaåccasdeöoo', 'äåö','aao');
    // *     returns 2: 'aaabaaccasdeooo'
    // *     example 3: strtr('ääääääää', 'ä', 'a');
    // *     returns 3: 'aaaaaaaa'
    // *     example 4: strtr('http', 'pthxyz','xyzpth');
    // *     returns 4: 'zyyx'
    // *     example 5: strtr('zyyx', 'pthxyz','xyzpth');
    // *     returns 5: 'http'
    // *     example 6: strtr('aa', {'a':1,'aa':2});
    // *     returns 6: '2'

    var fr = '', i = 0, j = 0, lenStr = 0, lenFrom = 0, tmpStrictForIn = false, fromTypeStr = '', toTypeStr = '', istr = '';
    var tmpFrom = [];
    var tmpTo = [];
    var ret = '';
    var match = false;

    // Received replace_pairs?
    // Convert to normal from->to chars
    if (typeof from === 'object') {
        tmpStrictForIn = this.ini_set('phpjs.strictForIn', false); // Not thread-safe; temporarily set to true
        from = this.krsort(from);
        this.ini_set('phpjs.strictForIn', tmpStrictForIn);

        for (fr in from) {
            if (from.hasOwnProperty(fr)) {
                tmpFrom.push(fr);
                tmpTo.push(from[fr]);
            }
        }

        from = tmpFrom;
        to = tmpTo;
    }

    // Walk through subject and replace chars when needed
    lenStr  = str.length;
    lenFrom = from.length;
    fromTypeStr = typeof from === 'string';
    toTypeStr = typeof to === 'string';

    for (i = 0; i < lenStr; i++) {
        match = false;
        if (fromTypeStr) {
            istr = str.charAt(i);
            for (j = 0; j < lenFrom; j++) {
                if (istr == from.charAt(j)) {
                    match = true;
                    break;
                }
            }
        }
        else {
            for (j = 0; j < lenFrom; j++) {
                if (str.substr(i, from[j].length) == from[j]) {
                    match = true;
                    // Fast forward
                    i = (i + from[j].length)-1;
                    break;
                }
            }
        }
        if (match) {
            ret += toTypeStr ? to.charAt(j) : to[j];
        } else {
            ret += str.charAt(i);
        }
    }

    return ret;
}

function krsort (inputArr, sort_flags) {
    // http://kevin.vanzonneveld.net
    // +   original by: GeekFG (http://geekfg.blogspot.com)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // %          note 1: The examples are correct, this is a new way
    // %        note 2: This function deviates from PHP in returning a copy of the array instead
    // %        note 2: of acting by reference and returning true; this was necessary because
    // %        note 2: IE does not allow deleting and re-adding of properties without caching
    // %        note 2: of property position; you can set the ini of "phpjs.strictForIn" to true to
    // %        note 2: get the PHP behavior, but use this only if you are in an environment
    // %        note 2: such as Firefox extensions where for-in iteration order is fixed and true
    // %        note 2: property deletion is supported. Note that we intend to implement the PHP
    // %        note 2: behavior by default if IE ever does allow it; only gives shallow copy since
    // %        note 2: is by reference in PHP anyways
    // %        note 3: Since JS objects' keys are always strings, and (the
    // %        note 3: default) SORT_REGULAR flag distinguishes by key type,
    // %        note 3: if the content is a numeric string, we treat the
    // %        note 3: "original type" as numeric.
    // -    depends on: i18n_loc_get_default
    // *     example 1: data = {d: 'lemon', a: 'orange', b: 'banana', c: 'apple'};
    // *     example 1: data = krsort(data);
    // *     results 1: {d: 'lemon', c: 'apple', b: 'banana', a: 'orange'}
    // *     example 2: ini_set('phpjs.strictForIn', true);
    // *     example 2: data = {2: 'van', 3: 'Zonneveld', 1: 'Kevin'};
    // *     example 2: krsort(data);
    // *     results 2: data == {3: 'Kevin', 2: 'van', 1: 'Zonneveld'}
    // *     returns 2: true

    var tmp_arr={}, keys=[], sorter, i, k, that=this, strictForIn = false, populateArr = {};

    switch (sort_flags) {
        case 'SORT_STRING': // compare items as strings
            sorter = function (a, b) {
                return that.strnatcmp(b, a);
            };
            break;
        case 'SORT_LOCALE_STRING': // compare items as strings, based on the current locale (set with  i18n_loc_set_default() as of PHP6)
            var loc = this.i18n_loc_get_default();
            sorter = this.php_js.i18nLocales[loc].sorting;
            break;
        case 'SORT_NUMERIC': // compare items numerically
            sorter = function (a, b) {
                return (b - a);
            };
            break;
        case 'SORT_REGULAR': // compare items normally (don't change types)
        default:
            sorter = function (b, a) {
                var aFloat = parseFloat(a),
                    bFloat = parseFloat(b),
                    aNumeric = aFloat+'' === a,
                    bNumeric = bFloat+'' === b;
                if (aNumeric && bNumeric) {
                    return aFloat > bFloat ? 1 : aFloat < bFloat ? -1 : 0;
                }
                else if (aNumeric && !bNumeric) {
                    return 1;
                }
                else if (!aNumeric && bNumeric) {
                    return -1;
                }
                return a > b ? 1 : a < b ? -1 : 0;
            };
            break;
    }

    // Make a list of key names
    for (k in inputArr) {
        if (inputArr.hasOwnProperty(k)) {
            keys.push(k);
        }
    }
    keys.sort(sorter);

    // BEGIN REDUNDANT
    this.php_js = this.php_js || {};
    this.php_js.ini = this.php_js.ini || {};
    // END REDUNDANT

    strictForIn = this.php_js.ini['phpjs.strictForIn'] && this.php_js.ini['phpjs.strictForIn'].local_value &&
                    this.php_js.ini['phpjs.strictForIn'].local_value !== 'off';
    populateArr = strictForIn ? inputArr : populateArr;


    // Rebuild array with sorted key names
    for (i = 0; i < keys.length; i++) {
        k = keys[i];
        tmp_arr[k] = inputArr[k];
        if (strictForIn) {
            delete inputArr[k];
        }
    }
    for (i in tmp_arr) {
        if (tmp_arr.hasOwnProperty(i)) {
            populateArr[i] = tmp_arr[i];
        }
    }

    return strictForIn || populateArr;
}

function ini_set (varname, newvalue) {
    // http://kevin.vanzonneveld.net
    // +   original by: Brett Zamir (http://brett-zamir.me)
    // %        note 1: This will not set a global_value or access level for the ini item
    // *     example 1: ini_set('date.timezone', 'America/Chicago');
    // *     returns 1: 'Asia/Hong_Kong'

    var oldval = '', that = this;
    this.php_js = this.php_js || {};
    this.php_js.ini = this.php_js.ini || {};
    this.php_js.ini[varname] = this.php_js.ini[varname] || {};
    oldval = this.php_js.ini[varname].local_value;

    var _setArr = function (oldval) { // Although these are set individually, they are all accumulated
        if (typeof oldval === 'undefined') {
            that.php_js.ini[varname].local_value = [];
        }
        that.php_js.ini[varname].local_value.push(newvalue);
    };

    switch (varname) {
        case 'extension':
            if (typeof this.dl === 'function') {
                this.dl(newvalue); // This function is only experimental in php.js
            }
            _setArr(oldval, newvalue);
            break;
        default:
            this.php_js.ini[varname].local_value = newvalue;
            break;
    }
    return oldval;
}


