
/* $Id: class_event.js 9 2009-01-11 06:03:21Z john $ */

// Required Language vars: 3000080,3000081,3000082,3000083,3000084,3000085,3000093,3000097,3000153,3000154,3000170,3000219,3000223,3000225,3000229,1086, 3000708,3000709,3000710,3000775,3000791,3001011

var jeton_20120131 = 1;

// Jean 03/12/2009
var currentSlidePosition = 0;

// Jean 28/07/2011
var defaultTags = '';

// Jean 26/08/2011
var defaultTagsPremium = '';

// Jean 26/08/2011
var default_event_eventcat_id = '';
var default_event_format_id = '';
var default_event_treat_id = '';
var default_event_brief_id = '';
var default_event_sector_id = '';
var default_event_title = '';

// Jean 13/11/2011
var defaultInterv = Array();
var default_event_template = '';

// Jean 15/11/2011 : la durée par défaut d'un épisode
var default_minutes_duration = 30;

SocialEngineAPI.Event = new Class({

  // Class
    Implements: [Options],



  // Properties
  Base: {},


  options: {
    'ajaxURL' : 'event_ajax.php',
    'ajaxMethod' : 'post',
    'ajaxSecure' : false,

    'defaultView' : false
  },


  eventExists: false,


  eventInfo: {},


  userRank: 0,


  IsMember: false,


  IsMemberWaiting: false,


  currentConfirmID: 0,

  // Jean 07/04/2011
  currentInterestType: 0,
  currentInterestValue: 0,

  notChangePageAfterDelete: 0, // Jean 18/04/2010


  visibleTab: 0,


  rsvpLanguageVars: {
    '-2'  : 3000785, // N'a pas encore répondu à l'invitation (eventmember_status = 0 et eventmember_approved = 1)
    '-1'  : 3000080, // Attend encore une validation de sa demande (Awaiting Approval)

    '5'   : 3000714, // Désolé, mais je ne pourrai pas participer à ce tournage
    '6'   : 3000713, // Je voudrais bien venir, mais je ne puis confirmer avec certitude
    '7'   : 3000712  // Je confirme ma participation
  },


  // Initialize
  initialize: function(eventInfo, options)
  {
    var bind = this;

    // Options
    if( $type(options)=="object" )
    {
      if( $type(options.defaultView) && options.defaultView=='' )
        delete options.defaultView;

      this.setOptions(options);
    }

    // Event info stuff
    if( eventInfo && $type(eventInfo)=="object" )
    {
      this.eventExists = eventInfo.event_exists;
      delete eventInfo.event_exists;

      this.IsMember = eventInfo.is_member;
      delete eventInfo.is_member;

      this.IsMemberWaiting = eventInfo.is_user_waiting;
      delete eventInfo.is_user_waiting;

      this.UserRank = eventInfo.user_rank;
      delete eventInfo.user_rank;

      this.eventInfo = eventInfo;
    }

    // Load currently visible tab
    var currentVisibleTab = Cookie.read('eventVisibleTab');

    if( this.options.defaultView )
      currentVisibleTab = this.options.defaultView;
    else if( !$type(currentVisibleTab) || !currentVisibleTab )
      currentVisibleTab = 'profile';

    // Jean 06/08/2009 : par sécurité, on n'affiche pas d'onglet inexistant
    window.addEvent('domready', function()
    {
      if ($('event_tabs_'+ currentVisibleTab))
        if( $('event_tab_table') )
          bind.loadProfileTab(currentVisibleTab);
    });
  },




  // Profile Tabs
  loadProfileTab: function(tabName)
   {
    var bind = this;

    if (!$('event_tab_table'))
      return;

    $('event_tab_table').getElements('.event_tab').each(function(tabElement)
     {
      //alert(tabElement.id + ' ## '+ 'event_tabs_'+tabName);
      if( tabElement.id=='event_tabs_'+tabName )
      {
        if( !tabElement.hasClass('event_tab_active') )
          tabElement.addClass('event_tab_active');

        if ($('event_' + tabName))
         // Jean 09/04/2010 : on peut aussi faire du visibility hidden
         {
          if ($('event_' + tabName).style.visibility == "hidden")
            $('event_' + tabName).style.visibility = "inherit";
          else
            $('event_' + tabName).style.display = "block";
         }
        Cookie.write('eventVisibleTab', bind.visibleTab = tabName);
      }
      else
      {
        if( tabElement.hasClass('event_tab_active') )
          tabElement.removeClass('event_tab_active');

        var otherTabName = tabElement.id.replace('_tabs_', '_');
        if (otherTabName != "" && otherTabName != "null" && $(otherTabName))
         // Jean 09/04/2010 : on peut aussi faire du visibility hidden
         {
          if ($(otherTabName).style.visibility == "inherit")
            $(otherTabName).style.visibility = "hidden";
          else
            $(otherTabName).style.display = "none";
         }
      }
    });
  },


  // Delete
  deleteShow: function(eventID, notChangePageAfter, displayAlsoDeleteTasksOption)
  {
    this.currentConfirmID = ( eventID || this.eventInfo.event_id );
    this.notChangePageAfterDelete = notChangePageAfter;

    // Jean 03/01/2011
    if ($('zone_also_delete_tasks') && $('also_delete_tasks'))
     {
      $('zone_also_delete_tasks').style.display = displayAlsoDeleteTasksOption ? 'block' : 'none';
      $('also_delete_tasks').checked = displayAlsoDeleteTasksOption;
     }

    TB_show(this.Base.Language.Translate(3000093), '#TB_inline?height=118&width=300&inlineId=confirmeventdelete', '', '../images/trans.gif');
    // Jean 07/05/2010
    if ($("btn_delete_submit")) $("btn_delete_submit").focus();
  },

  deleteConfirm: function(alsoTasks)
  {
    eventID = this.currentConfirmID;

    $('loading_delete').style.display = 'block';

    // Ajax
    var bind = this;
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'eventdelete',
        'alsoTasks' : alsoTasks ? '1' : '0',
        'alsoTasks' : alsoTasks ? '1' : '0',
        'event_id' : eventID
      },
      'onComplete':function(responseObject)
      {
        //alert($type(window.redirectOnDelete) + ' ' + $type(parent.window.redirectOnDelete) + ' ' + $type(parent.redirectOnDelete));

        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
        {
          if (responseObject.error) alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
          else alert(bind.Base.Language.Translate(3000153));
        }

        else
        {
          if (!bind.notChangePageAfterDelete)
           {
            // event, user_event_edit - Redirect on delete
            if( $type(window.redirectOnDelete)=="function" )
              window.redirectOnDelete();
           }
          // Jean 18/04/2010
          else
           {
            // Remove Smoothbox
            TB_remove();

            // On recharge la liste des tâches
            if ($('tasklist_container'))
             {
              // on recharge complètement
              if (alsoTasks)
                bind.getTaskList(bind.eventInfo.event_id, null, null, true);
              // si on a supprimé juste une tâche, alors on se contente de cacher le DIV correspondant à celle-ci
              else
                $('task_container_'+ eventID).style.display = 'none';
             }
           }

          // user_event - Remove row
          if( $('seEvent_' + eventID) )
          {
            $('seEvent_' + eventID).destroy();

            // Display no event message
            if( !$$('.seEvent').length && $('seEventNullMessage') )
            {
              $('seEventNullMessage').style.display = 'block';
            }
          }

          // user_event - Fix that calendar
          var eventMonthShow = $('seEventMonthShow_' + eventID);
          if( eventMonthShow )
          {
            var eventMonthDay = eventMonthShow.title;
            var eventCellElement = $('event_cell' + eventMonthDay);
            eventMonthShow.destroy();

            // Fix color
            if( eventCellElement && eventCellElement.className!='event_cell3' && !eventCellElement.getElements('a').length )
            {
              $('event_cell' + eventMonthDay).className = 'event_cell1';
            }
          }
        }
      }
    });

    request.send();

    // Reset
    currentConfirmDeleteID = 0;
  },


  // Jean 03/01/2011 - Traitement massif des tâches
  massiveTasksProcessing: function()
  {
    TB_show(this.Base.Language.Translate(3510875), '#TB_inline?height=800&width=580&inlineId=massivetasksprocessing', '', '../images/trans.gif');
  },
  massiveTasksProcessingConfirm: function()
  {
    var processType = $('tasksprocess_clone').checked ?
                         'clone'
                       : ( $('tasksprocess_move').checked ?
                            'move'
                          : ( $('tasksprocess_moveDates').checked ?
                              'changedates'
                             : ( $('tasksprocess_schedule_publish').checked ?
                                  'schedul_publish'
                               : ( $('tasksprocess_unpublish').checked ?
                                    'unpublish'
                                  : 'delete'
                                 )
                               )
                             )
                          );
    var destEventId = $('dest_event_id').value;
    var copyAlsoInEventMembers = $('copyAlsoInEventMembers').checked;
    var copyAlsoInEventComments = $('copyAlsoInEventComments').checked;
    var copyAlsoTasks = $('copyAlsoTasks').checked;
    var moveDatesAlsoParent = $('move_dates_also_parent').checked;

    if (processType == 'unpublish' && !$('unpublish_mode_publish').checked && !$('unpublish_mode_unpublish').checked)
     {
      alert('Oops!');
      $('btn_taskprocess_submit').disabled = false;
      return;
     }

    $('loading_massivetasksprocessing').style.display = 'block';

    // Jean 10/05/2011 : calcul de l'offet exact en cas de décalage de dates
    var nbMinutes;
    if (processType == 'changedates')
     {
      nbMinutes = isNaN($('move_dates_days').value) ? 0 : $('move_dates_days').value * 24 * 60;
      nbMinutes += isNaN($('move_dates_hours').value) ? 0 : $('move_dates_hours').value * 60;
      nbMinutes += isNaN($('move_dates_minutes').value) ? 0 : $('move_dates_minutes').value * 1;
     }

    // Ajax
    var bind = this;
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'massivetasksprocessing',
        'process_type' : processType,
        'dest_event_id' : destEventId,
        'copyAlsoInEventMembers' : copyAlsoInEventMembers ? '1' : '0',
        'copyAlsoInEventComments' : copyAlsoInEventComments ? '1' : '0',
        'copyAlsoTasks' : copyAlsoTasks ? '1' : '0',
        'nbMinutes' : nbMinutes,
        'moveDates_alsoParent' : moveDatesAlsoParent ? '1' : '0',
        'event_id' : this.eventInfo.event_id,
        'schedul_events' : $('schedul_events').value,
        'cancelSchedul' : $('cancelSchedul').checked ? '1' : '0',
        'is_publish_mode' : $('unpublish_mode_publish').checked ? '1' : '0'
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          $('loading_massivetasksprocessing').style.display = 'none';
          $('btn_taskprocess_submit').disabled = false;

          if (responseObject.result_value == 'dest_event_no_exists')
           {
            // "Le projet de destination n'existe pas !"
            alert(bind.Base.Language.Translate(3510885));
            if ($('dest_event_id'))
              $('dest_event_id').focus();
           }
          else if (responseObject.error) alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
          else alert(bind.Base.Language.Translate(3000153));
         }
        else
         {
          TB_init();
          $('loading_massivetasksprocessing').style.display = 'none';

          if (processType == 'changedates')
           {
            // Jean 17/05/2011 - Affichage contextuel de la liste des webtvs sur lesquelles s'est propagée cette update
            if (responseObject.maj_webtv_urls)
              bind.showMajWebtvUrls(responseObject.maj_webtv_urls, 100);
           }

          // On affiche le message de résultat...
          if ($('massivetasksprocessing_result'))
           {
            $('massivetasksprocessing_result').style.display = 'block';
            var html = '<div class="result" style="width: 265px; background: #E1FFC6; color: #20501B; border: 1px dashed #AAD1A3; padding: 5px; text-align: left; margin: 10px 0px 15px 0px;">'
                     + '<img src="../images/success.gif" border="0" class="icon" />';
            // "Opération effectuée !"
            html += bind.Base.Language.Translate(3510882);

            // "%1$s tâches ont été affectées."
            if (processType == 'unpublish')
              html += '<br><br>'+ bind.Base.Language.TranslateFormatted(3511547,[responseObject.result_value]);

            // "Les tâches sont à présent visibles sur le projet %1$s"
            if (processType == 'clone' || processType == 'move')
              html += '<br /><br /><small>'+ bind.Base.Language.TranslateFormatted(3510886, ['&laquo;&nbsp;<a href="'+ responseObject.dest_event_url +'">'+ responseObject.dest_event_title +'&nbsp;&raquo;']) +'</small>';
            html += '</div>';
            $('massivetasksprocessing_result').innerHTML = html;
            $('massivetasksprocessing_form').style.display = 'none';

            // Suppression lightbox au bout de n secondes
            if (processType == 'delete' || processType == 'changedates')
              setTimeout("TB_remove();", 3000);
           }

          // On recharge la liste des tâches
          bind.getTaskList(bind.eventInfo.event_id, false, null, true);
         }
      }
    });
   request.send();
  },


  // Jean 26/11/2009
  cloneEvent: function(eventID)
   {
    TB_show(this.Base.Language.Translate(3510249), '#TB_inline?height=280&width=420&inlineId=zone_clone_subject', '', '../images/trans.gif');
   },

  cloneEventConfirm: function(eventID, alsoInEventMembers, alsoInEventComments, alsoTasks)
   {
    var bind = this;

    $('loading_cloning').style.display = 'inline';

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'eventclone',
        'alsoInEventMembers' : (alsoInEventMembers ? '1' : '0'),
        'alsoInEventComments' : (alsoInEventComments ? '1' : '0'),
        'alsoTasks' : (alsoTasks ? '1' : '0'),
        'doNotNotify' : ($('do_not_notify') && $('do_not_notify').checked ? '1' : '0'),
        'event_id' : eventID
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" || !responseObject.neweventID )
        {
          if (responseObject.result_value == 'dest_event_no_exists')
           {
            // "Le projet de destination n'existe pas !"
            alert(bind.Base.Language.Translate(3510885));
            if ($('dest_event_id'))
              $('dest_event_id').focus();
           }
          else if (responseObject.error) alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
          else alert(bind.Base.Language.Translate(3000153));
        }
        else
        {
         //$('loading_cloning').style.display = 'none';

         //document.location = responseObject.eventURL ? responseObject.eventURL : SocialEngine.URL.url_base +'event/'+  responseObject.neweventID +'/';
         document.location.replace(SocialEngine.URL.url_base +'edit/'+ responseObject.neweventID +'&clone=ok');
        }
      }
    });

    request.send();
   },


  // Jean 15/02/2010
  exportEvent: function(eventID, webtvID)
   {
    var hauteurDoc = typeof( window.innerWidth ) == 'number' ?
                             // IE
                             window.innerHeight
                             // Firefox
                             : document.documentElement.clientHeight;
    if (hauteurDoc == 0)
      hauteurDoc = document.documentElement.offsetHeight;

    TB_show(this.Base.Language.Translate(3510247), 'user_event_edit_webtv.php?event_id='+ eventID + (webtvID ? '&cur_event_webtv_id='+webtvID : '') +'&banner=no&TB_iframe=true&height='+ (hauteurDoc ? (hauteurDoc - 160) : '520') +'&width=1100', '', '../images/trans.gif');
    TB_init();
   },


  // Accept Request
  memberAccept: function(userID, eventID, webtvID, justAcceptAttend)
  {
    if (justAcceptAttend)
      $('attend_approval_links_'+ eventID +'_'+ userID +'_'+ webtvID).fade('out');

    // Ajax
    var bind = this;
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'eventmemberaccept',
        'event_id' : (eventID || this.eventInfo.event_id),
        'webtv_id' : webtvID,
        'user_id' : userID,
        'just_accept_attend' : (justAcceptAttend ? '1' : '0')
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          if (responseObject.error) alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
          else alert(bind.Base.Language.Translate(3000153));
         }
        else
         {
          // alerte : "Un email lui a été envoyé pour l'informer de cette décision"
          if (!justAcceptAttend)
           {
            alert(bind.Base.Language.Translate(3001011));

            // Refresh window, at least for now
            if( document.event_members_form )
              document.event_members_form.submit();
            else if (!webtvID)
              window.location.reload( false );
           }
         }
      }
    });

    request.send();
  },


  // Deny Request
  memberReject: function(userID, eventID, webtvID, justRejectAttend)
  {
    if (justRejectAttend)
      $('attend_approval_links_'+ eventID +'_'+ userID +'_'+ webtvID).fade('out');

    // Ajax
    var bind = this;
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'eventmemberreject',
        'event_id' : (eventID || this.eventInfo.event_id),
        // Jean 21/02/2011
        'webtv_id' : webtvID,
        'user_id' : userID,
        'just_reject_attend' : (justRejectAttend ? '1' : '0')
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
        {
          if (responseObject.error) alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
          else alert(bind.Base.Language.Translate(3000153));
        }

        else
        {
          // alerte : "Un email lui a été envoyé pour l'informer de cette décision"
          if (!justRejectAttend)
            alert(bind.Base.Language.Translate(3001011));

          // Refresh window, at least for now
          if( document.event_members_form )
            document.event_members_form.submit();
          else if (!webtvID)
            window.location.reload( false );
        }
      }
    });

    request.send();
  },



  // Deny Request
  memberDelete: function(userID)
  {
    this.currentConfirmID = userID;
    TB_show(this.Base.Language.Translate(3000154), '#TB_inline?height=100&width=300&inlineId=confirmeventmemberdelete', '', '../images/trans.gif');
  },


  memberDeleteConfirm: function()
  {
    userID = this.currentConfirmID;

    // Ajax
    var bind = this;
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'eventmemberdelete',
        'event_id' : this.eventInfo.event_id,
        'user_id' : userID
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
        {
          if (responseObject.error) alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
          else alert(bind.Base.Language.Translate(3000153));
        }

        else
        {
          // Jean 19/08/2009 : gestion de la suppression du user dans l'onglet d'invité d'un event
          if ($('div_guest_'+ userID))
           {
            $('div_guest_'+ userID).destroy();
            try { TB_remove(); } catch (e) {;}
           }
          else if ($('div_contrib_'+ userID))
           {
            $('div_contrib_'+ userID).destroy();
            try { TB_remove(); } catch (e) {;}
           }
          else if( document.event_members_form )
            document.event_members_form.submit();
          else
            window.location.reload( false );
        }
      }
    });

    request.send();
  },




  // Cancel Invite
  memberCancel: function(userID, webtvID)
  {
    this.currentConfirmID = userID;
    // Jean 23/06/2011
    this.currentConfirmWebtvID = webtvID;
    TB_show(this.Base.Language.Translate(3000223), '#TB_inline?height=100&width=300&inlineId=confirmeventmembercancel', '', '../images/trans.gif');
  },


  memberCancelConfirm: function()
  {
    userID = this.currentConfirmID;

    // Ajax
    var bind = this;
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'eventmembercancel',
        'event_id' : this.eventInfo.event_id,
         // Jean 23/06/2011
        'webtv_id' : this.currentConfirmWebtvID,
        'user_id' : userID
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
        {
          if (responseObject.error) alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
          else alert(bind.Base.Language.Translate(3000153));
        }

        else
        {
          // Jean 19/08/2009 : gestion de la suppression du user dans l'onglet d'invité d'un event
          if ($('div_guest_'+ userID))
           {
            $('div_guest_'+ userID).destroy();
            try { TB_remove(); } catch (e) {;}
           }
          else if ($('div_interested_'+ userID))
           {
            $('div_interested_'+ userID).destroy();
            try { TB_remove(); } catch (e) {;}
           }
          else if( document.event_members_form )
            document.event_members_form.submit();
          else
            window.location.reload( false );
        }
      }
    });

    request.send();
  },


//---------------------------------------------------------------------------------
// Jean 19/08/2009 : on déplace les instructions pour l'invitation de 'event.tpl' à 'class_event.js'
    tabDisplayName: Array(),
    tabInfosAutres: Array(),
    tabFriends: Array(),
    listeInvitedUserID: Array(),
    // Jean 17/06/2010
    lastAffineIntervValue: Array(),
    lastAffineIntervBisValue: Array(),

    // Jean 21/12/2010
    tabUserName: Array(),

    inviteMemberSearchContrib: function()
     {
      var nomSaisi = $('affine_intervenants').value;
      var infosSaisies = $('affine_intervenants_autres').value;   // Jean 31/07/2009
      var onlyFriends = $('affine_friends_yes').checked;          // Jean 31/07/2009
      var excludeSuppliers = $('exclude_suppliers') && $('exclude_suppliers').checked;  // Jean 20/12/2010
      var userLevelId = $('affine_user_level_id') ? $('affine_user_level_id').value : '';  // Jean 21/12/2010
      var userSubscribeGroupId = $('affine_user_subscribe') ? $('affine_user_subscribe').value : '';  // Jean 21/02/2011

      $('btn_supp_rech_interv').src = (nomSaisi == '' ? 'images/icons/action_delete1.gif' : 'images/icons/action_delete2.gif');
      $('btn_supp_rech_interv_autres').src = (infosSaisies == '' ? 'images/icons/action_delete1.gif' : 'images/icons/action_delete2.gif');

      // On parcourt les contributeurs
      var nb_res = 0;
      var nb_init = 0;
      var tabUserId = new Array();
      var listeChamps = document.getElementsByTagName('INPUT');

      for (var i=0; i<listeChamps.length; i++)
       {
         var champCourant = listeChamps[i];
         var nomPrenomCourant, infosCourantes;
         var trouveFriends, trouveNomPrenom, trouveAutre;
         var res, userID;

         if (champCourant.id && (res = champCourant.id.match(/^uzer_(.+)$/)))
          {
           userID = res[1];
           if (tabUserId['uz_'+ userID]) continue;
           tabUserId['uz_'+ userID] = true;

           nb_init ++;

           // Jean 20/12/2010
           if ( excludeSuppliers && this.dicoSuppliers['uz_'+userID] )
            {
             trouve = false;
            }
           // Jean 21/12/2010
           else if ( userLevelId != '' && this.dicoUserLevelId['uz_'+userID] != userLevelId )
            {
             trouve = false;
            }
           // Jean 21/02/2011
           else if ( userSubscribeGroupId != '' && !inArray(this.dicoUserSubscribes['uz_'+userID],userSubscribeGroupId) )
            {
             trouve = false;
            }
           else
            {
             trouveFriends = (!onlyFriends || this.tabFriends['user_'+ userID]);
             if (!trouveFriends)
               trouveNomPrenom = false;
             else
              {
               nomPrenomCourant = this.tabDisplayName['user_'+ userID];
               infosCourantes = this.tabInfosAutres['user_'+ userID];
               if (nomSaisi == '') trouveNomPrenom = true;
               else trouveNomPrenom = (retireAccents(nomPrenomCourant.toLowerCase()).indexOf(retireAccents(nomSaisi.toLowerCase())) > -1);
              }
             if (!trouveNomPrenom) trouveAutre = false;
             else if (infosSaisies == '') trouveAutre = true;
             // Jean 31/07/2009 : recherche par thématique/centre d'intérêt
             else trouveAutre = (retireAccents(infosCourantes.toLowerCase()).indexOf(retireAccents(infosSaisies.toLowerCase())) > -1);

             trouve = trouveFriends && trouveNomPrenom && trouveAutre;
            }

           if (trouve && $('div_uzer_'+ userID)) nb_res++;

           if ($('div_uzer_'+ userID))
             $('div_uzer_'+ userID).style.display = trouve ? '' : 'none';
          }
       }
/*
      if (nb_res == nb_init)
        $('zone_nb_res').innerHTML = nb_init +' '+ SocialEngine.Language.Translate(3000720);  // "n contributeurs en tout"
      else
*/
        $('zone_nb_res').innerHTML = '<font style="color: #C46200;"><b>'+ nb_res +' '+ SocialEngine.Language.Translate(3510164) +'</b> '+ nb_init +'</font>';  // "n contributeur(s) trouvé(s) sur m"

      clearTimeout(to3);
      $('loading_rech_interv').style.visibility = 'hidden';
      $('loading_rech_interv_autres').style.visibility = 'hidden';
      $('loading_rech_user_chaine').style.visibility = 'hidden';
      if ($('loading_rech_interv_ss_suppliers'))
        $('loading_rech_interv_ss_suppliers').style.visibility = 'hidden';
      $('loading_rech_user_level_id').style.visibility = 'hidden';
      to3 = setTimeout("if ($('affine_intervenants').value == '' && $('affine_intervenants_autres').value == '') $('zone_nb_res').innerHTML = '&nbsp;';", 8000);
     },

     inviteMemberMajListeContrib: function()
      {
       // Jean 19/08/2009
       SocialEngine.Profile.infoBulle_hide();

       this.listeInvitedUserID = new Array();

       var listeChamps = $('invite_friendlist').getElementsByTagName('INPUT');
       var listeContribTxt = "";

       // On parcourt les contributeurs
       for (var i=0; i<listeChamps.length; i++)
        {
         var champCourant = listeChamps[i];
         var res;
         if (!champCourant.id || !(res = champCourant.id.match(/^uzer_(.+)$/)))
           continue;

         var contribID = res[1];

         if (champCourant.checked)
          {
           this.listeInvitedUserID[this.listeInvitedUserID.length] = champCourant.value;
           if (listeContribTxt != "") listeContribTxt += ", ";
           var nomPrenomCourant = this.tabDisplayName['user_'+ contribID];
           var userNameCourant = this.tabUserName['user_'+ contribID];

           listeContribTxt += '<span style="background-color: ;"><a target="_blank" href="'+ userNameCourant +'--'+ to_url(nomPrenomCourant) +'">'+ nomPrenomCourant.replace(/^ +/, "").replace(/ +$/, "") +'</a>';
           // Jean 18/08/2009
           listeContribTxt += '<a style="margin-left: 1px;"'
                           +    ' href="javascript: ;"'
                           +    ' onclick="$(\'uzer_'+ contribID +'\').checked = false;'
                           +              '$(\'div_uzer_'+ contribID +'\').style.background = \'\';'
                           +              'SocialEngine.Event.inviteMemberMajListeContrib();">'
                           +  '<img src="images/icons/action_delete2.gif" border="0" align="absmiddle" /></a>';
           listeContribTxt += '</span>';

           $('div_uzer_'+ contribID).style.backgroundColor = "#FFE242";
          }
         else
          $('div_uzer_'+ contribID).style.backgroundColor = (this.dicoProfileCatId[contribID] == "1" ? "#FBF4F0;" : "");
        }

       /*
       if (listeContribTxt.length > 3500)
         $("liste_contribs_str").innerHTML = listeContribTxt.substring(0, 800) +'...';
       else
       */
         $("liste_contribs_str").innerHTML = listeContribTxt == "" ? "<i>"+ SocialEngine.Language.Translate(3000654) +"</i>" : listeContribTxt;  // aucun

       try
       { $('affine_intervenants').focus(); }
       catch (e) {;}

       return true;
      },

    allMembersAreSelected: false,

    // Jean 26/06/2009
    inviteMemberCheckAllContrib: function()
     {
       this.listeInvitedUserID = new Array();

       var listeChamps = document.getElementsByTagName('INPUT');

       // "Tout le monde" ?
       var everyBodyTxt = ("<b>"+ SocialEngine.Language.Translate(3000718) +"</b>").toUpperCase();
       var toutCocher = !this.allMembersAreSelected; // $("liste_contribs_str").innerHTML.toUpperCase() != everyBodyTxt;
       var nb_init = 0;
       var nb_res = 0;
       var tabUserId = new Array();

       // On parcourt les contributeurs
       for (var i=0; i<listeChamps.length; i++)
        {
         var champCourant = listeChamps[i];
         var res;

         if (!champCourant.id || !(res = champCourant.id.match(/^uzer_(.+)$/)))
           continue;

         // Jean 15/06/2010
         if (champCourant.disabled)
           continue;

        if (champCourant.checked == toutCocher)
           continue;

         var contribID = res[1];
         if (tabUserId['uz_'+ contribID]) continue;
         tabUserId['uz_'+ contribID] = true;

         // Jean 20/12/2010 - On ne coche massivement que les membres issus du filtrage dynamique
         if ($('div_uzer_'+ contribID) && $('div_uzer_'+ contribID).style.display == 'none')
          {
           if (!toutCocher)
             champCourant.checked = false;
           continue;
          }

         nb_init++;

         champCourant.checked = toutCocher;
         if (toutCocher) this.listeInvitedUserID[this.listeInvitedUserID.length] = champCourant.value;
         if ($('div_uzer_'+ contribID))
           $('div_uzer_'+ contribID).style.background = toutCocher ? "#FFE242" : "";

         if (champCourant.checked)
           nb_res++;
        }

       // On affiche "Tout le monde" ou "aucun", selon...
       $("liste_contribs_str").innerHTML = this.allMembersAreSelected ? everyBodyTxt : "<i>"+ SocialEngine.Language.Translate(3000654) +"</i>";
       this.allMembersAreSelected = toutCocher;

       // On affiche quand-même la liste des users cochés, s'il n'y en a pas trop
       if (nb_res < 50)
         SocialEngine.Event.inviteMemberMajListeContrib();

       return true;
     },
//---------------------------------------------------------------------------------

  // Invite
  memberInvitePopulate: function(allFriends, justInviteToAttend, justInviteToSee, isModeExpress, eventID)
  {
    if (!$('invite_friendlist'))
     {
      alert('DIV tag "invite_friendlist" not found in ths HTML page !');
      return;
     }

    if (!eventID)
      eventID = this.eventInfo.event_id;

    // Jean 23/06/2009
    var waitImgName = "img_load_invite"+ (justInviteToAttend ? '_attend' : (justInviteToSee ? '_see' : ''));
    if (allFriends)
      waitImgName += '_members';
    if ($(waitImgName)) $(waitImgName).style.visibility = "visible";

    // Jean 15/04/2011 : pour pouvoir inviter qq sans pour autant passer par l'écran complet (qui met du temps à se charger)
    if (isModeExpress)
     {
      if ($('img_load_invite_members'))
        $('img_load_invite_members').style.visibility = "hidden";
      if ($('img_load_invite'))
        $('img_load_invite').style.visibility = "hidden";
      TB_show('', 'user_invite.php?event_id='+ eventID +'&TB_iframe=true&width=650&height=300', '', '../images/trans.gif');
      return;
     }

    // Ajax
    var bind = this;
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        // Jean samedi 16 mai 2009 : c'est là qu'on va étendre la possibilité d'inviter d'autres contributeurs que ses amis à participer
        // (cf. fichier 'event_ajax.php')
        'task' : 'get_contributeurs',
//        'task' : 'getfriends',
        'event_id' : this.eventInfo.event_id,
        'just_invite_to_see' : (justInviteToSee ? '1' : '0'),
        'all_friends' : allFriends ? "1" : ""
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          if (responseObject.error) alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
          else alert(bind.Base.Language.Translate(3000153));
         }
        else
         {
          bind.memberInviteShow(eventID, $H(responseObject.friends), allFriends, justInviteToAttend, justInviteToSee);
         }
      }
    });

    request.send();
  },

  // Jean 15/06/2010
  dicoProfileCatId: Array(),

  // Jean 20/12/2010
  dicoSuppliers: new Array(),

  // Jean 21/12/2010
  dicoUserLevelId: new Array(),

  // Jean 21/02/2011
  dicoUserSubscribes: new Array(),


  memberInviteShow: function(eventID, friendsObject, allFriends, justInviteToAttend, justInviteToSee)
  {
    this.currentConfirmID = eventID;

    // Remove any existing friends
    $('invite_friendlist').empty();

    // Generate HTML
    var bind = this;
    if( $A(friendsObject.getKeys()).length>0 )
    {
     // Jean 23/06/2009
     var waitImgName = "img_load_invite"+ (justInviteToAttend ? '_attend' : (justInviteToSee ? '_see' : ''));
     if (allFriends)
       waitImgName += '_members';
     if ($(waitImgName)) $(waitImgName).style.visibility = "hidden";

     // Jean 31/07/2009
     if (isSafari && $("zone_video"))
       $("zone_video").style.display = 'none';

// Jean 16/06/2009
      var strHtml = '';

      var afficherPhotos = !allFriends || friendsObject.length < 200;

      friendsObject.each(function(userInfos, indice)
      {
       var userID = userInfos['user_id'];

       // Jean 20/12/2010 : si c'est un client, partenaire ou fournisseur
       bind.dicoSuppliers['uz_'+userID] = userInfos['user_is_supplier'] == '1';
       bind.dicoUserLevelId['uz_'+userID] = userInfos['user_level_id'];

       // Jean 21/02/2011
       bind.dicoUserSubscribes['uz_'+userID] = userInfos['groupsubscribes'];

       // Jean 20/12/2010
       var excludeSuppliers = $('exclude_suppliers') && $('exclude_suppliers').checked;

       bind.dicoProfileCatId[userID] = userInfos['user_profilecat_id'];
       strHtml += "<div class='browse_result invit_box "+ (userInfos['already_invited'] == "1" ? " already_invited" : "") +"'"
                    + " id='div_uzer_"+ userID +"'"
                    + " style='"+ (userInfos['already_invited'] != "1" ? 'cursor: pointer;' : '')
                             + "float: left;"
                             + " width: "+ (afficherPhotos ? "215" : "215") +"px;"
                             + " height: "+ (afficherPhotos ? "100" : "100") +"px;"
                             + " text-align: "+ (afficherPhotos ? "center" : "center") +";"
                             + "overflow: hidden; "
                             + (userInfos['already_invited'] == "1" || userInfos['user_profilecat_id'] == "1"
                                    ? " background-color: "+ (userInfos['already_invited'] == "1"
                                                                 ? "#FFFFFF; border-color: #DDDDDD"
                                                                  // Jean 01/02/2011 : on met les "clients" en évidence
                                                                 : (isExtranet && userInfos['user_is_client'] == "1"
                                                                      ? "#FFEE17"
                                                                      : (isExtranet && userInfos['user_is_supplier'] == '1' ? "#FFC617" : "#FBF4F0"))
                                                              ) +";"
                                   : "")
                           // Jean 20/12/2010
                           + (excludeSuppliers && bind.dicoSuppliers['uz_'+userID] ? "display: none;" : "")

                           // Jean 21/12/2010 : transparence si déjà invité
                           + (userInfos['already_invited'] == "1" ? "opacity: 0.60; filter: alpha(opacity=60);" : "")

                           + "'";
       if (userInfos['already_invited'] != "1")
         strHtml += ' onmouseover="this.sauvBG = this.style.backgroundColor; this.style.backgroundColor = \'#FFE242\'; SocialEngine.Profile.infoBulle_show(null,'+ userID +',1500,event);"'
                   +' onmouseout="if (!$(\'uzer_'+ userID +'\').checked) this.style.backgroundColor = this.sauvBG; SocialEngine.Profile.infoBulle_hide();"'
                   +' onclick="$(\'uzer_'+ userID +'\').checked = !$(\'uzer_'+ userID +'\').checked; SocialEngine.Event.inviteMemberMajListeContrib();"';
       strHtml += '>';

       // Jean 31/05/2010 : on ajoute les infos perso
       strHtml += '<table cellspacing="0" cellpadding="1" border="0" class="people_to_invite">';
       strHtml += '  <tr>';
       strHtml += '   <td style="width: '+ (afficherPhotos ? "100" : "75") +'px; text-align: center;" valign="top" align="middle">';

       // Case à cocher
       strHtml += '    <input type="checkbox"';
       strHtml += '           name="invites[]"';
       if (userInfos['already_invited'] == "1")
        {
         strHtml += ' disabled';
         // Cette personne a déjà été invitée
         strHtml += ' onclick="alert(SocialEngine.Language.Translate(3000782))"';
        }
       else
         strHtml += '         onclick="this.checked = !this.checked; SocialEngine.Event.inviteMemberMajListeContrib();"';
       strHtml += '           value="'+ userID +'"';
       strHtml += '           id="uzer_'+ userID +'"';
       strHtml += '     />';

       // Jean 24/01/2010 : on affiche les photos seulement si nombre limité // Jean 03/06/2010 : ou si contributeur
       if (afficherPhotos || userInfos['user_profilecat_id'] == "1")
         strHtml += ' <img src="'+ userInfos['photo_src'] +'" class="photo" style="display: block; margin-left: auto; margin-right: auto;" width="60" height="60" border="0">';

       strHtml += userInfos['displayname'];
       strHtml += '   </td>';
       strHtml += '   <td valign="top" align="left">';

       // Déjà invité(e) !
       if (userInfos['already_invited'] == "1")
         strHtml += '<div class="already_invited_txt">'+ bind.Base.Language.Translate(3000813) +'</div>';

       // Jean 03/06/2010 - "Contributeur" / Niveau utilisateur
       if (userInfos['user_profilecat_id'] == "1" || isExtranet)
         strHtml += '<div class="contributor_txt">'+ (isExtranet ? userInfos['user_level_name'] : bind.Base.Language.Translate(3510560)) +'</div>';

       if (userInfos['all_infos']['bio'] && userInfos['all_infos']['bio'].length > 47) userInfos['all_infos']['bio'] = userInfos['all_infos']['bio'].substring(0, 45) +'...';

       if (userInfos['all_infos']['minibio'] != "" || userInfos['all_infos']['bio'] != "" || userInfos['all_infos']['societe'] != "" || userInfos['all_infos']['interests'] != "")
        {
         strHtml += ' <table cellspacing="0" cellpadding="0" border="0" class="people_to_invite_infos">';

         // SOCIÉTÉ
         if (userInfos['all_infos']['societe'] != "")
           strHtml += '   <tr><td class="societe">'+ userInfos['all_infos']['societe'] +'</td></tr>';

         // MINI-BIO
         if (userInfos['all_infos']['minibio'] != "")
           strHtml += '   <tr><td>'+ userInfos['all_infos']['minibio'] +'</td></tr>';
         else if (userInfos['all_infos']['bio'] != "")
           strHtml += '   <tr><td>'+ userInfos['all_infos']['bio'] +'</td></tr>';

         // CENTRES D INTÉRÊTS
         if (userInfos['all_infos']['interests'] != "")
          strHtml += '   <tr><td>'+ userInfos['all_infos']['interests'] +'</td></tr>';

         strHtml += ' </table>';
        }
       else
         strHtml += ' <div style="width: 100%; text-align:center; font-size: 25px; padding-top: 35px; font-weight: bold; color: #D3D3D3;">?</div>';

       strHtml += '   </td>';
       strHtml += '  </tr>';
       strHtml += ' </table>';

       var strInfosAutres = '';
       for (var lib in userInfos['all_infos'])
        { strInfosAutres += userInfos['all_infos'][lib] +', '; }
       if (userInfos['is_friend'] == "1")
         SocialEngine.Event.tabFriends['user_'+ userID] = true;
       SocialEngine.Event.tabDisplayName['user_'+ userID] = userInfos['displayname'];
       SocialEngine.Event.tabUserName['user_'+ userID] = userInfos['user_username'];
       SocialEngine.Event.tabInfosAutres['user_'+ userID] = strInfosAutres;
       strHtml += '</script>';

       strHtml += '</div>';
      });

      strHtml += '</div>';

// Jean 16/06/2009
      if ($('invite_friendlist')) $('invite_friendlist').innerHTML = strHtml;
      //$('eventMemberInviteSelectAll').onclick = '';

      $('inviteForm').style.display = '';
      $('noFriends').style.display = 'none';
      $('inviteResults').style.display = 'none';
    }

    else
    {
      $('inviteForm').style.display = 'none';
      $('noFriends').style.display = '';
      $('inviteResults').style.display = 'none';
    }

    // Jean 17/06/2010
    if ($('btn_submit_invite_to_see_and_comment'))
      $('btn_submit_invite_to_see_and_comment').style.display = !justInviteToSee && !isExtranet ? 'none' : 'inline';
    if ($('btn_submit_invite_to_take_part'))
      $('btn_submit_invite_to_take_part').style.display = justInviteToAttend || justInviteToSee ? 'none' : 'inline';
    if ($('btn_submit_invite_to_attend'))
      $('btn_submit_invite_to_attend').style.display = justInviteToAttend ? 'inline' : 'none';

    var hauteurDoc = typeof( window.innerWidth ) == 'number' ?
                             // IE
                             window.innerHeight
                             // Firefox
                             : document.documentElement.clientHeight;
    if (hauteurDoc == 0)
      hauteurDoc = document.documentElement.offsetHeight;

    // Jean 09/12/2010
    var largeurDoc = typeof( window.innerWidth ) == 'number' ?
                             // IE
                             window.innerWidth
                             // Firefox
                             : document.documentElement.clientWidth;
    if (largeurDoc == 0)
      largeurDoc = document.documentElement.offsetWidth;

    $('table_header_invites').style.fontSize = largeurDoc > 1300 ? '16px' : null;

    TB_show(this.Base.Language.Translate(allFriends ? 3510163 : (justInviteToAttend ? 3510609 : 3000225)), '#TB_inline?height='+ (hauteurDoc ? (hauteurDoc - 110) : '680') +'&width='+ (largeurDoc ? (largeurDoc - 100) : '1000') +'&inlineId=eventmemberinvite', '', '../images/trans.gif', true);

    // Jean 09/12/2010
    if (largeurDoc && $('table_header_invites'))
      $('scroll_invites').style.width = Math.max(600, largeurDoc - 150);
    if (hauteurDoc && $('table_header_invites'))
      $('scroll_invites').style.height = Math.max(200, hauteurDoc - $('table_header_invites').offsetHeight - $('buttons_memberInviteSend').offsetHeight - 150);

    SocialEngine.Event.allFriends = allFriends;

    try
     { $('affine_intervenants').focus(); }
    catch (e) {;}
  },

  memberInviteSend: function(approvedValue, eventID)
  {
    var bind = this;

    if (!eventID)
      eventID = this.eventInfo.event_id;

    if (!approvedValue)
      approvedValue = 1;

    if (this.listeInvitedUserID == 0)
    {
     alert(bind.Base.Language.Translate(3000775));
     return;
    }

    // 19/06/2009 : On évite de cliquer 36 fois sur le bouton
   if ($('buttons_memberInviteSend')) $('buttons_memberInviteSend').style.display = 'none';
   if ($('loading_memberInviteSend')) $('loading_memberInviteSend').style.display = 'inline';
   // Jean 15/06/2011
   if ($('event_memberInviteSend')) $('event_memberInviteSend').style.display = 'inline';
   if ($('zone_invite_them_all')) $('zone_invite_them_all').style.display = 'none';

   // Jean 08/12/2009
   if (buttonMemberInviteSend) buttonMemberInviteSend.style.display = 'none';
   if (waitMemberInviteSend) waitMemberInviteSend.style.display = 'inline';

   var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'eventmemberinvite',
        'approved_value' : approvedValue,
        'event_id' : eventID,
        'invites' : this.listeInvitedUserID
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
        {
          if (responseObject.error) alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
          else alert(bind.Base.Language.Translate(3000153));
        }
        else
        {
          // Jean 15/06/2011
          if ($('event_memberInviteSend')) $('event_memberInviteSend').style.display = 'none';

          if ($('buttons_memberInviteSend')) $('buttons_memberInviteSend').style.display = 'inline';
          if ($('loading_memberInviteSend')) $('loading_memberInviteSend').style.display = 'none';

          if (responseObject.invites_sent.length == 0)
           {
            // Jean 08/12/2009
            if (buttonMemberInviteSend) buttonMemberInviteSend.style.display = 'inline';
            if (waitMemberInviteSend) waitMemberInviteSend.style.display = 'none';

            alert(bind.Base.Language.Translate(SocialEngine.Event.listeInvitedUserID.length > 1 ? 3000781 : 3000782) +".");
           }
          else
           {
            alert(
                responseObject.invites_sent.length +(" "+ bind.Base.Language.Translate(responseObject.invites_sent.length == 1 ? 3000783 : 3000784) +".")
              + (responseObject.invites_sent.length < SocialEngine.Event.listeInvitedUserID.length ?
                   ("\n\n"+ bind.Base.Language.TranslateFormatted(3000780, [SocialEngine.Event.listeInvitedUserID.length - responseObject.invites_sent.length])) : "")
              );
            try {TB_remove();} catch (e) {;}

            // Jean 19/08/2009
            if( document.event_members_form )
              document.event_members_form.submit();
           }

          // Show invites sent
          $('inviteResults').innerHTML = bind.Base.Language.TranslateFormatted(3000229, [responseObject.invites_sent]);
          $('inviteForm').style.display = 'none';
          $('noFriends').style.display = 'none';
          $('inviteResults').style.display = '';
        }
      }
    });

    request.send();
  },


  // Jean 17/11/2009 : Pour inviter 1 seule personne à un tournage
  oneMemberInviteSend: function(user_id, webtvID, eventID, objLink, approvedValue)
  {
    // Ajax
    var bind = this;

    if (!user_id)
    {
     alert(bind.Base.Language.Translate(3000775));
     return;
    }

    if (objLink)
     {
      objLink.onclick = 'alert("Please wait!");';
      objLink.innerHTML = '<img src="images/icons/language_tool_loader.gif" border="0" />';
     }

    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'eventmemberinvite',
        'event_id' : eventID ? eventID : this.eventInfo.event_id,
        'webtv_id' : webtvID,
        'invites' : [user_id],
        'approved_value' : approvedValue
      },
      'onComplete':function(responseObject)
      {
        if (objLink)
          objLink.style.display = 'none';

        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          if (responseObject.error) alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
          else alert(bind.Base.Language.Translate(3000153));
         }
        else
         {
          if (responseObject.invites_sent.length == 0)
           {
            alert(bind.Base.Language.Translate(SocialEngine.Event.listeInvitedUserID.length > 1 ? 3000781 : 3000782) +".");
           }
          else
           {
            alert(
                  responseObject.invites_sent.length +(" "+ bind.Base.Language.Translate(responseObject.invites_sent.length == 1 ? 3000783 : 3000784) +".")
                + (responseObject.invites_sent.length < SocialEngine.Event.listeInvitedUserID.length ?
                     ("\n\n"+ bind.Base.Language.TranslateFormatted(3000780, [SocialEngine.Event.listeInvitedUserID.length - responseObject.invites_sent.length])) : "")
                );
            try {TB_remove();} catch (e) {;}
           }
         }
      }
    });

    request.send();
  },


  // oliv 3 juin 08
  envoyerAmi: function(eventID, confidMode)
  {
    this.currentConfirmID = ( eventID || this.eventInfo.event_id );
    this.currentInviteInConfidMode = confidMode;

    TB_show(confidMode ? '' : this.Base.Language.Translate(3000575), '#TB_inline?height=530&width=650&inlineId=confirmEnvoyerAmi', '', '../images/trans.gif', 1);

    if (!confidMode)
     {
      // initialisation du WYSIWYG
      try
       {
        if (tinyMCE.get('invite_messageField'))
          tinyMCE.get('invite_messageField').remove();
       }
      catch (e) {;}
      initWYSIWYG('invite_messageField', 'simple', null, null, null, null, true, true);
     }

    $('invite_emailsField').focus();
  },

  EnvoyerAmiConfirm: function()
  {
    var bind = this;
    eventID = this.currentConfirmID;
    confidMode = this.currentInviteInConfidMode;
    inviteemails = $('invite_emailsField').value;
    invitemessage = $('invite_messageField') ? $('invite_messageField').value : '';
    invitesubject = $('invite_subjectField').value;

    if (inviteemails != "" && (confidMode || invitemessage != ""))
     {
      $('buttons_EnvoyerAmiConfirm').style.display = 'none';
      $('loading_EnvoyerAmiConfirm').style.display = 'inline';

      // Ajax
      var bind = this;
      var request = new Request.JSON({
        'method' : 'post',
        'url' : this.options.ajaxURL,
        'data' : {
          'task' : 'envoyermailami',
          'invite_emails' : inviteemails,
          'invite_message' : invitemessage,
          'invite_subject' : invitesubject,
          'event_id' : eventID,
          'is_confid_mode' : confidMode ? '1' : '0'
        },
        'onComplete':function(responseObject)
         {
          $('buttons_EnvoyerAmiConfirm').style.display = 'inline';
          $('loading_EnvoyerAmiConfirm').style.display = 'none';

          if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
           {
            if (responseObject.error) alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
            else alert(bind.Base.Language.Translate(3000153));
           }
          else
           {
            TB_remove();
            // "Votre invitation est bien partie !" / "Votre recommandation est bien partie... Merci beaucoup pour ce coup de pouce !"
            alert(bind.Base.Language.Translate(confidMode ? 3511816 : 3510145));
           }
         }
      });

      //request.send();
      request.send();
     }
    else
     // "Destinataires et/ou message manquant"
     alert(bind.Base.Language.Translate(3000574));
  },


  // Jean 07/04/2011
  initExpressAccount: function(interestType, explain_text, interestValue, forceShowDialog)
   {
    // On prépare le titre du mini-formulaire de création express de compte
    var htmlTitre;

    // "Vous avez demandé à vous faire envoyer des livres blancs sur ce sujet. aussi, afin de demander aux organisateurs de vous en envoyer, nous vous demandons juste de saisir les infos suivantes afin que votre demande puisse être traitée :"
    if (interestType == 'whitepapers')
     {
      htmlTitre = '<img src="./images/icons/file_big.gif" border="0" class="icon" style="width: 50px; float: left;" />'+ this.Base.Language.Translate(3511207) +'<br /><br />';
      // "NB : Ces données ne seront utilisées qu aux fins de vous faire parvenir des livres blancs en provernance de sociétés ayant des réponses à apporter au sujet qui vous intéresse. il ne sera pas utilisé en-dehors de ce champ d action !"
      htmlNB = this.Base.Language.Translate(3511212);
     }
    else
     {
      // "Afin que l'intérêt que vous manifestez pour ce sujet soit pris en compte, nous devons en savoir un minimum sur vous !<br><br>Merci de bien vouloir remplir les champs ci-dessous... Suite à quoi vous recevrez un mail contenant vos informations de connexion personnelles : celles-ci vous permettront de venir vous identifier sur cette webtv, et bénéficier ainsi des <a href="bonnes-raisons-de-s-inscrire" target="_blank">avantages de l'inscription</a>."
      htmlTitre = this.Base.Language.Translate(3511265);
      // "NB : Ces données ne seront utilisées qu'aux fins de nous communiquer votre intérêt et de le mémoriser. Il ne sera pas utilisé en-dehors de ce champ d'action !"
      htmlNB = this.Base.Language.Translate(3511267);
     }

    $('zone_titre_express_account').style.display = 'block';
    $('zone_titre_express_account').innerHTML = htmlTitre;
    $('zone_nota_benne_express_account').innerHTML = htmlNB;

    // On ouvre la boîte de dialogue avec le mini formulaire de création express de compte
    this.currentInterestType = interestType;
    this.currentInterestValue = interestValue;
    this.explainText = explain_text;
    // Jean 03/02/2012
    this.forceShowDialog = forceShowDialog;
    TB_show($('labelInterest_'+ interestType) ? $('labelInterest_'+ interestType).innerHTML : '', '#TB_inline?width=600&height=555&inlineId=generic_zone_express_account', '', '../images/trans.gif');
    $('express_lname').focus();
    setTimeout("$('express_lname').focus();",200);
   },


  dicoMemInterest: new Array(),

  // Jean 04/12/2009 : fonction générique pour gérer les différents types de bookmarking (event_member_xxx)
  interestConfirm: function(interestType, value, eventID, explainVolont, webtvID, forceShowDialog)
   {
    if (!eventID) eventID = ( this.currentConfirmID || this.eventInfo.event_id );
    if (!eventID) return;

    if (!this.dicoMemInterest[eventID])
      this.dicoMemInterest[eventID] = Array();

    // Jean 08/12/2010 : si aucun changement, inutile de poursuivre
    if (!webtvID && this.dicoMemInterest[eventID]['eventmember_'+ interestType] && this.dicoMemInterest[eventID]['eventmember_'+ interestType] == value
     && (!explainVolont || this.dicoMemInterest[eventID]['eventmember_volont_explain'] == explainVolont))
      return;

    // Jean 26/03/2011 : si le user n'est pas logué et n'a pas encore saisi ses coordonnées ? alors on lui crée un "compte express" : on affiche donc un mini formulaire
    if (/*!forceShowDialog &&*/ !isLogged && !current_express_email)
     {
      this.currentConfirmID = eventID;
      this.initExpressAccount(interestType, explainVolont, value, forceShowDialog);
      return;
     }

    // Jean 08/11/2011 : on peut rédiger un message de candidature pour demander à assister dans le public (ou déclarer avoir terminé sa partie)
    if (interestType == 'wantattend' && forceShowDialog)
     {
      // "Validation de mon inscription"
      TB_show(this.Base.Language.Translate(3511901), '#TB_inline?height=280&width=550&inlineId=confirmwantattend', '', '../images/trans.gif');
      $('seEventProfileWantToAttend_bis').checked = (value == '1');
      if ($('seEventProfileWantToAttend_bis').checked)
       {
        $('zone_explain_wantattend').style.display = '';
        $('wantattend_explain').focus();
       }
      else
        $('zone_explain_wantattend').style.display = 'none';
      return;
     }

    // Jean 02/02/2012 : on peut rédiger un message de candidature pour demander à participer en tant qu'interevenant
    if (interestType == 'wanttakepart' && forceShowDialog)
     {
      // "Validation de mon inscription"
      TB_show(this.Base.Language.Translate(3511901), '#TB_inline?height=280&width=550&inlineId=confirmwanttakepart', '', '../images/trans.gif');
      $('seEventProfileWantToTakePart_bis').checked = (value == '1');
      if ($('seEventProfileWantToTakePart_bis').checked)
       {
        $('zone_explain_wanttakepart').style.display = '';
        $('wanttakepart_explain').focus();
       }
      else
        $('zone_explain_wanttakepart').style.display = 'none';
      return;
     }


    // Jean 08/02/2011
    var suffixe = eventID + (webtvID ? '_'+ webtvID : '');

    if (isExtranet)
     {
      // Jean 03/06/2010 : En mode extranet, si on déclaré avoir terminé sa partie, alors c'est qu'on n'est plus en train de travailler dessus
      if (interestType == 'wantattend' && value == 1)
       {
        if ($('seEventProfileWorkingOnIt'))
          $('seEventProfileWorkingOnIt').checked = false;
        else if ($('seEventProfileWorkingOnIt_'+ suffixe))
          $('seEventProfileWorkingOnIt_'+ suffixe).checked = false;

        // Jean 02/02/2011 : maj icônes dans todolist
        if ($('tasklist_state_'+ suffixe +'_working'))
          $('tasklist_state_'+ suffixe +'_working').style.display = 'none';
       }
      // L'inverse
      if (interestType == 'working' && value == 1)
       {
        if ($('seEventProfileWantToAttend'))
          $('seEventProfileWantToAttend').checked = false;
        else if ($('seEventProfileWantToAttend_'+ suffixe))
          $('seEventProfileWantToAttend_'+ suffixe).checked = false;

        // Jean 02/02/2011 : maj icônes dans todolist
        if ($('tasklist_state_'+ suffixe +'_wantattend'))
          $('tasklist_state_'+ suffixe +'_wantattend').style.display = 'none';
       }
/*
      // Jean 01/06/2010 - Un mail a été envoyé au chef de projet : dès qu'il aura validé que cette tâche est bien terminée, celle-ci sera marquée comme clôturée.
      if ($('task_done_'+ taskID).checked)
        alert(bind.Base.Language.Translate(3510559));
*/

      // Jean 16/02/2011 : mise à jour barre de progression
      if (interestType == 'working' || interestType == 'wantattend')
       {
        var totalProcessActionsTypes = 1;
        var isOn = (interestType == 'wantattend' && value == 1);
        var nbCurrentActions = (isOn ? 0 : 1);
        this.majProgressBar(eventID, webtvID, isOn, false, totalProcessActionsTypes, nbCurrentActions);
       }
     }

    // Jean 08/12/2010
    if ($('img_loading_volont'))
      $('img_loading_volont').style.display = 'inline';

    // Jean 16/02/2011
    if ($('img_loading_process_confirm_'+ eventID +'_'+ webtvID))
      $('img_loading_process_confirm_'+ eventID +'_'+ webtvID).style.visibility = 'visible';

    // Remove Smoothbox
    if( $('TB_overlay') ) TB_remove();

    // Ajax
    var bind = this;
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'eventinterest',
        'event_id' : eventID,
        'webtv_id' : webtvID,
        'interest_type' : interestType,
        'volont_explain' : explainVolont,
        'value' : value
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
        {
          if (responseObject.error) alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
          else alert(bind.Base.Language.Translate(3000153));
        }
        else
        {
          // Jean 08/12/2010
          bind.dicoMemInterest[eventID]['eventmember_'+ interestType] = value;
          if (explainVolont) bind.dicoMemInterest[eventID]['eventmember_volont_explain'] = explainVolont;

          if ($('img_loading_volont'))
            $('img_loading_volont').style.display = 'none';
          // Jean 08/12/2010

          // Jean 16/02/2011
          if ($('img_loading_process_confirm_'+ eventID +'_'+ webtvID))
            $('img_loading_process_confirm_'+ eventID +'_'+ webtvID).style.visibility = 'hidden';

          // Jean 14/08/2009 : on met à jour l'affichage des différents boutons seulement après réception du message de retour par le serveur
          if ($('edit_link')) $('edit_link').style.display = (responseObject.user_can_edit ? '' : 'none');
          if ($('eventProfileMenuInvite')) $('eventProfileMenuInvite').style.display = (responseObject.user_can_invite ? '' : 'none');

          if ($('TR_actions')) $('TR_actions').style.display = (responseObject.user_can_invite
                                                             || responseObject.user_can_edit
                                                             || responseObject.user_can_request
                                                             || responseObject.user_can_cancel_request ? '' : 'none');

          if ($('eventProfileMenuCancel')) $('eventProfileMenuCancel').style.display = responseObject.user_can_cancel_request ? '' : 'none';

          // On fait disparaître ou réapparaître le "lien bis"
          if ($('zoneVolontariatBis') && (interestType == "wanttakepart" || interestType == 'wantattend'))
           {
            if (value == 1)
              J($('zoneVolontariatBis')).fadeOut(800);
            else
              J($('zoneVolontariatBis')).fadeIn(500);
           }

          if (!isExtranet)
           {
            // Jean 22/03/2010
            if (interestType == "sponsor")
             {
              if ($('zoneSponsoring')) $('zoneSponsoring').style.display = (value == 1 ? 'none' : '');
              if ($('why_not_sponsor_'+ suffixe)) $('why_not_sponsor_'+ suffixe).style.display = (value == 1 ? 'none' : '');
              if (value == 1)
                // "Merci à vous ! Un mail détaillant les tarifs et modalités liés au sponsoring de plateaux TV vient de vous être envoyé."
                alert(bind.Base.Language.Translate(3510327));
             }
            // Jean 28/03/2011
            else if (interestType == "whitepapers" || interestType == "wanttakepart" || interestType == "wantattend")
             {
              if (value == 1)
                // "C'est noté ! Merci de l'intérêt que vous portez à ce sujet, nous reviendrons vers vous très rapidement."
                alert(bind.Base.Language.Translate(3511222));
             }
           }

          // Jean 11/04/2011 : s'il faut confirme un achat de vidéo
          if (interestType == 'video_command')
            bind.videoCommandConfirm(value);

          // Jean 16/11/2011
          if (interestType == 'wantwatch')
           {
            // 3000937 : "Prévenez-moi quand c'est en ligne !"  /  3511346 : "Ne me prévenez plus de la mise en ligne"
            if ($('warn_me_bis'))
              $('warn_me_bis').innerHTML = bind.Base.Language.Translate(value == 0 ? 3000937 : 3511346);
            if ($('warn_me_ter'))
              $('warn_me_ter').innerHTML = bind.Base.Language.Translate(value == 0 ? 3000937 : 3511346);
           }

          // event - Save success messages

          // Jean 02/02/2011 : maj icônes dans todolist
          if ($('tasklist_state_'+ suffixe +'_'+ interestType))
            $('tasklist_state_'+ suffixe +'_'+ interestType).style.display = (value == 0 ? 'none' : '');

          if (interestType == 'bookmark' && $('img_bookmark_'+ suffixe))
            $('img_bookmark_'+ suffixe).src = 'images/icons/friends16'+ (value == 0 ? '_trans' : '') +'.gif';

          zoneSuccess = null;

          if ($('seEventProfileBookmarkSuccess'))
            zoneSuccess = $('seEventProfileBookmarkSuccess');

          else if ($('seEventProfileBookmarkSuccess_'+ suffixe))
            zoneSuccess = $('seEventProfileBookmarkSuccess_'+ suffixe);

          if( zoneSuccess )
           {
            zoneSuccess.style.display = 'block';
            zoneSuccess.slide('hide').slide('in');
            (function(){ zoneSuccess.slide('show').slide('out'); }).delay(3000);
           }

          // Jean 07/12/2010
          // "Le message ci-dessous sera visible des organisateurs :" / "Veuillez valider votre candidature, en rédigeant si possible un message ci-dessous à destination des organisateurs :"
          if ($('zone_confirm_volont_title'))
            $('zone_confirm_volont_title').innerHTML = bind.Base.Language.Translate(value == 1 ? 3510808 : 3510809);
        }
      }
    });

    request.send();

    // Reset
    this.currentConfirmID = 0;
   },

  // RSVP
  rsvpShow: function(eventID)
  {
    this.currentConfirmID = ( eventID || this.eventInfo.event_id );
    TB_show(this.Base.Language.Translate(3000097), '#TB_inline?height=280&width=550&inlineId=confirmeventrsvp', '', '../images/trans.gif');
    //textarea_autogrow('rsvp_explain');
  },


  rsvpConfirm: function(eventRsvp, myUserId, rsvp_explain)
   {
    // Jean 25/01/2010 : si pas loggué...
    if (!isLogged)
     {
      go_login();
      return;
     }

    if (rsvp_explain)
      rsvp_explain = trim(rsvp_explain);

    eventID = ( this.currentConfirmID || this.eventInfo.event_id );

    // Jean 08/12/2010
    if ($('img_loading_rsvp'))
      $('img_loading_rsvp').style.display = 'inline';

    // Remove Smoothbox
    if( $('TB_overlay') ) TB_remove();

    // Ajax
    var bind = this;
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'eventrsvp',
        'event_id' : eventID,
        'event_rsvp' : eventRsvp,
        // Jean 07/12/2010
        'rsvp_explain' : rsvp_explain
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          if (responseObject.error) alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
          else alert(bind.Base.Language.Translate(3000153));
         }
        else
         {
          // Jean 08/12/2010
          if ($('img_loading_rsvp'))
            $('img_loading_rsvp').style.display = 'none';

          // Jean 14/08/2009 : on met à jour l'affichage des différents boutons seulement après réception du message de retour par le serveur
          if ($('edit_link')) $('edit_link').style.display = (responseObject.user_can_edit ? '' : 'none');
          if ($('eventProfileMenuRequest')) $('eventProfileMenuRequest').style.display = 'none';
          if ($('eventProfileMenuCancel')) $('eventProfileMenuCancel').style.display = responseObject.user_can_cancel_request ? '' : 'none';

          // event - Switch profile buttons (for join)
          if( $('eventProfileMenuLeave') )
          {
            // Show leave button for all but leader
            //if( bind.UserRank<3 ) $('eventProfileMenuLeave').style.display = '';

            // Show invite button if allowed
          if ($('eventProfileMenuInvite')) $('eventProfileMenuInvite').style.display = (responseObject.user_can_invite ? '' : 'none');
            //$('eventProfileMenuRSVP').style.display = '';
          }

          // Jean 18/08/2009
          if ($('TR_actions')) $('TR_actions').style.display = (responseObject.user_can_invite
                                                             || responseObject.user_can_edit
                                                             || responseObject.user_can_request
                                                             || responseObject.user_can_cancel_request ? '' : 'none');

          // event - Save success messages
          var objDivRSVPSuccess = $('seEventProfileRSVPSuccess');
          if( objDivRSVPSuccess )
          {
            objDivRSVPSuccess.style.display = 'block';
            objDivRSVPSuccess.slide('hide').slide('in');
            (function(){ objDivRSVPSuccess.slide('show').slide('out'); }).delay(3500);
          }

          // update buttons visibility (page 'user_event.tpl')
          if( $('seEvent_' + eventID) )
          {
            // User should never be able to join an invite only event through the user_event page
            if ($('seEvent_' + eventID).getElement('.seEventUserOptionJoin'))
              $('seEvent_' + eventID).getElement('.seEventUserOptionJoin').style.display = 'none';
            if ($('seEvent_' + eventID).getElement('.seEventUserOptionRsvp'))
              $('seEvent_' + eventID).getElement('.seEventUserOptionRsvp').style.display = '';
            //$('seEvent_' + eventID).getElement('.seEventUserOptionLeave').style.display = '';
            if ($('seEvent_' + eventID).getElement('.seEventStatusAccept'))
              $('seEvent_' + eventID).getElement('.seEventStatusAccept').style.display = 'none';
            if ($('seEvent_' + eventID).getElement('.seEventStatusRSVP'))
              $('seEvent_' + eventID).getElement('.seEventStatusRSVP').style.display = '';
            if ($('seEvent_' + eventID).getElement('.seEventUserOptionEdit'))
              $('seEvent_' + eventID).getElement('.seEventUserOptionEdit').style.display = (responseObject.user_can_edit ? '' : 'none');
          }

          // update response (page 'user_event.tpl')
          if( $('seEventRSVP_' + eventID) )
          {
            if (responseObject.event_rsvp_lvid)
              $('seEventRSVP_' + eventID).innerHTML = bind.Base.Language.Translate(responseObject.event_rsvp_lvid);
            else
              $('seEventRSVP_' + eventID).innerHTML = bind.Base.Language.Translate(bind.rsvpLanguageVars[eventRsvp]);
            // Jean 14/08/2009
            $('seEventRSVP_' + eventID).parentNode.className = 'rsvp_'+ eventRsvp;
          }

          // Jean 19/08/2009 : pour 'event.tpl'
          if ($('seEventProfileRSVP_'+ eventRsvp))
            $('seEventProfileRSVP_'+ eventRsvp).checked = true;
          if ($('eventProfileMenuRSVP_top'))
            $('eventProfileMenuRSVP_top').style.display = 'none';
          if ($('rsvp_lvid_guest_'+ myUserId))
           {
            $('rsvp_lvid_guest_'+ myUserId).innerHTML = bind.Base.Language.Translate(bind.rsvpLanguageVars[eventRsvp]);
            $('rsvp_lvid_guest_'+ myUserId).style.background = "#DB6D11";
            $('rsvp_lvid_guest_'+ myUserId).style.borderColor = "white";
            $('rsvp_lvid_guest_'+ myUserId).style.color = "white";
           }

          // Jean 07/12/2010
          if ($('zone_explain2') && $('rsvp_explain2') && rsvp_explain && rsvp_explain != "")
           {
            $('zone_explain2').style.display = 'block';
            //$('zone_explain2').slide('hide').slide('in');
            $('rsvp_explain2').value = rsvp_explain;
           }
         }
       }
    });

    request.send();

    // Reset
    this.currentConfirmID = 0;
   },


  // Annuler ma demande de participation
  cancelShow: function(eventID)
   {
    this.currentConfirmID = ( eventID || this.eventInfo.event_id );
    TB_show(this.Base.Language.Translate(3000170), '#TB_inline?height=100&width=300&inlineId=confirmeventrequestcancel', '', '../images/trans.gif');
   },


  cancelConfirm: function()
   {
    eventID = this.currentConfirmID;

    // Remove Smoothbox
    TB_remove();

    // Ajax
    var bind = this;
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'eventrequestcancel',
        'event_id' : eventID
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
        {
          if (responseObject.error) alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
          else alert(bind.Base.Language.Translate(3000153));
        }

        else
        {
          // event - Show/hide profile menu icons
          if( $('eventProfileMenuRequest') ) $('eventProfileMenuRequest').style.display = '';
          if( $('eventProfileMenuCancel') )  $('eventProfileMenuCancel').style.display = 'none';
          if( $('eventProfileMenuLeave') )  $('eventProfileMenuLeave').style.display = 'none';

          if ($('seEventProfileBookmark_1')) $('seEventProfileBookmark_1').checked = false;

          // Jean 07/12/2010
          if ($('zone_confirm_volont'))
           {
            $('zone_confirm_volont').style.display = 'none';
            //$('zone_confirm_volont').style.display = 'block';
            //$('zone_confirm_volont').slide('show').slide('out');
           }
          if ($('seEventProfileWantTakePart'))
           $('seEventProfileWantTakePart').checked = false;

          // user_event - Remove event row
          if( $('seEvent_' + eventID) )
            $('seEvent_' + eventID).destroy();

          // user_event - Fix that calendar
          var eventMonthShow = $('seEventMonthShow_' + eventID);
          if( eventMonthShow )
          {
            var eventMonthDay = eventMonthShow.title;
            var eventCellElement = $('event_cell' + eventMonthDay);
            eventMonthShow.destroy();

            // Fix color
            if( eventCellElement && eventCellElement.className!='event_cell3' && !eventCellElement.getElements('a').length )
            {
              $('event_cell' + eventMonthDay).className = 'event_cell1';
            }
          }
        }
      }
    });

    request.send();

    // Reset
    this.currentConfirmID = 0;
   },




  // Join (N'EST PLUS UTILISÉE : DORÉNAVANT, ON JOINT UN EVENT VIA BOOKMARK OU RSVP)
  join: function(eventID, eventRSVP)
   {
    if( !eventID ) eventID = this.eventInfo.event_id;

    // Remove Smoothbox - for month view, might mess things up?
    if( $('TB_overlay') ) TB_remove();


    // Ajax
    var bind = this;
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'eventjoin',
        'event_id' : eventID
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
        {
          if (responseObject.error) alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
          else alert(bind.Base.Language.Translate(3000153));
        }

        else
        {
          // event - Switch profile buttons
          if( $('eventProfileMenuLeave') )
          {
            if( bind.eventInfo.event_inviteonly )
            {
              $('eventProfileMenuRequest').style.display = 'none';
              $('eventProfileMenuCancel').style.display = '';
            }

            else
            {
              $('eventProfileMenuLeave').style.display = '';
              $('eventProfileMenuRSVP').style.display = '';
              if( bind.eventInfo.event_invite ) $('eventProfileMenuInvite').style.display = '';
              // Jean 18/08/2009
              if ($('TR_actions')) $('TR_actions').style.display = '';
            }
          }

          // user_event - Switch buttons
          else if( $('seEvent_' + eventID) )
          {
            // User should never be able to join an invite only event through the user_event page
            $('seEvent_' + eventID).getElement('.seEventUserOptionJoin').style.display = 'none';
            $('seEvent_' + eventID).getElement('.seEventUserOptionRsvp').style.display = '';
            $('seEvent_' + eventID).getElement('.seEventUserOptionLeave').style.display = '';
            $('seEvent_' + eventID).getElement('.seEventStatusAccept').style.display = 'none';
            $('seEvent_' + eventID).getElement('.seEventStatusRSVP').style.display = '';
          }

          // Send RSVP if set
          if( $type(eventRSVP) )
          {
            bind.rsvpConfirm(eventRSVP);
          }
        }
      }
    });

    request.send();

    // Reset
    this.currentConfirmID = 0;
   },




  // Demande une autorisation de participer
  request: function(eventID)
   {
    // Jean 25/01/2010 : si pas loggué...
    if (!isLogged)
     {
      go_login();
      return;
     }

    if( !eventID ) eventID = this.eventInfo.event_id;

    // Ajax
    var bind = this;
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'eventrequestsend',
        'event_id' : eventID
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          if (responseObject.error) alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
          else alert(bind.Base.Language.Translate(3000153));
         }
        else
         {
          // event - Switch profile buttons
          if( $('eventProfileMenuRequest') ) $('eventProfileMenuRequest').style.display = 'none';
          if( $('eventProfileMenuCancel') )  $('eventProfileMenuCancel').style.display = '';
         }
      }
    });

    request.send();

    // Reset
    this.currentConfirmID = 0;
   },


  // Jean 03/12/2009 : pour changer les slides (fonction réservée aux CM)
  changeSlide: function(eventID, offset, nbTotalSlides, noRepercut, forceMajPosition)
   {
    if (offset == 0 && !forceMajPosition)
      return;

    if ( !(!noRepercut && forceMajPosition))
     {
      if ($('event_slide_content'))
        $('event_slide_content').innerHTML = '<center><img src="images/icons/language_tool_loader.gif" border="0" style="margin-top: 180px;" /></center>';
      if ($('event_slide_comment_'+ eventID))
        $('event_slide_comment_'+ eventID).style.display = 'none';
     }

    // Ajax
    var bind = this;
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'eventslidechange',
        'event_id' : eventID,
        'current_slide_position' : currentSlidePosition,
        'no_repercut' : noRepercut ? '1' : '0',
        'force_maj' : forceMajPosition ? '1' : '0',
        'offset' : offset
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          /*
          if (responseObject.error) alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
          else alert(bind.Base.Language.Translate(3000153));
          */
         }
        else
         {
          if (!forceMajPosition)
           {
             if (responseObject.url_slide)
              {
               if (responseObject.new_current_slide_position != currentSlidePosition)
                {
                 var html = '<IMG src="'+ responseObject.url_slide +'" border=0 />';
                 $('event_slide_content').innerHTML = html;

                 // Jean 20/04/2011 : champ commentaire (modifiable en Ajax via la nouvelle fonction majSlideComment())
                 if ($('event_slide_comment_'+ eventID))
                  {
                   $('event_slide_comment_'+ eventID).className = responseObject.current_slide_comment != null ? 'event_slide_comment' : 'event_slide_comment_empty';
                   $('event_slide_comment_'+ eventID).innerHTML = responseObject.current_slide_comment != null ? responseObject.current_slide_comment.replace(/\n/g, '<br>')
                                                                  // "Aucun commentaire pour l'instant... cliquez ici pour en saisir un dès maintenant !"
                                                                  : bind.Base.Language.Translate(3510218);
                  }
                 if ($('current_slide_id_'+ eventID))
                   $('current_slide_id_'+ eventID).value = responseObject.current_slide_id ? responseObject.current_slide_id : '';
                 if ($('event_slide_comment_'+ eventID))
                   $('event_slide_comment_'+ eventID).style.display = '';
                 // Jean 20/04/2011

                 currentSlidePosition = responseObject.new_current_slide_position;
                 bind.loadProfileTab('manual_slides');
                }
              }
             else
              {
               $('event_slide_content').innerHTML = '';
               currentSlidePosition = 0;
              }
             if ($('liste_acces_slide').selectedIndex != responseObject.new_current_slide_position)
               $('liste_acces_slide').selectedIndex   = responseObject.new_current_slide_position;
             $('btn_slide_start').style.display  = responseObject.new_current_slide_position == 0 ? 'block' : 'none';
             if ($('btn_slide_cancel')) $('btn_slide_cancel').style.display = responseObject.new_current_slide_position > 0 ? 'inline' : 'none';
             $('btn_slide_prev').style.visibility   = responseObject.new_current_slide_position > 1 ? 'inherit' : 'hidden';
             $('btn_slide_next').style.visibility   = responseObject.new_current_slide_position < nbTotalSlides ? 'inherit' : 'hidden';

            //alert(responseObject.url_slide);
           }
          else
           {
            //currentSlidePosition = offset;
           }
         }
      }
    });
    request.send();
   },

  // Jean 03/12/2009
  initSlide: function(eventID)
   {
    this.changeSlide(eventID, null, null);
   },

  // Jean 25/01/2011
  lastSlideDistantPosition: -1,

  // Jean 03/12/2009 : pour aller vérifier sur le serveur s'il ne fait pas change de slide dans le diaporama "manuel"
  scruteSlides: function(eventID, nbTotalSlides)
   {
    // Si on est admin et qu'on a coupé la propagation, il ne faut pas non plus aller chercher les nouvelles infos
    // (sauf si c'est la première demande depuis le chargement de la page)
    if ($('slides_force_control') && !$('slides_force_control').checked && this.lastSlideDistantPosition > -1)
      return;

    // Ajax
    var bind = this;
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'eventscruteslides',
        'event_id' : eventID
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          /*
          if (responseObject.error) alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
          else alert(bind.Base.Language.Translate(3000153));
          */
         }
        else
         {
          // Jean 13/02/2011 - On reste au slide n°1 tant que le diaporama n'a pas bougé depuis un des admins présentateurs
          if (responseObject.current_slide_position == 0 && bind.lastSlideDistantPosition == -1)
            return;

          // Si l'admin a changé de slide, alors on force le rafraîchissement
          distantSlidePositionHasChanged = (bind.lastSlideDistantPosition != responseObject.current_slide_position);

          // Si c'est la première fois que l'on scrute la position du slide déterminée par l'admin
          //if (bind.lastSlideDistantPosition == -1) distantSlidePositionHasChanged = false;

          if (distantSlidePositionHasChanged)
           {
            bind.lastSlideDistantPosition = responseObject.current_slide_position;

            if (responseObject.url_slide)
             {
              if (responseObject.current_slide_position != currentSlidePosition)
               {
                var html = '<IMG src="'+ responseObject.url_slide +'" border=0 />';
                $('event_slide_content').innerHTML = html;

                // Jean 20/04/2011 : champ commentaire (modifiable en Ajax via la nouvelle fonction majSlideComment())
                if ($('event_slide_comment_'+ eventID))
                 {
                  $('event_slide_comment_'+ eventID).className = trim(responseObject.current_slide_comment) != '' ? 'event_slide_comment' : 'event_slide_comment_empty';
                  $('event_slide_comment_'+ eventID).innerHTML = trim(responseObject.current_slide_comment) != '' ? responseObject.current_slide_comment.replace(/\n/g, '<br>')
                                                                // "Aucun commentaire pour l'instant... cliquez ici pour en saisir un dès maintenant !"
                                                                : bind.Base.Language.Translate(3510218);
                 }
                if ($('current_slide_id_'+ eventID))
                  $('current_slide_id_'+ eventID).value = responseObject.current_slide_id ? responseObject.current_slide_id : '';
                $('event_slide_comment_'+ eventID).style.display = '';
                // Jean 20/04/2011

                currentSlidePosition = responseObject.current_slide_position;
                bind.loadProfileTab('manual_slides');
               }
             }
            else
             {
              $('event_slide_content').innerHTML = '';
             }

            // Qui à imposé la dernière action, et à quelle heure ?
            if (responseObject.current_slide_change_orig_explain && responseObject.current_slide_change_orig_explain != '')
             {
              $('zone_explain_last_slide_change_orig').style.display = 'block';
              $('zone_explain_last_slide_change_orig').innerHTML = responseObject.current_slide_change_orig_explain;
             }

           //alert(responseObject.url_slide);
            if ($('btn_slide_next'))
             {
              if ($('liste_acces_slide').selectedIndex != responseObject.current_slide_position)
                $('liste_acces_slide').selectedIndex  = responseObject.current_slide_position;
              $('btn_slide_start').style.display  = responseObject.current_slide_position == 0 ? 'block' : 'none';
              if ($('btn_slide_cancel')) $('btn_slide_cancel').style.display = responseObject.current_slide_position > 0 ? 'inline' : 'none';
              $('btn_slide_prev').style.visibility   = responseObject.current_slide_position > 1 ? 'inherit' : 'hidden';
              $('btn_slide_next').style.visibility   = responseObject.current_slide_position < nbTotalSlides ? 'inherit' : 'hidden';
             }
           }
         }
      }
    });
    request.send();
   },

  // Jean 20/04/2011 : pour mettre à jour le commentaire dans un slide
  majSlideComment: function (eventID)
   {
    $('event_slide_comment_'+ eventID).style.display = 'none';
    // On alimente la zone de saisie avec la valeur courante du commentaire de slide (si ce n'est pas le texte par défaut)
    //alert($('event_slide_comment_'+ eventID).innerHTML +' != '+ this.Base.Language.Translate(3510218));
    if ($('event_slide_comment_'+ eventID).innerHTML == this.Base.Language.Translate(3510218))
      $('event_slide_maj_comment_'+ eventID).value = '';
    else
      $('event_slide_maj_comment_'+ eventID).value = $('event_slide_comment_'+ eventID).innerHTML.replace(/<br ?\/?>/gi, "\n");
    $('event_slide_maj_comment_'+ eventID).style.display = '';
    $('event_slide_maj_comment_'+ eventID).focus();

    this.memCurrentSlideComment = $('event_slide_maj_comment_'+ eventID).value;
   },

  // Jean 20/04/2011 : pour mettre à jour le commentaire dans un slide
  majSlideCommentConfirm: function (eventID, currentSlideId, currentSlideComment)
   {
    $('event_slide_maj_comment_'+ eventID).style.display = 'none';

    // Si aucun changement
    if (this.memCurrentSlideComment == $('event_slide_maj_comment_'+ eventID).value)
     {
      $('event_slide_comment_'+ eventID).style.display = '';
      return;
     }

    $('img_loading_slide_comment_'+ eventID).style.display = '';

    this.currentCoordY = getTop($('img_loading_slide_comment_'+ eventID)) + 100;

    // Ajax
    var bind = this;
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'maj_slide_comment',
        'event_id' : eventID,
        'current_slide_id' : currentSlideId,
        'current_slide_comment' : currentSlideComment
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          if (responseObject.error) alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
          else alert(bind.Base.Language.Translate(3000153));
         }
        else
         {
          // Jean 04/04/2011 - Affichage contextuel de la liste des webtvs sur lesquelles s'est propagée telle modif contextuelle
          if (responseObject.maj_webtv_urls)
            bind.showMajWebtvUrls(responseObject.maj_webtv_urls, bind.currentCoordY);

          $('event_slide_comment_'+ eventID).className = currentSlideComment != '' ? 'event_slide_comment' : 'event_slide_comment_empty';
          $('event_slide_comment_'+ eventID).innerHTML = currentSlideComment != '' ? currentSlideComment.replace(/\n/gi, "<br>")
                                                            // "Aucun commentaire pour l'instant... cliquez ici pour en saisir un dès maintenant !"
                                                            : bind.Base.Language.Translate(3510218);
          $('event_slide_comment_'+ eventID).style.display = '';
          $('img_loading_slide_comment_'+ eventID).style.display = 'none';
         }
      }
    });

    request.send();
   },

  lastTaskDeadline: null,

  lastLoadedTaskList: null,

  dicoTasks: null,

  // Jean 17/04/2010 : charge la liste des tâches
  getTaskList: function(eventID, notDisplayLoadingImg, taskIdToShow, forceMAJ)
   {
    if (!notDisplayLoadingImg && $('tasklist_container'))
      $('tasklist_container').innerHTML = '<img src="images/icons/language_tool_loader.gif" border="0" style="width: 32px; height: 32px; margin: 20px;" align="absmiddle" />';

    if ($('tasklist_mozaique_container'))
      $('tasklist_mozaique_container').innerHTML = '<img src="images/icons/language_tool_loader.gif" border="0" style="width: 32px; height: 32px; margin: 20px;" align="absmiddle" />';

    if (this.lastLoadedTaskList && !forceMAJ)
     {
      this.affichageTaskList(this.lastLoadedTaskList, eventID, taskIdToShow);
      // Jean 01/02/2011 : affichage en "mozaïque"
      this.affichageSujetsEnfantsMozaique(this.lastLoadedTaskList, eventID);
      return;
     }

    // Ajax
    var bind = this;
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'get_tasklist',
        'subtasks' : $('onlyMainTasks') && $('onlyMainTasks').checked ? '1' : '0',
        'event_id' : eventID,
        'sort' : $('zone_tasklist_mode_mozaique') && $('zone_tasklist_mode_mozaique').style.display != 'none' ? $('tasklistSort_mosaique').value : $('tasklistSort').value
      },

      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          bind.lastLoadedTaskList = responseObject.tasklist;

          // Jean 25/08/2011
          bind.sector_list = responseObject.sector_list;
          bind.eventcat_list = responseObject.eventcat_list;
          // Jean 08/09/2011
          bind.format_list = responseObject.format_list;
          bind.brief_list = responseObject.brief_list;
          bind.treat_list = responseObject.treat_list;
          //bind.soluce_list = responseObject.soluce_list;

          // Jean 15/11/2011
          bind.template_list = responseObject.template_list;

          bind.dicoTasks = new Array();

          // référencement des numéros de tâches
          for (var i=0; i<bind.lastLoadedTaskList.length; i++)
           {
            var w_task = bind.lastLoadedTaskList[i];
            bind.dicoTasks[w_task.event.event_info.event_id] = w_task;

            // référencement des numéros de sous-tâches
            if (w_task.event.sub_tasks)
             {
              for (var j=0; j<w_task.event.sub_tasks.length; j++)
               {
                var sub_task = w_task.event.sub_tasks[j];
                bind.dicoTasks[sub_task.event.event_info.event_id] = sub_task;

                // référencement des numéros de sous-sous-tâches
                if (sub_task.event.sub_tasks)
                 {
                  for (var k=0; k<sub_task.event.sub_tasks.length; k++)
                   {
                    var sub_sub_task = sub_task.event.sub_tasks[k];
                    bind.dicoTasks[sub_sub_task.event.event_info.event_id] = sub_sub_task;

                    // référencement des numéros de sous-sous-sous-tâches
                    if (sub_sub_task.event.sub_tasks)
                     {
                      for (var l=0; l<sub_sub_task.event.sub_tasks.length; l++)
                       {
                        var sub_sub_sub_task = sub_sub_task.event.sub_tasks[l];
                        bind.dicoTasks[sub_sub_sub_task.event.event_info.event_id] = sub_sub_sub_task;

                        // référencement des numéros de sous-sous-sous-sous-tâches
                        if (sub_sub_sub_task.event.sub_tasks)
                         {
                          for (var m=0; m<sub_sub_sub_task.event.sub_tasks.length; m++)
                           {
                            var sub_sub_sub_sub_task = sub_sub_sub_task.event.sub_tasks[m];
                            bind.dicoTasks[sub_sub_sub_sub_task.event.event_info.event_id] = sub_sub_sub_sub_task;

                            // référencement des numéros de sous-sous-sous-sous-tâches
                            if (sub_sub_sub_sub_task.event.sub_tasks)
                             {
                              for (var n=0; n<sub_sub_sub_sub_task.event.sub_tasks.length; n++)
                               {
                                var sub_sub_sub_sub_sub_task = sub_sub_sub_sub_task.event.sub_tasks[n];
                                bind.dicoTasks[sub_sub_sub_sub_sub_task.event.event_info.event_id] = sub_sub_sub_sub_sub_task;
                               }
                             }
                           }
                         }
                       }
                     }
                   }
                 }
               }
             }
           }
          bind.affichageTaskList(bind.lastLoadedTaskList, eventID, taskIdToShow);

          // Jean 01/02/2011 : affichage en "mozaïque"
          bind.affichageSujetsEnfantsMozaique(bind.lastLoadedTaskList, eventID);
         }
       }
    });
    request.send();
   },

  // Jean 01/02/2011 : affichage en "mozaïque"
  affichageSujetsEnfantsMozaique: function(listeEvents, origEventId)
   {
    if (!$('tasklist_mozaique_container'))
      return;

    var html = '';

    for (var i=0; i<listeEvents.length; i++)
     {
      var event = listeEvents[i].event;

      var listeSelectAffine = $('tasklistRestrict_mosaique');

      // Si ce sujet est un webcast et qu'il ne faut pas les afficher
      if (listeSelectAffine && listeSelectAffine.value == 'closed' && !event.event_info.event_daterealized)
        continue;

      // Si ce sujet est un tournage et qu'il ne faut pas les afficher
      if (listeSelectAffine && listeSelectAffine.value == 'non_closed' && event.event_info.event_daterealized)
        continue;

      // Jean 16/04/2011 : saut de ligne entre les sujets déjà publiés et ceux à venir
      if ( event.first_realized || event.first_non_realized )
       {
        if (!event.first_realized)
          html += '<div style="width: 1px;'+ ( !(event.first_non_realized && event.just_one_section) ? ' height: 230px;' : '' ) +'"></div>';
        html += '<div style="width: 620px; margin-left: 0px; border-top: 0px dotted #AAAAAA; color: #555555; font-weight: bold; margin-top: 35px; padding-top: 7px; margin-bottom: 20px;">'
              // "Vidéos déjà publiées :" / "Projets de tournage :"
              + this.Base.Language.Translate(event.first_realized ? 3511285 : 3511286)
              +'</div>';
       }

      html += '<div class="tasklist_mozaique_item'+ (event.event_info.event_summary_text ? ' Tips1' : '') +'"'
            + ' title="'+ (event.event_info.event_summary_text ? '<div class=bgwhite>'+ event.event_info.event_summary_text.replace(/\"/g,'&#34;') +'</div>' : '') +'">';

      // Lien pour éditer directement l'event
      if (event.user_can_edit)
        // "Modifier"
        html += '<a class="tasklist_mozaique_item_edit" style="margin-left: '+ (event.event_info.event_totalcomments > 0 ? 165 : 195) +'px;"'
                 +' title="'+ this.Base.Language.Translate(3000245) +'"'
                 +' target="_blank"'
                 +' href="edit/'+ event.event_info.event_id +'">'
              + '<img src="images/icons/event_edit16.gif" border="0" style="width: 12px; height: 12px;" align="absmiddle" /></a>';

      // Cartouche avec nombre de commentaires
      if (event.event_info.event_totalcomments > 0 && (isExtranet || i_am_rdc || event.is_user_speaker))
       {
        if (event.event_info.event_is_unlinkable != '1' || event.event_info.event_idvideo != '')
          html += '<a href="'+ (event.event_url ? event.event_url : event.event_info.event_id) +'">';
        html += '<div class="tasklist_mozaique_item_header" title="'+ this.Base.Language.TranslateFormatted(507, [parseInt(event.event_info.event_totalcomments,10)]) +'">';
        html += '<div class="nb_comments">';
        html += '<img src="images/magnet/comments.png" width="11" height="10" border="0" align="absmiddle" style="margin-left: 10px;" /> ';
        html += event.event_info.event_totalcomments;
        html += '</div></div>';
        if (event.event_info.event_is_unlinkable != '1' || event.event_info.event_idvideo != '')
          html += '</a>';
       }

      // Vignette :
      html += '<div class="tasklist_mozaique_item_img_container">';

      var justChangeVideo = this.eventInfo.event_tasklist_just_video == '1' && event.event_info.event_idvideo != '';

      if (event.event_thumb_video)
       {
        if ((event.event_info.event_is_unlinkable != '1' || event.event_info.event_idvideo != '') || justChangeVideo)
         {
          // S'il faut simplement changer la vidéo à l'intérieur du player
          if (justChangeVideo)
            html += '<a href="javascript:;" onclick="SocialEngine.Event.changeVideoEmbedCode('+ event.event_info.event_id +');">';
          else
            html += '<a href="'+ (event.event_url ? event.event_url : event.event_info.event_id) +'">';
         }

        html += '<img src="'+ event.event_thumb_video +'" border="0" style="display: block; z-index: 0; width: 208px;'+ (event.event_thumb_video.match(/_default_img_/) ? ('opacity: '+ (isExtranet ? '0.2' : '0.6') +';') : '') +' margin-left: 0px;" />';

        if ((event.event_info.event_is_unlinkable != '1' || event.event_info.event_idvideo != '') || justChangeVideo)
          html += '</a>';
       }
      html += '</div>';


      html += '<div class="tasklist_mozaique_item_after_img_container">';
      // Titre
      if ((event.event_info.event_is_unlinkable != '1' || event.event_info.event_idvideo != '') || justChangeVideo)
       {
        // Si le sujet est en mode brouillon ou à visibilité restreinte, alors on l'affiche en "vert CM"
        html += '<a class="tasklist_mozaique_item_title'+ (!isExtranet && (!event.event_info.event_datepublished || event.event_info.event_privacy == 1 || event.event_info.event_privacy == 3) ? ' com_manager' : '') +'"';

        // S'il faut simplement changer la vidéo à l'intérieur du player
        if (justChangeVideo)
          html += ' href="javascript:;" onclick="SocialEngine.Event.changeVideoEmbedCode('+ event.event_info.event_id +');"';
        else
          html += ' href="'+ (event.event_url ? event.event_url : event.event_info.event_id) +'"';

        // Lien ("Aller voir !")
        html += ' title="'+ this.Base.Language.Translate(3510420) +'">';
        // Titre
        html += tronque(event.event_info.event_title, 150) +'</a>';
       }
      else
        html += tronque(event.event_info.event_title, 150);

      // Sous-titre :
      if (event.event_info.event_sub_title != "")
       {
        // Lien ("Aller voir !")
        html += '<a class="tasklist_mozaique_item_subtitle"'
              + (event.event_info.event_is_unlinkable != '1' || event.event_info.event_idvideo != '' ?
                  ' href="'+ (event.event_url ? event.event_url : event.event_info.event_id) +'"'
                : '')
                +'>'; // title="'+ this.Base.Language.Translate(3510420) +'">';
        // Titre
        html += tronque(event.event_info.event_sub_title, 100);
        html += '</a>';
       }
      html += '</div>';

      // Jean 10/04/2011
      var displayInterestOptions = true; // !isExtranet && event.event_info.event_daterealized == null && event.event_info.event_date_start > ((new Date()).getTime() / 1000);
      if (displayInterestOptions && event.html_bookmark_options)
       {
        html += '<div class="tasklist_mozaique_item_options">';
        html += event.html_bookmark_options;
        html += '</div>';
       }

      html += '</div>';
     }

    $('tasklist_mozaique_container').innerHTML = html;

    if ( ! (isIE && iframe_company) )
      Tips1 = new Tips($$('.Tips1'));

    // On affiche un total par item dans la liste déroulante d'affinage
    $('option_mozaique_closed_tasks').text = $('option_mozaique_closed_tasks').text.replace(/\.\.\./, this.nbClosedTasks);
    $('option_mozaique_non_closed_tasks').text = $('option_mozaique_non_closed_tasks').text.replace(/\.\.\./, this.nbNonClosedTasks);
    $('option_mozaique_all_tasks').text = $('option_mozaique_all_tasks').text.replace(/\.\.\./, this.nbTotalTasks);
   },


  affichageTaskList: function(tasklistObject, eventID, taskIdToShow)
   {
    this.nbTasks = 0;
    this.nbTotalTasks = 0;
    this.nbSubTasks = 0;
    this.nbClients = 0;
    this.nbTags = 0;
    this.nbClosedTasks = 0;
    this.nbNonClosedTasks = 0;
    this.nbFinishedTasks = 0;
    this.nbNonFinishedTasks = 0;
    this.nbWorkingTasks = 0;
    this.atLeastOneRealizedTask = false;
    this.atLeastOneTasker = false;

    // Jean 25/01/2012
    this.dicoPreviousVideo = new Array();
    this.dicoNextVideo = new Array();

    var html = this.taskListDisplay_rec(tasklistObject, eventID, taskIdToShow);

    // on montre le "clone" de lien vers l'ajout d'une tâche s'il y a au moins 1 tâche

    if ($('zone_cartouche_tasks'))
      $('zone_cartouche_tasks').style.display = this.nbTasks > 0 || $('zone_cartouche_tasks').value != "" ? 'block' : 'none';

    if ($('showTaskers_label'))
      $('showTaskers_label').style.color = this.atLeastOneTasker ? "" : "#BBBBBB";

    if ($('showDoneDates_label'))
      $('showDoneDates_label').style.color = this.atLeastOneRealizedTask ? "" : "#BBBBBB";
/*
    if (this.nbSubTasks > 0 && $('label_onlyMainTasks'))
      $('label_onlyMainTasks').style.color = "";
*/
    if (this.nbClients > 0 && $('showClients_label'))
      $('showClients_label').style.color = '';

    if (this.nbTags > 0 && $('showTags_label'))
      $('showTags_label').style.color = '';

    if (this.nbClosedTasks > 0)
     {
      //if ($('showClosedTasks_label')) $('showClosedTasks_label').style.color = this.atLeastOneRealizedTask ? "" : "#BBBBBB";
      if ($('zone_showDoneDates')) $('zone_showDoneDates').style.display = 'inline';
     }
    else if ($('zone_showDoneDates'))
      $('zone_showDoneDates').style.display = 'none';

    if ($('zone_cpt_sub_tasks'))
     {
      if ($('onlyMainTasks') && $('onlyMainTasks').checked)
        $('zone_cpt_sub_tasks').innerHTML = '&nbsp;('+ this.nbSubTasks +')';
      else
        $('zone_cpt_sub_tasks').innerHTML = '';
     }

    if ($('zone_nb_tasks'))
      $('zone_nb_tasks').innerHTML = '&nbsp;<font style="'+ (this.nbTasks > 0 ? 'font-weight: bold;' : 'color: #AAAAAA;') +'">('+ this.nbTasks +')</font>';

    // Jean 05/01/2011 : si plus d'une tâche de niveau 1, alors on affiche les boutons permettant de traiter massicement cette liste de tâche (déplacement, copie ou suppression)
    if ($('link_massiveTasksProcessing'))
       $('link_massiveTasksProcessing').style.display = this.lastLoadedTaskList.length > 0 ? '' : 'none';

    if ($('link_massiveTasksProcessing_bis'))
       $('link_massiveTasksProcessing_bis').style.display = this.lastLoadedTaskList.length > 0 ? '' : 'none';
    // Jean 05/01/2011

    // Jean 02/01/2011
    if ($('option_clone_with_tasks'))
      $('option_clone_with_tasks').style.display = this.nbTasks > 0 ? '' : 'none';

    $('tasklist_container').innerHTML = html;

    if ( ! (isIE && iframe_company) )
      Tips1 = new Tips($$('.Tips1'));

    // Jean 14/06/2010 : On affiche un total par item dans la liste déroulante d'affinage
    $('option_closed_tasks').text   = $('option_closed_tasks').text.replace(/\.\.\./, this.nbClosedTasks);
    if ($('option_finished_tasks'))
      $('option_finished_tasks').text = $('option_finished_tasks').text.replace(/\.\.\./, this.nbFinishedTasks);
    if ($('option_working_tasks'))
      $('option_working_tasks').text  = $('option_working_tasks').text.replace(/\.\.\./, this.nbWorkingTasks);
    // Jean 22/06/2010

    if ($('option_non_finished_tasks'))
      $('option_non_finished_tasks').text  = $('option_non_finished_tasks').text.replace(/\.\.\./, this.nbNonFinishedTasks);
    $('option_non_closed_tasks').text  = $('option_non_closed_tasks').text.replace(/\.\.\./, this.nbNonClosedTasks);
    // Jean 05/07/2010
    $('option_all_tasks').text  = $('option_all_tasks').text.replace(/\.\.\./, this.nbTotalTasks);

    // On mémorise dans les cookies les préférences d'affinage
    if (self.memTaskListPrefInCookies) memTaskListPrefInCookies();
   },

  taskListDisplay_rec: function(listeEvents, origEventId, taskIdToShow, depth)
   {
    var html = '';
    if (!depth) depth = 0;

    this.lastTaskDeadlineMySQL = 0;
    this.lastMinutesDuration = 0;

    // Jean 15/11/2011 : héritage "de frère à frère"
    this.lastTemplate = null;
    this.lastSector = null;
    this.lastTreatment = null;
    this.lastFormat = null;
    this.lastIsUnlinkable = null;

    for (var i=0; i<listeEvents.length; i++)
     {
      var event = listeEvents[i].event;

      var isTaskDoneForMe = /*event.is_user_speaker &&*/ event.event_info.eventmember_wantattend == "1";
      var isTaskClosed = event.event_info.event_daterealized;
      var isTacheBarree = i_am_rdc && isTaskClosed || (!i_am_rdc && isTaskDoneForMe);
      var isTaskDoneForSbdy = event.event_info.nb_wantattend > 0;
      var isSbdyWorkinOnTask = event.event_info.nb_working > 0;

      this.nbTotalTasks ++;

      if (isTaskClosed) this.nbClosedTasks ++;
      // Jean 22/06/2010
      else this.nbNonClosedTasks ++;
      if (isTaskDoneForSbdy) this.nbFinishedTasks ++;
      // Jean 22/06/2010
      else this.nbNonFinishedTasks ++;
      if (isSbdyWorkinOnTask) this.nbWorkingTasks ++;

      // Jean 20/05/2010 : s'il faut n'afficher que les tâches en cours
      //if (isTaskClosed && $('showClosedTasks') && !$('showClosedTasks').checked)

      // Jean 01/02/2011
      var listeSelectAffine = $('tasklistRestrict');

      // si cette tâche est clôturée
      if (!isTaskClosed && listeSelectAffine && listeSelectAffine.value == 'closed')
        continue;
      //
      if (event.event_info.nb_working == 0 && listeSelectAffine && listeSelectAffine.value == 'working')
        continue;
      // si cette tâche n'est pas terminée
      if (event.event_info.nb_wantattend == 0 && listeSelectAffine && listeSelectAffine.value == 'finished')
        continue;
      //
      if (event.event_info.nb_wantattend > 0 && listeSelectAffine && listeSelectAffine.value == 'non_finished')
        continue;
      //
      if (isTaskClosed && listeSelectAffine && listeSelectAffine.value == 'non_closed')
        continue;

      // On mémorise la dernière date saisie
      this.lastTaskDeadlineMySQL = Math.max(this.lastTaskDeadlineMySQL, event.event_info[isExtranet ? 'event_date_start' : 'event_date_end']);  // event_date_end
      // Jaen 15/11/2011 : ainsi que la durée du dernier sous-event
      this.lastMinutesDuration = Math.max(5, (event.event_info['event_date_end'] - event.event_info['event_date_start']) / 60);

      // Jean 15/11/2011
      this.lastTemplate  = event.event_info['event_template'];
      this.lastSector    = event.event_info['event_sector_id'];
      this.lastTreatment = event.event_info['event_treat_id'];
      this.lastFormat    = event.event_info['event_format_id'];
      this.lastIsUnlinkable = event.event_info['event_is_unlinkable'];

      // Jean 04/07/2010
      if ($('tasklistFilter') && $('tasklistFilter').value != "")
       {
        var searchInLowerCase = retireAccents($('tasklistFilter').value.toLowerCase());
        if (!(
            event.event_info.event_title && event.event_info.event_title != ""
         && retireAccents( event.event_info.event_title.toLowerCase()       ).indexOf(searchInLowerCase) > -1
          ||
            event.event_info.event_client_name && event.event_info.event_client_name != ""
         && retireAccents( event.event_info.event_client_name.toLowerCase() ).indexOf(searchInLowerCase) > -1
          ||
            event.event_info.event_tags && event.event_info.event_tags != ""
         && retireAccents( event.event_info.event_tags.toLowerCase()        ).indexOf(searchInLowerCase) > -1
          ))
         {
          continue;
         }
       }

      // S'il faut afficher tel ou tel champ...
      //-----------------------------------------------------------------------------------------------------------------------------
      var displayDoneDate = isTaskClosed && $('showDoneDates') && $('showDoneDates').checked;
      var displayNbComments = $('showNbComments') && $('showNbComments').checked
                           && (event.event_info.event_totalcomments > 0 || event.event_info.nb_brief_responses && event.event_info.nb_brief_responses > 0);
      var displayAuthors = event.author && ($('showAuthors') && $('showAuthors').checked) && event.event_info.event_datecreated;
      // Jean 06/07/2010 : Doit-on montrer les personnes en copie ?
      var displayCc = event.people_in_cc && event.people_in_cc.length && ($('showCc') && $('showCc').checked);
      // Doit-on montrer les intervenants auxquels ont été affectées les tâches ?
      var displayTaskers = event.done_by_guy && event.done_by_guy.length && ($('showTaskers') && $('showTaskers').checked);
      // Jean 26/12/2010
      var displayClients = event.event_info.event_client_name && event.event_info.event_client_name != '' && ($('showClients') && $('showClients').checked);
      var displayTags = event.event_info.event_tags != "" && ($('showTags') && $('showTags').checked);
      var isParentTask = event.sub_tasks && event.sub_tasks.length > 0;
      var isSubTask = depth > 0;
      var displaySubTitle = event.event_info.event_sub_title && trim(event.event_info.event_sub_title) != '';
      // Jean 10/03/2011
      var displayVolunteers = $('showNbVolunt') && $('showNbVolunt').checked && event.event_info.event_totalvolunteers && event.event_info.event_totalvolunteers > 0;
      // Jean 03/04/2011
      var displayInterestOptions = !isExtranet && event.event_info.event_daterealized == null && event.event_info.event_date_start > ((new Date()).getTime() / 1000);

      // Jean 04/04/2011
      if (displayInterestOptions)
       {
        // "Votre feedback a été transmis."
        html += '<div class="icon_state" style="position: absolute; z-index: 1001; padding: 0px 6px 4px 90px; border: 0px solid red;">';
        html += '<div id="seEventProfileBookmarkSuccess_'+ event.event_info.event_id +'" class="success_message success_message_bis arrondi_leger" style="display: none;">';
        html += this.Base.Language.Translate(3000279);
        html += '</div>';
        html += '</div>';
       }

      if (isSubTask) this.nbSubTasks++;
      if (displayTags) this.nbTags++;

      // Si la tâche courante est une simple tâche, ou qu'il faut afficher les sous-tâches
      if (!isSubTask || $('onlyMainTasks') && $('onlyMainTasks').checked)
       {
        if (event.event_info.event_intervenants.match(/[0-9]/))
          this.atLeastOneTasker = true;

        if (isTaskClosed)
          this.atLeastOneRealizedTask = true;

        marge_gauche = '';

        // Jean 16/04/2011
        if (event.first_realized || event.first_non_realized)
         {
          html += '<div style="width: 620px; margin-left: 40px; border-top: 4px dotted #AAAAAA; color: #555555; font-weight: bold; margin-top: 35px; padding-top: 7px; margin-bottom: 20px;">'
                // "Vidéos déjà publiées :" / "Projets de tournage :"
                + this.Base.Language.Translate(event.first_realized ? 3511285 : 3511286)
                +'</div>';
         }

        html += '<div id="task_container_'+ event.event_info.event_id +'"';
        html += '     class="task_item_'+ (isTaskClosed ? (isTaskClosed ? 'done' : 'done_for_me') : 'waiting') +'"';
        html += '     style="'+ (this.nbTasks % 2 == 0 ? 'background: #FDFDFD;' : '') + (this.nbTotalTasks > 1 ? 'border-top: 1px solid #F3F3F3;' : '') +';';

        // Si sous-tâche
        if (isSubTask)
          html += 'border-left: '+ (25 * depth) +'px solid #EBEBEB;';

        // Mise en valeur durant un bref instant de la ligne qu'on vient de modifier
        if (taskIdToShow == event.event_info.event_id)
         {
          html += 'font-weight: bold; background-color: #EDFF84;';
          setTimeout("$('task_container_"+ event.event_info.event_id +"').style.fontWeight = 'normal'; $('task_container_"+ event.event_info.event_id +"').style.background = '';", 30000);
         }

        // Jean 19/01/2011 : si c'est une tâche parente
        if (isParentTask)
          html += 'background-color: #EBEBEB;';

        html += '">';

        // Jean 20/12/2010 : Lien vers l'ajout direct d'une sous-tâche
        if (event.user_can_edit && depth <= 4)
         {
          html += '<div style="float: right;">';
          html += '<a href="javascript:;" onclick="SocialEngine.Event.addTask('+ event.event_info.event_id +', null, true, \''+ event.event_info.event_title.replace(/(\'|&#039;)/g, "\\'") +'\');"'
                  // "Ajout d'une sous-tâche à l'intérieur de la tâche "%1$s"
                  + ' class="Tips1" title="<div class=bgwhite>'+ this.Base.Language.TranslateFormatted(3510856, [event.event_info.event_title]).replace(/\"/g,'&#34;') +'</div>">';
          html += '<img src="images/icons/plus16.gif" border="0" style="width: 16px; height: 16px;" align="absmiddle" />';
          html += '</a>';
          html += '</div>';
         }

        // Jean 13/10/2011 : Pour basculer cet event en mode brouillon ou publié
        if (event.user_can_edit)
         {
          html += '<div style="float: right;">';
          html += '<a href="javascript:;" onclick="SocialEngine.Event.switchPublishedOrNot('+ event.event_info.event_id +', '+ thisWebtvID +', '+ (event.event_info.event_datepublished ? 'false' : 'true') +');"'
                  // "Basculer ce sujet en mode "brouillon"" / "Basculer ce sujet en mode "publié""
                  + ' class="Tips1" title="<div class=bgwhite>'+ this.Base.Language.Translate(event.event_info.event_datepublished ? 3511798 : 3511797).replace(/\"/g,'&#34;') +'</div>">';
          html += '<img id="img_switchPublishedOrNot_'+ event.event_info.event_id +'_'+ thisWebtvID +'"';
          html += ' src="images/icons/'+ (event.event_info.event_datepublished ? 'btn_visible.png' : 'btn_hidden.png') +'"';
          html += ' onmouseover="this.src = \'images/icons/'+ (event.event_info.event_datepublished ? 'btn_hidden_on.png' : 'btn_visible_on.png') +'\';"';
          html += ' onmouseout="this.src = \'images/icons/'+ (event.event_info.event_datepublished ? 'btn_visible.png' : 'btn_hidden.png') +'\';"';
          html += ' border="0" style="width: 16px; height: 16px;" align="absmiddle" />';
          // Image d'attente
          html += '<img id="img_loading_switchPublishedOrNot_'+ event.event_info.event_id +'_'+ thisWebtvID +'"';
          html += ' src="images/icons/language_tool_loader_small.gif" border="0" style="width: 16px; height: 16px; margin-left: 4px; display: none;" align="absmiddle" />';
          html += '</a>';
          html += '</div>';
         }

        // Si sous-tâche
        if (isSubTask)
         {
          html += '<input type="hidden" id="task_depth_'+ event.event_info.event_id +'" value="'+ depth +'" />';
          html += '<img src="images/sub_comment_dark.png" border="0" style="width: 20px; height: 22px; margin-left:'+ (isSubTask ? 3 : 0) +'px;" align="absmiddle" />';
          marge_gauche += '<img src="images/trans.gif" style="width: '+ ((isSubTask ? 3 : 0) + (depth * 20 + 21)) +'px; height: 1px;" align="absmiddle" />';
         }

        // Pour supprimer cette tâche
        if (event.user_can_delete)
         {
          // "Supprimer"
          html += '<a href="javascript:;" onclick="SocialEngine.Event.deleteShow('+ event.event_info.event_id +', true'+ (event.sub_tasks && event.sub_tasks.length > 0 ? ', true' : '') +');" title="'+ this.Base.Language.Translate(175) +'">';
          html += '<img src="images/icons/action_delete2.gif" border="0" style="width: 10px; height: 16px;" align="absmiddle" />';
          html += '</a>';
          marge_gauche += '<img src="images/trans.gif" style="width: 16px; height: 1px;" align="absmiddle" />';
         }
        html += '&nbsp;&nbsp;';
        marge_gauche += '&nbsp;&nbsp;';

        // Lien vers l'edit contextuel de la tâche
        if (event.user_can_edit)
         {
          // "Modifier"
          html += '<a href="javascript:;" onclick="SocialEngine.Event.editEntireTask('+ origEventId +', '+ event.event_info.event_id +');" title="'+ this.Base.Language.Translate(3000245) +'">';
          html += '<img src="images/icons/event_edit16.gif" border="0" style="width: 16px; height: 16px;" align="absmiddle" />';
          html += '</a>';
          marge_gauche += '<img src="images/trans.gif" style="width: 16px; height: 1px;" align="absmiddle" />';
         }

        html += '&nbsp;&nbsp;';

        //marge_gauche += '<img src="images/trans.gif" style="width: 16px; height: 1px;" align="absmiddle" />';
        marge_gauche += '&nbsp;&nbsp;&nbsp;';

        // Si on a droit de clôturer/déclôturer cette tâche
        if ((i_am_rdc || event.is_user_speaker) && isExtranet)
         {
          html += '<input type="checkbox" id="task_done_'+ event.event_info.event_id +'"'+ (isTacheBarree ? ' checked' : '');
          html += '       onclick="SocialEngine.Event.majDoneTask('+ event.event_info.event_id +', this.checked, '+ (isTaskDoneForMe ? 'true' : 'false') +')"';
          // "Case cochée ? Tâche clôturée !" / "Je déclare que ma partie est terminée !\n\n(le chef de projet clotûrera lui-même cette tâche)"
          html += '       title="'+ (i_am_rdc ? this.Base.Language.Translate(3510991) : this.Base.Language.Translate(3510992).replace(/<br>/gi, '\r\n')) +'"';
          // Jean 03/06/2010 : tâche déclarée comme terminée, mais pas encore clôturée
          if (isTaskDoneForMe && !isTaskClosed)
            html += ' style="background-color: #A8EB92;"';
          html += ' />&nbsp;';
         }

        html += '<span'+ (isExtranet ? ' class="task_item_line"' : (isTaskClosed ? ' style="font-weight: bolds;"' : '')) +'>';

        // Si la publication de cet event a été programmée
        if (event.event_info.event_dateplanned && (!event.event_info.event_datepublished || !event.event_info.event_daterealized) && i_am_CM)
         {
          var currentDatePublish = new Date();
          currentDatePublish.setTime(event.event_info.event_dateplanned * 1000);
          // Pour modifier la date de publication programmée
          if (i_am_rdc || i_can_publish)
           {
            html += '<span id="span_event_dateplanned_'+ event.event_info.event_id +'_VALUE" style="display: none;">'+ event.event_info.event_dateplanned +'</span>';
            html += '<a href="javascript:;" onclick="majDateField(this,\'event\','+ event.event_info.event_id +',null,\'event_dateplanned\', true, null, 3511140, 3511139, Math.min('+ (event.event_info.event_dateplanned * 1000) +', (new Date()).getTime()));"';
            html += '   title="'+ SocialEngine.Language.Translate(3511145).replace(/\"/gi, '&34;') +'">';
           }
          html += '<img src="images/icons/chat_clock2.gif" align="absmiddle" width="16" class="img_clock" border="0" ';
          // "La publication de ce sujet est déjà programmée pour le"
          html += ' title="'+ SocialEngine.Language.Translate(3511536) +' '+ getDateStr(currentDatePublish)+', '+ getHourStr(currentDatePublish) +'"'
          html += ' /> ';
          if (i_am_rdc || i_can_publish)
            html += '</a>';
         }

        // S'il y a au moins une pièce jointe
        if (event.resource_exists)
          html += '<img src="images/icons/attach.png" align="absmiddle" width="12" border="0" />';

        // S'il y a une vidéo dans le sujet
        if (event.event_info.event_idvideo != '')
         {
          // Jean 25/01/2012 : pouvoir dire quelle est la vidéo précédente / suivante
          if (this.previousVideoEventID && this.previousVideoEventID != event.event_info.event_id)
           {
            this.dicoNextVideo[this.previousVideoEventID] = event.event_info.event_id;
            this.dicoPreviousVideo[event.event_info.event_id] = this.previousVideoEventID;
           }

          // Jean 25/01/2012 : lien pour vérif contextuelle de la vidéo
          if (event.user_can_edit)
            html += '<a title="Click here to check video (CM only)" href="javascript:;"'
                     +' onclick="SocialEngine.Event.changeVideoEmbedCode('+ event.event_info.event_id +');">';
          html += '<img src="images/icons/event_video_small.gif" align="absmiddle" width="16" height="16" border="0" />'
          if (event.user_can_edit)
            html += '</a>';
          html += ' ';

          // Pour identifiant la prochaine "vidéo précédente" au tour suivant
          this.previousVideoEventID = event.event_info.event_id;
          this.dicoVideoTitle[event.event_info.event_id] = event.event_info.event_title;
         }

        html += '<span class="task_item_deadline_line"'+ (!event.event_info.event_datedated ? ' style="display: none;"' : '') +'>';

//if (event.event_info.event_id == 4324) alert(event.event_info.event_date_end);

        // Deadline de la tâche
        // Jean 17/02/2011 : ajout de "isExtranet ? event.event_info.event_date_end : event.event_info.event_date_start"
        var deadlineTxt = event.event_info.event_datedated ? getDateStr((isExtranet ? event.event_info.event_date_end : event.event_info.event_date_start) * 1000) : '';

        // "Due date"
        if (isExtranet)
         {
          html += '<font style="'+ (isExtranet ? 'color: #B76060;' : 'color: ;') +'">'+ this.Base.Language.Translate(3510501) +'</font> ';
          html += '<span id="edit_deadline_container_'+ event.event_info.event_id +'">';
          // "Modifier la date de tournage" [/ "Modifier la date butoir"]
          if (event.user_can_edit)
            html += '<a href="javascript: SocialEngine.Event.editTask(\''+ origEventId +'\', \''+ event.event_info.event_id +'\', \'deadline\');" title="'+ this.Base.Language.Translate(3510998) +'" style="color: #D20000; font-weight: bold;">';
          html += deadlineTxt;
          if (event.user_can_edit)
            html += '</a>';
          html += '</span>';
          html += ' : ';
         }

        html += '</span>';

        // Jean 19/05/2010 : raison sociale
        // Jean 28/02/2011 - on insère ça devant les tags, putôt qu'à la fin de la ligne
        if (displayClients)
         {
          this.nbClients ++;
          // this.Base.Language.Translate(3510519)
          html += ' <span class="tasklist_client"><a'+ (event.event_info.event_client_url ? ' href="'+ event.event_info.event_client_url +'" target="_blank"' : '') +'>'+ event.event_info.event_client_name +'</a></span>';
         }

        // On insère les tags devant le titre
        if (displayTags)
          html += '<span class="tasklist_tags">'+ event.event_info.event_tags.replace(/,[ \t]+/g, ',').replace(/([^,]+)/g, ' <a target="_blank" href="search.php?task=dosearch&t=event&search_text=$1&only_in_titles=on">$1</a>') +"</span> ";

        // Libellé de l'épisode [/ de la tâche]
        html += '<span id="edit_title_container_'+ event.event_info.event_id +'"'+ (!isExtranet && (!event.event_info.event_datepublished || event.event_info.event_privacy == 1 || event.event_info.event_privacy == 3) ? ' class="com_manager"' : '') +'>';

        var justChangeVideo = this.eventInfo.event_tasklist_just_video == '1' && event.event_info.event_idvideo != '';

        // Lien vers la tâche / l'épisode
        if ((event.event_info.event_is_unlinkable != '1' || event.event_info.event_idvideo != '') || justChangeVideo)
         {
          // S'il faut simplement changer la vidéo à l'intérieur du player
          if (justChangeVideo)
            html += '<a href="javascript:;" onclick="SocialEngine.Event.changeVideoEmbedCode('+ event.event_info.event_id +');"';
          else
            html += '<a href="'+ (event.event_url ? event.event_url : event.event_info.event_id) +'"';

          // Détails :
          html += ' title="'+ (event.event_info.event_summary != "" ? '<div class=bgwhite><b>'+ this.Base.Language.Translate(907) +'</b><br>'+ (event.event_info.event_summary_text ? event.event_info.event_summary_text : event.event_info.event_summary).replace(/\"/g,'&#34;').replace(/\[SONDAGE\]/g,'<small>{sondage}</small>') +'</div>' : '') +'"'
          html += ' class="'+ (event.event_info.event_summary != "" ? 'Tips1' :'') +'">';
          html += event.event_info.event_title.replace(/ +([\?\!])/, "&nbsp;$1");
          html += '</a>';
         }

        if ((event.event_info.event_is_unlinkable == '1' && event.event_info.event_idvideo == '') || justChangeVideo)
         {
          if (!justChangeVideo)
            html += event.event_info.event_title.replace(/ +([\?\!])/, "&nbsp;$1");
          if (i_am_CM)
           html += ' <a href="'+ (event.event_url ? event.event_url : event.event_info.event_id) +'" title="CM access" class="com_manager" style="font-size: 11px;">'
                 + '<img src="images/icons/admin_logout16.gif" align="absmiddle" border="0" width="12" /> (CM access)</a>';
         }

        html += '</span>';

        // Image d'attente
        html += '&nbsp;&nbsp;';
        html += '<img id="img_load_edit_'+ event.event_info.event_id +'" src="images/icons/language_tool_loader_small.gif" border="0" style="width: 16px; height: 16px; display: none;" align="absmiddle" />';

        // Jean 13/10/2010 : si l'intitulé de la tâche courante contient un lien hypertexte
        if (matchURL = event.event_info.event_title.match(/(http:\/\/[^ \"\'\)]+)/))
          html += '<a href="'+ matchURL[0] +'" target="_blank" title="<div class=bgwhite>'+ matchURL[0] +'</div>" class="Tips1"><b>[GO]</b></a>';

        // Jean 03/06/2010 : si moi ou qq d'autre prétend en avoir terminé avec cette tâche
        if (isExtranet)
         {
          html += '&nbsp;&nbsp;';
          html += '<img id="img_task_done_for_me_'+ event.event_info.event_id +'" src="images/icons/unblock16.gif" border="0"';
          html += '     style="width: 16px; height: 16px; display: '+ (isTaskDoneForMe || isTaskDoneForSbdy ? 'inline' : 'none') +';" align="absmiddle"';
          html += '     title="';
          html += (isTaskClosed ?
                     // Cette tâche est clôturée
                     this.Base.Language.Translate(3510647)
                   : (isTaskDoneForMe ?
                        // Je considère que ma partie est terminée.\n\n(J'attends la validation du chef de projet.)
                          this.Base.Language.Translate(3510648)
                        // Au moins un des intervenants considère avoir terminé sa partie.
                        : this.Base.Language.Translate(3510649)
                     )
                   ).replace(/\"/gi, '&34;').replace(/<br>/gi, '\r\n');
          html += '" />';

          // Jean 14/06/2010 : si qq a déclaré travailler sur cette tâche en ce moment
          html += '<img id="img_working_on_task_'+ event.event_info.event_id +'" src="images/icons/unblock16_red.gif" border="0"';
          html += '     style="width: 16px; height: 16px; display: '+ (isSbdyWorkinOnTask ? 'inline' : 'none') +';" align="absmiddle"';
          // "Au moins un des intervenants travaille sur cette tâche en ce moment"
          html += '     title="'+ this.Base.Language.Translate(3510995) +'" />';
         }

        // Jean 23/12/2010 : affichage du sous-titre
        if (displaySubTitle)
         {
          html += '<br /><span style="position: relative; top: -3px; color: #555555; padding-left: 21px; /*font-style: italic;*/ font-size: 11px;">';
          html += marge_gauche;
          html += event.event_info.event_sub_title.replace(/ +([\?\!])/, "&nbsp;$1");
          // Jean 28/01/2011 : si le SOUS-TITRE de la tâche courante contient un lien hypertexte
          // (finalement inutile, puisque le lien est automatiquement "habillé")
          /*
          if (matchURL = event.event_info.event_sub_title.match(/(http:\/\/[^ \"\']+)/))
            html += '<a href="'+ matchURL[0] +'" target="_blank"><b>[GO]</b></a>';
          */
          html += '</span>';
         }

        // Vidéo en attente de publication ?
        if (event.event_info.event_idvideo_hidden && i_am_CM)
         {
          // Jean 25/01/2012 : pouvoir dire quelle est la vidéo précédente / suivante
          if (this.previousVideoEventID && this.previousVideoEventID != event.event_info.event_id)
           {
            this.dicoNextVideo[this.previousVideoEventID] = event.event_info.event_id;
            this.dicoPreviousVideo[event.event_info.event_id] = this.previousVideoEventID;
           }

          // Jean 25/01/2012 : lien pour vérif contextuelle de la vidéo
          html += '<a title="Click here to check video before delivering (CM only)" href="javascript:;"'
                   +' onclick="SocialEngine.Event.changeVideoEmbedCode('+ event.event_info.event_id +', true);">';
          // "vidéo prête, mais non livrée"
          html += '&nbsp; <img src="images/icons/event_video_small.gif" align="absmiddle" width="16" height="16" border="0" />';
          html += '<span class="tasklist_tags" style="background: #D29504; color: white;">&nbsp;';
          html += this.Base.Language.Translate(3511543) +'</span>';
          html += '</a>';

          this.previousVideoEventID = event.event_info.event_id;
          this.dicoVideoTitle[event.event_info.event_id] = event.event_info.event_title;
         }

        // Indication/modification de la date de tournage
        if (!isExtranet && (event.event_info.event_datedated/* || i_am_rdc*/))
         {
          html += '<br />&nbsp;&nbsp;&nbsp; '+ marge_gauche;
          html += '<span class="tasklist_tags" style="color: #615A3F; background-color: white; border: 1px dotted #CDC9BE; font-weight: normal;" id="edit_deadline_container_'+ event.event_info.event_id +'">';

          if (event.event_info.event_datedated)
           {
            html += '<span id="span_'+ (isExtranet ? 'event_date_end' : 'event_date_start') +'_'+ event.event_info.event_id +'_'+ thisWebtvID +'_VALUE" style="display: none; font-size: 1px; color: white; padding-right: 10px;">'+ (isExtranet ? event.event_info.event_date_end : event.event_info.event_date_start) +'</span>';
            html += '<span id="span_'+ (isExtranet ? 'event_date_start' : 'event_date_end') +'_'+ event.event_info.event_id +'_'+ thisWebtvID +'_VALUE" style="display: none; font-size: 1px; color: white; padding-right: 10px;">'+ (isExtranet ? event.event_info.event_date_start : event.event_info.event_date_end) +'</span>';

            if (event.user_can_edit && (i_am_CM || i_can_publish))
             {
              // "Une date a été définie pour ce sujet :" [/ "Ce projet a une DATE BUTOIR à respecter impérativement :"]
              html += '<a href="javascript:;" onclick="majDateField(this, \'event\', '+ event.event_info.event_id +', '+ thisWebtvID +', \''+ (isExtranet ? 'event_date_end' : 'event_date_start') +'\', false, \'event_datedated\', 3510335, null, null, null, '+ (event.event_info.event_date_end - event.event_info.event_date_start) +');"';
              // "Modifier la date de tournage"
              html += ' title="'+ this.Base.Language.Translate(3510998) +'">';
             }
            html += '<span id="span_event_date_start_'+ event.event_info.event_id +'_'+ thisWebtvID +'">'+ deadlineTxt +'</span>, ';
            html += '<span id="span_hour_event_date_start_'+ event.event_info.event_id +'_'+ thisWebtvID +'">'+ getHourStr((isExtranet ? event.event_info.event_date_end : event.event_info.event_date_start) * 1000) +'</span>';
            if (event.user_can_edit && (i_am_CM || i_can_publish))
              html += '</a>';

            var dayIsDiff = getDateStr(event.event_info.event_date_start * 1000) != getDateStr(event.event_info.event_date_end * 1000);
            var hourIsDiff = getHourStr(event.event_info.event_date_start * 1000) != getHourStr(event.event_info.event_date_end * 1000);
            if (dayIsDiff || hourIsDiff)
              html += ' &rarr; ';
            if (dayIsDiff)
              html += '<span id="span_event_date_end_'+ event.event_info.event_id +'_'+ thisWebtvID +'">'
                     + getDateStr(event.event_info.event_date_end * 1000)
                     +'</span>, ';
            if (dayIsDiff || hourIsDiff)
              html += '<span id="span_hour_event_date_end_'+ event.event_info.event_id +'_'+ thisWebtvID +'">'
                     + getHourStr(event.event_info.event_date_end * 1000)
                     +'</span>';
           }
          html += '</span>';
         }

        // Jean 03/04/2011
        if (displayInterestOptions && event.html_bookmark_options)
         {
          html += '&nbsp;'+ event.html_bookmark_options.replace(/seEventProfile/g, 'seEventProfileBis').replace(/(width: auto;)/, '$1 margin-left: '+ (Math.round(marge_gauche.length * 0.3)) +'px;');
         }

        // Infos supplémentairess sur la tâche courante
        if (displayTaskers || displayCc || displayDoneDate || displayAuthors || displayNbComments || displayVolunteers || displayClients || displayTags || displayInterestOptions)
         {
          html += '&nbsp;';

          var shtml = '';

          if (displayTaskers)
           {
            // À faire par
            shtml += '<small>';
            shtml += this.Base.Language.Translate(3510502) +' ';

            var strTacherons = new Array();
            for (var j=0; j<event.done_by_guy.length; j++)
             {
              if (!event.done_by_guy[j].user_info.user_id) continue;
              str = '<a href="'+ profile_url_create(event.done_by_guy[j].user_info.user_username, event.done_by_guy[j].user_info.user_displayname) +'"';
              str += '   onmouseover="SocialEngine.Profile.infoBulle_show(null,'+ event.done_by_guy[j].user_info.user_id +',null,event);"';
              str += '   onmouseout="SocialEngine.Profile.infoBulle_hide();"';
              str += '>';
              str += event.done_by_guy[j].user_info.user_displayname +'</a>';
              strTacherons.push(str);
             }
            shtml += strTacherons.join(", ");
            shtml += '</small>';
           }

          if (displayCc)
           {
            shtml += '<small>';
            if (displayTaskers) shtml += ' / ';

            // Personne(s) mis(es) en copie :
            shtml += this.Base.Language.Translate(3510599) +' ';

            var strPeopleInCc = new Array();
            for (var j=0; j<event.people_in_cc.length; j++)
             {
              if (!event.people_in_cc[j].user_info.user_id) continue;
              str = '<a href="'+ profile_url_create(event.people_in_cc[j].user_info.user_username, event.people_in_cc[j].user_info.user_displayname) +'"';
              str += '   onmouseover="SocialEngine.Profile.infoBulle_show(null,'+ event.people_in_cc[j].user_info.user_id +',1200,event);"';
              str += '   onmouseout="SocialEngine.Profile.infoBulle_hide();"';
              str += '>';
              str += event.people_in_cc[j].user_info.user_displayname +'</a>';
              strPeopleInCc.push(str);
             }
            shtml += strPeopleInCc.join(", ");
            shtml += '</small>';
           }

          if (displayDoneDate)
           {
            if (displayTaskers || displayCc) shtml += ' / ';
            // Clôturé le xx/xx/xxxx
            strClosedOn = '<span id="edit_donedate_container_'+ event.event_info.event_id +'">';
            // "Modifier la date de réalisation effective de cette tâche"
            if (event.user_can_edit && (i_am_CM || i_can_publish))
              strClosedOn += '<a style="font-size: 11px;" href="javascript: SocialEngine.Event.editTask(\''+ origEventId +'\', \''+ event.event_info.event_id +'\', \'donedate\');" title="'+ this.Base.Language.Translate(3510996) +'">';
            strClosedOn += getDateStr(event.event_info.event_daterealized * 1000);
            if (event.user_can_edit && (i_am_CM || i_can_publish))
              strClosedOn += '</a>';
            strClosedOn += '</span>';
            shtml += '<small>'+ this.Base.Language.TranslateFormatted(3510589, [strClosedOn]) +'</small>';
           }

          // "créé par %1$s, le %2$s à %3$s"
          if (displayAuthors)
           {
            shtml += '<small>';
            shtml += (displayTaskers || displayCc || displayDoneDate ? ' / ' : '')
                    +'<font class="task_author" color="#D8570A">'
                    + this.Base.Language.TranslateFormatted(3510852,
                        [event.link_author,
                         getDateStr(event.event_info.event_datecreated * 1000),
                         getHourStr(event.event_info.event_datecreated * 1000)])
                    +'</font>';
            shtml += '</small>';
           }

          // Jean 07/07/2010
          if (displayNbComments)
           {
            // "%1$d commentaires"
            if (event.event_info.event_totalcomments > 0)
             {
              shtml += (displayTaskers || displayCc || displayDoneDate || displayAuthors ? ' / ' : '')
                      + '<font style="'+ (event.event_info.event_totalcomments > 0 ? 'font-weight: bold; color: #31993E; font-size: 12px; background: #F5FFE8;' : 'color: #C9DEC7;') +'">'
                      + this.Base.Language.TranslateFormatted(507, [parseInt(event.event_info.event_totalcomments,10)]) +'</font>';
             }

            // Jean 20/01/2012 : "%1$s réponses au brief"
            if (event.event_info.nb_brief_responses > 0)
             {
              shtml += (displayTaskers || displayCc || displayDoneDate || displayAuthors || event.event_info.event_totalcomments > 0 ? ' / ' : '')
                      + '<font style="'+ (event.event_info.nb_brief_responses > 0 ? 'font-weight: bold; color: #31993E; font-size: 12px; background: #F5FFE8;' : 'color: #C9DEC7;') +'">'
                      + this.Base.Language.TranslateFormatted(3512004, [parseInt(event.event_info.nb_brief_responses,10)]) +'</font>';
             }
           }

          // Jean 10/03/2011
          if (displayVolunteers)
           {
            // %1$d volontaires
            shtml += /*(displayTaskers || displayCc || displayDoneDate || displayAuthors || displayNbComments ? ' / ' : '')
                   */ '<div style="margin-left: '+ (Math.round(marge_gauche.length * 0.3) + 20) +'px;">'
                    + '<font class="tasklist_volunteer">'
                    + '<a style="font-weight: bold; font-size: 12px; color: #FFFEE8;" target="_blank"'
                        // "Superviser les invitations"
                    +   ' title="'+ this.Base.Language.Translate(3511171) +'"'
                    +   ' href="user_event_edit_members.php?event_id='+ event.event_info.event_id +'&v=volont">&nbsp;'
                    + this.Base.Language.TranslateFormatted(3511173, [parseInt(event.event_info.event_totalvolunteers,10)]).replace(/ /g, '&nbsp;') +'&nbsp;:&nbsp;</a></font>';
             shtml += '<div class="tasklist_volunteer">';
             shtml += event.event_info.event_volunteers_html;
             shtml += '</div>';
             shtml += '</div>';
           }

          if (shtml != '')
            html += '<div style="height: '+ (!isExtranet && event.event_info.event_datedated ? '5' : '5') +'px;"></div><img src="images/trans.gif" style="height: 1px; width: 65px;" align="absmiddle">'+ shtml +'';
         }

        if (!displayDoneDate)
         {
          html += '<span id="edit_donedate_container_'+ event.event_info.event_id +'" style="display: none;"><a>';
          html += (isTaskClosed ? getDateStr(event.event_info.event_daterealized * 1000) : 0) +'</a></span>';
         }

        html += '</div>';

        html += '<div id="edit_task_container_'+ event.event_info.event_id +'" style="display: none;"></div>';
       }
      this.nbTasks ++;

      // Appel récursif
      if (event.sub_tasks && event.sub_tasks.length > 0)
        html += this.taskListDisplay_rec(event.sub_tasks, origEventId, taskIdToShow, depth+1);
     }

     return html;
   },

  isCreatingTask: false,

  // Jean 10/03/2011
  cptTextSummaryID: 0,

  // Jean 18/04/2010 : initialise et affiche le formulaire pour ajouter une tâche à l'event (si <taskID> vaut qqch, alors c'est une modification de tâche, et pas une création)
  addTask: function(eventID, taskID, isSubTaskAdding, taskTitle)
   {
    // mode édition rapide
    if (taskID)
     {
      if (this.dicoTasks[taskID])
        var taskToEdit = this.dicoTasks[taskID].event;
     }

    // Si un formulaire de mofication de tâche est déjà affiché, alors on le cache
    if (this.currentTaskEditForm)
     {
      this.currentTaskEditForm.slide('out');
      this.currentTaskEditForm.innerHTML = '';
      this.currentTaskEditForm.style.display = 'none';
      this.currentTaskEditForm = null;
     }

    var zoneTaskEditContainerID = taskID || isSubTaskAdding ? 'edit_task_container_'+ (taskID ? taskID : eventID) : 'new_task_container';
    var doitFermerZoneEdit = false;

    // Si zone déjà présente, alors on la cache
    if (this.lastTaskEditContainerID && $(this.lastTaskEditContainerID) && $(this.lastTaskEditContainerID).innerHTML != '')
     {
      $(this.lastTaskEditContainerID).slide('out');
      $(this.lastTaskEditContainerID).innerHTML = '';

      if ($('zone_add_task_form_bis'))
        $('zone_add_task_form_bis').style.display = 'block';

      doitFermerZoneEdit = true;
     }

    this.cptTextSummaryID ++;

    if (!doitFermerZoneEdit || this.lastTaskEditContainerID != zoneTaskEditContainerID)
     {
      var html = '';
      html += '<form id="form_task_edit" action="javascript: $(\'img_load_add_task\').style.display = \'inline\'; $(\'img_load_add_task_bis\').style.display = \'inline\'; SocialEngine.Event.'+ (taskID ? 'editEntireTaskConfirm' : 'addTaskConfirm') +'(\''+ eventID +'\''+ (taskID ? ', \''+ taskID +'\'' : ', null') +', '+ this.cptTextSummaryID +');"';
      html += ' style="margin-top: 0px;"';
      html += '>';

      // En mode "modification"
      if (taskID)
        html += '<input type="hidden" id="taskID" value="'+ taskID +'" />';

      var borderRadius = taskID || isSubTaskAdding ? '0px 0px 0px 0px' : '10px 10px 0px 0px';

      // Entête du bloc
      html += '<div style="border: 1px solid #EEEEEE; border-bottom: 0px; border-radius: '+ borderRadius +'; -moz-border-radius: '+ borderRadius +'; -khtml-border-radius: '+ borderRadius +'; -webkit-border-radius: '+ borderRadius +'; background: #EEEEEE; color: #6E6E6E; font-weight: bold; padding: 2px 6px 2px 8px;">';

      html += '<div style="float: right;">';
      // Annuler
      html += '<a href="javascript:;" onclick="var DIV = $(\''+ zoneTaskEditContainerID +'\'); DIV.slide(\'out\'); DIV.innerHTML = \'\'; $(\'zone_add_task_form_bis\').style.display = \'block\';" style="font-size: 16px;" title="'+ this.Base.Language.Translate(39) +'">X</a>';
      html += '</div>';
      // Titre de l'encart d'ajout / modification de tâche / Ajout d'une sous-tâche
      // "Modifier cette entrée" / "Ajout d'une sous-tâche à l'intérieur de la tâche "%1$s""  ---  "Ajouter une tâche"
      html += (taskID || isSubTaskAdding) ? (taskID ? this.Base.Language.Translate(1500170) : this.Base.Language.TranslateFormatted(3510856, [tronque(taskTitle, 50)])) : this.Base.Language.Translate(3510496);
      html += '</div>';

      // Corps du bloc de saisie
      html += '<div style="border: 1px solid #EEEEEE; border-radius: 0px 0px 10px 10px; -moz-border-radius: 0px 0px 10px 10px; -khtml-border-radius: 0px 0px 10px 10px; -webkit-border-radius: 0px 0px 10px 10px; background: #F8FAFC; padding: 8px;"> ';

      html += '<table border="0" cellpadding="2" cellspacing="2">';

      html += '<tr>';
      html += '<td></td>';
      html += '<td valign="top">';
      // Bouton "Valider"
      html += ' <input id="btn_addtask_submit_bis" type="submit" class="button" value="'+ this.Base.Language.Translate(3000688) +'" style="padding: 6px; font-size: 15px; /*background: #145FB1; color: white; border: 0px;*/ display: '+ (taskID ? 'inline' : 'none') +';" />';
      // Image d'attente
      html += '<img id="img_load_add_task_bis" src="images/icons/language_tool_loader_small.gif" border="0" style="width: 16px; height: 16px; margin-left: 4px; display: none;" align="absmiddle" />';

      // Lien vers la modif complète de la tâche
      if (taskID)
       {
        html += '<div style="float: right;">';
        // "Aller dans l'écran d'édition de cette tâche"
        html += '<a target="_blank" href="edit/'+ taskID +'"';
        html +=   ' onclick="if (SocialEngine.Event.currentTaskEditForm) { SocialEngine.Event.currentTaskEditForm.slide(\'out\'); SocialEngine.Event.currentTaskEditForm.innerHTML = \'\'; SocialEngine.Event.currentTaskEditForm.style.display = \'none\'; SocialEngine.Event.currentTaskEditForm = null; }"';
        html +=   ' title="'+ this.Base.Language.Translate(3510940) +'"';
        html +=   ' style="background: #FEFEFE; border: 1px solid #AAAAAA; padding: 3px 5px 5px 7px;">';
        html += '<img src="images/icons/event_edit16.gif" border="0" style="width: 16px; height: 16px;" align="absmiddle" />';
        html += '</a>';
        html += '</div>';
       }

      html += '</td>';
      html += '</tr>';

      // Jean 03/04/2011 - "Pas de lien" / "Ni lien, ni notification "
      html += '<tr>';
      html += '<td valign="top" align="right" width="135">';
      html += '</td>';
      html += '<td valign="top">';

      // "En cochant cette case vous simplifiez drastiquement la livraison de ce sujet : il devient alors un sujet visible dans la liste globale, mais il n'est pas cliquable par les visiteurs (parce que vous considérez par exemple que le texte n'est pas prêt ou qu'il n'y a pas assez de matière à commenter) et de surcroît aucun mail de notification n'est envoyé"
      html += '<span title="'+ this.Base.Language.Translate(3511257) +'">';
      html += '<input type="checkbox" id="event_is_unlinkable"'+ (taskID && taskToEdit.event_info.event_is_unlinkable == '1' || !taskID && this.lastIsUnlinkable == 1 ? ' checked' : '');
      html += '       onclick="$(\'task_title\').focus(); $(\'event_child_home_privilege\').checked = false;">';
      // "Pas de lien" / "Ni lien, ni notification"
      html += '<label for="event_is_unlinkable">'+ this.Base.Language.Translate(/*taskID ? 3511338 : */3511256) +'</label>';
      html += '</span>';

      // Jean 23/01/2012 - "Créer en mode brouillon"
      if (!taskID)
       {
        html += ' &nbsp; ';
        html += '<input type="checkbox" id="do_not_publish"'+ (i_can_publish && this.eventInfo.event_datepublished ? '' : ' checked disabled');
        html += '       onclick="$(\'task_title\').focus();">';
        html += '<label for="do_not_publish">'+ this.Base.Language.Translate(3512007) +'</label>';
       }

      // Jean 11/05/2011 - "Valoriser ce sujet [/ projet] en homepage"
      html += ' &nbsp; ';
      html += '<input type="checkbox" id="event_child_home_privilege"'+ (taskID && taskToEdit.event_info.event_child_home_privilege == '1' ? ' checked' : '');
      html += '       onclick="$(\'task_title\').focus(); $(\'event_is_unlinkable\').checked = false;">';
      html += '<label for="event_child_home_privilege">'+ this.Base.Language.Translate(3511096) +'</label>';

      html += '</td>';
      html += '</tr>';

      // Jean 26/08/2011
      //------------------------

      // "Format"
      html += this.format_list;

      // "Format" (ancienne version)
      html += this.eventcat_list;

      // "Traitement"
      html += this.treat_list;

      // "Prise de brief"
      html += this.brief_list;

      // "Secteur d'activité"
      html += this.sector_list;

      // Jean 15/11/2011 - "Gabarit"
      html += this.template_list;

      html += '<tr>';
      html += '<td valign="top" align="right" width="135">';
      // Intitulé :
      html += this.Base.Language.Translate(3510495) +'&nbsp;';
      html += '</td>';
      html += '<td valign="top">';
      // Champ texte pour la saisie du titre
      html += ' <input type="text" id="task_title" class="text" style="width: 430px;" maxlength="200"'+ (taskID ? ' value="'+ taskToEdit.event_info.event_title.replace(/\"/g, '&#34;') +'"' : '') +' />';
      html += '</td>';
      html += '</tr>';

      // Jean 23/12/2010
      html += '<tr>';
      html += '<td valign="top" align="right" width="135">';
      // "Sous-titre"
      html += this.Base.Language.Translate(3510171) +'&nbsp;:&nbsp;';
      html += '</td>';
      html += '<td valign="top">';
      // Champ texte pour la saisie du sous-titre
      html += ' <input type="text" id="task_subtitle" class="text" style="width: 430px;" maxlength="255"'+ (taskID ? ' value="'+ taskToEdit.event_info.event_sub_title.replace(/\"/g, '&#34;') +'"' : '') +' />';
      html += '</td>';
      html += '</tr>';

      // Jean 06/07/2010 : les tags généraux
      html += '<tr>';
      html += '<td valign="top" align="right" width="135">';
      // "Tags généraux" :
      html += this.Base.Language.Translate(3511658) +' :&nbsp;';
      html += '</td>';
      html += '<td valign="top">';
      // Champ texte pour la saisie des tags
      html += ' <input type="text" id="task_tags" class="text" style="width: 430px;" maxlength="128"'+ (taskID ? ' value="'+ (taskToEdit && taskToEdit.event_info && taskToEdit.event_info.event_tags ? taskToEdit.event_info.event_tags.replace(/\"/g, '&#34;') : (this.eventInfo && this.eventInfo.event_tags ? this.eventInfo.event_tags : '')) +'"' : '') +' />';
      html += '</td>';
      html += '</tr>';

      // Jean 06/07/2010 : les tags d'expertises
      html += '<tr>';
      html += '<td valign="top" align="right" width="135">';
      // "Compétences / Expertises / Offres" :
      html += this.Base.Language.Translate(3511659) +' :&nbsp;';
      html += '</td>';
      html += '<td valign="top">';
      // Champ texte pour la saisie des tags "premium"
      html += ' <input type="text" id="task_tags_premium" class="text" style="width: 430px;" maxlength="128"'+ (taskID ? ' value="'+ (taskToEdit && taskToEdit.event_info && taskToEdit.event_info.event_tags_premium ? taskToEdit.event_info.event_tags_premium.replace(/\"/g, '&#34;') : (this.eventInfo && this.eventInfo.event_tags_premium ? this.eventInfo.event_tags_premium : '')) +'"' : '') +' />';
      html += '</td>';
      html += '</tr>';

      html += '<tr>';
      html += '<td valign="top" align="right">';
      // Résumé :
      html += 'Résumé :';
      html += '</td>';
      html += '<td valign="top">';
      // Champ multiligne pour la saisie du texte introductif
      html += ' <textarea id="task_summary_'+ this.cptTextSummaryID +'" class="text" style="width: 430px; height: 175px;">'+ (taskID ? taskToEdit.event_info.event_summary : '') +'</textarea><br>';
      html += '</td>';
      html += '</tr>';

      html += '<tr>';
      html += '<td valign="top" align="right">';
      html += '</td>';
      html += '<td valign="top">';

      var detailsAreOn = taskID && (taskToEdit.event_info.event_client_name
                                 || taskToEdit.event_info.event_client_url
                                 || taskToEdit.event_info.event_client_contacts);

      html += '<input type="checkbox" id="case_details"'+ (detailsAreOn ? ' checked' : '');
      html += '       onclick="$(\'zone_details\').style.display = $(\'case_details\').checked ? \'block\' : \'none\'; if ($(\'zone_details\').style.display != \'none\') $(\'event_client_name\').focus();">';
      //html += ' <img src="images/icons/addfriend16.gif" border="0" align="absmiddle" />';
      // Apporter plus de précisions à la demande...
      html += ' <label for="case_details">'+ this.Base.Language.Translate(3510509) +'</label>';

      html += '<div id="zone_details" style="display: '+ (detailsAreOn ? 'block' : 'none') +'; margin-top: 4px;">';

      //-----------------------------------
      // Jean 19/05/2010 - Champs client
      //-----------------------------------
      html += ' <br />';
      // NOM DU CLIENT :
      html += ' <b>'+ this.Base.Language.Translate(3510437) +'</b>';
      html += ' <br />';
      // AVEC EXACTITUDE SVP - POUR FACILITER LES RECHERCHES
      html += ' <b>'+ this.Base.Language.Translate(3510438) +'</b>';
      html += ' <br />';
      html += ' <input id="event_client_name"';
      html += '        class="text com_manager" type="text"';
      html += '        style="width: 310px;"';
      html += '        '+ (taskID ? ' value="'+ (taskToEdit.event_info.event_client_name ? taskToEdit.event_info.event_client_name.replace(/\"/g, '&#34;') : '') +'"' : '') +' />';
      html += ' <br />';

      // SON SITE WEB :
      html += ' '+ this.Base.Language.Translate(3510432) +'';
      html += ' <br />';
      html += ' <input id="event_client_url"';
      html += '       class="text com_manager" type="text"';
      html += '       style="width: 310px;"';
      html += '       '+ (taskID ? ' value="'+ (taskToEdit.event_info.event_client_url ? taskToEdit.event_info.event_client_url.replace(/\"/g, '&#34;') : '') +'"' : '') +' />';
      // COPIER-COLLER ICI TOUS LES CONTACTS CLIENTS UTILES :
      html += ' <br />';
      html += ' '+ this.Base.Language.Translate(3510440) +'';
      html += ' &nbsp;';
      html += ' <img src="images/icons/help16.gif" title="Uniquement les contacts qui valent d\'être évidemment partagés avec le reste des acteurs du projet." />';
      html += ' <br />';
      html += ' <textarea id="event_client_contacts"';
      html += '           class="text com_manager" type="text"';
      html += '           style="width: 430px; height: 120px; font-size: 11px;">'+ (taskID && taskToEdit.event_info.event_client_contacts ? taskToEdit.event_info.event_client_contacts.replace(/<br>/gi,'\r\n') : '') +'</textarea>';
      html += '</div>';
      //--------------------------------------------------------

      html += '</td>';
      html += '</tr>';

      html += '<tr>';
      html += '<td valign="top" align="right">';
      // Date :
      if (i_am_CM || i_can_publish)
        html += this.Base.Language.Translate(3510500) +'&nbsp;';
      html += '</td>';
      html += '<td valign="top">';

      // Jean 28/01/2011 : pour ajouter qq en Cc d'une nouvelle tâche de l'extranet
      html += '<div style="float: right;">';
      // "ajouter un membre..."
      html += '<img src="images/icons/menu_arrow.gif" align="absmiddle" style="margin-top: 2px;" />';
      html += '<div id="external_guy_none" style="display: none;"></div>';
      html += '<input id="external_guy_search" type="text" class="text users_choice" style="" onblur="this.value = \'\';"';
      html +=       ' name="external_guy_search" value="" maxlength="250" />';
      html += '<input type="hidden" name="event_search_guy" id="event_search_guy" value="" />';
      html += '</div>';

      // Jean 17/02/2011
      var event_date = this.eventInfo.event_date_start;
      if (taskToEdit && taskToEdit.event_info)
        var edit_event_date = taskToEdit.event_info.event_date_start;

      // On détermine la plage pour le choix de la date
      var duree_jour_JS = 1000*3600*24;
      var duree_jours_plage = 500;
      if (this.eventInfo.event_datedated && event_date > 0 && isExtranet)
        duree_jours_plage = Math.max(200, (event_date - this.eventInfo.event_date_start + 1) / (3600*24));

      var dureePlageJS = duree_jour_JS * duree_jours_plage;
      var today = new Date();

      // En mode webtv, c'est la date de tournage qu'il faut choisir
      today.setTime(today.getTime() - dureePlageJS / 2);

      var finPlageJS = new Date();
      finPlageJS.setTime(today.getTime() + dureePlageJS);

      // En cas de modif d'une tâche, on donne la possibilité de reculer ou d'avancer jusqu'à 3 mois avant ou après
      if (taskID && taskToEdit.event_info.event_datedated && edit_event_date > 0)
       {
        var nbJoursPlage = 92;
        debutPlageJS = edit_event_date * 1000 - duree_jour_JS * (nbJoursPlage / 2);
        // On arrondit au jour près
        debutPlageJS = Math.round(debutPlageJS / duree_jour_JS) * duree_jour_JS;
        //alert(getDateStr(debutPlageJS) +', '+ getHourStr(debutPlageJS));
        dureePlageJS = duree_jour_JS * nbJoursPlage;
       }
      else
       {
        // On arrondit au jour près
        finPlageJS =  Math.round(finPlageJS / duree_jour_JS) * duree_jour_JS;
        debutPlageJS = finPlageJS - dureePlageJS;
       }

      // On détermine le jour/heure courant
      var timestampRefJS;

      // Si on est en mode "modification" de tâche/épisode
      if (taskID)
       {
        timestampRefJS = (/*isExtranet ? taskToEdit.event_info.event_date_end :*/taskToEdit.event_info.event_date_start) * 1000;
       }
      else
       {
        // Si la liste de tâches en comporte déjà au moins une tâche
        if (this.lastTaskDeadlineMySQL)
         {
          // Dans l'extranet, les tâches sont créées par défaut sans date butoir
          if (isExtranet)
           {
            timestampRefJS = 0;
            minutesDuration = 0;
           }
          else
           {
            timestampRefJS = this.lastTaskDeadlineMySQL * 1000;
            minutesDuration = this.lastMinutesDuration;
           }
         }
        // Si c'est le tout premier ajout de tâche [/ épisode]
        else
         {
          timestampRefJS = (isExtranet ? 0 : this.eventInfo.event_date_start) * 1000;
          minutesDuration = default_minutes_duration;
         }
       }

      //----------------------------------------------------------------------
      // On génère les listes déroulantes permettant de choisir le jour et l'heure de début de tournage [/ projet]
      var withPreciseHours = false;
      var isDateEmpty = isExtranet && !taskID || taskID && !taskToEdit.event_info.event_datedated;
      var isDateHidden = !i_am_CM && !i_can_publish;
      //----------------------------------------------------------------------
      html += getListeChoixDate('task_date', timestampRefJS, debutPlageJS, finPlageJS, withPreciseHours, isDateEmpty, "onChangeDate('task_date', 'task_date_end', false, true);", isDateHidden);

      // Jean 19/05/2011 - On construit la liste de choix de la durée, en échantillonnant de quart d'heure en quart d'heure
      var eventDuration = taskToEdit ? (taskToEdit.event_info.event_date_end - taskToEdit.event_info.event_date_start) * 1000
                                      : minutesDuration * duree_minute_JS;
      html += ' &nbsp; '+ getListeChoixDuree('task_date', eventDuration, withPreciseHours, isDateEmpty, "onChangeDate('task_date', 'task_date_end', true, true);");

      // Jean 19/05/2011 - Génération du choix du JOUR et de l'HEURE de FIN
      // "Fin :"
      html += '</td></tr><tr><td valign="top" align="right">'+ this.Base.Language.Translate(3511351) +'</td><td valign="top">';
      html += getListeChoixDate('task_date_end', timestampRefJS + eventDuration, debutPlageJS, finPlageJS, withPreciseHours, isDateEmpty, "onChangeDate('task_date_end', 'task_date');", isDateHidden);

      html += '<div style="height: 10px;"></div>';

      //----------------------------------------------------------------------

      html += '</td>';
      html += '</tr>';

      // Pour affecter cette tâche à des intervenants ou mettre des personnes en copie
      //******************************************************************************
      html += '<tr>';  //  style="display: none;"
      html += '<td valign="top" align="right">';

      // Affecter à :
      html += this.Base.Language.Translate(3510499) +'&nbsp;';

      html += '</td>';
      html += '<td valign="top" style="padding-top: 0px;">';

      // Case pour tout cocher/décocher
      html += '<div style="padding-bottom: 2px; text-align: right; border-bottom: 1px dashed #8093B3; margin-bottom: 2px;">';
      html +=  '<input type="checkbox" id="checkall_taskers" onclick="SocialEngine.Event.checkAllTaskUsers(\'taskers\', this.checked);" />';
      html +=  '<label for="checkall_taskers">'+ this.Base.Language.Translate(3510051) +'</label>';
      html +=  '</div>';

      // Liste des collaborateurs affectables pour cette tâche
      html += '<div id="container_collab_for_tasklist" style="height: '+ (isExtranet ? '183' : '80') +'px; overflow: auto;">';
      html += $('zone_collab_for_tasklist').innerHTML;
      html += '</div>';

      html += '</td>';
      html += '</tr>';

      if (!taskID)
       {
        html += '<tr>';
        html += '<td valign="top" align="right">';

        // Mettre en copie :
        html += this.Base.Language.Translate(3510590) +'&nbsp;';
        html += '</td>';
        html += '<td valign="top" style="padding-top: 0px;">';

        // Case pour tout cocher/décocher
        html += '<div style="padding-bottom: 2px; text-align: right; border-bottom: 1px dashed #8093B3; margin-bottom: 2px;">';
        html +=  '<input type="checkbox" id="checkall_cc" onclick="SocialEngine.Event.checkAllTaskUsers(\'cc\', this.checked);" />';
        html +=  '<label for="checkall_cc">'+ this.Base.Language.Translate(3510051) +'</label>';
        html +=  '</div>';

        // Liste des collaborateurs qu'on peut mettre en copie de cette tâche
        html += '<div id="container_cc_for_tasklist" style="height: '+ (isExtranet ? '183' : '80') +'px; overflow: auto;">';
        html += $('zone_cc_for_tasklist').innerHTML;
        html += '</div>';

        html += '</td>';
        html += '</tr>';
       }

      html += '<tr>';
      html += '<td></td>';
      html += '<td valign="top">';
      // Bouton "Valider"
      html += ' <input id="btn_addtask_submit" type="submit" class="button" value="'+ this.Base.Language.Translate(3000688) +'" style="padding: 6px; font-size: 15px; /*background: #145FB1; color: white; border: 0px;*/" />';
      // Image d'attente
      html += '<img id="img_load_add_task" src="images/icons/language_tool_loader_small.gif" border="0" style="width: 16px; height: 16px; margin-left: 4px; display: none;" align="absmiddle" />';
      html += '</td>';
      html += '</tr>';

      html += '</table>';


      html += '</div>';

      html += '</form>';

      var DIV = $(zoneTaskEditContainerID);
      DIV.style.display = 'block';
      DIV.innerHTML = html;
//alert('task_summary_'+ this.cptTextSummaryID);

      this.lastTaskEditContainerID = zoneTaskEditContainerID;
      DIV.slide('hide').slide('in');

      var bind = this;

      // -------------------
      // Jean 30/01/2011
      // -------------------
      var options = {
        script:"misc_js.php?task=suggest_external_member&limit=10&",
        varname:"input",
        json:true,
        shownoresults:false,
        maxresults:10,
        blurtrigger:true,
        callback: function (objUser)
         {
          // Insertion conteneur de la case user en DHTML
          if (objUser.id != '' && !isNaN(objUser.id) && !bind.dicoGuysForTaskList[objUser.id])
            bind.getNewGuyDivForTaskList(objUser);
          $('external_guy_search').value = '';
         },
        showOnTop: true,
        // "ajouter un membre..."
        defaultLabelText: bind.Base.Language.Translate(3510986)
       };
      var as_json = new bsn.AutoSuggest('external_guy_search', options);
      // -------------------
      // Jean 30/01/2011
      // -------------------

      // Jean 22/06/2011 : mise en place d'un auto-suggest pour les tags

      // Jean 09/06/2011 : affichage des tags sous forme d'un objet auto-suggest multiple
      var initTags = new Array();
      var tabTags = (taskToEdit && taskToEdit.event_info.event_tags ?
                         taskToEdit.event_info.event_tags
                       : (eventID && this.dicoTasks[eventID] ?
                            this.dicoTasks[eventID].event.event_info.event_tags
                            // ajout d'une tâche dans la liste de tâche en cours
                          : defaultTags)
                    ).replace(/(, *)+/g, ',').replace(/&nbsp;/, ' ').split(',');
      for (var i=0; i<tabTags.length; i++)
        if (trim(tabTags[i]) != '')
          initTags[initTags.length] = {'value': tabTags[i]};
      J(function() {
        var textarea = J($('task_tags'));
        textarea.autoSuggest('tag_ajax.php',
          {
           minChars: 2,
           startText: SocialEngine.Language.Translate(3511397),   // "Commencer à saisir un tag"
           emptyText: SocialEngine.Language.Translate(3511395),   // "Aucun résultat"
           limitText: SocialEngine.Language.Translate(3511396),   // "Aucune sélection supplémentaire n'est autorisée"
           scoresText: SocialEngine.Language.Translate(3511393), // "occurrence(s)"
           addItText:  SocialEngine.Language.Translate(3511394), // "ajouter quand-même ce tag"
           retrieveLimit: 25,  // MySQL "LIMIT"
           //selectionLimit: 1,
           matchCase: false,
           asHtmlID: 'task_tags',
           preFill: initTags
          });
      });

      // Jean 26/08/2011 : idem pour les tags premium
      var initTagsPremium = new Array();
      var tabTagsPremium = (taskToEdit && taskToEdit.event_info.event_tags_premium ?
                         taskToEdit.event_info.event_tags_premium
                       : (eventID && this.dicoTasks[eventID] ?
                            this.dicoTasks[eventID].event.event_info.event_tags_premium
                            // ajout d'une tâche dans la liste de tâche en cours
                          : defaultTagsPremium)
                    ).replace(/(, *)+/g, ',').replace(/&nbsp;/, ' ').split(',');
      for (var i=0; i<tabTagsPremium.length; i++)
        if (trim(tabTagsPremium[i]) != '')
          initTagsPremium[initTagsPremium.length] = {'value': tabTagsPremium[i]};
      J(function() {
        var textarea = J($('task_tags_premium'));
        textarea.autoSuggest('tag_ajax.php',
          {
           minChars: 2,
           startText: SocialEngine.Language.Translate(3511397),   // "Commencer à saisir un tag"
           emptyText: SocialEngine.Language.Translate(3511395),   // "Aucun résultat"
           limitText: SocialEngine.Language.Translate(3511396),   // "Aucune sélection supplémentaire n'est autorisée"
           scoresText: SocialEngine.Language.Translate(3511393), // "occurrence(s)"
           addItText:  SocialEngine.Language.Translate(3511394), // "ajouter quand-même ce tag"
           retrieveLimit: 25,  // MySQL "LIMIT"
           //selectionLimit: 1,
           matchCase: false,
           asHtmlID: 'task_tags_premium',
           preFill: initTagsPremium
          });
      });

      // Si on est en mode "modification", on pré-coche chaque user déjà "corvéable" dans cette tâche
      var init_interv = new Array();
      if (taskID)
       {
        if (taskToEdit.done_by_guy)
          init_interv = taskToEdit.done_by_guy;
       }
      else if (defaultInterv)
        init_interv = defaultInterv;

      for (var j=0; j<init_interv.length; j++)
       {
//alert(init_interv[j].user_info.user_displayname);
        if (!init_interv[j].user_info.user_id) continue;
        var case_a_cocher = $('taskers_'+ init_interv[j].user_info.user_id);
        // Jean 01/02/2011 : si la case à cocher n'existe pas déjà dans le formulaire, alors on va la créer
        if (!case_a_cocher) {
          // Insertion conteneur de la case user en DHTML
          var objUser = Object();
          objUser.id = init_interv[j].user_info.user_id;
          objUser.info = init_interv[j].user_info.user_displayname;
          if (init_interv[j].photo)
            objUser.photo = init_interv[j].photo;
          else
            objUser.photo = 'images/trans.gif';
          objUser.url_profile_popup = '';
          this.getNewGuyDivForTaskList(objUser);
          case_a_cocher = $('taskers_'+ init_interv[j].user_info.user_id);
        }
        this.checkTaskUser(case_a_cocher, true);
       }

      if ($('zone_add_task_form_bis'))
        $('zone_add_task_form_bis').style.display = 'none';

      // Jean 20/12/2010
      if (isSubTaskAdding && $('onlyMainTasks'))
        $('onlyMainTasks').checked = true;

      // Jean 25/08/2011 : on présélectionne les listes déroulantes de choix des différentes catégories
      if ($('event_treat_id'))
       {
        $('event_treat_id').value = taskToEdit ?
                                        taskToEdit.event_info.event_treat_id
                                      // ajout d'une sous-tâche dans la tâche
                                      : (eventID && this.dicoTasks[eventID] ?
                                            this.dicoTasks[eventID].event.event_info.event_treat_id
                                          // ajout d'une tâche dans la liste de tâche en cours
                                          : (this.lastTreatment ? this.lastTreatment : default_event_treat_id));

        // Si on choisit le traitement "Consultation - prise de brief [en prospection]", alors il faut donner la possibilité de choisir QUELLE prise de brief
        // Jean 23/01/2012 : on ne cache plus jamais la liste déroulante "prise de brief"
        $('event_treat_id').onchange = function ()
         { $('event_brief_id').parentNode.parentNode.style.display = /*$('event_treat_id').value == 18 */ true ? '' : 'none'; }
       }

      if ($('event_format_id'))
        $('event_format_id').value = taskToEdit ?
                                        taskToEdit.event_info.event_format_id
                                      // ajout d'une sous-tâche dans la tâche
                                      : (eventID && this.dicoTasks[eventID] ?
                                            this.dicoTasks[eventID].event.event_info.event_format_id
                                          // ajout d'une tâche dans la liste de tâche en cours
                                          : (this.lastFormat ? this.lastFormat : default_event_format_id));
      if ($('event_eventcat_id'))
        $('event_eventcat_id').value = taskToEdit ?
                                        taskToEdit.event_info.event_eventcat_id
                                      // ajout d'une sous-tâche dans la tâche
                                      : (eventID && this.dicoTasks[eventID] ?
                                            this.dicoTasks[eventID].event.event_info.event_eventcat_id
                                          // ajout d'une tâche dans la liste de tâche en cours
                                          : default_event_eventcat_id);

      // Jean 12/09/2011 : on cache l' "ancien format"
      $('event_eventcat_id').parentNode.parentNode.style.display = 'none';

      if ($('event_brief_id'))
       {
        $('event_brief_id').value = taskToEdit ?
                                        taskToEdit.event_info.event_brief_id
                                      // ajout d'une sous-tâche dans la tâche
                                      : (eventID && this.dicoTasks[eventID] ?
                                            this.dicoTasks[eventID].event.event_info.event_brief_id
                                          // ajout d'une tâche dans la liste de tâche en cours
                                          : default_event_brief_id);
        // Jean 23/01/2012 : on ne cache plus jamais la liste déroulante "prise de brief"
        $('event_brief_id').parentNode.parentNode.style.display = /*$('event_treat_id').value == 18 */ true ? '' : 'none';
       }
      if ($('event_sector_id'))
        $('event_sector_id').value = taskToEdit ?
                                        taskToEdit.event_info.event_sector_id
                                      // ajout d'une sous-tâche dans la tâche
                                      : (eventID && this.dicoTasks[eventID] ?
                                            this.dicoTasks[eventID].event.event_info.event_sector_id
                                          // ajout d'une tâche dans la liste de tâche en cours
                                          : (this.lastSector ? this.lastSector : default_event_sector_id));

      if ($('event_template'))
        $('event_template').value = taskToEdit ?
                                        taskToEdit.event_info.event_template
                                      // ajout d'une sous-tâche dans la tâche
                                      : (eventID && this.dicoTasks[eventID] ?
                                            this.dicoTasks[eventID].event.event_info.event_template
                                          // ajout d'une tâche dans la liste de tâche en cours
                                          : (this.lastTemplate ? this.lastTemplate : default_event_template));

      // Titre par défaut ?
      if (default_event_title && $('task_title'))
        $('task_title').value = default_event_title;

      if (default_event_sub_title && $('task_subtitle'))
        $('task_subtitle').value = default_event_sub_title;

      // Jean 10/03/2011 : création et alimentation du WYSIWYG
      var textareaID = 'task_summary_'+ this.cptTextSummaryID;
      if (tinyMCE.get(textareaID))
        tinyMCE.get(textareaID).remove();
      initWYSIWYG(textareaID, 'advanced', null, 400, null, false, false, true);

      setTimeout("$('task_title').focus(); $('"+ DIV.id +"').style.overflow = ''; $('"+ DIV.id +"').parentNode.style.height = null; $('"+ DIV.id +"').style.height = null;", 700);
     }
   },

  dicoGuysForTaskList: Array(),

  // Jean 30/01/2011 : ajout dynamique d'une nouvelle personne (dans la liste des personnes corvéables, ou alors dans la liste des personnes en Cc)
  getNewGuyDivForTaskList: function(objUser)
   {
    // Insertion conteneur de la case user en DHTML
    if ($('container_collab_for_tasklist').childNodes.length > 0)
      $('container_collab_for_tasklist').insertBefore(this.getNewGuyDivForTaskList_item('taskers', 'cc', objUser),$('container_collab_for_tasklist').childNodes[0]);
    else
      $('container_collab_for_tasklist').appendChild(this.getNewGuyDivForTaskList_item('taskers', 'cc', objUser));

    if ($('container_cc_for_tasklist'))
     {
      if ($('container_cc_for_tasklist').childNodes.length > 0)
        $('container_cc_for_tasklist').insertBefore(this.getNewGuyDivForTaskList_item('cc', 'taskers', objUser),$('container_cc_for_tasklist').childNodes[0]);
      else
        $('container_cc_for_tasklist').appendChild(this.getNewGuyDivForTaskList_item('cc', 'taskers', objUser));
     }
   },

  getNewGuyDivForTaskList_item: function(guyPrefix, guyOtherPrefix, objUser)
   {
    var objDiv = document.createElement('div');
    objDiv.style.float = 'left';
    objDiv.style.paddingTop = '3px';
    objDiv.style.width = '158px';
    // Mise en évidence
    objDiv.style.background = '#D7FF5B';

    var html = '';
    html += '<input type="checkbox" id="'+ guyPrefix +'_'+ objUser.id +'"';
    html += ' onclick="if (SocialEngine.Event.majUserVisibility) SocialEngine.Event.majUserVisibility(\''+ guyPrefix +'_'+ objUser.id +'\', \''+ guyOtherPrefix +'_'+ objUser.id +'\');"';
    // en mode webtv, on pré-coche le membre fraîchement ajouté à la liste des intervenants
    if (!isExtranet && guyPrefix == 'taskers') html += ' checked';
    html += ' /><label for="'+ guyPrefix +'_'+ objUser.id +'"';
    html += ' style="line-height: 12px;"';
    html += '><img src="'+ objUser.photo +'" class="photo" width="30" height="30" border="0" align="left" hspace="0"'+ objUser.url_profile_popup +' />';
    html += objUser.info +'</label>';

    objDiv.innerHTML = html;
    this.dicoGuysForTaskList[objUser.id] = true;

    return objDiv;
   },

  // Pour cocher/décocher qq dans une zone donnée
  checkTaskUser: function(checkBox, mustCheck)
   {
    checkBox.checked = mustCheck;
    this.majUserVisibility(checkBox.id, checkBox.id.match(/cc_/) ? checkBox.id.replace(/cc_/, "taskers_") : checkBox.id.replace(/taskers_/, "cc_"));
   },

  // Met en évidence un user caché
  hilightTaskUser: function(checkBox)
   {
    checkBox.parentNode.style.background = checkBox.checked ? '#FDFDF2 url(images/fond_task_user_on.png) no-repeat right' : '';
    //checkBox.parentNode.style.borderColor  = checkBox.checked ? '#EDECC0' : 'transparent';
    checkBox.parentNode.className = checkBox.checked ? 'arrondi_leger' : '';
   },

  // Jean 15/06/2010 : pour cocher/décocher tout le monde dans une zone donnée
  checkAllTaskUsers: function(userPrefix, checkAll)
   {
    var listeInput = document.getElementsByTagName('INPUT');
    for (var i=0; i<listeInput.length; i++)
     {
      var input = listeInput[i];
      if (input.type != 'checkbox') continue;
      if (input.checked == checkAll) continue;
      var tabMatch = input.id.match(eval('/^'+ userPrefix +'_([0-9]+)/'));
      if (!tabMatch) continue;
      this.checkTaskUser(input, checkAll, true);
     }
    // Si on cocher tout, alors on décoche la séection globale de users dans la zone opposée (corvéables <=> personnes en copie)
    if ($('checkall_'+ (userPrefix == "cc" ? 'taskers' : 'cc')) && checkAll)
      $('checkall_'+ (userPrefix == "cc" ? 'taskers' : 'cc')).checked = false;
   },


  // Jean 15/06/2010 : quand on coche/décoche un intervenant dans la création d'une tâche, on doit le décocher/cocher dans la zone du "Cc"
  activateOrNotUser: function(userZoneID, mustActivate)
   {
    // L'intitulé
    $(userZoneID).nextSibling.style.color = mustActivate ? '#D4D4D4' : '';
    // La photo
    $(userZoneID).nextSibling.firstChild.style.opacity = mustActivate ? 0.2 : 1;
    try { $(userZoneID).nextSibling.firstChild.filters.alpha.opacity = mustActivate ? 20 : 100; } catch (e) {;}
   },

  // Jean 15/06/2010 : quand on coche/décoche un intervenant dans la création d'une tâche, on doit le décocher/cocher dans la zone du "Cc"
  majUserVisibility: function(userClickZoneID, userOtherZoneID)
   {
    if (!$(userClickZoneID) || !$(userOtherZoneID)) return;
    // Pas 2 cases cochées en même temps pour le même user
    if ($(userClickZoneID).checked && $(userOtherZoneID).checked)
      $(userOtherZoneID).checked = false;
    // Si 1 case cochée, alors on met l'autre en transparence
    this.activateOrNotUser(userClickZoneID, !$(userClickZoneID).checked && $(userOtherZoneID).checked);
    this.activateOrNotUser(userOtherZoneID, $(userClickZoneID).checked && !$(userOtherZoneID).checked);

    // On met en évidence les users cochés
    this.hilightTaskUser($(userClickZoneID));
    this.hilightTaskUser($(userOtherZoneID));
   },

  // valider l'ajout ou la modification d'une tâche
  // (si <taskID> vaut qqch, alors c'est une modification de tâche, et pas une création)
  addTaskConfirm: function(eventID, taskID, textSummaryID)
   {
    // Si finalement, on ne veut plus ajouter de tâche
    if ($('task_title').value == '')
     {
      // "Vous devez saisir un intitulé !"
      alert(this.Base.Language.Translate(3510997));
      $('img_load_add_task').style.display = 'none';
      $('img_load_add_task_bis').style.display = 'none';
      //$('new_task_container').innerHTML = '';
      return;
     }

    if (this.isCreatingTask) return;
    this.isCreatingTask = true;

    // On reconstitue la valeur du champ "event_intervenants"
    var task_taskers = new Array();
    var listeInput = document.getElementsByTagName('INPUT');
    for (var i=0; i<listeInput.length; i++)
     {
      var input = listeInput[i];
      if (input.type != 'checkbox') continue;
      if (!input.checked) continue;
      var tabMatch = input.id.match(/^taskers_([0-9]+)/);
      if (!tabMatch) continue;
      task_taskers[task_taskers.length] = tabMatch[1];
     }

    // On constitue la liste des user_id des gens à mettre en copie de cette tâche
    var task_cc = new Array();
    var listeInput = document.getElementsByTagName('INPUT');
    for (var i=0; i<listeInput.length; i++)
     {
      var input = listeInput[i];
      if (input.type != 'checkbox') continue;
      if (!input.checked) continue;
      var tabMatch = input.id.match(/^cc_([0-9]+)/);
      if (!tabMatch) continue;
      task_cc[task_cc.length] = tabMatch[1];
     }

    this.currentCoordY = getTop($('event_tasklist'));

    // Ajax
    var bind = this;
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {

        'task' : taskID ? 'edit_task' : 'add_task',
        'event_id' : eventID,
        'task_id' : taskID,
        'task_title' : $('task_title').value,
        'task_subtitle' : $('task_subtitle').value,
        'task_summary' : $('task_summary_'+ textSummaryID).value,
        'task_taskers' : '#'+ task_taskers.join('#') +'#',
        'task_cc' : task_cc.join(','),
        'event_date_start' : ($('date_select_task_date').value == '' ? '' : $('date_select_task_date').value*1 + $('hour_select_task_date').value*1),
        'event_date_end'   : ($('date_select_task_date_end').value == '' ? '' : $('date_select_task_date_end').value*1 + $('hour_select_task_date_end').value*1),

        'event_client_name' : $('event_client_name').value,
        'event_client_url' : $('event_client_url').value,
        'event_client_contacts' : $('event_client_contacts').value,

        'event_tags' : $('as-values-task_tags').value.replace(/^,/, '').replace(/,$/, ''), // $('task_tags').value,

        // Jean 26/08/2011
        'event_tags_premium' : $('as-values-task_tags_premium').value.replace(/^,/, '').replace(/,$/, ''), // $('task_tags_premium').value,

        // Jean 03/04/2011
        'event_is_unlinkable' : $('event_is_unlinkable').checked ? '1' : '0',

        // Jean 11/05/2011
        'event_child_home_privilege' : $('event_child_home_privilege').checked ? '1' : '0',

        // Jean 25/08/2011
        'event_treat_id' :   ($('event_treat_id')   ? $('event_treat_id').value   : ''),
        'event_eventcat_id' : ($('event_eventcat_id') ? $('event_eventcat_id').value : ''),
        'event_brief_id'    : ($('event_brief_id')    ? $('event_brief_id').value    : ''),

        // Jean 08/09/2011
        'event_format_id' :   ($('event_format_id')   ? $('event_format_id').value   : ''),

        'event_sector_id' :   ($('event_sector_id')   ? $('event_sector_id').value   : ''),
        'event_template' :    ($('event_template')    ? $('event_template').value    : ''),

        // Jean 23/01/2012
        'do_not_publish' : ($('do_not_publish') && $('do_not_publish').checked ? '1' : '0')
      },
      'onComplete':function(responseObject)
      {
        setTimeout("SocialEngine.Event.isCreatingTask = false;", 1000);
        if( $type(responseObject)!="object" || !responseObject.result )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          // Jean 05/05/2011 - Affichage contextuel de la liste des webtvs sur lesquelles s'est propagée telle modif contextuelle
          if (responseObject.maj_webtv_urls)
            bind.showMajWebtvUrls(responseObject.maj_webtv_urls, bind.currentCoordY);

          // On vide le formulaire
          $('new_task_container').innerHTML = '';

          // Si on doit aller directement sur l'event juste créé
          if (responseObject.go_to_url && responseObject.go_to_url != '')
           {
            if ($('tasklist_container'))
              $('tasklist_container').innerHTML = '<img src="images/icons/language_tool_loader.gif" border="0" style="width: 32px; height: 32px; margin: 20px;" align="absmiddle" />';
            window.location.href = responseObject.go_to_url;
           }
          else
            // On recharge la liste des tâches
            bind.getTaskList(bind.eventInfo.event_id, null, responseObject.new_event_id ? responseObject.new_event_id : taskID, true);
         }
      }
    });
    request.send();
   },

  isEditingTask: false,
  memLastTaskTitleRowHTML: '',
  memLastTaskDeadlineRowHTML: '',
  memLastTaskDonedateRowHTML: '',

  // Jean 18/04/2010 : pour éditer rapidement un champ d'une tâche de manière contextuelle
  editTask: function(eventID, taskID, justField)
   {
    var html = '';
    html += '<form id="form_task_edit" action="javascript:$(\'img_load_edit_'+ taskID +'\').style.display = \'inline\';SocialEngine.Event.contextEditTaskConfirm(\''+ eventID +'\', \''+ taskID +'\');" style="display: inline;">';

    // Valeurs d'origine
    html += '<input type="hidden" id="init_task_title" onblur="$(\'form_task_edit\').submit();" value="'+ $('edit_title_container_'+ taskID).firstChild.innerHTML.replace(/\"/g, '&#34;') +'" />';
    html += '<input type="hidden" id="init_task_deadline" onblur="$(\'form_task_edit\').submit();" value="'+ ($('edit_deadline_container_'+ taskID) ? $('edit_deadline_container_'+ taskID).firstChild.innerHTML.replace(/\"/g, '&#34;') : "") +'" />';
    html += '<input type="hidden" id="init_task_donedate" onblur="$(\'form_task_edit\').submit();" value="'+ $('edit_donedate_container_'+ taskID).firstChild.innerHTML.replace(/\"/g, '&#34;') +'" />';

    // Valeurs à modifier
    var taskDepth = $('task_depth_'+ taskID) ? $('task_depth_'+ taskID).value : 0;
    html += '<input type="'+ (justField != 'title' ? 'hidden' : 'text') +'" id="context_task_title" class="text" style="width: '+ (taskDepth > 0 ? (taskDepth > 1 ? 315 : 335) : 375) +'px;" onblur="$(\'form_task_edit\').submit();" value="'+ $('edit_title_container_'+ taskID).firstChild.innerHTML.replace(/\"/g, '&#34;') +'" />';
    html += '<input type="'+ (justField != 'deadline' ? 'hidden' : 'text') +'" id="context_task_deadline" class="text" style="width: 72px;" onblur="$(\'form_task_edit\').submit();" value="'+ ($('edit_deadline_container_'+ taskID) ? $('edit_deadline_container_'+ taskID).firstChild.innerHTML.replace(/\"/g, '&#34;') : "") +'" />';
    html += '<input type="'+ (justField != 'donedate' ? 'hidden' : 'text') +'" id="context_task_donedate" class="text" style="width: 72px;" onblur="$(\'form_task_edit\').submit();" value="'+ $('edit_donedate_container_'+ taskID).firstChild.innerHTML.replace(/\"/g, '&#34;') +'" />';
    html += '</form>';

    memLastTaskTitleRowHTML = $('edit_title_container_'+ taskID).innerHTML;
    memLastTaskDeadlineRowHTML = $('edit_deadline_container_'+ taskID) ? $('edit_deadline_container_'+ taskID).innerHTML : '';
    memLastTaskDonedateRowHTML = $('edit_donedate_container_'+ taskID).innerHTML;

    if (justField == 'deadline')
     {
      if ($('edit_deadline_container_'+ taskID))
        $('edit_deadline_container_'+ taskID).innerHTML = html;
      $('context_task_deadline').focus();
     }
    else if (justField == 'donedate')
     {
      $('edit_donedate_container_'+ taskID).innerHTML = html;
      $('context_task_donedate').focus();
     }
    else if (justField == 'title')
     {
      $('edit_title_container_'+ taskID).innerHTML = html;
      setTimeout("$('context_task_title').focus();", 400);
     }
   },

  // Jean 18/04/2010 : si on change juste l'un ou l'autre champ en saisie contextuelle
  contextEditTaskConfirm: function(eventID, taskID)
   {
    // Si pas de changement
    if ($('init_task_title').value == $('context_task_title').value && $('init_task_deadline').value == $('context_task_deadline').value && $('init_task_donedate').value == $('context_task_donedate').value)
     {
      $('img_load_edit_'+ taskID).style.display = 'none';
      $('edit_title_container_'+ taskID).innerHTML = memLastTaskTitleRowHTML;
      if ($('edit_deadline_container_'+ taskID))
        $('edit_deadline_container_'+ taskID).innerHTML = memLastTaskDeadlineRowHTML;
      $('edit_donedate_container_'+ taskID).innerHTML = memLastTaskDonedateRowHTML;
      return;
     }

    if (this.isEditingTask) return;
    this.isEditingTask = true;

    $('context_task_deadline').value = $('context_task_deadline').value.replace(/\./g, '/');

    if ( $('context_task_deadline').value != "" && !$('context_task_deadline').value.match(/[0-9][0-9]?\/[0-9][0-9]?\/[0-9][0-9][0-9]?[0-9]?/) )
     {
      // Attention, la date est incorrecte !
      alert(this.Base.Language.Translate(3510999) +'\n\n('+ $('context_task_deadline').value +')');
      SocialEngine.Event.isEditingTask = false;
      return;
     }

    var newTitle = $('context_task_title').value;
    var newDeadLine = $('context_task_deadline').value;
    var newDoneDate = $('context_task_donedate').value;

    var newDeadLineTimestamp = strDateToTimestamp(newDeadLine);
    var newDoneDateTimestamp = strDateToTimestamp(newDoneDate);
//alert(this.dicoTasks[taskID].event.event_info.event_datedated);

    this.currentCoordY = getTop($('img_load_edit_'+ taskID)) + 100;

    // Ajax
    var bind = this;
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'edit_task',
        'task_id' : taskID,
        'task_title' : $('context_task_title').value,
        'event_date_end' : newDeadLine != "" ? Math.round(newDeadLineTimestamp / 1000) : "0",
        'task_daterealized' : newDoneDate != "" ? Math.round(newDoneDateTimestamp / 1000) : "0"
      },
      'onComplete':function(responseObject)
      {
        setTimeout("SocialEngine.Event.isEditingTask = false;", 1000);
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          // Jean 05/05/2011 - Affichage contextuel de la liste des webtvs sur lesquelles s'est propagée telle modif contextuelle
          if (responseObject.maj_webtv_urls)
            bind.showMajWebtvUrls(responseObject.maj_webtv_urls, bind.currentCoordY);

          var forceMaj = $('tasklistSort').value != 'by_creat_date' && $('tasklistSort').value != 'by_deadline_desc' && $('tasklistSort').value != 'by_publish_date';
          if (!forceMaj)
           {
            // On met à jour les nouvelles infos dans la structure en mémoire vive
            bind.dicoTasks[taskID].event.event_info.event_title = newTitle;

            // Jean 17/02/2011
            if (isExtranet)
              bind.dicoTasks[taskID].event.event_info.event_date_end = newDeadLine == '' ? 0 : Math.round(newDeadLineTimestamp / 1000);
            else
              bind.dicoTasks[taskID].event.event_info.event_date_start = newDeadLine == '' ? 0 : Math.round(newDeadLineTimestamp / 1000);

            bind.dicoTasks[taskID].event.event_info.event_datedated = newDeadLine != '' && newDeadLineTimestamp != 0 ? (new Date()).getTime() : null;
            bind.dicoTasks[taskID].event.event_info.event_daterealized = newDoneDate == '' ? 0 : Math.round(newDoneDateTimestamp / 1000);
           }
          // On rafraîchit la liste en faisant appel au serveur seulement si le critère de tri choisi risque d'imposer un changement selon les modifs de titre ou de date
          var notDisplayLoadingImg = false;
          bind.getTaskList(bind.eventInfo.event_id, notDisplayLoadingImg, !notDisplayLoadingImg && forceMaj ? taskID : null, forceMaj);
         }
      }
    });
    request.send();
   },

  // Jean 18/04/2010 : pour qu'un RdC puisse décider qu'un projet ou une tâche est désormais "clôturée"
  majDoneTask: function(taskID, isDone, isTaskDoneForMe)
   {
    $('img_load_edit_'+ taskID).style.display = 'inline';

    // Ajax
    var bind = this;
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'maj_done_task',
        'task_id' : taskID,
        'task_done' : $('task_done_'+ taskID).checked ? '1' : '0'
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          bind.getTaskList(bind.eventInfo.event_id, true, null, true);
          $('img_task_done_for_me_'+ taskID).style.display = isTaskDoneForMe ? 'inline' : 'none';
         }
      }
    });
    request.send();
   },

  // Initialise le formulaire pour modifier une tâche
  currentTaskEditForm: null,

  editEntireTask: function (eventID, taskID)
   {
    var thisTaskForm = $('edit_task_container_'+ taskID);
    var thisTaskFormIsAlreadyOpen = thisTaskForm == this.currentTaskEditForm;

    // Si un formulaire est déjà affiché, alors on le cache
    if (this.currentTaskEditForm)
     {
      this.currentTaskEditForm.slide('out');
      this.currentTaskEditForm.innerHTML = '';
      this.currentTaskEditForm.style.display = 'none';
      this.currentTaskEditForm = null;
     }

    if (!thisTaskFormIsAlreadyOpen)
     {
      this.addTask(eventID, taskID);
      this.currentTaskEditForm = $('edit_task_container_'+ taskID);
     }
   },

  // Valide la modification d'une tâche
  editEntireTaskConfirm: function(eventID, taskID, textSummaryID)
   {
    this.addTaskConfirm(eventID, taskID, textSummaryID);
   },

  // Jean 13/01/2011 : pour rafraîchir la liste de tâches
  refreshTaskList: function()
   {
    this.getTaskList(this.eventInfo.event_id, false, null, true);
   },

  // Jean 23/04/2010 : pour régler un event/projet à "réalisé"
  setEventRealizedOrNot: function(eventID, isRealized, webtvID)
   {
    var bind = this;

    // Êtes-vous sûr que projet soit vraiment "clôturé" ?
    //if (isRealized && !confirm(bind.Base.Language.Translate(3510469))) return;

    // Jean 16/02/2011 : mise à jour barre de progression
    this.majProgressBar(eventID, webtvID, 1, true, 1, 0);

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'set_event_realized',
        'is_realized' : (isRealized ? '1' : '0'),
        'event_id' : eventID,
        'webtv_id' : webtvID
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          zoneSuccess = null;

          if ($('seEventProfileBookmarkSuccess'))
            zoneSuccess = $('seEventProfileBookmarkSuccess');

          else if ($('seEventProfileBookmarkSuccess_'+ eventID))
            zoneSuccess = $('seEventProfileBookmarkSuccess_'+ eventID);

          else if ($('seEventProfileBookmarkSuccess_'+ eventID +'_'+ webtvID))
            zoneSuccess = $('seEventProfileBookmarkSuccess_'+ eventID +'_'+ webtvID);

          if( zoneSuccess )
          {
            zoneSuccess.style.display = 'block';
            zoneSuccess.slide('hide').slide('in');
            (function(){ zoneSuccess.slide('show').slide('out'); }).delay(3000);
          }

          if ($('zone_project_closed'))
            $('zone_project_closed').style.display = isRealized ? '' : 'none';

          else if ($('zone_project_closed_'+ eventID))
            $('zone_project_closed_'+ eventID).style.display = isRealized ? '' : 'none';
          //window.location.reload( true );
         }
      }
    });
    request.send();
   },


  majPrivnotes: function(eventID, privNotesContent, webtvID)
   {
    var bind = this;
    this.currentCoordY = getTop($('zone_privnotes_edit'));

    $('btn_privnotes_valid_edit').style.display = 'none';
    $('btn_privnotes_cancel').style.display = 'none';
    $('zone_privnotes_edit').style.display = 'none';
    $('loading_privnotes_valid_edit').style.display = 'block';

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'maj_privnotes',
        'event_id' : eventID,
        'webtv_id' : webtvID,
        'event_privnotes' : privNotesContent
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          // Jean 04/04/2011 - Affichage contextuel de la liste des webtvs sur lesquelles s'est propagée telle modif contextuelle
          if (responseObject.maj_webtv_urls)
            bind.showMajWebtvUrls(responseObject.maj_webtv_urls, bind.currentCoordY);

          $('lien_privnotes_edit').style.display = 'inline';
          $('zone_privnotes_content').style.display = 'block';
          $('zone_privnotes_content').innerHTML = privNotesContent;
          //$('form_privnotes_edit').event_privnotes.value = 'coucou';
          //$('event_privnotes__Frame').contentWindow.document.body.innerHTML = 'coucou';
          $('loading_privnotes_valid_edit').style.display = 'none';
         }
      }
    });
    request.send();
   },


  majRetranscript: function(eventID, retranscriptContent, webtvID)
   {
    var bind = this;
    this.currentCoordY = getTop($('zone_retranscript_edit'));

    $('btn_retranscript_valid_edit').style.display = 'none';
    $('btn_retranscript_cancel').style.display = 'none';
    $('zone_retranscript_edit').style.display = 'none';
    $('loading_retranscript_valid_edit').style.display = 'block';
    // Jean 22/06/2011
    if ($('zone_setEventRetranscriptNoSynch'))
      $('zone_setEventRetranscriptNoSynch').style.visibility = 'visible';

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'maj_retranscript',
        'event_id' : eventID,
        'webtv_id' : webtvID,
        'event_retranscript' : retranscriptContent
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          // Jean 04/04/2011 - Affichage contextuel de la liste des webtvs sur lesquelles s'est propagée telle modif contextuelle
          if (responseObject.maj_webtv_urls)
            bind.showMajWebtvUrls(responseObject.maj_webtv_urls, bind.currentCoordY);

          $('lien_retranscript_edit').style.display = 'inline';
          $('zone_retranscript_content').style.display = 'block';
          $('zone_retranscript_content').innerHTML = retranscriptContent;
          $('loading_retranscript_valid_edit').style.display = 'none';
          // Jean 22/06/2011
          if ($('zone_setEventRetranscriptNoSynch'))
            $('zone_setEventRetranscriptNoSynch').style.visibility = 'hidden';
         }
      }
    });
    request.send();
   },


  majSummary: function(eventID, summaryContent, webtvID)
   {
    var bind = this;
    this.currentCoordY = getTop($('zone_summary_edit'));

    $('btn_summary_valid_edit').style.display = 'none';
    $('btn_summary_cancel').style.display = 'none';
    $('zone_summary_edit').style.display = 'none';
    $('loading_summary_valid_edit').style.display = 'block';
    // Jean 22/06/2011
    if ($('zone_setEventSummaryNoSynch'))
      $('zone_setEventSummaryNoSynch').style.visibility = 'visible';

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'maj_summary',
        'event_id' : eventID,
        'webtv_id' : webtvID,
        'event_summary' : summaryContent
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          // Jean 04/04/2011 - Affichage contextuel de la liste des webtvs sur lesquelles s'est propagée telle modif contextuelle
          if (responseObject.maj_webtv_urls)
            bind.showMajWebtvUrls(responseObject.maj_webtv_urls, bind.currentCoordY);

          $('lien_summary_edit').style.display = 'inline';
          $('zone_summary_content').style.display = 'block';
          summaryContent = summaryContent.replace(/\n/gi, "<br>");

          // Jean 02/01/2011
          if (responseObject.new_summary)
           {
            summaryContent = responseObject.new_summary;
            summaryContent = summaryContent.replace(/\[SONDAGE\]/, html_sondage);
           }
          $('zone_summary_content').innerHTML = summaryContent;
          $('webcast_summary').style.display = 'none';
          var isPage = $('webcast_summary').offsetWidth > 600;
          var isPageWeb = $('webcast_summary').offsetWidth < 320;
          if (!isPage && !isPageWeb)
            $('webcast_summary').style.width = trim(summaryContent) != '' ? '100%' : 'auto';
          setTimeout("$('webcast_summary').style.display = 'block';", 0);
          $('loading_summary_valid_edit').style.display = 'none';
          // Jean 22/06/2011
          if ($('zone_setEventSummaryNoSynch'))
            $('zone_setEventSummaryNoSynch').style.display = 'none';
         }
      }
    });
    request.send();
   },


  majDesc: function(eventID, descContent, webtvID)
   {
    var bind = this;
    this.currentCoordY = getTop($('zone_desc_edit'));

    $('btn_desc_valid_edit').style.display = 'none';
    $('btn_desc_cancel').style.display = 'none';
    $('zone_desc_edit').style.display = 'none';
    $('loading_desc_valid_edit').style.display = 'block';

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'maj_desc',
        'event_id' : eventID,
        'webtv_id' : webtvID,
        'event_desc' : descContent
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          // Jean 04/04/2011 - Affichage contextuel de la liste des webtvs sur lesquelles s'est propagée telle modif contextuelle
          if (responseObject.maj_webtv_urls)
            bind.showMajWebtvUrls(responseObject.maj_webtv_urls, bind.currentCoordY);

          $('lien_desc_edit').style.display = 'inline';
          $('zone_desc_content').style.display = 'block';
          if ($('zone_setEventDescNoSynch')) $('zone_setEventDescNoSynch').style.display = 'none';
          $('zone_desc_content').innerHTML = descContent;
          $('loading_desc_valid_edit').style.display = 'none';
         }
      }
    });
    request.send();
   },

  // Jean 04/10/2010 - Idem, mais pour mettre à jour la description d'une chaîne
  majGroupDesc: function(groupID, descContent)
   {
    var bind = this;

    $('btn_group_desc_valid_edit').style.display = 'none';
    $('btn_group_desc_cancel').style.display = 'none';
    $('zone_group_desc_edit').style.display = 'none';
    $('loading_group_desc_valid_edit').style.display = 'block';

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'maj_group_desc',
        'group_id' : groupID,
        'group_desc' : descContent
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          $('lien_group_desc_edit').style.display = 'inline';
          $('zone_group_desc_content').style.display = 'block';

          // Jean 02/01/2011
          if (responseObject.new_group_desc)
            descContent = responseObject.new_group_desc;

          $('zone_group_desc_content').innerHTML = descContent;
          $('loading_group_desc_valid_edit').style.display = 'none';
         }
      }
    });
    request.send();
   },


  // Jean 21/06/2010 - Ajoute d'office qq à la liste des intervenants
  addAsSpeaker: function(eventID, userID, webtvID)
   {
    var bind = this;

    // Image d'attente
    var imgLoading = $('link_addAsSpeaker_'+ eventID +'_'+ userID);
    if (!imgLoading)
      imgLoading = $('link_addAsSpeaker_'+ webtvID +'_'+ eventID +'_'+ userID);
    if (!imgLoading)
      imgLoading = $('link_addAsSpeakerBis_'+ eventID +'_'+ userID);
    if (!imgLoading)
      imgLoading = $('link_addAsSpeakerBis_'+ webtvID +'_'+ eventID +'_'+ userID);
    if (imgLoading)
      imgLoading.innerHTML = '<img src="images/icons/language_tool_loader.gif" alt="Loading..." title="Loading..." border="0" />';

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'add_as_speaker',
        'event_id' : eventID,
        'webtv_id' : webtvID,
        'user_id' : userID
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          // Jean 04/04/2011 - Affichage contextuel de la liste des webtvs sur lesquelles s'est propagée telle modif contextuelle
          if (responseObject.maj_webtv_urls)
            bind.showMajWebtvUrls(responseObject.maj_webtv_urls, getTop(imgLoading));

          // [Et voilà ! - Cliquer <a href="%1$s">ici</a> pour rafraîchir]
          if (imgLoading)
            imgLoading.innerHTML = bind.Base.Language.TranslateFormatted(3510617, ['javascript: window.location.reload();']);
         }
      }
    });
    request.send();
   },


   // Jean 24/06/2010
   vote: function(eventID) {

      $('zone_vote_explain').style.display = 'block';
      $('vote_explain').focus();
   },

   voteConfirm: function(eventID)
    {
      var vote_value = 0;
      var vote_explain = $('vote_explain').value;

      // On lit la valeur du vote
      var listeInput = document.getElementsByTagName('INPUT');
      for (var i=0; i<listeInput.length; i++)
       {
        var input = listeInput[i];
        if (input.type != 'radio') continue;
        if (!input.checked) continue;
        var tabMatch = input.id.match(/^vote([0-9]+)/);
        if (!tabMatch) continue;
        vote_value = input.value;
        break;
       }

      // Jean 26/03/2011 : le user n'est pas logué et n'a pas encore saisi ses coordonnées ? alors on lui crée un "compte express" : on affiche donc un mini formulaire
      if (!isLogged && !current_express_email)
       {
        if (eventID)
          this.currentConfirmID = eventID;
        this.initExpressAccount('vote', vote_explain, vote_value);
        return;
       }

      $('img_loading_vote').style.display = 'inline';
      $('btn_vote_submit').style.display = 'none';

      // On transmet le vote (valeur + explication perso)
      var bind = this;

      // Ajax
      var request = new Request.JSON({
        'method' : 'post',
        'url' : this.options.ajaxURL,
        'data' : {
          'task' : 'vote',
          'event_id' : eventID,
          'vote' : vote_value,
          'vote_explain' : vote_explain
        },
        'onComplete':function(responseObject)
        {
          if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
           {
            alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
            $('img_loading_vote').style.display = 'none';
            $('btn_vote_submit').style.display = 'inline';
           }
          else
           {
            $('img_loading_vote').style.display = 'none';
            $('btn_vote_submit').style.display = 'inline';
            $('mess_vote_submit').style.display = 'block';
            setTimeout("$('mess_vote_submit').style.display = 'none';", 3000);

            // Le bouton devient "Modifier"
            $('btn_vote_submit').value = bind.Base.Language.Translate(3000245);

            // S'il s'agit d'une modification, le message devient "Vote modifié, merci !" (Sinon, c'est "A voté, merci !")
            $('mess_vote_submit').innerHTML = bind.Base.Language.Translate(responseObject.old_vote_value && !isNaN(responseObject.old_vote_value) ? 3510672 : 3510668);

            // Si un texte descriptif a été saisi, alors on recharge les commentaires (puisqu'un commentaire aura été posté automatiquement avec ce texte)
            if (SocialEngine.EventComments)
             {
              SocialEngine.EventComments.total ++;
              SocialEngine.EventComments.getComments(1);
             }

            // On met en évidence le commentaire généré
            if (responseObject.just_created_or_updated_comment_id)
             {
              bind.highlightArea('comment_'+ responseObject.just_created_or_updated_comment_id);
             }
           }
        }
      });
      request.send();
    },

  // Jean 27/06/2010 : Mise en évidence d'une zone HTML précise
  highlightArea: function(zone_id)
   {
    // Si zone pas encore chargée, on attend
    if (!$(zone_id))
      setTimeout('SocialEngine.Event.highlightArea("'+ zone_id +'");', 200);
    else
     {
      // On bascule si besoin sur l'onglet des commentaires
      SocialEngine.Event.loadProfileTab('profile');

      $(zone_id).lastChild.style.backgroundColor = '#D7FFAE';
      $(zone_id).lastChild.firstChild.firstChild.focus();

      try { window.scrollBy(0,200); } catch (e) {;}

      //alert($(zone_id).lastChild.outerHTML);
      setTimeout('$("'+ zone_id +'").lastChild.style.backgroundColor = ""', 600);
      setTimeout('$("'+ zone_id +'").lastChild.style.backgroundColor = "#D7FFAE"', 1200);
      setTimeout('$("'+ zone_id +'").lastChild.style.backgroundColor = ""', 1800);
      setTimeout('$("'+ zone_id +'").lastChild.style.backgroundColor = "#D7FFAE"', 2400);
      setTimeout('$("'+ zone_id +'").lastChild.style.backgroundColor = ""', 3000);
     }
   },


  // Jean 28/06/2010
  afficherResultatsSondage: function(eventID)
   {
    // Image d'attente
    if ($('loading_affich_sondage'))
      $('loading_affich_sondage').style.display = 'inline';
    else
      $('loading_affich_sondage_'+ eventID).style.display = 'inline';

    var bind = this;

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'get_poll_values',
        'event_id' : eventID
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          if ($('loading_affich_sondage'))
            $('loading_affich_sondage').style.display = 'none';
          else
            $('loading_affich_sondage_'+ eventID).style.display = 'none';

          // On dessine chaque barre l'une après l'autre
          if (responseObject.listVoteValues.length == 0)
           {
            // "Désolé, il n'y a pas encore eu de réponse dans ce sondage !"
            $('zone_results_sondage').innerHTML = '<center><br><br><br>'+ bind.Base.Language.Translate(3510690) +'</center>';
           }
          else
           {
            var html = '<br><br><table border="0" cellpadding="10">';

            for (var i=0; i<responseObject.listVoteValues.length; i++)
             {
              var repID = responseObject.listVoteValues[i].value;
              html += '<tr>';
              // L'intitulé de la réponse
              html += '<td valign="right">';
              html += responseObject.listVoteValues[i].title;
              html += '</td>';
              // La barre de couleur (de largeur proportionnelle à nbre de votes)
              html += '<td>';
              html += '<div id="sondage_bar_'+ repID +'"></div>';
              html += '</td>';
              // Y vote(s) | XX%
              html += '<td>';
              html += bind.Base.Language.TranslateFormatted(2500028, [responseObject.listVoteValues[i].nbResults]) + ' <font color="#888888"> &nbsp;|&nbsp; '+ Math.round(responseObject.listVoteValues[i].nbResults * 100 / responseObject.nbVoteMembers) + '%</font>';
              html += '</td>';
              html += '</tr>';
             }

            html += '</table>';
            $('zone_results_sondage').innerHTML = html;
           }
          // On montre la lightbox ("Voir les résultats")
          TB_show(bind.Base.Language.Translate(2500032)+' ('+ responseObject.nbVoteMembers +')', '#TB_inline?height=375&width=820&inlineId=zone_results_sondage', '', '../images/trans.gif');
          TB_init();

          // Effet d'étirement sur chaque barre
          for (var i=0; i<responseObject.listVoteValues.length; i++)
           {
            var repID = responseObject.listVoteValues[i].value;
            var barre = $('sondage_bar_'+ repID);
            barre.className = 'poll_bar'+ (repID % 10);
            barre.style.width = '0px';
            barre.style.overflow = 'hidden';
            barre.style.height = '30px';
            barre.style.width = '0px';
            var largeurBarre = responseObject.listVoteValues[i].nbResults * 500 / responseObject.nbVoteMembers;
            var pollEffect = new Fx.Tween(barre, {duration: 1000, transition: Fx.Transitions.Quad.easeOut});
            pollEffect.start('width', 3, largeurBarre);
           }
         }
      }
    });
    request.send();
   },


  // Jean 19/10/2010 : ajout contextuel d'intervenant
  addSpeaker: function()
   {
     $('speakers').style.display = 'block';
     if ($('btn_export_date')) $('btn_export_date').style.display = 'none';
     setTimeout("$('speakers_search').focus();",200);
   },
  addSpeakerConfirm: function(eventID, webtvID)
   {
    var bind = this;
    this.currentCoordY = getTop($('speakers'));

    $('speakers').style.display = 'none';
    if ($('btn_export_date')) $('btn_export_date').style.display = 'inline';

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'maj_speakers',
        'event_id' : eventID,
        'webtv_id' : webtvID,
        'event_intervenants' : $('event_speakers').value,
        'event_moderator' : $('select_animateur').value
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          // Jean 04/04/2011 - Affichage contextuel de la liste des webtvs sur lesquelles s'est propagée telle modif contextuelle
          if (responseObject.maj_webtv_urls)
            bind.showMajWebtvUrls(responseObject.maj_webtv_urls, bind.currentCoordY);

          //alert(responseObject.affected_rows);

          // On reconstitue la liste des intervenants
          majPeopleList('speakers');

          // Mise à jour animateur / chef de projet
          if ($('select_animateur').selectedIndex > 0)
           {
            $('TR_animateur').style.display = '';
            $('TD_animateur').innerHTML = $('select_animateur').options[$('select_animateur').selectedIndex].text;
           }
          else
            $('TR_animateur').style.display = 'none';
         }
      }
    });
    request.send();
   },

  // Jean 25/10/2010 : ajout contextuel de personnes (organisateurs, rédacteurs...)
  addPeople: function(eventID, peopleType, objRef)
   {
     $(peopleType).style.display = 'block';
     $(peopleType).style.zIndex = 3000;
     if (objRef)
      {
       $(peopleType).style.left = getLeft(objRef) - 80;
       $(peopleType).style.top = getTop(objRef) + 20;
      }
     $(peopleType +'_search').focus();
   },
  addPeopleConfirm: function(eventID, peopleType, webtvID, noPeopleListMajAfter)
   {
    var bind = this;
    this.currentCoordY = getTop($(peopleType));

    $(peopleType).style.display = 'none';

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'maj_'+ peopleType,
        'event_id' : eventID,
        'webtv_id' : webtvID,
        'people_id_list' : $('event_'+ peopleType).value
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
          alert(responseObject.error);

        // On reconstitue la liste des personnes
        else
         {
          // Jean 04/04/2011 - Affichage contextuel de la liste des webtvs sur lesquelles s'est propagée telle modif contextuelle
          if (responseObject.maj_webtv_urls)
            bind.showMajWebtvUrls(responseObject.maj_webtv_urls, bind.currentCoordY);

          if (!noPeopleListMajAfter)
            majPeopleList(peopleType);

          // On recharge l'eventuelle liste complète des prospects
          if (peopleType == 'prospects' && bind.currentConfirmUserIDforProspectList)
            bind.getProspects(eventID, bind.currentConfirmUserIDforProspectList);
         }
      }
    });
    request.send();
   },

  // Jean 29/10/2010 : modif contextuelle du titre + sous-titre
  editTitles: function(eventID, webtvID, objLink)
   {
    this.currentEditTitlesEventID = eventID;
    this.currentEditTitlesWebtvID = webtvID;

    var spanTitleValue = $('event_title_'+ eventID +'_'+ webtvID);
    if (spanTitleValue)
      $('event_title').value = spanTitleValue.innerHTML.replace(/&nbsp;/, ' ');

    var spanSubTitleValue = $('event_sub_title_'+ eventID +'_'+ webtvID);
    if (spanSubTitleValue)
      $('event_sub_title').value = spanSubTitleValue.innerHTML.replace(/&nbsp;/, ' ');

    var zoneEdit = $('zone_edit_titles');
    // La touche "Entrée" équivaut à valider les données de ce mini-formulaire / Touche "Echap" pour le fermer
    addShortCutsToCtxForm(zoneEdit, 'SocialEngine.Event.editTitlesConfirm();', true);

    if (objLink)
     {
      this.currentCoordY = getTop(objLink);
      zoneEdit.style.left = (getLeft(objLink) - (zoneEdit.offsetWidth / 2)) +'px';
      zoneEdit.style.top = (getTop(objLink) - zoneEdit.offsetHeight - 20) +'px';
     }
    zoneEdit.style.display = 'block';

    zoneEdit.style.position = 'absolute';
    zoneEdit.style.zIndex = 2000;
    var zoneTitles = $('zone_title');
    if (zoneTitles)
     {
      zoneEdit.style.left = (getLeft($('zone_title')) - 20) +'px';
      zoneEdit.style.top = getTop($('zone_title')) +'px';
     }
    else
     {
      zoneEdit.style.left = (getLeft(objLink) - (zoneEdit.offsetWidth / 2)) +'px';
      zoneEdit.style.top = (getTop(objLink) - zoneEdit.offsetHeight - 20) +'px';
     }

    $('event_title').focus();
   },
  editTitlesConfirm: function()
   {
    eventID = this.currentEditTitlesEventID;
    webtvID = this.currentEditTitlesWebtvID;
    this.currentCoordY = getTop($('zone_edit_titles'));

    var bind = this;

    $('loading_titles').style.display = 'block';

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'edit_titles',
        'event_id' : eventID,
        'webtv_id' : webtvID,
        'event_title' : $('event_title').value,
        'event_sub_title' : $('event_sub_title').value
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          // Jean 04/04/2011 - Affichage contextuel de la liste des webtvs sur lesquelles s'est propagée telle modif contextuelle
          if (responseObject.maj_webtv_urls)
            bind.showMajWebtvUrls(responseObject.maj_webtv_urls, bind.currentCoordY);

          $('loading_titles').style.display = 'none';
          $('zone_edit_titles').style.display = 'none';

          if ($('font_event_title'))
            $('font_event_title').innerHTML = $('event_title').value;

          var spanTitleValue = $('event_title_'+ eventID +'_'+ webtvID);
          if (spanTitleValue)
            spanTitleValue.innerHTML = $('event_title').value;

          if ($('div_sub_title'))
            $('div_sub_title').style.display = $('event_sub_title').value != '' ? '' : 'none';

          var spanSubTitleValue = $('event_sub_title_'+ eventID +'_'+ webtvID);
          if (spanSubTitleValue)
            spanSubTitleValue.innerHTML = $('event_sub_title').value;

          if ($('event_sub_title'))
            $('event_sub_title').innerHTML = $('event_sub_title').value;

          if ($('div_sub_title'))
            $('div_sub_title').innerHTML = $('event_sub_title').value;

          if ($('div_sub_title_2'))
            $('div_sub_title_2').innerHTML = $('event_sub_title').value;

          if ($('zone_title'))
            $('zone_title').style.display = '';
         }
      }
    });
    request.send();
   },


  // Jean 02/11/2010 : ajouter ou retirer des alias d'adresses de task-mail
  editTaskMailAliases: function(eventID, webtvID, linkEditTaskMails)
   {
    this.currentEditTaskMailsEventID = eventID;
    this.currentEditTaskMailsWebtvID = webtvID;

    var zoneEdit = $('zone_edit_taskmail_aliases');

    var spanTaskMailsValue = $('span_taskmail_adresses_'+ eventID +'_'+ webtvID +'_VALUE');
    if (spanTaskMailsValue)
      $('textarea_taskmail_aliases').value = spanTaskMailsValue.innerHTML.replace(/&nbsp;/, ' ');

    // Gestion de la touche "Echap" pour fermer ce mini-formulaire
    addShortCutsToCtxForm(zoneEdit, 'SocialEngine.Event.editTitlesConfirm();');

    if (linkEditTaskMails)
     {
      zoneEdit.style.left = (getLeft(linkEditTaskMails) - (zoneEdit.offsetWidth / 2)) +'px';
      zoneEdit.style.top = (getTop(linkEditTaskMails) - zoneEdit.offsetHeight - 20) +'px';
     }
    zoneEdit.style.display = 'block';

    $('textarea_taskmail_aliases').focus();
   },

  editTaskMailAliasesConfirm: function()
   {
    eventID = this.currentEditTaskMailsEventID;
    webtvID = this.currentEditTaskMailsWebtvID;

    var bind = this;

    $('loading_taskmail_aliases').style.display = 'block';

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'edit_taskmail_aliases',
        'event_id' : eventID,
        'webtv_id' : webtvID,
        'taskmail_aliases' : $('textarea_taskmail_aliases').value
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          // On reconstitue la liste des aliases
          var html = '';
          for (var i=0; i<responseObject.new_taskmail_aliases.length; i++)
           {
            if (html != '') html += ',<br>';
            html += '<a href="mailto:'+ responseObject.new_taskmail_aliases[i] +'">'+ responseObject.new_taskmail_aliases[i] +'</a>';
           }

          var spanTaskMailsDisplay;
          if ($('span_taskmail_adresses_'+ eventID +'_'+ webtvID))
           {
            spanTaskMailsDisplay = $('span_taskmail_adresses_'+ eventID +'_'+ webtvID);
            spanTaskMailsDisplay.innerHTML = html;
           }

          var spanTaskMailsValue = $('span_taskmail_adresses_'+ eventID +'_'+ webtvID +'_VALUE');
          if (spanTaskMailsValue)
            spanTaskMailsValue.innerHTML = responseObject.new_manual_taskmail_aliases.join('\r\n');

          var imgEditTaskMails;
          if ($('img_add_taskmail_alias')) imgEditTaskMails = $('img_add_taskmail_alias');
          else if ($('img_add_taskmail_alias_'+ eventID +'_'+ webtvID)) imgEditTaskMails = $('img_add_taskmail_alias_'+ eventID +'_'+ webtvID);

          if (imgEditTaskMails)
            imgEditTaskMails.src = './images/icons/'+ (responseObject.new_taskmail_aliases.length == 1 ? 'plus16.gif' : 'event_edit16.gif');

          if (responseObject.liste_doublons.length > 0)
           {
            // "Attention, l'alias "%1$s" est déjà utilisé dans le projet n°%2$s !"
            for (var i=0; i<responseObject.liste_doublons.length; i++)
              alert(bind.Base.Language.TranslateFormatted(3510775,[responseObject.liste_doublons[i].alias_value, responseObject.liste_doublons[i].alias_event_id]));
            $('textarea_taskmail_aliases').focus();
           }
          else
            $('zone_edit_taskmail_aliases').style.display = 'none';

          $('loading_taskmail_aliases').style.display = 'none';
         }
      }
    });
    request.send();
   },

  // Jean 06/01/2011 : ajouter ou retirer des tags
  editTags: function(eventID, webtvID, tagFieldName)
   {
    if (!tagFieldName)
     tagFieldName = 'event_tags';

    this.currentEditTagsEventID = eventID;
    this.currentEditTagsWebtvID = webtvID;
    this.currentEditTagsFieldName = tagFieldName;

    var spanTagsValue = $('span_'+ tagFieldName +'_'+ eventID +'_'+ webtvID +'_VALUE');
    if (!spanTagsValue)
      spanTagsValue = $('span_'+ tagFieldName +'_VALUE');

    var bind = this;

    if (spanTagsValue)
     {
      $('zone_tags').innerHTML = '<input type="text" class="text" id="textarea_tags" style="width: 310px;" value="" />';

      // Jean 09/06/2011 : affichage des tags sous forme d'un objet auto-suggest multiple
      //$('textarea_tags').value = spanTagsValue.innerHTML.replace(/&nbsp;/, ' ');
      var initTags = new Array();
      var tabTags = spanTagsValue.innerHTML.replace(/&nbsp;/, ' ').split(',');
      for (var i=0; i<tabTags.length; i++)
        initTags[initTags.length] = {'value': tabTags[i]};
      J(function() {
        var textarea = J($('textarea_tags'));
        textarea.autoSuggest('tag_ajax.php',
          {
           minChars: 2,
           startText: SocialEngine.Language.Translate(3511397),   // "Commencer à saisir un tag"
           emptyText: SocialEngine.Language.Translate(3511395),   // "Aucun résultat"
           limitText: SocialEngine.Language.Translate(3511396),   // "Aucune sélection supplémentaire n'est autorisée"
           scoresText: SocialEngine.Language.Translate(3511393),  // "occurrence(s)"
           addItText:  SocialEngine.Language.Translate(3511394),  // "ajouter quand-même ce tag"
           retrieveLimit: 25,  // MySQL "LIMIT"
           //selectionLimit: 1,
           matchCase: false,
           asHtmlID: tagFieldName,
           preFill: initTags
          });
      });
     }

    var zoneEdit = $('zone_edit_tags');

    var linkAddTags = $('link_add_'+ tagFieldName);
    if (!linkAddTags) linkAddTags = $('link_add_'+ tagFieldName +'_'+ eventID +'_'+ webtvID);
    if (linkAddTags)
      linkAddTags.style.display = 'block';

    if (linkAddTags)
     {
      zoneEdit.style.left = (getLeft(linkAddTags) - (zoneEdit.offsetWidth / 2)) +'px';
      zoneEdit.style.top = (getTop(linkAddTags) - zoneEdit.offsetHeight - 32) +'px';
     }
    zoneEdit.style.display = 'block';

    // Gestion de la touche "Echap" pour fermer ce mini-formulaire
    addShortCutsToCtxForm(zoneEdit, 'SocialEngine.Event.editTitlesConfirm();');

    //textarea_autogrow('textarea_tags');

    setTimeout("$('"+ tagFieldName +"').focus();",100); // textarea_tags
   },

  editTagsConfirm: function()
   {
    var bind = this;

    eventID = this.currentEditTagsEventID;
    webtvID = this.currentEditTagsWebtvID;
    tagFieldName = this.currentEditTagsFieldName;

    $('loading_tags').style.display = 'block';

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'edit_tags',
        'event_id' : eventID,
        'webtv_id' : webtvID,
        'tag_field_name' : tagFieldName,
        'tags' : $('as-values-'+ tagFieldName).value // textarea_tags
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          // Jean 04/04/2011 - Affichage contextuel de la liste des webtvs sur lesquelles s'est propagée telle modif contextuelle
          if (responseObject.maj_webtv_urls)
            bind.showMajWebtvUrls(responseObject.maj_webtv_urls, getTop($('zone_edit_tags')));

          // On reconstitue la liste des tags
          var html = '';
          for (var i=0; i<responseObject.new_tags.length; i++)
           {
            if (html != '') html += ', ';
            html += '<a href="javascript:rechercheExacte(\''+ tagFieldName +'\', \''+ responseObject.new_tags[i].replace(/(\'|&#0?39;)/g, "\\'") +'\', true);">'+ responseObject.new_tags[i] +'</a>';
           }

          var spanTagsDisplay;
          if ($('span_'+ tagFieldName)) spanTagsDisplay = $('span_'+ tagFieldName);
          else if ($('span_'+ tagFieldName +'_'+ eventID +'_'+ webtvID)) spanTagsDisplay = $('span_'+ tagFieldName +'_'+ eventID +'_'+ webtvID);
          if (spanTagsDisplay)
            spanTagsDisplay.innerHTML = html;

          var spanTagsValue = $('span_'+ tagFieldName +'_'+ eventID +'_'+ webtvID +'_VALUE');
          if (!spanTagsValue)
            spanTagsValue = $('span_'+ tagFieldName +'_VALUE');
          if (spanTagsValue)
            spanTagsValue.innerHTML = responseObject.new_tags.join(',');

          var imgEditTags;
          if ($('img_edit_'+ tagFieldName)) imgEditTags = $('img_edit_'+ tagFieldName);
          else if ($('img_edit_'+ tagFieldName +'_'+ eventID +'_'+ webtvID)) imgEditTags = $('img_edit_'+ tagFieldName +'_'+ eventID +'_'+ webtvID);
          if (imgEditTags)
            imgEditTags.src = './images/icons/'+ (responseObject.new_tags.length == 1 ? 'plus16.gif' : 'event_edit16.gif');

          $('zone_edit_tags').style.display = 'none';
          $('loading_tags').style.display = 'none';
         }
      }
    });
    request.send();
   },


  // Jean 17/12/2010: relance d'un invité
  guestRevive: function(userID, eventID, webtvID)
  {
    var imgLoading = $('img_loading_reviveguest_'+ userID +'_'+ eventID +'_'+ webtvID);
    if (imgLoading)
      imgLoading.style.display = 'inline';

    // Ajax
    var bind = this;
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'guest_revive',
        'event_id' : (eventID || this.eventInfo.event_id),
        'webtv_id' : webtvID,
        'user_id' : userID
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
        {
          if (responseObject.error) alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
          else alert(bind.Base.Language.Translate(3000153));
        }
        else
        {
          // Si la relance a vraiment été faite
          if (responseObject.misc != 'too_early')
           {
            if (imgLoading)
              imgLoading.style.display = 'none';

            // alerte : "Et hop, un mail de relance vient de lui être envoyé !"
            alert(bind.Base.Language.Translate(3510849));
            // On fait disparaitre le lien ayant conduit à cette action
            if ($('reviveguest_'+ userID))
             $('reviveguest_'+ userID).style.display = 'none';
           }
        }
      }
    });

    request.send();
  },


  // Jean 11/01/2011 : édition Ajax générique d'un champ de la table se_events
  majTextField: function(fromButton, eventID, fieldName, isMultiLine, withAutoComplete, webtvID, descLangID)
   {
    var zone_maj = $(fieldName);
    if (!zone_maj)
      zone_maj = $(fieldName +'_BIS');
    if (!zone_maj)
      zone_maj = $(fieldName +'_'+ eventID + (webtvID ? '_'+ webtvID : ''));

    // On va chercher la valeur initiale du champ
    var fieldValueSpan = $(fieldName +'_VALUE');
    if (!fieldValueSpan)
      fieldValueSpan = $(fieldName +'_'+ eventID + (webtvID ? '_'+ webtvID : '') +'_VALUE');

    if (fieldValueSpan)
      fieldValue = fieldValueSpan.innerHTML;
    else
      fieldValue = trim(zone_maj.innerHTML);
    fieldValue = fieldValue.replace(/<br>/gi, '\n').replace(/^(&nbsp;)+/gi, '');

    var editWidth = (fieldName == 'event_upcoming_spitch' ? 600 : 310);

    // On construit le formulaire à la volée
    var html = '';

    // Jean 20/07/2011 : s'il faut intituler la zone de saisie
    if (descLangID)
      html += this.Base.Language.Translate(descLangID) +'<br>';

    if (isMultiLine)
      html += '<textarea id="textfield_edit_'+ fieldName +'" style="width: '+ editWidth +'px; height: 40px; display: block;">'+ fieldValue +'</textarea>';
    else
      html += '<input type="text" class="text" id="textfield_edit_'+ fieldName +'" style="width: '+ editWidth +'px; display: block;" value="'+ fieldValue.replace(/\"/g, '&#34;') +'" />';

    // "Annuler"
    html += '<input type="button" class="button small_cancel_button" value="'+ this.Base.Language.Translate(39) +'"';
    html +=       ' onclick="$(\'generic_zone_edit\').style.display = \'none\'; if ($(\'zone_setEventUpcomingSpitchNoSynch\')) $(\'zone_setEventUpcomingSpitchNoSynch\').style.display = \'none\';"';
    html +=       ' style="float: right; margin: 3px 0px 3px 0px; padding-top: 1px;" />';

    // "Valider"
    var instrSubmit = 'SocialEngine.Event.majTextFieldConfirm('+ eventID +', \''+ fieldName +'\', $(\'textfield_edit_'+ fieldName +'\').value'+ (webtvID ? ', '+ webtvID : '') +');';
    html += ' <input type="button" class="button small_submit_button" value="'+ this.Base.Language.Translate(3000688) +'"';
    html +=        ' onclick="'+ instrSubmit +'"';
    html +=        ' style="float: right; margin: 3px 0px 3px 0px; padding-top: 1px;" />';

    html += '<img id="loading_'+ fieldName +'" src="images/images/icons/language_tool_loader.gif" align="middle" style="display: none; float: right; margin: 4px 20px 0px 0px; padding-top: 1px;" align="absmiddle" />';

    var zoneEdit = $('generic_zone_edit');
    zoneEdit.innerHTML = html;
    zoneEdit.style.display = 'block';

    zoneEdit.style.width = (editWidth + 20) +'px';
    zoneEdit.style.left = Math.max(0, getLeft(fromButton) - (zoneEdit.offsetWidth / 2)) +'px';
    zoneEdit.style.top = Math.max(0, getTop(fromButton) - zoneEdit.offsetHeight - 32) +'px';

    // Jean 23/06/2011
    if ($('zone_setEventUpcomingSpitchNoSynch'))
     {
      if (fieldName == 'event_upcoming_spitch')
       {
        $('textfield_edit_'+ fieldName).style.marginTop = '25px';
        $('zone_setEventUpcomingSpitchNoSynch').style.display = 'block';
        $('zone_setEventUpcomingSpitchNoSynch').style.top = getTop(zoneEdit) + 5;
        $('zone_setEventUpcomingSpitchNoSynch').style.left = getLeft(zoneEdit) + 10;
       }
      else
        $('zone_setEventUpcomingSpitchNoSynch').style.display = 'none';
     }

    // La touche "Entrée", en mode monoligne, équivaut à valider les données de ce mini-formulaire / Touche "Echap" pour le fermer
    addShortCutsToCtxForm(zoneEdit, instrSubmit, !isMultiLine);

    // Zone de texte multiligne ?
    if (isMultiLine)
      textarea_autogrow('textfield_edit_'+ fieldName);

    // Suggérer automatiquement les valeurs en cours de saisies ?
    if (withAutoComplete)
     {
      var options = {
        script:"event_ajax.php?task=search_"+ fieldName +'&limit=20&webtv_id='+ webtvID +'&',
        varname:"input",
        json:true,
        shownoresults:false,
        multisuggest:false,
        timeout:2500
      };
      new bsn.AutoSuggest('textfield_edit_'+ fieldName, options);
     }

    $('textfield_edit_'+ fieldName).focus();
   },
  majTextFieldConfirm: function(eventID, fieldName, fieldValue, webtvID)
   {
    var bind = this;

    $('loading_'+ fieldName).style.display = 'inline';

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'edit_text_field',
        'event_id' : eventID,
        'webtv_id' : webtvID,
        'event_fieldName' : fieldName,
        'event_fieldValue' : fieldValue
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          var zone_maj = $(fieldName);
          if (!zone_maj)
            zone_maj = $(fieldName +'_BIS');
          if (!zone_maj)
            zone_maj = $(fieldName +'_'+ eventID + (webtvID ? '_'+ webtvID : ''));

          if (zone_maj)
            zone_maj.innerHTML = responseObject.new_linked_value;
          // Jean 18/04/2011 - c'est peut-être une liste déroulante ?
          else
           {
            zone_maj = $(fieldName +'_SELECT');
            if (zone_maj)
              zone_maj.value = responseObject.new_linked_value;
           }

          // Jean 04/04/2011 - Affichage contextuel de la liste des webtvs sur lesquelles s'est propagée telle modif contextuelle
          if (responseObject.maj_webtv_urls)
            bind.showMajWebtvUrls(responseObject.maj_webtv_urls, getTop(zone_maj) + 30);

          if ($(fieldName +'_VALUE'))
            $(fieldName +'_VALUE').innerHTML = responseObject.new_value;
          if ($(fieldName +'_BIS'))
            $(fieldName +'_BIS').innerHTML = responseObject.new_value;

          $('loading_'+ fieldName).style.display = 'none';
          if ($('generic_zone_edit'))
            $('generic_zone_edit').style.display = 'none';
          if ($('zone_setEventUpcomingSpitchNoSynch'))
            $('zone_setEventUpcomingSpitchNoSynch').style.display = 'none';

          // si c'est une mise à jour d'onglet, alors on règle la hauteur de l'onglet selon qu'il y a ou pas des sauts de ligne
          if (fieldName.match(/tab_name$/))
           {
            var br = responseObject.new_value.match(/<br ?>?/i);
            $(fieldName).parentNode.style.lineHeight = br ? '15px' : null;
            $(fieldName).parentNode.style.height = br ? '31px' : null;
            $(fieldName).parentNode.style.paddingTop = br ? '1px' : null;
            $(fieldName).parentNode.style.paddingBottom = br ? '0px' : null;
            $(fieldName).innerHTML = responseObject.new_linked_value.replace(/ /g, '&nbsp;');
           }
         }
      }
    });
    request.send();
   },


  // Jean 11/01/2011 : édition Ajax générique d'un champ de la table <process_actiontypes>
  majProcessDesc: function(eventID, actionTypeID, webtvID, fieldName, isWithDescLangID, fromCheckbox)
   {
    var zone_maj = $(fieldName);
    if (!zone_maj)
      zone_maj = $(fieldName +'_'+ eventID +'_'+ actionTypeID + (webtvID ? '_'+ webtvID : ''));

    // On va chercher la valeur initiale du champ
    var fieldValueSpan = $(fieldName +'_'+ eventID +'_'+ actionTypeID + (webtvID ? '_'+ webtvID : '') +'_VALUE');
    var fieldValue;
    if (!fieldValueSpan)
      fieldValueSpan = $(fieldName +'_'+ eventID + (webtvID ? '_'+ webtvID : '') +'_VALUE');

    if (fieldValueSpan)
      fieldValue = fieldValueSpan.innerHTML;
    else if (zone_maj)
      fieldValue = trim(zone_maj.innerHTML);
    if (fieldValue)
      fieldValue = fieldValue.replace(/<br>/gi, '\n');
    else
      fieldValue = '';

    // On construit le formulaire à la volée
    var html = '';
    if (isWithDescLangID)
      html = this.Base.Language.Translate(isWithDescLangID) +'<br>';
    html += '<textarea id="textfield_edit_'+ fieldName +'" style="width: 310px; height: 40px; display: block;">'+ fieldValue +'</textarea>';

    // "Annuler"
    html += '<input type="button" id="btn_cancel_'+ fieldName +'" class="button small_cancel_button" value="'+ this.Base.Language.Translate(39) +'"';
    html +=       ' onclick="$(\'generic_zone_edit\').style.display = \'none\';"';
    html +=       ' style="float: right; margin: 3px 0px 3px 0px; padding-top: 1px;" />';

    // "Valider"
    var instrSubmit = 'SocialEngine.Event.majProcessDescConfirm('+ eventID +', '+ actionTypeID +', \''+ fieldName +'\', $(\'textfield_edit_'+ fieldName +'\').value'+ (webtvID ? ', '+ webtvID : '') +');';
    html += ' <input type="button" class="button small_submit_button" value="'+ this.Base.Language.Translate(3000688) +'"';
    html +=        ' onclick="'+ instrSubmit +'"';
    html +=        ' style="float: right; margin: 3px 0px 3px 0px; padding-top: 1px;" />';

    html += '<img id="loading_'+ fieldName +'" src="images/images/icons/language_tool_loader.gif" align="middle" style="display: none; float: right; margin: 4px 20px 0px 0px; padding-top: 1px;" align="absmiddle" />';

    var zoneEdit = $('generic_zone_edit');
    zoneEdit.innerHTML = html;
    zoneEdit.style.display = 'block';

    zoneEdit.style.left = (getLeft(fromCheckbox) - (zoneEdit.offsetWidth / 2)) +'px';
    zoneEdit.style.top = (getTop(fromCheckbox) - zoneEdit.offsetHeight - 32) +'px';

    this.currentCoordY = getTop(zoneEdit);

    // La touche "Entrée", en mode monoligne, équivaut à valider les données de ce mini-formulaire / Touche "Echap" pour le fermer
    addShortCutsToCtxForm(zoneEdit, instrSubmit);

    textarea_autogrow('textfield_edit_'+ fieldName);

    $('btn_cancel_'+ fieldName).focus();
    setTimeout('$(\'textfield_edit_'+ fieldName +'\').focus();', 0);
   },
  majProcessDescConfirm: function(eventID, actionTypeID, fieldName, fieldValue, webtvID)
   {
    var bind = this;

    $('loading_'+ fieldName).style.display = 'inline';

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'edit_process_field',
        'event_id' : eventID,
        'action_type_id' : actionTypeID,
        'webtv_id' : webtvID,
        'process_field_name' : fieldName,
        'process_field_value' : fieldValue
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          var zone_maj = $(fieldName);
          if (!zone_maj)
            zone_maj = $(fieldName +'_'+ eventID +'_'+ actionTypeID + (webtvID ? '_'+ webtvID : ''));
          if (zone_maj)
            zone_maj.innerHTML = responseObject.new_linked_value;

          // Jean 04/04/2011 - Affichage contextuel de la liste des webtvs sur lesquelles s'est propagée telle modif contextuelle
          if (responseObject.maj_webtv_urls)
            bind.showMajWebtvUrls(responseObject.maj_webtv_urls, bind.currentCoordY - 100);

          var fieldValueSpan = $(fieldName +'_'+ eventID +'_'+ actionTypeID + (webtvID ? '_'+ webtvID : '') +'_VALUE');
          if (fieldValueSpan)
           {
            fieldValueSpan.innerHTML = responseObject.new_value;
            fieldValueSpan.style.textDecoration = 'none';
            if (fieldValueSpan.parentNode.tagName == 'DIV')
              fieldValueSpan.parentNode.style.display = trim(responseObject.new_value) != '' ? 'block' : 'none';
           }
          $('loading_'+ fieldName).style.display = 'none';
          $('generic_zone_edit').style.display = 'none';
         }
      }
    });
    request.send();
   },


  // Jean 06/02/2011 : pour tracer une action de workfow relative au process de livraison d'une vidéo (réf. fichier 'dashboard.tpl')
  processConfirm: function(eventID, actionTypeId, isOn, isConfirm, actionDesc, totalProcessActionsTypes, nbCurrentActions, webtvID, isShootingTypeId, isWithDescLangID)
   {
    // Jean 25/01/2010 : si pas loggué...
    if (!isLogged)
     {
      go_login();
      return;
     }
    if (!eventID) return;

    // Ligne sur laquelle on a cliqué
    var objTR = $('TR_'+ eventID +'_'+ webtvID +'_'+ actionTypeId);

    // Jean 03/03/2011 : si un champ de description doit être rempli au passage
    if (isWithDescLangID && !(isConfirm && isOn))
      this.majProcessDesc(eventID, actionTypeId, webtvID, 'action_'+ (isOn ? 'on' : 'off') + (isConfirm ? '_confirm' : '') +'_desc', isWithDescLangID, objTR);

    if ($('img_loading_process_confirm_'+ eventID +'_'+ webtvID))
      $('img_loading_process_confirm_'+ eventID +'_'+ webtvID).style.visibility = 'visible';

    // S'il faut montrer ou cacher certaines lignes
    if (isShootingTypeId && objTR)
     {
      objTR.parentNode.parentNode.parentNode.parentNode.getElements('tr').each(function(tr) {
        var tabMatch = tr.id.match(/^TR_[0-9]+_[0-9]+_([0-9]+)$/);
        if (tabMatch)
         {
          var curActionTypeId = tabMatch[1];
          tr.style.display = (curActionTypeId > isShootingTypeId ? (isOn ? '' : 'none') : '');
         }
      });
      isShootingTypeId
     }

    // Mise à jour de la barre de progression
    if (totalProcessActionsTypes && totalProcessActionsTypes > 0)
      this.majProgressBar(eventID, webtvID, isOn, isConfirm, totalProcessActionsTypes, nbCurrentActions);

    // Ajax
    var bind = this;
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'process_action',
        'event_id' : eventID,
        'webtv_id' : webtvID,
        'action_type_id' : actionTypeId,
        'is_on' : isOn ? '1' : '0',
        'is_confirm' : isConfirm ? '1' : '0',
        'action_desc' : actionDesc
      },
      'onComplete':function(responseObject)
      {
        if ($('img_loading_process_confirm_'+ eventID +'_'+ webtvID))
          $('img_loading_process_confirm_'+ eventID +'_'+ webtvID).style.visibility = 'hidden';

        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          if (responseObject)
            alert(responseObject.result_txt ? responseObject.result_txt : bind.Base.Language.Translate(3000153));
          else
            alert('Oups, le dialogue AJAX avec le serveur vient d\'être interrompu !');
         }
        else
         {
          // Jean 04/04/2011 - Affichage contextuel de la liste des webtvs sur lesquelles s'est propagée telle modif contextuelle
          if (responseObject.maj_webtv_urls)
            bind.showMajWebtvUrls(responseObject.maj_webtv_urls, getTop(objTR) - 100);

          if ($('tasklist_state_'+ eventID +'_'+ webtvID +'_'+ actionTypeId))
            $('tasklist_state_'+ eventID +'_'+ webtvID +'_'+ actionTypeId).style.display = (isOnOff == 'off' ? 'none' : '');

          var zoneSuccess;

          if ($('seEventProfileBookmarkSuccess_'+ eventID))
            zoneSuccess = $('seEventProfileBookmarkSuccess_'+ eventID);

          else if ($('seEventProfileBookmarkSuccess_'+ eventID +'_'+ webtvID))
            zoneSuccess = $('seEventProfileBookmarkSuccess_'+ eventID +'_'+ webtvID);

          if( zoneSuccess )
           {
            zoneSuccess.style.display = 'block';
            zoneSuccess.slide('hide').slide('in');
            (function(){ zoneSuccess.slide('show').slide('out'); }).delay(2000);
           }

          // Si on doit "barrer" l'action (quand on vient de la cocher)
          if ($('label_myaction_'+ eventID +'_'+ webtvID +'_'+ actionTypeId))
           {
            // Si c'est une confirmation de la part d'un admin
            if (isConfirm && isOn)
              $('label_myaction_'+ eventID +'_'+ webtvID +'_'+ actionTypeId).className = 'action_confirmed';

            // Si c'est une contestation
            else if (isConfirm && !isOn)
              $('label_myaction_'+ eventID +'_'+ webtvID +'_'+ actionTypeId).className = 'action_contested';

            // Si c'est une considération en attente de validation
            else if (isOn)
              $('label_myaction_'+ eventID +'_'+ webtvID +'_'+ actionTypeId).className = 'action_waited';

            else
               $('label_myaction_'+ eventID +'_'+ webtvID +'_'+ actionTypeId).className = '';
           }

          // On permet d'ajouter un commentaire
          var fieldName = 'action_'+ (isOn ? 'on' : 'off') + (isConfirm ? '_confirm' : '') +'_desc';
          var actionDescSpan = $(fieldName +'_'+ eventID +'_'+ actionTypeId + (webtvID ? '_'+ webtvID : '') +'_VALUE');
          if (actionDescSpan)
           {
            actionDescSpan.style.textDecoration = 'none';
            actionDescSpan.parentNode.style.display = 'block';
            actionDescSpan.previousSibling.style.display = '';
           }

         }
      }
    });

    request.send();

    // Reset
    this.currentConfirmID = 0;
   },


  // Structure mémorisant pour chaque event le nombre d'actions en cours de type "demande de validation"
  dicoNbProcessWaitedActions: new Array(),

  // Structure mémorisant pour chaque event le nombre d'actions en cours de type "validation"
  dicoNbProcessConfirmedActions: new Array(),

  majProgressBar: function(eventID, webtvID, isOn, isConfirm, totalProcessActionsTypes, nbCurrentActions)
   {
    var progressBarWaited = $('progress_waited_'+ eventID +'_'+ webtvID);
    var progressBarConfirmed = $('progress_confirmed_'+ eventID +'_'+ webtvID);
    var progressBar = isConfirm ? progressBarConfirmed : progressBarWaited;
    if (!progressBar)
      return;

    var dicoNbCurrentProcessActions = isConfirm ? this.dicoNbProcessWaitedActions : this.dicoNbProcessConfirmedActions;

    if (dicoNbCurrentProcessActions[eventID] && dicoNbCurrentProcessActions[eventID][webtvID])
      nbCurrentActions = dicoNbCurrentProcessActions[eventID][webtvID];
    else
     {
      if (!dicoNbCurrentProcessActions[eventID])
        dicoNbCurrentProcessActions[eventID] = new Array();
      dicoNbCurrentProcessActions[eventID][webtvID] = nbCurrentActions;
     }
    if (!totalProcessActionsTypes || totalProcessActionsTypes <= 0)
      return;

    //var nbActions = Math.round(totalProcessActionsTypes / (progressBar.offsetWidth / progressBar.firstChild.offsetWidth));
    dicoNbCurrentProcessActions[eventID][webtvID] += isOn ? +1 : -1;
    var newWidth = Math.round(progressBar.offsetWidth * (dicoNbCurrentProcessActions[eventID][webtvID] / totalProcessActionsTypes));
    progressBar.firstChild.set('morph', { duration: 1000 }).morph({width: newWidth });
    // MAJ de l'infobulle montrant le nombre d'actions dans cette catégorie/type/event
    //this.majProgressBarTitle(eventID, webtvID, isConfirm, totalProcessActionsTypes, dnewWidth);
   },


  // MAJ du nombre d'actions dans cette catégorie/type/event
  majProgressBarTitle: function(eventID, webtvID, isConfirm, totalProcessActionsTypes, newWidth)
   {
    this.eventID_delay = eventID;
    this.webtvID_delay = webtvID;
    this.isConfirm_delay = isConfirm;
    this.totalProcessActionsTypes_delay = totalProcessActionsTypes;
    this.newWidth_delay = newWidth;

    //setTimeout("SocialEngine.Event.majProgressBarTitle_delay();", 1200);
   },


// ************************************** (à déboguer plus tard)
  majProgressBarTitle_delay: function()
   {
    var eventID = this.eventID_delay;
    var webtvID = this.webtvID_delay;
    var isConfirm = this.isConfirm_delay;
    var totalProcessActionsTypes = this.totalProcessActionsTypes_delay;
    var dicoNbCurrentProcessActions = isConfirm ? this.dicoNbProcessWaitedActions : this.dicoNbProcessConfirmedActions;
    var nbActions = dicoNbCurrentProcessActions[eventID];
    var newWidth = this.newWidth_delay;

    var zone_explain_progress = $('zone_explain_progress_'+ eventID +'_'+ webtvID);
    if (zone_explain_progress)
     {
      // "Avancement du process du livraison :"
      /*
      var title = '<b>'+ this.Base.Language.Translate(3511053)
                 +'<li class=li_'+ (isConfirm ? 'confirmed' : 'waited') +'_actions>'+ this.Base.Language.TranslateFormatted(isConfirm ? 3511055 : 3511054, [nbActions, totalProcessActionsTypes]) +'</li></b>';
      */
      var title = this.Base.Language.Translate(3511053) +' '+ this.Base.Language.TranslateFormatted(isConfirm ? 3511055 : 3511054, [nbActions, totalProcessActionsTypes]);
      var progressBarHTML = '<div class="progress_bar_content_'+ (isConfirm ? 'confirmed' : 'waited') +'" style="width: '+ newWidth +'px;">&nbsp;</div>';
      zone_explain_progress.parentNode.innerHTML = '<div id="zone_explain_progress_'+ eventID +'_'+ webtvID +'" class="Tips1" title="<div class=bgwhite>'+ title.replace(/\"/g, '&#34;') +'</div>">'+ progressBarHTML +'</div>';
     }
   },


  // Zone d'edit contextuelle UNIVERSELLE pour les ajouts et suppressions d'intervenants pour n'importe quel event
  editPeople: function(fromButton, eventID, peopleFieldName, webtvID)
   {
    this.currentAddPeopleEventID = eventID;
    this.currentAddPeopleWebtvID = webtvID;
    this.currentAddPeopleFieldName = peopleFieldName;

    // Pour communiquer à l'objet AutoSuggest la webtv vers laquelle pratiquer la recherche de users
    self.targetWebTvID = webtvID;

    tab_people = dicoPeople[webtvID][eventID][peopleFieldName];
    tab_people_names = dicoPeople_names[webtvID][eventID][peopleFieldName];
    tab_people_usernames = dicoPeople_usernames[webtvID][eventID][peopleFieldName];
    moderatorUserID = self.dicoPeople_moderators ? dicoPeople_moderators[webtvID][eventID] : null;

    // On vide la zone des intervenants dans la zone d'edit contextuelle
    $('people').getElements('div').each(function(elem) {
      if (elem.id.match(/_user_/))
        $('people').removeChild($(elem.id));
    });

    for (var i=0; i<tab_people.length; i++)
      insertHtmlUser('people', tab_people[i], tab_people_usernames[i], tab_people_names[i]);

    // On renseigne l'animateur
    $('select_animateur').value = moderatorUserID;

    // On renseigne le champ caché
    fillUserToIds('people', tab_people, tab_people_names);

    majPeopleList('people', moderatorUserID);

    // Gestion de la touche "Echap" pour fermer ce mini-formulaire
    addShortCutsToCtxForm($('people'), 'SocialEngine.Event.editTitlesConfirm();');

    $('people').style.left = (getLeft(fromButton) - ($('people').offsetWidth / 2)) +'px';
    $('people').style.top = (getTop(fromButton) - $('people').offsetHeight - 32) +'px';

    // Animateur ?
    $('select_animateur').style.display = (peopleFieldName == 'event_intervenants' ? '' : 'none');

    $('people').style.display = 'block';
    $('people_search').focus();
   },

  editPeopleConfirm: function()
   {
    var bind = this;
    eventID = this.currentAddPeopleEventID;
    webtvID = this.currentAddPeopleWebtvID;
    peopleFieldName = this.currentAddPeopleFieldName;

    this.currentCoordY = getTop($('people'));

    $('people').style.display = 'none';

    var datas;
    // Mise à jour d'intervenants...
    if (peopleFieldName == 'event_intervenants')
      datas = {
        'task' : 'maj_speakers',
        'event_id' : eventID,
        'webtv_id' : webtvID,
        'event_intervenants' : $('people_value').value,
        'event_moderator' : $('select_animateur').value
      };
    // Mise à jour de rédacteurs, organisateurs...
    else
      datas = {
        'task' : 'maj_'+ peopleFieldName,
        'event_id' : eventID,
        'webtv_id' : webtvID,
        'people_value' : $('people_value').value
      };

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : datas,
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          // Jean 04/04/2011 - Affichage contextuel de la liste des webtvs sur lesquelles s'est propagée telle modif contextuelle
          if (responseObject.maj_webtv_urls)
            bind.showMajWebtvUrls(responseObject.maj_webtv_urls, bind.currentCoordY);

          //alert(responseObject.affected_rows);

          // On reconstitue la liste des intervenants
          majPeopleList('people');

          // Mise à jour animateur / chef de projet
          if ($('TR_animateur') && $('TD_animateur'))
           {
            if (peopleFieldName == 'event_intervenants' && $('select_animateur').selectedIndex > 0)
             {
              $('TR_animateur').style.display = '';
              $('TD_animateur').innerHTML = $('select_animateur').options[$('select_animateur').selectedIndex].text;
             }
            else
              $('TR_animateur').style.display = 'none';
           }

          // En mode dashboard multi webtv
          else if ($('event_moderator_user_'+ eventID +'_'+ webtvID))
           {
            if (peopleFieldName == 'event_intervenants')
              $('event_moderator_user_'+ eventID +'_'+ webtvID).innerHTML = $('select_animateur').options[$('select_animateur').selectedIndex].text;
           }
         }
      }
    });
    request.send();
   },

  // Jean 11/02/2011 : fait que la touche "Entrée" soit active en tant que raccourci de validation dans tel mini-formulaire de maj contextuelle
  // Jean 22/02/2011 : fait que la touche "Echap" soit active en tant que raccourci de'annulation/fermeture dans tel mini-formulaire de maj contextuelle
  addShortCutsToCtxForm: function(zoneEdit, instr, addEnterKey)
   {
    zoneEdit.onkeyup = function(ev){
      var event = new Event(event);
      var RETURN = 13;
      var ECHAP = 27;
      var key = (window.event) ? window.event.keyCode : ev.keyCode;
      if (key == RETURN && addEnterKey)
        eval(instr);
      else if (key == ECHAP)
        zoneEdit.style.display = 'none';
    };
   },

  // Jean 17/02/2011 : pour rendre les notes internes encore plus privées (restreintes aux CM + RdC)
  setPrivnotesPrivacyLevel: function(eventID, isVeryPrivate, onlyRedacsAndHosts, webtvID)
   {
    var bind = this;

    if ($('img_loading_PrivnotesPrivacyLevel'))
      $('img_loading_PrivnotesPrivacyLevel').style.visibility = 'visible';

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'set_privnotes_privacy_level',
        'is_very_private' : (isVeryPrivate ? '1' : '0'),
        'only_redacs_and_hosts' : (onlyRedacsAndHosts ? '1' : '0'),
        'event_id' : eventID,
        'webtv_id' : webtvID
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          // Jean 04/04/2011 - Affichage contextuel de la liste des webtvs sur lesquelles s'est propagée telle modif contextuelle
          if (responseObject.maj_webtv_urls)
            bind.showMajWebtvUrls(responseObject.maj_webtv_urls, getTop($('img_loading_PrivnotesPrivacyLevel')));

          if ($('img_loading_PrivnotesPrivacyLevel'))
            $('img_loading_PrivnotesPrivacyLevel').style.visibility = 'hidden';

          var zoneVisibilityDesc;
          if ($('zone_privnotes_visible_desc'))
            zoneVisibilityDesc = $('zone_privnotes_visible_desc');

          if( zoneVisibilityDesc )
           {
            zoneVisibilityDesc.style.display = 'block';
            if (isVeryPrivate || onlyRedacsAndHosts)
              zoneVisibilityDesc.slide('show').slide('out');
            else
              zoneVisibilityDesc.slide('hide').slide('in');
           }

         }
      }
    });
    request.send();
   },


  // Jean 09/03/2011 - Va chercher le dernier contenu de tel champ de la table <se_events>
  getEventField: function(fieldName, eventID, webtvID, noDefaultValue)
   {
    if ($('img_loading_event_field_'+ fieldName +'_' + eventID +'_'+ webtvID))
      $('img_loading_event_field_'+ fieldName +'_' + eventID +'_'+ webtvID).style.display = '';

    var textareaID = 'TEXTAREA_'+ fieldName;
    // pour éviter un bug de hauteur illimitée sur le WYSIWYG, on affiche préalablement la zone de saisie source
    if (!tinyMCE.get(textareaID))
     {
      $(textareaID).style.display = '';
      $(textareaID).value = '';
     }

    // Ajax
    var bind = this;
    var request = new Request.JSON({
      'method' : 'post',
      'url' : 'event_ajax.php',
      'data' : {
        'task' : 'get_event_field',
        'event_id' : eventID,
        'webtv_id' : (webtvID ? webtvID : ''),
        'field_name' : fieldName,
        'no_default_value' : noDefaultValue ? '1' : '0'
      },
      'onComplete':function(responseObject)
       {
        if( $type(responseObject)!="object" || !responseObject.result )
         {
          alert(responseObject.error);
         }
        else
         {
          if ($('event_field_'+ fieldName +'_VALUE'))
            $('event_field_'+ fieldName +'_VALUE').innerHTML = responseObject.field_value;

          if (fieldName == 'event_summary')
           {
            if ($('lien_summary_edit')) $('lien_summary_edit').style.display = 'none';
            if ($('zone_summary_content')) $('zone_summary_content').style.display = 'none';
            if ($('btn_summary_valid_edit')) $('btn_summary_valid_edit').style.display = 'inline';
            if ($('btn_summary_cancel')) $('btn_summary_cancel').style.display = 'inline';
            if ($('zone_summary_edit')) $('zone_summary_edit').style.display = 'block';
            if ($('zone_setEventSummaryNoSynch')) $('zone_setEventSummaryNoSynch').style.display = 'block';
            //setTimeout("SocialEngine.Event.oEditor.focus();", 0);
           }
          else if (fieldName == 'event_desc')
           {
            if ($('lien_desc_edit')) $('lien_desc_edit').style.display = 'none';
            if ($('event_desc_none')) $('event_desc_none').style.display = 'none';
            if ($('zone_desc_content')) $('zone_desc_content').style.display = 'none';
            if ($('btn_desc_valid_edit')) $('btn_desc_valid_edit').style.display = 'inline';
            if ($('btn_desc_cancel')) $('btn_desc_cancel').style.display = 'inline';
            if ($('zone_setEventDescNoSynch')) $('zone_setEventDescNoSynch').style.display = 'block';
            if ($('zone_desc_edit')) $('zone_desc_edit').style.display = 'block';
            //setTimeout("SocialEngine.Event.oEditor.focus();", 0);
           }
          else if (fieldName == 'event_retranscript')
           {
            if ($('lien_retranscript_edit')) $('lien_retranscript_edit').style.display = 'none';
            if ($('zone_retranscript_content')) $('zone_retranscript_content').style.display = 'none';
            if ($('btn_retranscript_valid_edit')) $('btn_retranscript_valid_edit').style.display = 'inline';
            if ($('btn_retranscript_cancel')) $('btn_retranscript_cancel').style.display = 'inline';
            if ($('zone_retranscript_edit')) $('zone_retranscript_edit').style.display = 'block';
            if ($('zone_setEventRetranscriptNoSynch')) $('zone_setEventRetranscriptNoSynch').style.visibility = 'visible';
            //setTimeout("SocialEngine.Event.oEditor.focus();", 0);
           }
          else if (fieldName == 'event_privnotes')
           {
            if ($('lien_privnotes_edit')) $('lien_privnotes_edit').style.display = 'none';
            if ($('zone_privnotes_content')) $('zone_privnotes_content').style.display = 'none';
            if ($('btn_privnotes_valid_edit')) $('btn_privnotes_valid_edit').style.display = 'inline';
            if ($('btn_privnotes_cancel')) $('btn_privnotes_cancel').style.display = 'inline';
            if ($('zone_privnotes_edit')) $('zone_privnotes_edit').style.display = 'block';
            //setTimeout("SocialEngine.Event.oEditor.focus();", 0);
           }

          //alert($(textareaID) ? $(textareaID).outerHTML : '?');

          // S'il n'existe pas encore, alors on initialise le WYSIWYG
          if (!tinyMCE.get(textareaID))
           {
            // Texte à l'intérieur du WYSIWYG
            $(textareaID).value = responseObject.field_value;

            initWYSIWYG(
              textareaID,
              $(textareaID).hasClass('tinymce_simple') ? 'simple' : 'advanced',
              function(){
                // On positionne le curseur à l'intérieur
                tinyMCE.execInstanceCommand(textareaID, "mceFocus");
                // On vide l'historique des actions
                tinyMCE.get(textareaID).undoManager.clear();
              },
              fieldName.match(/(_desc|_privnotes)/) ? 600 : null,
              null, null, null, null, null, null,
              fieldName.match(/(_desc|_privnotes)/) ? 600 : null
            );
           }
          else
           {
            // On initialise le texte à l'intérieur du WYSIWYG
            tinyMCE.get(textareaID).setContent(responseObject.field_value);
            // On positionne le curseur à l'intérieur
            tinyMCE.execInstanceCommand(textareaID, "mceFocus");
            // On vide l'historique des actions
            tinyMCE.get(textareaID).undoManager.clear();
           }

          if ($('img_loading_event_field_'+ fieldName +'_' + eventID +'_'+ webtvID))
            $('img_loading_event_field_'+ fieldName +'_' + eventID +'_'+ webtvID).style.display = 'none';
         }
       }
    });
    request.send();
   },


  // Jean 04/04/2011 - Affichage contextuel de la liste des webtvs sur lesquelles s'est propagée telle modif contextuelle
  showMajWebtvUrls: function(maj_webtv_urls, coord_y)
   {
    if (maj_webtv_urls.length == 0 || this.doNotDisplayMajWebtvUrls)
     return;

    var html = '<div class="close_zone_message_annule_mails">';
    // "Fermer la fenêtre"
    html += '<a href="javascript:;" onclick="$(\'generic_zone_maj_webtv_urls\').fade(\'out\');" title="'+ this.Base.Language.Translate(1227) +'">';
    html += 'X&nbsp;</a>&nbsp;&nbsp;';
    html += '</div>';

    html += '<span class="notif_deploie_maj_urls_header">';
    // "NB. Cette mise à jour vient d'être automatiquement déployée sur les autres instances :"
    html += '&nbsp;&nbsp;'+ this.Base.Language.Translate(3511260) +'&nbsp;&nbsp;';
    html += '</span>';
    html += '<div class="notif_deploie_maj_urls">';
    html += '<ul>';
    for (var i=0; i<maj_webtv_urls.length; i++)
     {
      var no_edit_rights = maj_webtv_urls[i].match(/\/noway$/);
      if (no_edit_rights)
        maj_webtv_urls[i] = maj_webtv_urls[i].replace(/\/noway$/, '');
      html += '<li><img src="./images/icons/admin_subnetworks16.gif" border="0" align="absmiddle" />';
      html += '<a href="'+ maj_webtv_urls[i] +'" target="_blank"'+ (no_edit_rights ? ' style="text-decoration: line-through;"' : '') +'>'+ maj_webtv_urls[i] +'</a>';
      // "mise à jour impossible ici, car pas de droits en modification !"
      if (no_edit_rights)
        html += ' &rarr; <font style="color: #B00000; font-weight: bold;">'+ this.Base.Language.Translate(3511324) +'</font>';
      html += '</li>';
     }
    html += '</ul>';

    html += '<div style="text-align: right; margin: 10px 5px 10px 5px;">';
    // "Ne plus afficher ce message (d'ici la prochaine page)"
    html += '<input type="checkbox" id="maj_webtv_urls_HIDE" onclick="SocialEngine.Event.doNotDisplayMajWebtvUrls = true; $(\'generic_zone_maj_webtv_urls\').fade(\'out\');" style="width: 12px; position: relative; top: 3px;">';
    html += '<label for="maj_webtv_urls_HIDE" style="font-size: 10px; color: #555555;"> '+ this.Base.Language.Translate(3511350) +'</label>';
    html += '</div>';

    html += '</div>';
    $('generic_zone_maj_webtv_urls').innerHTML = html;
    $('generic_zone_maj_webtv_urls').style.top = (coord_y ? coord_y : 150) +'px';
    $('generic_zone_maj_webtv_urls').style.display = 'block';
    $('generic_zone_maj_webtv_urls').fade('in');
   },

  doNotDisplayMajWebtvUrls: false,

  // Jean 07/04/2011 : pour mettre à jour le fait que telle ou telle zone soit visible ou non
  hideEventArea: function(eventID, webtvID, areaID, mustBeHidden)
   {
    var bind = this;

    var imgLoading = $('img_loading_'+ areaID +'_visibility_'+ eventID +'_'+ webtvID);
    if (imgLoading)
      imgLoading.style.visibility = 'visible';

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'set_area_visibility',
        'must_be_hidden' : (mustBeHidden ? '1' : '0'),
        'area_id' : areaID,
        'event_id' : eventID,
        'webtv_id' : webtvID
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          var btnImg = $('img_set_'+ areaID +'_visibility_'+ eventID +'_'+ webtvID);
          var valueField = $('event_'+ areaID +'_hide_'+ eventID +'_'+ webtvID);
          if (valueField)
           valueField.value = mustBeHidden ? '1' : '0';
          // Affichage contextuel de la liste des webtvs sur lesquelles s'est propagée telle modif contextuelle
          if (responseObject.maj_webtv_urls)
            bind.showMajWebtvUrls(responseObject.maj_webtv_urls, btnImg ? getTop(btnImg) : null);

          if (imgLoading)
            imgLoading.style.visibility = 'hidden';

          if (btnImg)
           {
            btnImg.src = 'images/icons/btn_'+ (mustBeHidden ? 'hidden' : 'visible') +'.png';
            if (mustBeHidden)
              // "Cliquer ici pour rendre cette zone visible pour tout le monde"
              btnImg.title = bind.Base.Language.Translate(3511271);
            else
              // "Cliquer ici pour rendre cette zone visible uniquement des CM et RdC"
              btnImg.title = bind.Base.Language.Translate(3511270);
           }
         }
      }
    });
    request.send();
   },

  // Jean 09/04/2010
  displayFormECommerce: function (eventID, numProduit)
   {
    TB_show(this.Base.Language.Translate(3510063), '#TB_inline?height=570&width=950&inlineId=eCommerceChoose', '', './images/trans.gif');

    if ($('buy_type_1')) $('buy_type_1').checked = (numProduit == 1);
    if ($('buy_type_2')) $('buy_type_2').checked = (numProduit == 2);
    if ($('buy_type_3')) $('buy_type_3').checked = (numProduit == 3);

    if ($('buy_type_1') && $('buy_type_1').checked) { $('cgv_1').style.display = 'block'; $('btn_agree').style.display = 'block'; }
    if ($('buy_type_2') && $('buy_type_2').checked) { $('cgv_2').style.display = 'block'; $('btn_agree').style.display = 'block'; }
    if ($('buy_type_3') && $('buy_type_3').checked) { $('cgv_3').style.display = 'block'; $('btn_agree').style.display = 'block'; }
   },

  // Jean 11/04/2011 : confirmation d'un achat de vidéo
  videoCommandConfirm: function (value)
   {
    // Achat du fichier source
    if (value == 1)
     {
      // Si l'URL PayLoadz du fichier vidéo source a déjà été créée puis renseignée
      if ($('event_url_mp4') && $('event_url_mp4').value != "")
        window.open($('event_url_mp4').value);
      else
        // "Votre demande a été prise en compte !\n\nVous recevrez un mail dans les plus brefs délais vous indiquant sur quelle page vous pourrez payer puis télécharger le fichier vidéo de cette vidéo."
        alert(this.Base.Language.Translate(3510693).replace(/\\n/g, '\n'));
     }
    // On redirige vers la page de paiement PayPal (pour l'achat du fichier vidéo source, du DVD ou des droits d'exclu)
    else
      setTimeout("document.forms.form_achat_video.submit();");
   },

  // Jean 12/05/2011 : vote contextuel
  contextualVote: function (eventID)
   {
    // Le user n'est pas logué et n'a pas encore saisi ses coordonnées ? alors on lui crée un "compte express" : on affiche donc un mini formulaire
    if (!isLogged && !current_express_email)
     {
      if (eventID)
        this.currentConfirmID = eventID;
      this.initExpressAccount('contextualVote');
      return;
     }

    // "Je signale mon opinion : je trouve ce sujet..."
    TB_show(this.Base.Language.Translate(3510660), 'user_event_vote.php?event_id='+ eventID +'&TB_iframe=true&width=450&height=450', '', './images/trans.gif');
    TB_init();
   },

  // Libellés associés aux options de feedback ('on' et 'off')
  feedbackLangVars: {
    'WantTakePart_1': 3511249, // Intervenir
    'WantTakePart_0': 3511335, // Ne plus postuler

    'WantSponsor_1' : 3511251, // Sponsoriser
    'WantSponsor_0' : 3511336, // Ne plus sponsoriser

    'WantAttend_1'  : 3511253, // Assister [/ Terminé !]
    'WantAttend_0'  : 3511337, // Ne plus assister [/ Pas terminé...]

    'WantWatch_1'   : 3000937, // Prévenez-moi quand c'est en ligne !
    'WantWatch_0'   : 3511346  // Ne me prévenez plus de la mise en ligne
  },


  // Jean 22/06/2011 - Pour désactiver la synchro de tel champ dans tel event jumeau
  setNoSynch: function(eventID, webtvID, fieldName, setNoSynch)
   {
    var bind = this;

    if ($('img_loading_setNoSynch_'+ fieldName))
      $('img_loading_setNoSynch_'+ fieldName).style.visibility = 'visible';

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'set_no_synch',
        'field_name' : fieldName,
        'set_no_synch' : (setNoSynch ? '1' : '0'),
        'event_id' : eventID,
        'webtv_id' : webtvID
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          if ($('img_loading_setNoSynch_'+ fieldName))
            $('img_loading_setNoSynch_'+ fieldName).style.visibility = 'hidden';
         }
      }
    });
    request.send();
   },

  // Jean 21/07/2011 - Pour activer ou non l'envoi des rapports de stats sur tel event
  enableStatsReport: function(eventID, webtvID, enableStatsReport)
   {
    var bind = this;

    if ($('img_loading_setStatsMailEnabled'))
      $('img_loading_setStatsMailEnabled').style.visibility = 'visible';

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'enable_stats_report',
        'enable' : (enableStatsReport ? '1' : '0'),
        'event_id' : eventID,
        'webtv_id' : webtvID
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          if ($('img_loading_setStatsMailEnabled'))
            $('img_loading_setStatsMailEnabled').style.visibility = 'hidden';
         }
      }
    });
    request.send();
   },


  // Jean 02/08/2011 : création ou mise à jour d'un rappel
  // remarque : si <rem_id> vaut NULL, alors il s'agit d'une création
  editReminder: function(btn, eventID, userID, remID, defaultTimestampMySQL, defaultMemDesc)
   {
    this.currentConfirmID = eventID;
    this.currentConfirmUserID = userID;
    this.currentConfirmRemID = remID;

    var defaultDate = new Date();

    if (defaultTimestampMySQL)
     {
      defaultTimestamp = defaultTimestampMySQL * 1000;
      if (!remID)
        defaultTimestamp = Math.max(defaultTimestamp, defaultDate.getTime() + cinqMinutesJS);
     }
    else
     {
      // rappel par défaut = dans 1 heure
      defaultDate.setTime(defaultDate.getTime() + duree_heure_JS);

      defaultTimestamp = defaultDate.getTime();
     }

    var timestamp = remID ? this.dicoReminders['rem'+ remID].rem_alert_time * 1000 : defaultTimestamp;

    var d = new Date();
    var minTimestampJS = Math.min(timestamp, d.getTime());
    d.setTime(d.getTime() + 1000*3600*24*365);
    var maxTimestampJS = d.getTime();

    $('span_rem_alert_time').innerHTML = getListeChoixDate('rem_alert_time_'+ eventID, timestamp, minTimestampJS, maxTimestampJS);
    $('zone_edit_reminder').style.display = 'block';

    // Si on est en mode mise à jour
    if (remID)
     {
      $('rem_desc').value = this.dicoReminders['rem'+ remID].rem_desc;
      $('rem_date_sent').value = '';
      $('rem_target').value = this.dicoReminders['rem'+ remID].rem_target;
     }
    else
     {
      $('rem_desc').value = defaultMemDesc ? defaultMemDesc : '';
      $('rem_date_sent').value = '';
      $('rem_target').value = '1';
     }

    textarea_autogrow('rem_desc');

    $('zone_edit_reminder').style.left = getLeft($('zone_reminder_list_'+ eventID)) +'px';
    $('zone_edit_reminder').style.top = (getTop(btn) - (remID ? 0 : $('zone_edit_reminder').offsetHeight) - 10) +'px';

    // La touche "Entrée" équivaut à valider les données de ce mini-formulaire / Touche "Echap" pour le fermer
    addShortCutsToCtxForm($('zone_edit_reminder'), 'SocialEngine.Event.editReminderConfirm();');

    $('rem_desc').focus();
    if (!remID)
      $('rem_desc').select();
   },
  editReminderConfirm: function()
   {
    var bind = this;

    var rem_alert_time = parseInt($('date_select_rem_alert_time_'+ this.currentConfirmID).value,10)
                       + parseInt($('hour_select_rem_alert_time_'+ this.currentConfirmID).value,10)

    var now = new Date();

    //alert(rem_alert_time +' <= '+ (now.getTime()/ 1000) +' + '+ (decalageHoraireJS/ 1000));

    // On teste la validité de la date
    if (rem_alert_time <= (now.getTime() /*+ decalageHoraireJS*/) / 1000 || isNaN(rem_alert_time))
     {
      // "Attention, vous devez saisir une date/heure située dans le futur !"
      alert(this.Base.Language.Translate(3511515));
      return;
     }

    // On évite le double-clic aux effets indésirables
    $('btn_valid_reminder').disabled = true;

    $('loading_reminder').style.display = 'block';

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'edit_reminder',
        'event_id' : this.currentConfirmID,
        'user_id' : this.currentConfirmUserID,
        'rem_id' : this.currentConfirmRemID,
        'rem_alert_time' : rem_alert_time,
        'rem_desc' : $('rem_desc').value,
        'rem_date_sent' : $('rem_date_sent').value,
        'rem_target' : $('rem_target').value
      },
      'onComplete':function(responseObject)
       {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          bind.getReminders(bind.currentConfirmID, bind.currentConfirmUserID);

          $('btn_valid_reminder').disabled = false;
          $('loading_reminder').style.display = 'none';
          $('zone_edit_reminder').style.display = 'none'; //.fade('out');

          if (SocialEngine.EventComments)
           {
            window.parent.getComments(null, 'event');
            // On met en évidence le commentaire généré
            if (responseObject.rem_eventcomment_id)
              bind.highlightArea('comment_'+ responseObject.rem_eventcomment_id);
           }

          // responseObject.rem_eventcomment_id
         }
       }
    });
    request.send();
   },

  // Jean 02/08/2011
  deleteReminder: function(eventID, userID, remID)
   {
    var bind = this;

    $('zone_reminder_list_'+ eventID).innerHTML = '';
    $('loading_reminders_list_'+ eventID).style.display = 'block';

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'delete_reminder',
        'event_id' : eventID,
        'user_id' : userID,
        'rem_id' : remID
      },
      'onComplete':function(responseObject)
       {
        bind.getReminders(eventID, userID);

        // On met à jour le fil de commentaires
        if (responseObject.rem_eventcomment_id)
          window.parent.getComments(null, 'event');
       }
    });
    request.send();
   },

  dicoReminders: new Array(),

  getReminders: function(eventID, userID)
   {
    var bind = this;

    $('zone_reminder_list_'+ eventID).innerHTML = '';
    $('loading_reminders_list_'+ eventID).style.display = 'block';

    var now = new Date();

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'get_reminders',
        'event_id' : eventID,
        'user_id' : userID
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          if (responseObject.reminders.length > 0)
           {
            var html = '<table border="0" class="reminders" cellspacing="0" cellpadding="6" width="100%">';
            for (var i=0; i<responseObject.reminders.length; i++)
             {
              var reminder = responseObject.reminders[i];

              // date programmée de l'alerte
              html += '<tr class="'+ (reminder.rem_is_done == '1' ?
                                        'reminders_is_done'
                                      : (reminder.rem_alert_time * 1000 < (now.getTime() + decalageHoraireJS) ?
                                            'reminders_late'
                                          : (reminder.rem_date_sent != null ?
                                              'reminders_past'
                                            : '')
                                         )
                                      )
                       + (reminder.rem_not_mine ? ' com_manager' : '')
                       +'">';

              html += '<td style="padding-right: 0px; width: 22px;">';
              html += '<input type="checkbox" id="rem_is_done" onclick="SocialEngine.Event.setReminderIsDone('+ eventID +', '+ userID +','+ reminder.rem_id +', this.checked);"';
              html += ' style="width: 12px; position: relative; top: 3px;"';
              if (reminder.rem_is_done == '1')
                html += ' checked';
              // "Case cochée ? Rappel traité !"
              html += ' class="Tips1" title="<div class=bgwhite>'+ bind.Base.Language.Translate(3511514).replace(/\"/g, '&#34;') +'</div>">';
              html += '</td>';

              html += '<td style="padding-right: 0px; width: 22px;">';
              html += '<a href="javascript:;" onclick="SocialEngine.Event.editReminder(this,'+ eventID +', '+ userID +','+ reminder.rem_id +');"';
              // "Modifier"
              html += ' title="'+ bind.Base.Language.Translate(3000245).replace(/\"/g, '&#34;') +'"'
              html += '>';
              html += '<img src="images/icons/chat_clock'+ (reminder.rem_is_done == '0' && reminder.rem_date_sent == null ? 2 : 1) +'.gif" align="absmiddle" width="16" class="img_clock" border="0" />';
              html += '</a></td>';

              html += '<td onclick="SocialEngine.Event.editReminder(this,'+ eventID +', '+ userID +','+ reminder.rem_id +');">';
              html += '<b>'+ getDateStr(reminder.rem_alert_time * 1000) +' ';
              html += getHourStr(reminder.rem_alert_time * 1000);
              html += '</b>';
              html += '</td>';

              // message associé à l'alerte
              // "alerte créée le %1$s"
              html += '<td class="Tips1" title="<div class=bgwhite>'+ bind.Base.Language.TranslateFormatted(3511500, [getDateStr(reminder.rem_set_time * 1000) +', '+ getHourStr(reminder.rem_set_time * 1000)])
                                                 // Les RdC voient l'auteur du rappel
                                                 + (i_am_rdc ? ' '
                                                               // "par"
                                                              + bind.Base.Language.Translate(3511138) +' '
                                                              + reminder.rem_user_displayname
                                                              + (reminder.rem_updator_displayname ?
                                                                   ' / '
                                                                   // "modifiée le %1$s par %2$s"
                                                                   + bind.Base.Language.TranslateFormatted(3511519, [getDateStr(reminder.rem_dateupdated * 1000) +', '+ getHourStr(reminder.rem_dateupdated * 1000), reminder.rem_updator_displayname])
                                                                  : '')
                                                             : '')
                                                +'</div>"'
                      +' onclick="SocialEngine.Event.editReminder(this,'+ eventID +', '+ userID +','+ reminder.rem_id +');"'
                      +'>';
              html += reminder.rem_desc.replace(/(\n|\r\n)/g, '<br>') +'</td>';

              // pour mettre à jour cette alerte
              html += '<td style="width: 18px;"><a href="javascript:;" onclick="SocialEngine.Event.editReminder(this,'+ eventID +', '+ userID +','+ reminder.rem_id +');"';
              // "Modifier"
              html += ' class="Tips1_old" title="'+ bind.Base.Language.Translate(3000245) +'"'
              html += '>';
              html += '<img src="images/icons/event_edit16.gif" border="0" style="width: 12px; height: 12px;" align="absmiddle" />';
              html += '</a></td>';

              // pour supprimer cette alerte
              html += '<td style="width: 18px;"><a href="javascript:;" onclick="SocialEngine.Event.deleteReminder('+ eventID +', '+ userID +','+ reminder.rem_id +');"';
              // "Supprimer"
              html += ' class="Tips1_old" title="'+ bind.Base.Language.Translate(3000169) +'"'
              html += '>';
              html += '<img src="images/icons/action_delete2.gif" border="0" align="absmiddle" />';
              html += '</a></td>';

              html += '</tr>';

              // on mémorise en mémoire vive
              bind.dicoReminders['rem'+ reminder.rem_id] = reminder;
             }
            html += '</table>';
           }
          else
            var html = '';

          $('zone_reminder_list_'+ eventID).innerHTML = html;
          $('loading_reminders_list_'+ eventID).style.display = 'none';

          if ( ! (isIE && iframe_company) && !isFirefox )
            Tips1 = new Tips($$('.Tips1'));

          // Jean 26/01/2012 : on met en gras l'éventuel nom du profil CRM concerné dans l'éventuel liste succinte de prospect de l'onglet CRM
          var short_link = $('short_prospect_'+ eventID);
          if (short_link)
            short_link.style.fontWeight = responseObject.reminders.length > 0 ? 'bold' : 'normal';
         }
      }
    });
    request.send();
   },

  setReminderIsDone: function(eventID, userID, remID, isDone)
   {
    var bind = this;

    $('zone_reminder_list_'+ eventID).innerHTML = '';
    $('loading_reminders_list_'+ eventID).style.display = 'block';

    var now = new Date();

    this.dicoReminders['rem'+ remID].rem_is_done = isDone ? '1' : '0';

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'set_reminder_is_done',
        'event_id' : eventID,
        'user_id' : userID,
        'rem_id' : remID,
        'rem_is_done' : isDone ? '1' : '0'
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          SocialEngine.Event.getReminders(eventID, userID);
         }
      }
    });
    request.send();
   },

  switchPublishedOrNot: function(eventID, webtvID, mustBePublished, objEventLink)
   {
    var bind = this;

    if ($('img_switchPublishedOrNot_'+ eventID +'_'+ webtvID))
      $('img_switchPublishedOrNot_'+ eventID +'_'+ webtvID).style.display = 'none';

    if ($('img_loading_switchPublishedOrNot_'+ eventID +'_'+ webtvID))
      $('img_loading_switchPublishedOrNot_'+ eventID +'_'+ webtvID).style.display = '';

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'switch_published_or_not',
        'event_id' : eventID,
        'webtv_id' : webtvID,
        'must_be_published' : (mustBePublished ? '1' : '0')
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          // Affichage contextuel de la liste des webtvs sur lesquelles s'est propagée telle modif contextuelle
          if (responseObject.maj_webtv_urls)
            bind.showMajWebtvUrls(responseObject.maj_webtv_urls, getTop($('img_loading_switchPublishedOrNot_'+ eventID +'_'+ webtvID)));

          if ($('img_loading_switchPublishedOrNot_'+ eventID +'_'+ webtvID))
            $('img_loading_switchPublishedOrNot_'+ eventID +'_'+ webtvID).style.display = 'none';

          if (bind.dicoTasks)
           {
            if ($('img_switchPublishedOrNot_'+ eventID +'_'+ webtvID))
              $('img_switchPublishedOrNot_'+ eventID +'_'+ webtvID).style.display = '';
            bind.refreshTaskList();
           }

          else if (objEventLink)
           {
            if (mustBePublished)
              objEventLink.removeClass('com_manager');
            else
              objEventLink.addClass('com_manager');
           }
         }
      }
    });
    request.send();
   },

  // Jean 07/08/2011 - Pour établir qu'en cliquant sur le lien d'un épisode,
  // cela doit simplement entraîner le changement du contenu dans le player vidéo
  setTaskListJustVideo: function(eventID, webtvID, setJustVideo)
   {
    var bind = this;

    if ($('img_loading_setTaskListJustVideo'))
      $('img_loading_setTaskListJustVideo').style.visibility = 'visible';

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'set_tasks_just_video',
        'set_just_video' : (setJustVideo ? '1' : '0'),
        'event_id' : eventID,
        'webtv_id' : webtvID
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          bind.eventInfo.event_tasklist_just_video = setJustVideo ? 1 : 0;

          // Affichage contextuel de la liste des webtvs sur lesquelles s'est propagée telle modif contextuelle
          if (responseObject.maj_webtv_urls)
            bind.showMajWebtvUrls(responseObject.maj_webtv_urls, getTop($('img_loading_setTaskListJustVideo')));

          if ($('img_loading_setTaskListJustVideo'))
            $('img_loading_setTaskListJustVideo').style.visibility = 'hidden';

          bind.refreshTaskList();
         }
      }
    });
    request.send();
   },

  // Jean 13/10/2011 - Instaure un tri par défaut pour telle tasklist
  setTaskListDefaultSort: function(eventID, webtvID, defaultSort)
   {
    var bind = this;

    if ($('loading_event_tasklist_def_disp'))
      $('loading_event_tasklist_def_disp').style.visibility = 'visible';

    $('tasklistSort').value = defaultSort;

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'set_default_sort',
        'default_sort' : defaultSort,
        'event_id' : eventID,
        'webtv_id' : webtvID
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          bind.eventInfo.event_tasklist_force_order = defaultSort;

          // Affichage contextuel de la liste des webtvs sur lesquelles s'est propagée telle modif contextuelle
          if (responseObject.maj_webtv_urls)
            bind.showMajWebtvUrls(responseObject.maj_webtv_urls, getTop($('loading_event_tasklist_def_disp')));

          if ($('loading_event_tasklist_def_disp'))
            $('loading_event_tasklist_def_disp').style.visibility = 'hidden';

          bind.refreshTaskList();
         }
      }
    });
    request.send();
   },

  dicoPreviousVideo: new Array(),
  dicoNextVideo: new Array(),
  dicoVideoTitle: new Array(),

  // Jean 07/08/2011 - Change la vidéo dans le player, contre celle de tel event
  changeVideoEmbedCode: function(eventID, loadHiddenVideo, webtvID,
                                 skinColor, videoID, videoURL,
                                 videoTitleArea, videoSubTitleArea, videoSubTitleBelowArea,
                                 videoTitle, videoSubTitle, videoSubTitleBelow,
                                 suffix, isAutoLoop, isNoAutoPlay)
   {
    var bind = this;

    if (!suffix)
     suffix = '';

    if (videoTitle && $('group_home_video_title'+ suffix))
     {
      $('group_encart_text'+ suffix).style.display = 'block';
      $('group_home_video_title'+ suffix).style.display = 'block';
     }

    // Scroll automatique vers là où la vidéo sera chargée
    if ($('group_home_video_title'+ suffix))
      targetArea = $('group_home_video_title'+ suffix);

    else if ($('zone_video_embeded'))
      targetArea = $('zone_video_embeded');

    else if ($('zone_video_embeded_inside'+ suffix))
      targetArea = $('zone_video_embeded_inside'+ suffix);

    else if ($('zone_video_embeded_above'))
      targetArea = $('zone_video_embeded_above');

    if (targetArea)
     {
      var coordY = J(targetArea).position().top - 16;
      J(document.body).animate({scrollTop: coordY}, 400, null);
     }

    var html = '<img src="images/icons/language_tool_loader.gif" border="0" />';

    // Image d'attente
    if ($('zone_video_embeded'))
      $('zone_video_embeded').innerHTML = html;

    else if ($('zone_video_embeded_inside'+ suffix))
      $('zone_video_embeded_inside'+ suffix).innerHTML = html;

    else if ($('zone_video_embeded_above'))
     {
      $('zone_video_embeded_above').style.display = 'block';
      $('zone_video_embeded_above').innerHTML = html;
     }

    if (videoTitle && $('group_home_video_title'+ suffix))
     {
      $('group_home_video_title'+ suffix).innerHTML = videoTitle;
     }

    if (videoSubTitle && $('group_home_video_subtitle'+ suffix))
     {
      $('group_home_video_subtitle'+ suffix).style.display = 'block';
      $('group_home_video_subtitle'+ suffix).innerHTML = videoSubTitle;
     }

    if (videoSubTitleBelow && $('group_home_video_subtitle_below'+ suffix))
     {
      $('group_home_video_subtitle_below'+ suffix).style.display = 'block';
      $('group_home_video_subtitle_below'+ suffix).innerHTML = videoSubTitleBelow;
     }

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'get_video_embed_code',
        'load_hidden_video' : (loadHiddenVideo ? '1' : '0'),
        'skin_color' : skinColor,
        'event_id' : eventID,
        'webtv_id' : webtvID,
        'video_id': videoID,
        'video_flv': videoURL,
        'autoloop': (isAutoLoop ? '1' : '0'),
        'no_autoplay': (isNoAutoPlay ? '1' : '0')
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else if (responseObject.no_video_error == 1)
         {
          alert('Vidéo introuvable pour l\'event n°'+ eventID +' !');
          if ($('loading_interview'))
            $('loading_interview').style.display = 'none';
         }
        else
         {
          // Affichage contextuel de la liste des webtvs sur lesquelles s'est propagée telle modif contextuelle
          if (responseObject.maj_webtv_urls)
            bind.showMajWebtvUrls(responseObject.maj_webtv_urls, getTop($('img_loading_setTaskListJustVideo')));

          // On charge la vidéo dans le player
          if (responseObject.embed_code)
           {
            var visible_embed_code = '';

            // Dans une homepage de chaîne
            if ($('group_home_video_title'+ suffix))
             {
              $('group_encart_text'+ suffix).style.display = 'block';
              $('group_home_video_title'+ suffix).style.display = 'block';
              if (responseObject.video_title != '')
                $('group_home_video_title'+ suffix).innerHTML = '<a href="'+ responseObject.event_url +'" target="_blank">'+ responseObject.video_title +'</a>';

              if (responseObject.video_sub_title != '')
               {
                $('group_home_video_subtitle'+ suffix).style.display = 'block';
                $('group_home_video_subtitle'+ suffix).innerHTML = responseObject.video_sub_title +'<div style="text-align: right;">'+ responseObject.video_feedback_options +'</div>';
               }
             }
            // Dans un event
            else
             {
              visible_embed_code += '<div style="color: ; margin: 15px 0px 10px 0px; width: 100%;">';

              // Jean 25/01/2012 : vidéo précédente
              if (bind.dicoPreviousVideo[eventID])
                visible_embed_code += '<a href="javascript: SocialEngine.Event.changeVideoEmbedCode('+ bind.dicoPreviousVideo[eventID] +');">'
                                     +'<img src="images/icons/btn_diap_prev16.png" border="0" align="absmiddle" width="16" height="16"'
                                         +' onmouseover="this.src=\'images/icons/btn_diap_prev16_on.png\';"'
                                         +' onmouseout="this.src=\'images/icons/btn_diap_prev16_on.png\';"'
                                         +' class="Tips1"'
                                         +' title="<div class=bgwhite>'+ bind.dicoVideoTitle[bind.dicoPreviousVideo[eventID]].replace(/\"/g, "&#34;") +'</div>" /></a>&nbsp;&nbsp;&nbsp;';

              visible_embed_code += '&laquo;&nbsp;'+ responseObject.video_title.replace(/^[0-9]+ ?\- ?/, '') +'&nbsp;&raquo;';

              // Jean 25/01/2012 : vidéo suivante
              if (bind.dicoNextVideo[eventID])
                visible_embed_code += '&nbsp;&nbsp;&nbsp;<a href="javascript: SocialEngine.Event.changeVideoEmbedCode('+ bind.dicoNextVideo[eventID] +');">'
                                     +'<img src="images/icons/btn_diap_next16.png" border="0" align="absmiddle" width="16" height="16"'
                                         +' onmouseover="this.src=\'images/icons/btn_diap_next16_on.png\';"'
                                         +' onmouseout="this.src=\'images/icons/btn_diap_next16_on.png\';"'
                                         +' class="Tips1"'
                                         +' title="<div class=bgwhite>'+ bind.dicoVideoTitle[bind.dicoNextVideo[eventID]].replace(/\"/g, "&#34;") +'</div>" /></a>';
              visible_embed_code += '</div>';
             }

            visible_embed_code += responseObject.embed_code;

            if ($('zone_video_embeded'))
              $('zone_video_embeded').innerHTML = visible_embed_code;

            else if ($('zone_video_embeded_inside'+ suffix))
              $('zone_video_embeded_inside'+ suffix).innerHTML = visible_embed_code;

            else if ($('zone_video_embeded_above'))
              $('zone_video_embeded_above').innerHTML = visible_embed_code;

            if ( ! (isIE && iframe_company) && !isFirefox )
              Tips1 = new Tips($$('.Tips1'));

            // Si on doit ouvrir la vidéo dans une interview matricielle
            /*else
              if (self.loadInterviewVideo)
                self.loadInterviewVideo(eventID, responseObject.embed_code, responseObject.video_title);
            */
           }

          // Code embed tel qu'il est présenté à l'utilisateur (prêt à copier/coller)
          if (responseObject.external_embed_code && $('zone_embed_code'))
            $('zone_embed_code').value = responseObject.external_embed_code;

          // On se positionne sur l'onglet principal (si le player fait partie de ce dernier)
          if ($('zone_video_embeded_inside'+ suffix))
            bind.loadProfileTab('profile');
         }
      }
    });
    request.send();
   },

  // Jean 27/08/2011
  majBrief: function(eventID, userID, cptBrief, briefCatID, briefResponse)
   {
    var bind = this;

    if ($('img_loading_brief_'+ cptBrief))
      $('img_loading_brief_'+ cptBrief).style.visibility = 'visible';

    var briefID = $('brief_id_'+ cptBrief).value;

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'maj_brief',
        'event_id' : eventID,
        'briefcat_id' : briefCatID,
        'brief_id' : briefID,
        'brief_response' : briefResponse,
        'user_id' : userID,
        'cpt_brief' : cptBrief
      },
      'onComplete':function(responseObject)
      {
        if ($('img_loading_brief_'+ cptBrief))
          $('img_loading_brief_'+ cptBrief).style.visibility = 'hidden';
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          $('brief_id_'+ cptBrief).value = responseObject.brief_id;

          // "Réponse enregistrée !"

          // "Votre feedback a été transmis."
          var zoneMsg = $('brief_return_msg_'+ cptBrief);
          var html = '<div class="icon_state brief_icon_state">';
          html += '<div class="success_message success_message_bis success_message_brief arrondi_leger">';
          html += bind.Base.Language.Translate(3511668);
          html += '</div>';
          html += '</div>';
          zoneMsg.innerHTML = html;
          J(zoneMsg).slideDown(500);

          setTimeout("J($('brief_return_msg_"+ cptBrief +"')).slideUp();", 3500);

          bind.Base.Language.Translate(3000169)
         }
      }
    });
    request.send();
   },


  //dicoProspects: new Array(),

  // Jean 30/08/2011 - pour créer un prospect à la volée
  createProspect: function(eventID, userID, justPutFormInCache, accountObjForNewUser)
   {
    var bind = this;

    if (!justPutFormInCache)
     {
      // Si le formulaire était déjà affiché, alors on le cache
      if ($('zone_prospect_create').style.display != 'none')
       {
        J($('zone_prospect_create')).slideUp('fast');
        return;
       }

      this.currentUserIDforNewUser = userID;
      if (accountObjForNewUser)
        this.currentAccountObjForNewUser = accountObjForNewUser;
      else
        this.currentEventIDforNewUser = eventID;

      // Si le formulaire a déjà été stocké en mémoire précédemment
      if (this.memNewProspectFormHtml)
       {
        $('zone_prospect_create').innerHTML = this.memNewProspectFormHtml;
        notFocusedYetOnUsername = true;
        try { initRelUserChoiceList('accounts', 'parents_accounts_'+ this.memNewProspectFormId, this.memNewProspectFormId, this.currentAccountObjForNewUser); } catch(e) {;}

        // héritage secteur d'activité et autres
        if (this.currentAccountObjForNewUser)
         {
          if ($('user_sector_id_1'))
            $('user_sector_id_1').value = this.currentAccountObjForNewUser['user_sector_id'];
          if ($('user_compsize_id_1'))
            $('user_compsize_id_1').value = this.currentAccountObjForNewUser['user_compsize_id'];
          if ($('field_125_1'))
            $('field_125_1').value = this.currentAccountObjForNewUser['pro_tel_stand'];
         }

        if ( ! (isIE && iframe_company) && !isFirefox )
          Tips1 = new Tips($$('.Tips1'));

        var bindNewProspectFormId = this.memNewProspectFormId;

        J($('zone_prospect_create')).slideDown('fast', function() {

          // Jean 26/01/2012 : saisie des tags sous forme d'objets auto-suggest multiples
          var field_name = 'user_tags_'+ bindNewProspectFormId;
          var objTags = J($(field_name));
          objTags.autoSuggest('tag_ajax.php',
            {
             minChars: 2,
             startText: SocialEngine.Language.Translate(3511397), emptyText: SocialEngine.Language.Translate(3511395),
             limitText: SocialEngine.Language.Translate(3511396), scoresText: SocialEngine.Language.Translate(3511393), addItText:  SocialEngine.Language.Translate(3511394),
             retrieveLimit: 25,
             matchCase: false,
             asHtmlID: field_name
            });

          var field_name = 'user_tags_premium_'+ bindNewProspectFormId;
          var objTags = J($(field_name));
          objTags.autoSuggest('tag_ajax.php',
            {
             minChars: 2,
             startText: SocialEngine.Language.Translate(3511397), emptyText: SocialEngine.Language.Translate(3511395),
             limitText: SocialEngine.Language.Translate(3511396), scoresText: SocialEngine.Language.Translate(3511393), addItText:  SocialEngine.Language.Translate(3511394),
             retrieveLimit: 25,
             matchCase: false,
             asHtmlID: field_name
            });

          initWYSIWYG('user_crm_notes_'+ bindNewProspectFormId, 'simple', null, null, null, null, null, true);

          auto_focus_crm_first_field();
        });
        return;
       }

      if ($('loading_prospects_list'))
        $('loading_prospects_list').style.visibility = 'visible';
     }

    var now = new Date();

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : /*this.options.CRM_ajaxURL ? this.options.CRM_ajaxURL : */this.options.ajaxURL,
      'data' : {
        'task' : 'get_prospect_express_form',
        'event_id' : eventID,
        'rel_account_user_id' : accountObjForNewUser ? accountObjForNewUser['user_id'] : '',
        'user_id' : userID
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          bind.memNewProspectFormHtml = responseObject.form_html;
          bind.memNewProspectFormId = responseObject.subsc_form_id;

          if (!justPutFormInCache)
           {
            $('loading_prospects_list').style.visibility = 'hidden';
            $('zone_prospect_create').style.display = 'block';
            $('zone_prospect_create').innerHTML = responseObject.form_html;
            notFocusedYetOnUsername = true;
            try { initRelUserChoiceList('accounts', 'parents_accounts_'+ bind.memNewProspectFormId, bind.memNewProspectFormId, bind.currentAccountObjForNewUser); } catch(e) {;}

            initWYSIWYG('user_crm_notes_'+ responseObject.subsc_form_id, 'simple', null, null, null, null, null, true);

            // héritage secteur d'activité et autres
            if (bind.currentAccountObjForNewUser)
             {
              if ($('user_sector_id_1'))
                $('user_sector_id_1').value = bind.currentAccountObjForNewUser['user_sector_id'];
              if ($('user_compsize_id_1'))
                $('user_compsize_id_1').value = bind.currentAccountObjForNewUser['user_compsize_id'];
              if ($('field_125_1'))
                $('field_125_1').value = bind.currentAccountObjForNewUser['pro_tel_stand'];
             }
            if ( ! (isIE && iframe_company) && !isFirefox )
              Tips1 = new Tips($$('.Tips1'));
            J($('zone_prospect_create')).slideDown('fast', function() { auto_focus_crm_first_field(); });
           }
         }
       }
     });
    request.send();
   },

  getProspects: function(eventID, userID)
   {
    var bind = this;
    this.currentConfirmUserIDforProspectList = userID;

    if ($('zone_prospect_list'))
      $('zone_prospect_list').innerHTML = '';

    if ($('loading_prospects_list'))
      $('loading_prospects_list').style.visibility = 'visible';

    var now = new Date();

    var search = $('crm_search') ? trim($('crm_search').value) : '';

    // Ajax
    var request = new Request.JSON({
      'method' : 'post',
      'url' : /*this.options.CRM_ajaxURL ? this.options.CRM_ajaxURL : */this.options.ajaxURL,
      'data' : {
        'task' : 'get_prospects',
        'event_id' : eventID,
        'user_id' : userID,
        'sort' : 'user_lname',
        'search' : search
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          if ($('zone_nb_prospects'))
           {
            if (responseObject.prospects_list.length > 0)
              $('zone_nb_prospects').innerHTML = ' ('+ responseObject.prospects_list.length +')';
            else
              $('zone_nb_prospects').innerHTML = '';
           }

          // On reinitialise les tableaux utilisés par la liste de choix contextuelle
          if (self.tab_prospects)
           {
            for (var i=0; i<tab_prospects.length; i++)
              $('prospects').removeChild($('prospects_user_'+ tab_prospects[i]));
            tab_prospects = [];
            tab_prospects_names = [];
            tab_prospects_usernames = [];
           }

          if (responseObject.prospects_list.length > 0)
           {
            var html = '';
            var modeEmails = false;

            // On crée un "nuage de prospects"
            html += '<div style="margin: 0px 0px 15px 0px; text-align: left; width: 750px;">';
            for (var i=0; i<responseObject.prospects_list.length; i++)
             {
              var prospect = responseObject.prospects_list[i];

              if (i > 0)
               html += modeEmails ? ', ' : ' | ';

              // Jean 07/01/2012 : liste des emails séparés par des virgules
              if (modeEmails && prospect.email)
                html += prospect.email;
              else
                // On affiche le nom (cliquable) du prospect courant
                html += '<a target="_blank"'
                        + (prospect.user_crm_event_id ? ' id="short_prospect_'+ prospect.user_crm_event_id +'"' : '')
                        //+ ' href="'+ profile_url_create(prospect.user_username, prospect.user_displayname) +'"'
                        + ' href="javascript:;" onclick="var memberBlocY = J($(\'prospect_bloc_'+ prospect.user_id +'\')).position().top; J(document.body).animate({scrollTop: memberBlocY}, 300, null);"'
                        // Jean 03/01/2012 : on ne va plus chercher dans le CRM distant => on remplace "crm_webtv_id" par "this_webtv_id"
                        + ' onmouseover="SocialEngine.Profile.infoBulle_show(null,'+ prospect.user_id +',null,event,'+ this_webtv_id +');"'
                        + ' onmouseout="SocialEngine.Profile.infoBulle_hide();"'
                        + '>'+ prospect.user_displayname +'</a>';

              // On alimente les tableaux utilisés par la liste de choix contextuelle
              tab_prospects[tab_prospects.length] = prospect.user_id;
              tab_prospects_names[tab_prospects_names.length] = prospect.user_displayname;
              tab_prospects_usernames[tab_prospects_usernames.length] = prospect.user_username;
             }
            html += '</div>';

            //html += '<table border="0" class="prospects" cellspacing="0" cellpadding="6" width="100%">';

            // On parcourt les prospects
            for (var i=0; i<responseObject.prospects_list.length; i++)
             {
              var prospect = responseObject.prospects_list[i];
              var prospect_infos = prospect.prospects_infos;

              // On affiche les infos du prospect courant   (// => finalement, on le fait côté serveur)
              //if (trim(search) == '' || prospect_infos.toLowerCase().indexOf(search.toLowerCase()) > -1)
              html += prospect_infos;
             }
            //html += '</table>';
           }
          else
            var html = responseObject.empty_list_msg;

          if ($('zone_prospect_list'))
            $('zone_prospect_list').innerHTML = html;
          if ($('loading_prospects_list'))
            $('loading_prospects_list').style.visibility = 'hidden';

          // On recharge la mini-liste des prospects stockées dans la zone d'association contextuelle
          if (self.tab_prospects)
            for (var i=0; i<tab_prospects.length; i++)
              insertHtmlUser('prospects', tab_prospects[i], tab_prospects_usernames[i], tab_prospects_names[i]);

          if ( ! (isIE && iframe_company) && !isFirefox )
            Tips1 = new Tips($$('.Tips1'));

          // Jean 26/01/2012 : affichage des listes de rappels pour les membres qui en ont
          if (responseObject.reminders_list)
           {
            for (var i=0; i<responseObject.reminders_list.length; i++)
             {
              var user_crm_event_id = responseObject.reminders_list[i][0];
              //var user_id = responseObject.reminders_list[i][1];
              bind.getReminders(user_crm_event_id, userID);
             }
           }
         }
      }
    });
    request.send();
   },


  // Jean 09/09/2011 : édition des différentes étiquettes d'un event
  eventCatsEdit: function (fromButton, eventID, webtvID, inputSuffix, focusFieldID, withChildCopyOption)
   {
    var zoneEdit = $('generic_zone_edit_cats');

    zoneEdit.style.width = '75px';
    zoneEdit.style.height = '65px';
    zoneEdit.style.left = Math.max(0, getLeft(fromButton) - 2) +'px';
    zoneEdit.style.top = Math.max(0, getTop(fromButton) - 2) +'px';
    zoneEdit.innerHTML = '<img id="loading_event_cat_lists" src="images/images/icons/language_tool_loader.gif" align="middle"'
                            +' style="position: absolute; float: right; margin: 16px 20px 0px 22px; padding-top: 1px;" align="absmiddle" />';
    zoneEdit.style.display = 'block';

    // Si on avait déjà mémorisé les listes déroulantes, alors inutile de les charger de nouveau...
    if (this.event_cat_lists_content)
     {
      this.catEdit_display(eventID, webtvID, inputSuffix, this.event_cat_lists_content, focusFieldID, withChildCopyOption);
      return;
     }

    // Ajax
    var bind = this;
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'get_event_cat_lists',
        'event_id' : eventID
      },
      'onComplete':function(responseObject)
       {
        // On mémorise (pour n'avoir à recourir à ce chargement qu'une seule fois jusqu'à la prochaine page chargée)
        bind.event_cat_lists_content = responseObject.htmlContent;

        // On construit le formulaire à la volée
        bind.catEdit_display(eventID, webtvID, inputSuffix, responseObject.htmlContent, focusFieldID, withChildCopyOption);
       }
    });
    request.send();
   },

  catEdit_display: function(eventID, webtvID, inputSuffix, htmlContent, focusFieldID, withChildCopyOption)
   {
    var html = '<div id="zone_event_cat_lists">';

    html += htmlContent;

    // "Annuler"
    html += '<input type="button" class="button small_cancel_button" value="'+ this.Base.Language.Translate(39) +'"';
    html +=       ' onclick="$(\'generic_zone_edit_cats\').innerHTML = \'\'; J($(\'generic_zone_edit_cats\')).animate({width: \'0px\', height: \'0px\'}, {duration: 300, complete: function(){ $(\'generic_zone_edit_cats\').style.display = \'none\'; }});"';
    html +=       ' style="float: right; margin: 3px 0px 3px 0px; padding-top: 1px;" />';

    // "Valider"
    var instrSubmit = 'SocialEngine.Event.catEditConfirm('+ eventID +', '+ webtvID +', \''+ inputSuffix +'\');';
    html += ' <input type="button" class="button small_submit_button" value="'+ this.Base.Language.Translate(3000688) +'"';
    html +=        ' onclick="'+ instrSubmit +'"';
    html +=        ' style="float: right; margin: 3px 0px 3px 0px; padding-top: 1px;" />';

    html += '</div>';

    $('loading_event_cat_lists').style.visibility = 'hidden';

    var zoneEdit = $('generic_zone_edit_cats');

    // On montre la zone en l'étirant
    var bind = this;
    J(zoneEdit).animate(
      {width: (withChildCopyOption ? '580' : '400') +'px', height: '180px'},
      {duration: 150, complete: function()
       {
        zoneEdit.innerHTML += html;
        // On affiche ou pas les options de déploiement vers les épisodes
        $('event_format_id_copy_children').parentNode.style.display = withChildCopyOption ? 'inline' : 'none';
        $('event_treat_id_copy_children').parentNode.style.display = withChildCopyOption ? 'inline' : 'none';
        $('event_sector_id_copy_children').parentNode.style.display = withChildCopyOption ? 'inline' : 'none';
        $('event_template_copy_children').parentNode.style.display = withChildCopyOption ? 'inline' : 'none';

        // On cache la liste de sélection de l' "ancien format"...
        $('event_eventcat_id').parentNode.parentNode.style.display = 'none';

        // ...mais on affiche sa valeur éventuelle
        var urlFieldName = 'span_eventcat_url_'+ eventID +'_'+ webtvID +'_'+ inputSuffix +'_VALUE';
        // "ancienne version"
        if ($(urlFieldName) && $(urlFieldName).innerHTML != '')
          J($('event_format_id').parentNode).append('<br><font style="color: #999999;"> &nbsp; ('+ bind.Base.Language.Translate(3511702) +'&nbsp;: '+ $(urlFieldName).innerHTML +')</font>');

        // On pré-sélectionne les listes déroulantes aux bons indices
        var fieldName = 'span_eventcat_id_'+ eventID +'_'+ webtvID +'_'+ inputSuffix;
        $('event_eventcat_id').value = $(fieldName +'_VALUE').innerHTML;

        var fieldName = 'span_event_format_id_'+ eventID +'_'+ webtvID +'_'+ inputSuffix;
        $('event_format_id').value = $(fieldName +'_VALUE').innerHTML;

        var fieldName = 'span_event_treat_id_'+ eventID +'_'+ webtvID +'_'+ inputSuffix;
        $('event_treat_id').value = $(fieldName +'_VALUE').innerHTML;

        var fieldName = 'span_event_sector_id_'+ eventID +'_'+ webtvID +'_'+ inputSuffix;
        $('event_sector_id').value = $(fieldName +'_VALUE').innerHTML;

        var fieldName = 'span_event_template_'+ eventID +'_'+ webtvID +'_'+ inputSuffix;
        if ($('event_template') && $(fieldName +'_VALUE'))
          $('event_template').value = $(fieldName +'_VALUE').innerHTML;

        if (!focusFieldID)
          focusFieldID = 'event_format_id';
        $(focusFieldID).focus();
       }
     });

    // La touche "Entrée", en mode monoligne, équivaut à valider les données de ce mini-formulaire / Touche "Echap" pour le fermer
    addShortCutsToCtxForm(zoneEdit, instrSubmit, true);
   },

  catEditConfirm: function(eventID, webtvID, inputSuffix)
   {
    $('loading_event_cat_lists').style.visibility = 'visible';
    $('zone_event_cat_lists').style.display = 'none';

    // Ajax
    var bind = this;
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'set_event_cats_values',
        'event_id' : eventID,
        'webtv_id' : webtvID,
        'event_eventcat_id' : $('event_eventcat_id').value,
        'event_format_id' : $('event_format_id').value,
        'event_format_id_copy_children' : $('event_format_id_copy_children').checked ? '1' : '0',
        'event_treat_id' : $('event_treat_id').value,
        'event_treat_id_copy_children' : $('event_treat_id_copy_children').checked ? '1' : '0',
        'event_sector_id' : $('event_sector_id').value,
        'event_sector_id_copy_children' : $('event_sector_id_copy_children').checked ? '1' : '0',
        'event_template' : ($('event_template') ? $('event_template').value : '')
      },
      'onComplete':function(responseObject)
      {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
         }
        else
         {
          // On met à jour les valeurs et les libellés dans les champs ad hoc
          var fieldName = 'span_eventcat_id_'+ eventID +'_'+ webtvID +'_'+ inputSuffix;
          $(fieldName +'_VALUE').innerHTML = $('event_eventcat_id').value;
          if ($(fieldName +'_TITLE'))
           {
            $(fieldName +'_TITLE').innerHTML = responseObject.eventcat_url;
            $(fieldName +'_TITLE').previousSibling.title = '';
            $(fieldName +'_TITLE').previousSibling.className = '';
           }

          var fieldName = 'span_event_format_id_'+ eventID +'_'+ webtvID +'_'+ inputSuffix;
          $(fieldName +'_VALUE').innerHTML = $('event_format_id').value;
          if ($(fieldName +'_TITLE'))
           {
            $(fieldName +'_TITLE').innerHTML = responseObject.event_format_url;
            $(fieldName +'_TITLE').previousSibling.title = '';
            $(fieldName +'_TITLE').previousSibling.className = '';
           }

          var fieldName = 'span_event_treat_id_'+ eventID +'_'+ webtvID +'_'+ inputSuffix;
          $(fieldName +'_VALUE').innerHTML = $('event_treat_id').value;
          if ($(fieldName +'_TITLE'))
           {
            $(fieldName +'_TITLE').innerHTML = responseObject.event_treat_url;
            $(fieldName +'_TITLE').previousSibling.title = '';
            $(fieldName +'_TITLE').previousSibling.className = '';
           }

          var fieldName = 'span_event_sector_id_'+ eventID +'_'+ webtvID +'_'+ inputSuffix;
          $(fieldName +'_VALUE').innerHTML = $('event_sector_id').value;
          if ($(fieldName +'_TITLE'))
           {
            $(fieldName +'_TITLE').innerHTML = responseObject.event_sector_url;
            $(fieldName +'_TITLE').previousSibling.title = '';
            $(fieldName +'_TITLE').previousSibling.className = '';
           }

          var fieldName = 'span_event_template_'+ eventID +'_'+ webtvID +'_'+ inputSuffix;
          $(fieldName +'_VALUE').innerHTML = $('event_template').value;
          if ($(fieldName +'_TITLE'))
           {
            $(fieldName +'_TITLE').innerHTML = responseObject.event_template_url;
            $(fieldName +'_TITLE').previousSibling.title = '';
            $(fieldName +'_TITLE').previousSibling.className = '';
           }

          $('generic_zone_edit_cats').innerHTML = '';
          J($('generic_zone_edit_cats')).animate(
             {width: '0px', height: '0px'},
             {duration: 300, complete: function(){
                $('generic_zone_edit_cats').style.display = 'none';
                // "Attention, sachez que ce changement contextuel de gabarit n'influe automatiquement sur AUCUNE [...]
                if (responseObject.template_changed_message)
                  alert(responseObject.template_changed_message.replace(/<br ?\/?>/g, '\r\n'));
             }
           });

          // Affichage contextuel de la liste des webtvs sur lesquelles s'est propagée telle modif contextuelle
          if (responseObject.maj_webtv_urls)
            bind.showMajWebtvUrls(responseObject.maj_webtv_urls, getTop($('generic_zone_edit_cats')));
         }
      }
    });
    request.send();
   },

  // Jean 18/01/2012
  dicoContactDescValues: new Array(),

  // Jean 24/10/2011 : pour dire qu'on a contacté tel membre
  memberContact: function(userID, hasContacted, eventID, webtvID, contactedDesc, forceTextArea, fieldName)
   {
    var imgLoading = $('img_loading_contacted_member_'+ userID +'_'+ eventID +'_'+ webtvID);
    if (imgLoading) imgLoading.style.display = 'inline';

    var textarea = $('TEXTAREA_contacted_member_desc_'+ userID);
    if (!contactedDesc || forceTextArea)
      textarea.style.display = 'none';

    // Ajax
    var bind = this;
    var request = new Request.JSON({
      'method' : 'post',
      'url' : this.options.ajaxURL,
      'data' : {
        'task' : 'member_contact',
        'event_id' : (eventID || this.eventInfo.event_id),
        'webtv_id' : webtvID,
        'user_id' : userID,
        'has_contacted' : (hasContacted ? '1' : '0'),
        'contacted_desc' : (contactedDesc ? contactedDesc : ''),
        'force_contacted_desc' : (forceTextArea ? '1' : '0'),
        'field_name' : (fieldName ? fieldName : '')
      },
      'onComplete':function(responseObject)
       {
        if( $type(responseObject)!="object" || !responseObject.result || responseObject.result=="failure" )
         {
          if (responseObject.error) alert(responseObject.error); // alert(responseObject && responseObject.error ? responseObject.error : 'Erreur côté serveur !');
          else alert(bind.Base.Language.Translate(3000153));
         }
        else
         {
          if (imgLoading)
            imgLoading.style.display = 'none';

          if (responseObject.misc != 'too_early')
           {
            var showTextarea = !contactedDesc && !forceTextArea;
            bind.memberContactDescHideOrShow(userID, showTextarea);
           }
         }
       }
    });

    request.send();
  },

  // Jean 18/01/2012 : montre ou cache la zone de saisie d'un commentaire dans un onglet "CRM"
  memberContactDescHideOrShow: function(userID, showTextarea)
   {
    var textarea = $('TEXTAREA_contacted_member_desc_'+ userID);
    var contactedDescZone = $('contacted_member_desc_'+ userID);

    textarea.style.display = showTextarea ? 'block' : 'none';
    contactedDescZone.style.display = showTextarea ? 'none' : 'block';
    if (showTextarea)
     {
      textarea.focus();
      textarea_autogrow(textarea.id);
     }
    else
      contactedDescZone.innerHTML = textarea.value.replace(/\n/g, '<br>').replace(/^$/, '&nbsp;');
   }

});

