Index: /extensions/TakeATour/js/custom-bootstrap-tour-standalone.js
===================================================================
--- /extensions/TakeATour/js/custom-bootstrap-tour-standalone.js	(revision 28096)
+++ /extensions/TakeATour/js/custom-bootstrap-tour-standalone.js	(revision 28097)
@@ -819,4 +819,12 @@
           _this._debug("Show the orphan step " + (_this._current + 1) + ". Orphans option is true.");
         }
+        if (step.title  === "" & step.content  === "") {
+            if (skipToPrevious) {
+              _this._showPrevStep();
+            } else {
+              _this._showNextStep();
+            }
+            return;
+        }
         if (step.backdrop) {
           _this._showBackdrop(!_this._isOrphan(step) ? step.element : void 0);
@@ -975,5 +983,5 @@
         $.extend(options, step.options);
       }
-      if (step.reflex) {
+      if (step.reflex & !isOrphan) {
         $element.css("cursor", "pointer").on("click.tour-" + this._options.name, (function(_this) {
           return function() {
Index: /extensions/TakeATour/js/custom-bootstrap-tour-standalone.min.js
===================================================================
--- /extensions/TakeATour/js/custom-bootstrap-tour-standalone.min.js	(revision 28096)
+++ /extensions/TakeATour/js/custom-bootstrap-tour-standalone.min.js	(revision 28097)
@@ -1,1216 +1,0 @@
-/* ===========================================================
-# bootstrap-tour - v0.9.0
-# http://bootstraptour.com
-# ==============================================================
-# Copyright 2012-2013 Ulrich Sossou
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-*/
-/* ========================================================================
- * Bootstrap: tooltip.js v3.1.0
- * http://getbootstrap.com/javascript/#tooltip
- * Inspired by the original jQuery.tipsy by Jason Frame
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // TOOLTIP PUBLIC CLASS DEFINITION
-  // ===============================
-
-  var Tooltip = function (element, options) {
-    this.type       =
-    this.options    =
-    this.enabled    =
-    this.timeout    =
-    this.hoverState =
-    this.$element   = null
-
-    this.init('tooltip', element, options)
-  }
-
-  Tooltip.DEFAULTS = {
-    animation: true,
-    placement: 'top',
-    selector: false,
-    template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
-    trigger: 'hover focus',
-    title: '',
-    delay: 0,
-    html: false,
-    container: false
-  }
-
-  Tooltip.prototype.init = function (type, element, options) {
-    this.enabled  = true
-    this.type     = type
-    this.$element = $(element)
-    this.options  = this.getOptions(options)
-
-    var triggers = this.options.trigger.split(' ')
-
-    for (var i = triggers.length; i--;) {
-      var trigger = triggers[i]
-
-      if (trigger == 'click') {
-        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
-      } else if (trigger != 'manual') {
-        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'
-        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
-
-        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
-        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
-      }
-    }
-
-    this.options.selector ?
-      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
-      this.fixTitle()
-  }
-
-  Tooltip.prototype.getDefaults = function () {
-    return Tooltip.DEFAULTS
-  }
-
-  Tooltip.prototype.getOptions = function (options) {
-    options = $.extend({}, this.getDefaults(), this.$element.data(), options)
-
-    if (options.delay && typeof options.delay == 'number') {
-      options.delay = {
-        show: options.delay,
-        hide: options.delay
-      }
-    }
-
-    return options
-  }
-
-  Tooltip.prototype.getDelegateOptions = function () {
-    var options  = {}
-    var defaults = this.getDefaults()
-
-    this._options && $.each(this._options, function (key, value) {
-      if (defaults[key] != value) options[key] = value
-    })
-
-    return options
-  }
-
-  Tooltip.prototype.enter = function (obj) {
-    var self = obj instanceof this.constructor ?
-      obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
-
-    clearTimeout(self.timeout)
-
-    self.hoverState = 'in'
-
-    if (!self.options.delay || !self.options.delay.show) return self.show()
-
-    self.timeout = setTimeout(function () {
-      if (self.hoverState == 'in') self.show()
-    }, self.options.delay.show)
-  }
-
-  Tooltip.prototype.leave = function (obj) {
-    var self = obj instanceof this.constructor ?
-      obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
-
-    clearTimeout(self.timeout)
-
-    self.hoverState = 'out'
-
-    if (!self.options.delay || !self.options.delay.hide) return self.hide()
-
-    self.timeout = setTimeout(function () {
-      if (self.hoverState == 'out') self.hide()
-    }, self.options.delay.hide)
-  }
-
-  Tooltip.prototype.show = function () {
-    var e = $.Event('show.bs.' + this.type)
-
-    if (this.hasContent() && this.enabled) {
-      this.$element.trigger(e)
-
-      if (e.isDefaultPrevented()) return
-      var that = this;
-
-      var $tip = this.tip()
-
-      this.setContent()
-
-      if (this.options.animation) $tip.addClass('fade')
-
-      var placement = typeof this.options.placement == 'function' ?
-        this.options.placement.call(this, $tip[0], this.$element[0]) :
-        this.options.placement
-
-      var autoToken = /\s?auto?\s?/i
-      var autoPlace = autoToken.test(placement)
-      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
-
-      $tip
-        .detach()
-        .css({ top: 0, left: 0, display: 'block' })
-        .addClass(placement)
-
-      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
-
-      var pos          = this.getPosition()
-      var actualWidth  = $tip[0].offsetWidth
-      var actualHeight = $tip[0].offsetHeight
-
-      if (autoPlace) {
-        var $parent = this.$element.parent()
-
-        var orgPlacement = placement
-        var docScroll    = document.documentElement.scrollTop || document.body.scrollTop
-        var parentWidth  = this.options.container == 'body' ? window.innerWidth  : $parent.outerWidth()
-        var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight()
-        var parentLeft   = this.options.container == 'body' ? 0 : $parent.offset().left
-
-        placement = placement == 'bottom' && pos.top   + pos.height  + actualHeight - docScroll > parentHeight  ? 'top'    :
-                    placement == 'top'    && pos.top   - docScroll   - actualHeight < 0                         ? 'bottom' :
-                    placement == 'right'  && pos.right + actualWidth > parentWidth                              ? 'left'   :
-                    placement == 'left'   && pos.left  - actualWidth < parentLeft                               ? 'right'  :
-                    placement
-
-        $tip
-          .removeClass(orgPlacement)
-          .addClass(placement)
-      }
-
-      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
-
-      this.applyPlacement(calculatedOffset, placement)
-      this.hoverState = null
-
-      var complete = function() {
-        that.$element.trigger('shown.bs.' + that.type)
-      }
-
-      $.support.transition && this.$tip.hasClass('fade') ?
-        $tip
-          .one($.support.transition.end, complete)
-          .emulateTransitionEnd(150) :
-        complete()
-    }
-  }
-
-  Tooltip.prototype.applyPlacement = function (offset, placement) {
-    var replace
-    var $tip   = this.tip()
-    var width  = $tip[0].offsetWidth
-    var height = $tip[0].offsetHeight
-
-    // manually read margins because getBoundingClientRect includes difference
-    var marginTop = parseInt($tip.css('margin-top'), 10)
-    var marginLeft = parseInt($tip.css('margin-left'), 10)
-
-    // we must check for NaN for ie 8/9
-    if (isNaN(marginTop))  marginTop  = 0
-    if (isNaN(marginLeft)) marginLeft = 0
-
-    offset.top  = offset.top  + marginTop
-    offset.left = offset.left + marginLeft
-
-    // $.fn.offset doesn't round pixel values
-    // so we use setOffset directly with our own function B-0
-    $.offset.setOffset($tip[0], $.extend({
-      using: function (props) {
-        $tip.css({
-          top: Math.round(props.top),
-          left: Math.round(props.left)
-        })
-      }
-    }, offset), 0)
-
-    $tip.addClass('in')
-
-    // check to see if placing tip in new offset caused the tip to resize itself
-    var actualWidth  = $tip[0].offsetWidth
-    var actualHeight = $tip[0].offsetHeight
-
-    if (placement == 'top' && actualHeight != height) {
-      replace = true
-      offset.top = offset.top + height - actualHeight
-    }
-
-    if (/bottom|top/.test(placement)) {
-      var delta = 0
-
-      if (offset.left < 0) {
-        delta       = offset.left * -2
-        offset.left = 0
-
-        $tip.offset(offset)
-
-        actualWidth  = $tip[0].offsetWidth
-        actualHeight = $tip[0].offsetHeight
-      }
-
-      this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
-    } else {
-      this.replaceArrow(actualHeight - height, actualHeight, 'top')
-    }
-
-    if (replace) $tip.offset(offset)
-  }
-
-  Tooltip.prototype.replaceArrow = function (delta, dimension, position) {
-    this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + '%') : '')
-  }
-
-  Tooltip.prototype.setContent = function () {
-    var $tip  = this.tip()
-    var title = this.getTitle()
-
-    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
-    $tip.removeClass('fade in top bottom left right')
-  }
-
-  Tooltip.prototype.hide = function () {
-    var that = this
-    var $tip = this.tip()
-    var e    = $.Event('hide.bs.' + this.type)
-
-    function complete() {
-      if (that.hoverState != 'in') $tip.detach()
-      that.$element.trigger('hidden.bs.' + that.type)
-    }
-
-    this.$element.trigger(e)
-
-    if (e.isDefaultPrevented()) return
-
-    $tip.removeClass('in')
-
-    $.support.transition && this.$tip.hasClass('fade') ?
-      $tip
-        .one($.support.transition.end, complete)
-        .emulateTransitionEnd(150) :
-      complete()
-
-    this.hoverState = null
-
-    return this
-  }
-
-  Tooltip.prototype.fixTitle = function () {
-    var $e = this.$element
-    if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
-      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
-    }
-  }
-
-  Tooltip.prototype.hasContent = function () {
-    return this.getTitle()
-  }
-
-  Tooltip.prototype.getPosition = function () {
-    var el = this.$element[0]
-    return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
-      width: el.offsetWidth,
-      height: el.offsetHeight
-    }, this.$element.offset())
-  }
-
-  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
-    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2  } :
-           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2  } :
-           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
-        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width   }
-  }
-
-  Tooltip.prototype.getTitle = function () {
-    var title
-    var $e = this.$element
-    var o  = this.options
-
-    title = $e.attr('data-original-title')
-      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)
-
-    return title
-  }
-
-  Tooltip.prototype.tip = function () {
-    return this.$tip = this.$tip || $(this.options.template)
-  }
-
-  Tooltip.prototype.arrow = function () {
-    return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')
-  }
-
-  Tooltip.prototype.validate = function () {
-    if (!this.$element[0].parentNode) {
-      this.hide()
-      this.$element = null
-      this.options  = null
-    }
-  }
-
-  Tooltip.prototype.enable = function () {
-    this.enabled = true
-  }
-
-  Tooltip.prototype.disable = function () {
-    this.enabled = false
-  }
-
-  Tooltip.prototype.toggleEnabled = function () {
-    this.enabled = !this.enabled
-  }
-
-  Tooltip.prototype.toggle = function (e) {
-    var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this
-    self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
-  }
-
-  Tooltip.prototype.destroy = function () {
-    clearTimeout(this.timeout)
-    this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)
-  }
-
-
-  // TOOLTIP PLUGIN DEFINITION
-  // =========================
-
-  var old = $.fn.tooltip
-
-  $.fn.tooltip = function (option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.tooltip')
-      var options = typeof option == 'object' && option
-
-      if (!data && option == 'destroy') return
-      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.tooltip.Constructor = Tooltip
-
-
-  // TOOLTIP NO CONFLICT
-  // ===================
-
-  $.fn.tooltip.noConflict = function () {
-    $.fn.tooltip = old
-    return this
-  }
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: popover.js v3.1.0
- * http://getbootstrap.com/javascript/#popovers
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // POPOVER PUBLIC CLASS DEFINITION
-  // ===============================
-
-  var Popover = function (element, options) {
-    this.init('popover', element, options)
-  }
-
-  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
-
-  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
-    placement: 'right',
-    trigger: 'click',
-    content: '',
-    template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
-  })
-
-
-  // NOTE: POPOVER EXTENDS tooltip.js
-  // ================================
-
-  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
-
-  Popover.prototype.constructor = Popover
-
-  Popover.prototype.getDefaults = function () {
-    return Popover.DEFAULTS
-  }
-
-  Popover.prototype.setContent = function () {
-    var $tip    = this.tip()
-    var title   = this.getTitle()
-    var content = this.getContent()
-
-    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
-    $tip.find('.popover-content')[ // we use append for html objects to maintain js events
-      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
-    ](content)
-
-    $tip.removeClass('fade top bottom left right in')
-
-    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
-    // this manually by checking the contents.
-    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
-  }
-
-  Popover.prototype.hasContent = function () {
-    return this.getTitle() || this.getContent()
-  }
-
-  Popover.prototype.getContent = function () {
-    var $e = this.$element
-    var o  = this.options
-
-    return $e.attr('data-content')
-      || (typeof o.content == 'function' ?
-            o.content.call($e[0]) :
-            o.content)
-  }
-
-  Popover.prototype.arrow = function () {
-    return this.$arrow = this.$arrow || this.tip().find('.arrow')
-  }
-
-  Popover.prototype.tip = function () {
-    if (!this.$tip) this.$tip = $(this.options.template)
-    return this.$tip
-  }
-
-
-  // POPOVER PLUGIN DEFINITION
-  // =========================
-
-  var old = $.fn.popover
-
-  $.fn.popover = function (option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.popover')
-      var options = typeof option == 'object' && option
-
-      if (!data && option == 'destroy') return
-      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.popover.Constructor = Popover
-
-
-  // POPOVER NO CONFLICT
-  // ===================
-
-  $.fn.popover.noConflict = function () {
-    $.fn.popover = old
-    return this
-  }
-
-}(jQuery);
-
-(function($, window) {
-  var Tour, document;
-  document = window.document;
-  Tour = (function() {
-    function Tour(options) {
-      this._options = $.extend({
-        name: "tour",
-        steps: [],
-        container: "body",
-        keyboard: true,
-        storage: window.localStorage,
-        debug: false,
-        backdrop: false,
-        redirect: true,
-        orphan: false,
-        duration: false,
-        basePath: "",
-        template: "<div class='popover'>          <div class='arrow'></div>          <h3 class='popover-title'></h3>          <div class='popover-content'></div>          <div class='popover-navigation'>            <div class='btn-group'>              <button class='btn btn-sm btn-default' data-role='prev'>&laquo; Prev</button>              <button class='btn btn-sm btn-default' data-role='next'>Next &raquo;</button>              <button class='btn btn-sm btn-default' data-role='pause-resume' data-pause-text='Pause' data-resume-text='Resume'>Pause</button>            </div>            <button class='btn btn-sm btn-default' data-role='end'>End tour</button>          </div>        </div>",
-        afterSetState: function(key, value) {},
-        afterGetState: function(key, value) {},
-        afterRemoveState: function(key) {},
-        onStart: function(tour) {},
-        onEnd: function(tour) {},
-        onShow: function(tour) {},
-        onShown: function(tour) {},
-        onHide: function(tour) {},
-        onHidden: function(tour) {},
-        onNext: function(tour) {},
-        onPrev: function(tour) {},
-        onPause: function(tour, duration) {},
-        onResume: function(tour, duration) {}
-      }, options);
-      this._force = false;
-      this._inited = false;
-      this.backdrop = {
-        overlay: null,
-        $element: null,
-        $background: null,
-        backgroundShown: false,
-        overlayElementShown: false
-      };
-      this;
-    }
-
-    Tour.prototype.addSteps = function(steps) {
-      var step, _i, _len;
-      for (_i = 0, _len = steps.length; _i < _len; _i++) {
-        step = steps[_i];
-        this.addStep(step);
-      }
-      return this;
-    };
-
-    Tour.prototype.addStep = function(step) {
-      this._options.steps.push(step);
-      return this;
-    };
-
-    Tour.prototype.getStep = function(i) {
-      if (this._options.steps[i] != null) {
-        return $.extend({
-          id: "step-" + i,
-          path: "",
-          placement: "right",
-          title: "",
-          content: "<p></p>",
-          next: i === this._options.steps.length - 1 ? -1 : i + 1,
-          prev: i - 1,
-          animation: true,
-          container: this._options.container,
-          backdrop: this._options.backdrop,
-          redirect: this._options.redirect,
-          orphan: this._options.orphan,
-          duration: this._options.duration,
-          template: this._options.template,
-          onShow: this._options.onShow,
-          onShown: this._options.onShown,
-          onHide: this._options.onHide,
-          onHidden: this._options.onHidden,
-          onNext: this._options.onNext,
-          onPrev: this._options.onPrev,
-          onPause: this._options.onPause,
-          onResume: this._options.onResume
-        }, this._options.steps[i]);
-      }
-    };
-
-    Tour.prototype.init = function(force) {
-      var _this = this;
-      this._force = force;
-      if (this.ended()) {
-        this._debug("Tour ended, init prevented.");
-        return this;
-      }
-      this.setCurrentStep();
-      this._initMouseNavigation();
-      this._initKeyboardNavigation();
-      this._onResize(function() {
-        return _this.showStep(_this._current);
-      });
-      if (this._current !== null) {
-        this.showStep(this._current);
-      }
-      this._inited = true;
-      return this;
-    };
-
-    Tour.prototype.start = function(force) {
-      var promise;
-      if (force == null) {
-        force = false;
-      }
-      if (!this._inited) {
-        this.init(force);
-      }
-      if (this._current === null) {
-        promise = this._makePromise(this._options.onStart != null ? this._options.onStart(this) : void 0);
-        this._callOnPromiseDone(promise, this.showStep, 0);
-      }
-      return this;
-    };
-
-    Tour.prototype.next = function() {
-      var promise;
-      promise = this.hideStep(this._current);
-      return this._callOnPromiseDone(promise, this._showNextStep);
-    };
-
-    Tour.prototype.prev = function() {
-      var promise;
-      promise = this.hideStep(this._current);
-      return this._callOnPromiseDone(promise, this._showPrevStep);
-    };
-
-    Tour.prototype.goTo = function(i) {
-      var promise;
-      promise = this.hideStep(this._current);
-      return this._callOnPromiseDone(promise, this.showStep, i);
-    };
-
-    Tour.prototype.end = function() {
-      var endHelper, promise,
-        _this = this;
-      endHelper = function(e) {
-        $(document).off("click.tour-" + _this._options.name);
-        $(document).off("keyup.tour-" + _this._options.name);
-        $(window).off("resize.tour-" + _this._options.name);
-        _this._setState("end", "yes");
-        _this._inited = false;
-        _this._force = false;
-        _this._clearTimer();
-        if (_this._options.onEnd != null) {
-          return _this._options.onEnd(_this);
-        }
-      };
-      promise = this.hideStep(this._current);
-      return this._callOnPromiseDone(promise, endHelper);
-    };
-
-    Tour.prototype.ended = function() {
-      return !this._force && !!this._getState("end");
-    };
-
-    Tour.prototype.restart = function() {
-      this._removeState("current_step");
-      this._removeState("end");
-      this.setCurrentStep(0);
-      return this.start();
-    };
-
-    Tour.prototype.pause = function() {
-      var step;
-      step = this.getStep(this._current);
-      if (!(step && step.duration)) {
-        return this;
-      }
-      this._paused = true;
-      this._duration -= new Date().getTime() - this._start;
-      window.clearTimeout(this._timer);
-      this._debug("Paused/Stopped step " + (this._current + 1) + " timer (" + this._duration + " remaining).");
-      if (step.onPause != null) {
-        return step.onPause(this, this._duration);
-      }
-    };
-
-    Tour.prototype.resume = function() {
-      var step,
-        _this = this;
-      step = this.getStep(this._current);
-      if (!(step && step.duration)) {
-        return this;
-      }
-      this._paused = false;
-      this._start = new Date().getTime();
-      this._duration = this._duration || step.duration;
-      this._timer = window.setTimeout(function() {
-        if (_this._isLast()) {
-          return _this.next();
-        } else {
-          return _this.end();
-        }
-      }, this._duration);
-      this._debug("Started step " + (this._current + 1) + " timer with duration " + this._duration);
-      if ((step.onResume != null) && this._duration !== step.duration) {
-        return step.onResume(this, this._duration);
-      }
-    };
-
-    Tour.prototype.hideStep = function(i) {
-      var hideStepHelper, promise, step,
-        _this = this;
-      step = this.getStep(i);
-      if (!step) {
-        return;
-      }
-      this._clearTimer();
-      promise = this._makePromise(step.onHide != null ? step.onHide(this, i) : void 0);
-      hideStepHelper = function(e) {
-        var $element;
-        $element = $(step.element);
-        if (!($element.data("bs.popover") || $element.data("popover"))) {
-          $element = $("body");
-        }
-        $element.popover("destroy");
-        if (step.reflex) {
-          $element.css("cursor", "").off("click.tour-" + _this._options.name);
-        }
-        if (step.backdrop) {
-          _this._hideBackdrop();
-        }
-        if (step.onHidden != null) {
-          return step.onHidden(_this);
-        }
-      };
-      this._callOnPromiseDone(promise, hideStepHelper);
-      return promise;
-    };
-
-    Tour.prototype.showStep = function(i) {
-      var promise, showStepHelper, skipToPrevious, step,
-        _this = this;
-      if (this.ended()) {
-        this._debug("Tour ended, showStep prevented.");
-        return this;
-      }
-      step = this.getStep(i);
-      if (!step) {
-        return;
-      }
-      skipToPrevious = i < this._current;
-      promise = this._makePromise(step.onShow != null ? step.onShow(this, i) : void 0);
-      showStepHelper = function(e) {
-        var current_path, path;
-        _this.setCurrentStep(i);
-        path = (function() {
-          switch (toString.call(step.path)) {
-            case "[object Function]":
-              return step.path();
-            case "[object String]":
-              return this._options.basePath + step.path;
-            default:
-              return step.path;
-          }
-        }).call(_this);
-        current_path = [document.location.pathname, document.location.hash].join("?");
-        window.console.log(current_path);
-        console.log(current_path);
-        console.log("FUCK");
-        if (_this._isRedirect(path, current_path)) {
-          //_this._redirect(step, path);
-          console.log(current_path);
-          console.log(path);
-          return;
-        }
-        if (_this._isOrphan(step)) {
-          if (!step.orphan) {
-            _this._debug("Skip the orphan step " + (_this._current + 1) + ". Orphan option is false and the element doesn't exist or is hidden.");
-            if (skipToPrevious) {
-              _this._showPrevStep();
-            } else {
-              _this._showNextStep();
-            }
-            return;
-          }
-          _this._debug("Show the orphan step " + (_this._current + 1) + ". Orphans option is true.");
-        }
-        if (step.backdrop) {
-          _this._showBackdrop(!_this._isOrphan(step) ? step.element : void 0);
-        }
-        _this._scrollIntoView(step.element, function() {
-          if ((step.element != null) && step.backdrop) {
-            _this._showOverlayElement(step.element);
-          }
-          _this._showPopover(step, i);
-          if (step.onShown != null) {
-            step.onShown(_this);
-          }
-          return _this._debug("Step " + (_this._current + 1) + " of " + _this._options.steps.length);
-        });
-        if (step.duration) {
-          return _this.resume();
-        }
-      };
-      this._callOnPromiseDone(promise, showStepHelper);
-      return promise;
-    };
-
-    Tour.prototype.getCurrentStep = function() {
-      return this._current;
-    };
-
-    Tour.prototype.setCurrentStep = function(value) {
-      if (value != null) {
-        this._current = value;
-        this._setState("current_step", value);
-      } else {
-        this._current = this._getState("current_step");
-        this._current = this._current === null ? null : parseInt(this._current, 10);
-      }
-      return this;
-    };
-
-    Tour.prototype._setState = function(key, value) {
-      var e, keyName;
-      if (this._options.storage) {
-        keyName = "" + this._options.name + "_" + key;
-        try {
-          this._options.storage.setItem(keyName, value);
-        } catch (_error) {
-          e = _error;
-          if (e.code === DOMException.QUOTA_EXCEEDED_ERR) {
-            this.debug("LocalStorage quota exceeded. State storage failed.");
-          }
-        }
-        return this._options.afterSetState(keyName, value);
-      } else {
-        if (this._state == null) {
-          this._state = {};
-        }
-        return this._state[key] = value;
-      }
-    };
-
-    Tour.prototype._removeState = function(key) {
-      var keyName;
-      if (this._options.storage) {
-        keyName = "" + this._options.name + "_" + key;
-        this._options.storage.removeItem(keyName);
-        return this._options.afterRemoveState(keyName);
-      } else {
-        if (this._state != null) {
-          return delete this._state[key];
-        }
-      }
-    };
-
-    Tour.prototype._getState = function(key) {
-      var keyName, value;
-      if (this._options.storage) {
-        keyName = "" + this._options.name + "_" + key;
-        value = this._options.storage.getItem(keyName);
-      } else {
-        if (this._state != null) {
-          value = this._state[key];
-        }
-      }
-      if (value === void 0 || value === "null") {
-        value = null;
-      }
-      this._options.afterGetState(key, value);
-      return value;
-    };
-
-    Tour.prototype._showNextStep = function() {
-      var promise, showNextStepHelper, step,
-        _this = this;
-      step = this.getStep(this._current);
-      showNextStepHelper = function(e) {
-        return _this.showStep(step.next);
-      };
-      promise = this._makePromise(step.onNext != null ? step.onNext(this) : void 0);
-      return this._callOnPromiseDone(promise, showNextStepHelper);
-    };
-
-    Tour.prototype._showPrevStep = function() {
-      var promise, showPrevStepHelper, step,
-        _this = this;
-      step = this.getStep(this._current);
-      showPrevStepHelper = function(e) {
-        return _this.showStep(step.prev);
-      };
-      promise = this._makePromise(step.onPrev != null ? step.onPrev(this) : void 0);
-      return this._callOnPromiseDone(promise, showPrevStepHelper);
-    };
-
-    Tour.prototype._debug = function(text) {
-      if (this._options.debug) {
-        return window.console.log("Bootstrap Tour '" + this._options.name + "' | " + text);
-      }
-    };
-
-    Tour.prototype._isRedirect = function(path, currentPath) {
-      console.log(path.replace(/\?.*$/, "").replace(/\/?$/, ""));
-      console.log(currentPath.replace(/\/?$/, ""));
-      return (path != null) && path !== "" && ((toString.call(path) === "[object RegExp]" && !path.test(currentPath)) || (toString.call(path) === "[object String]" && path.replace(/\?.*$/, "").replace(/\/?$/, "") !== currentPath.replace(/\/?$/, "")));
-    };
-
-    Tour.prototype._redirect = function(step, path) {
-      if ($.isFunction(step.redirect)) {
-        return step.redirect.call(this, path);
-      } else if (step.redirect === true) {
-        this._debug("Redirect to " + path);
-        return document.location.href = path;
-      }
-    };
-
-    Tour.prototype._isOrphan = function(step) {
-      return (step.element == null) || !$(step.element).length || $(step.element).is(":hidden") && ($(step.element)[0].namespaceURI !== "http://www.w3.org/2000/svg");
-    };
-
-    Tour.prototype._isLast = function() {
-      return this._current < this._options.steps.length - 1;
-    };
-
-    Tour.prototype._showPopover = function(step, i) {
-      var $element, $navigation, $template, $tip, isOrphan, options,
-        _this = this;
-      options = $.extend({}, this._options);
-      $template = $.isFunction(step.template) ? $(step.template(i, step)) : $(step.template);
-      $navigation = $template.find(".popover-navigation");
-      isOrphan = this._isOrphan(step);
-      if (isOrphan) {
-        step.element = "body";
-        step.placement = "top";
-        $template = $template.addClass("orphan");
-      }
-      $element = $(step.element);
-      $template.addClass("tour-" + this._options.name + " tour-" + this._options.name + "-" + i);
-      if (step.options) {
-        $.extend(options, step.options);
-      }
-      if (step.reflex) {
-        $element.css("cursor", "pointer").on("click.tour-" + this._options.name, function() {
-          if (_this._isLast()) {
-            return _this.next();
-          } else {
-            return _this.end();
-          }
-        });
-      }
-      if (step.prev < 0) {
-        $navigation.find("[data-role='prev']").addClass("disabled");
-      }
-      if (step.next < 0) {
-        $navigation.find("[data-role='next']").addClass("disabled");
-      }
-      if (!step.duration) {
-        $navigation.find("[data-role='pause-resume']").remove();
-      }
-      step.template = $template.clone().wrap("<div>").parent().html();
-      $element.popover({
-        placement: step.placement,
-        trigger: "manual",
-        title: step.title,
-        content: step.content,
-        html: true,
-        animation: step.animation,
-        container: step.container,
-        template: step.template,
-        selector: step.element
-      }).popover("show");
-      $tip = $element.data("bs.popover") ? $element.data("bs.popover").tip() : $element.data("popover").tip();
-      $tip.attr("id", step.id);
-      this._reposition($tip, step);
-      if (isOrphan) {
-        return this._center($tip);
-      }
-    };
-
-    Tour.prototype._reposition = function($tip, step) {
-      var offsetBottom, offsetHeight, offsetRight, offsetWidth, originalLeft, originalTop, tipOffset;
-      offsetWidth = $tip[0].offsetWidth;
-      offsetHeight = $tip[0].offsetHeight;
-      tipOffset = $tip.offset();
-      originalLeft = tipOffset.left;
-      originalTop = tipOffset.top;
-      offsetBottom = $(document).outerHeight() - tipOffset.top - $tip.outerHeight();
-      if (offsetBottom < 0) {
-        tipOffset.top = tipOffset.top + offsetBottom;
-      }
-      offsetRight = $("html").outerWidth() - tipOffset.left - $tip.outerWidth();
-      if (offsetRight < 0) {
-        tipOffset.left = tipOffset.left + offsetRight;
-      }
-      if (tipOffset.top < 0) {
-        tipOffset.top = 0;
-      }
-      if (tipOffset.left < 0) {
-        tipOffset.left = 0;
-      }
-      $tip.offset(tipOffset);
-      if (step.placement === "bottom" || step.placement === "top") {
-        if (originalLeft !== tipOffset.left) {
-          return this._replaceArrow($tip, (tipOffset.left - originalLeft) * 2, offsetWidth, "left");
-        }
-      } else {
-        if (originalTop !== tipOffset.top) {
-          return this._replaceArrow($tip, (tipOffset.top - originalTop) * 2, offsetHeight, "top");
-        }
-      }
-    };
-
-    Tour.prototype._center = function($tip) {
-      return $tip.css("top", $(window).outerHeight() / 2 - $tip.outerHeight() / 2);
-    };
-
-    Tour.prototype._replaceArrow = function($tip, delta, dimension, position) {
-      return $tip.find(".arrow").css(position, delta ? 50 * (1 - delta / dimension) + "%" : "");
-    };
-
-    Tour.prototype._scrollIntoView = function(element, callback) {
-      var $element, $window, counter, offsetTop, scrollTop, windowHeight,
-        _this = this;
-      $element = $(element);
-      if (!$element.length) {
-        return callback();
-      }
-      $window = $(window);
-      offsetTop = $element.offset().top;
-      windowHeight = $window.height();
-      scrollTop = Math.max(0, offsetTop - (windowHeight / 2));
-      this._debug("Scroll into view. ScrollTop: " + scrollTop + ". Element offset: " + offsetTop + ". Window height: " + windowHeight + ".");
-      counter = 0;
-      return $("body,html").stop(true, true).animate({
-        scrollTop: Math.ceil(scrollTop)
-      }, function() {
-        if (++counter === 2) {
-          callback();
-          return _this._debug("Scroll into view. Animation end element offset: " + ($element.offset().top) + ". Window height: " + ($window.height()) + ".");
-        }
-      });
-    };
-
-    Tour.prototype._onResize = function(callback, timeout) {
-      return $(window).on("resize.tour-" + this._options.name, function() {
-        clearTimeout(timeout);
-        return timeout = setTimeout(callback, 100);
-      });
-    };
-
-    Tour.prototype._initMouseNavigation = function() {
-      var _this = this;
-      _this = this;
-      return $(document).off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='prev']:not(.disabled)").off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='next']:not(.disabled)").off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='end']").off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='pause-resume']").on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='next']:not(.disabled)", function(e) {
-        e.preventDefault();
-        return _this.next();
-      }).on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='prev']:not(.disabled)", function(e) {
-        e.preventDefault();
-        return _this.prev();
-      }).on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='end']", function(e) {
-        e.preventDefault();
-        return _this.end();
-      }).on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='pause-resume']", function(e) {
-        var $this;
-        e.preventDefault();
-        $this = $(this);
-        $this.text(_this._paused ? $this.data("pause-text") : $this.data("resume-text"));
-        if (_this._paused) {
-          return _this.resume();
-        } else {
-          return _this.pause();
-        }
-      });
-    };
-
-    Tour.prototype._initKeyboardNavigation = function() {
-      var _this = this;
-      if (!this._options.keyboard) {
-        return;
-      }
-      return $(document).on("keyup.tour-" + this._options.name, function(e) {
-        if (!e.which) {
-          return;
-        }
-        switch (e.which) {
-          case 39:
-            e.preventDefault();
-            if (_this._isLast()) {
-              return _this.next();
-            } else {
-              return _this.end();
-            }
-            break;
-          case 37:
-            e.preventDefault();
-            if (_this._current > 0) {
-              return _this.prev();
-            }
-            break;
-          case 27:
-            e.preventDefault();
-            return _this.end();
-        }
-      });
-    };
-
-    Tour.prototype._makePromise = function(result) {
-      if (result && $.isFunction(result.then)) {
-        return result;
-      } else {
-        return null;
-      }
-    };
-
-    Tour.prototype._callOnPromiseDone = function(promise, cb, arg) {
-      var _this = this;
-      if (promise) {
-        return promise.then(function(e) {
-          return cb.call(_this, arg);
-        });
-      } else {
-        return cb.call(this, arg);
-      }
-    };
-
-    Tour.prototype._showBackdrop = function(element) {
-      if (this.backdrop.backgroundShown) {
-        return;
-      }
-      this.backdrop = $("<div/>", {
-        "class": "tour-backdrop"
-      });
-      this.backdrop.backgroundShown = true;
-      return $("body").append(this.backdrop);
-    };
-
-    Tour.prototype._hideBackdrop = function() {
-      this._hideOverlayElement();
-      return this._hideBackground();
-    };
-
-    Tour.prototype._hideBackground = function() {
-      this.backdrop.remove();
-      this.backdrop.overlay = null;
-      return this.backdrop.backgroundShown = false;
-    };
-
-    Tour.prototype._showOverlayElement = function(element) {
-      var $background, $element, offset;
-      $element = $(element);
-      if (!$element || $element.length === 0 || this.backdrop.overlayElementShown) {
-        return;
-      }
-      this.backdrop.overlayElementShown = true;
-      $background = $("<div/>");
-      offset = $element.offset();
-      offset.top = offset.top;
-      offset.left = offset.left;
-      $background.width($element.innerWidth()).height($element.innerHeight()).addClass("tour-step-background").offset(offset);
-      $element.addClass("tour-step-backdrop");
-      $("body").append($background);
-      this.backdrop.$element = $element;
-      return this.backdrop.$background = $background;
-    };
-
-    Tour.prototype._hideOverlayElement = function() {
-      if (!this.backdrop.overlayElementShown) {
-        return;
-      }
-      this.backdrop.$element.removeClass("tour-step-backdrop");
-      this.backdrop.$background.remove();
-      this.backdrop.$element = null;
-      this.backdrop.$background = null;
-      return this.backdrop.overlayElementShown = false;
-    };
-
-    Tour.prototype._clearTimer = function() {
-      window.clearTimeout(this._timer);
-      this._timer = null;
-      return this._duration = null;
-    };
-
-    return Tour;
-
-  })();
-  return window.Tour = Tour;
-})(jQuery, window);
Index: /extensions/TakeATour/language/en_UK/description.txt
===================================================================
--- /extensions/TakeATour/language/en_UK/description.txt	(revision 28096)
+++ /extensions/TakeATour/language/en_UK/description.txt	(revision 28097)
@@ -1,1 +1,1 @@
-Visit your Piwigo to learn how to use it. This plugin has multiple thematic tours for beginners and advanced users.
+Visit your Piwigo to discover its features. This plugin has multiple thematic tours for beginners and advanced users.
Index: /extensions/TakeATour/language/en_UK/plugin.lang.php
===================================================================
--- /extensions/TakeATour/language/en_UK/plugin.lang.php	(revision 28096)
+++ /extensions/TakeATour/language/en_UK/plugin.lang.php	(revision 28097)
@@ -1,9 +1,94 @@
 <?php
-$lang['First Contact'] = 'Premier contact';
-$lang['Launch the Tour'] = 'Commencez la visite';
-$lang[''] = '';
-$lang['Welcome in your Piwigo gallery'] = 'Bienvenue dans votre galerie Piwigo';
-$lang['Step_1 Let\'s start by adding pictures'] = 'Bonjour, à travers ce guide, vous allez comprendre comment utiliser votre galerie et avoir un aperçu des fonctionnalités offertes';
-$lang[''] = '';
+$lang['First Contact'] = 'First Contact';
+$lang['Start the Tour'] = 'Start the Tour';
+
+$lang['first_contact_descrp'] = 'Recommended for beginners, this tour introduce you Piwigo, its basic features. It will start by adding pictures, then manage them. The tour continues with album management and permissions, and ends on the customization using the configuration, the themes and the plugins.';
+$lang['first_contact_title1'] = 'Welcome in your Piwigo gallery';
+$lang['first_contact_stp1'] = 'Hello! I will be your guide to discover Piwigo. Please follow my instructions, and click Next (or use the arrows of your keyboard) to navigate. If you go in an other page of the administration, you will be redirected to the current page of the Tour.<br>Let\'s start by adding pictures!';
+$lang['first_contact_title2'] = '';
+$lang['first_contact_stp2'] = 'The link is here. Click Next to continue';
+$lang['first_contact_title3'] = 'Add Photo Page';
+$lang['first_contact_stp3'] = 'First tab to add photos from your browser, other tabs to add from a software, mobile or FTP';
+$lang['first_contact_title4'] = 'Lets add photo!';
+$lang['first_contact_stp4'] = 'First choose an album; create one if there is no album yet.';
+$lang['first_contact_title5'] = '';
+$lang['first_contact_stp5'] = 'Then click the button to select photos to send from your computer';
+$lang['first_contact_stp5'] = '';
+$lang['first_contact_title6'] = '';
+$lang['first_contact_stp6'] = 'You see that photos are being listed. Add at least 2 pictures and when you\'re ready click the button Start Upload';
+$lang['first_contact_title7'] = '';
+$lang['first_contact_stp7'] = 'Here a summary of your uploaded pictures. See that Piwigo has generated itself the thumbnails. You can know add more photos with the link at the bottom, edit the properties of a picture by cliking on it, or click to manage all the uploaded pictures in the Batch Manager...';
+$lang['first_contact_title8'] = '';
+$lang['first_contact_stp8'] = 'Let\'s edit them! Click on the link. If you don\'t see it click Prev to add at least 2 photos.';
+$lang['first_contact_title9'] = 'The Batch Manager';
+$lang['first_contact_stp9'] = 'You are know in the Batch Manager, where you can batch edit multiple pictures. Here the Caddy is set as a filter because we comes from the upload result page.';
+$lang['first_contact_title10'] = '';
+$lang['first_contact_stp10'] = 'Here is the link to directly access to your caddy: that/s a tool for administrators to easily add pictures to a set in order to edit them in the Batch Manager. You can add photos to the caddy from the public picture page when logged as an admin, or using the action \"Add to caddy\" on the Batch Manager';
+$lang['first_contact_title11'] = 'How to edit a photos';
+$lang['first_contact_stp11'] = 'So you can select from here one or more photos';
+$lang['first_contact_title12'] = '';
+$lang['first_contact_stp12'] = 'then edit them using and action. But for instance, you can\'t -for now- batch edit descriptions since they are mostly unique';
+$lang['first_contact_title13'] = '';
+$lang['first_contact_stp13'] = 'You can edit descriptions and more from the batch manager in unit mode. But for now, let\'s stay in the global mode';
+$lang['first_contact_title14'] = '';
+$lang['first_contact_stp14'] = 'We will see now the edition page of one picture. That page is reachable from here but also from the public picture page when logged as an administrator. Click on Edit or go next';
+$lang['first_contact_title15'] = 'The edition page of a picture';
+$lang['first_contact_stp15'] = 'On that page you can edit all the properties of a photo, for instance...';
+$lang['first_contact_title16'] = '';
+$lang['first_contact_stp16'] = 'here to add or remove the photo from albums. The link is virtual, no photos will be physcally moved ever.';
+$lang['first_contact_title17'] = '';
+$lang['first_contact_stp17'] = 'and here to set the photo as a picture representative of an album. So you can set as a representative of a public album, a photo in a private album, which is ideal to set custom thumbnails for albums but the user won\'t see those pictures inside those albums. Like setting a portrait of someone as representative, for an album which contains photos of nature; it would be weird to see that photo of the man/woman among trees or animals.';
+$lang['first_contact_title18'] = 'Manage albums';
+$lang['first_contact_stp18'] = 'That previous example was just a small overview of tricks and how powerfull Piwigo is. So I\'ve told about private albums, but how can we manage albums? Click On album->Manage or hit Next';
+$lang['first_contact_title19'] = 'Manage Albums';
+$lang['first_contact_stp19'] = 'Here are listed all the \'top\' albums, the ones at the root of your gallery. If you see an album with a dashed backgroung, it\'s an real physical album from a FTP synchro, which can\'t be moved or deleted from here. The others albums are called virtual albums.';
+$lang['first_contact_title20'] = 'Manage Albums';
+$lang['first_contact_stp20'] = 'When your mouse is hover a album, links and information appear. When you drag and drop an album -a rounded block-, you will change its position and then you can save or cancel your manual order.';
+$lang['first_contact_title21'] = 'Other Tabs';
+$lang['first_contact_stp21'] = 'The next tab is a page where you can move any virtual album.<br>The permalink tab is to set a particular url for an album, for tecnhical reasons like to set a specific template or for just sending cool customized links.<br>But let\'s edit an album: click on Edit of a album';
+$lang['first_contact_title22'] = 'Album Edition Page';
+$lang['first_contact_stp22'] = 'Like for a picture, here you can edit the properties of an album';
+$lang['first_contact_title23'] = '';
+$lang['first_contact_stp23'] = 'Locking a album means only administrators will be able to see that album: it\'s usually used when an admin is managing the properties of an album or don\'t want to publish the album immediatly';
+$lang['first_contact_title24'] = '';
+$lang['first_contact_stp24'] = 'Certainly, one of the most important page is the permission page of a private album. Click on the permission tab or click next';
+$lang['first_contact_title25'] = 'Album Permission';
+$lang['first_contact_stp25'] = 'As you can read in the Help of your Piwigo -link at the top right-, album permissions are set by groups and users. You can directly set private/public multiple albums using the Administration » Albums » Properties page.';
+$lang['first_contact_title26'] = '';
+$lang['first_contact_stp26'] = 'Here you can set the current album as private, then grant access to users and groups. By default, permissions are not recursive for sub albums, but upper-albums will be granted with the same permission in order to let the granted users browse to the album.';
+$lang['first_contact_title27'] = '';
+$lang['first_contact_stp27'] = 'Important fact: the webmasters and administrators are not omniscient when browsing the public part, but they can access to every album and photos on the admin part.';
+$lang['first_contact_title28'] = 'Configuration';
+$lang['first_contact_stp28'] = 'Now we will look at the options available to set Piwigo working your way. Click on Configuration->Options or just hit Next.';
+$lang['first_contact_title29'] = 'Configuration->Options->General';
+$lang['first_contact_stp29'] = 'Here, on that first page, you will set the essential and basic configuration of your gallery.';
+$lang['first_contact_title30'] = '';
+$lang['first_contact_stp30'] = 'Let\'s start by changing the tittle';
+$lang['first_contact_title31'] = '';
+$lang['first_contact_stp31'] = 'Then the banner, which will be displayed on top of every pages. As you can see, HTML tags are allowed here. You can also use the %gallery_title% tag to display the tittle you just typed above.';
+$lang['first_contact_title32'] = '';
+$lang['first_contact_stp32'] = 'Now save you changes';
+$lang['first_contact_title33'] = 'Guest settings';
+$lang['first_contact_stp33'] = 'Just a final word about the options, the \'Guest settings\' page is to set the preferences of unregistered visitors. Each time Piwigo refers to \'guest\' that means unregistered visitors.<br>Let\'s continue about Configuration: click on Configuration->Themes or just hit Next.';
+$lang['first_contact_title34'] = 'Themes';
+$lang['first_contact_stp34'] = 'Themes are one of the three way to customize your Piwigo, with Plugins and Templates. Themes installed are listed here.<br>More than one theme can be enabled: users can change their theme by choosing one among the one enabled here, if the option \'Allow user customization\' is checked on the Option page.';
+$lang['first_contact_title35'] = 'Themes';
+$lang['first_contact_stp35'] = 'Themes can also be set as Default, which means that\'s the theme for unregistred visitors (guests, you remember?) and any new registred user will be have this theme. But for any previously registred users, the theme won\'t change until you do it from the User Management page or you disable their theme: be carefull, you might disturb your users by changing their whole display.';
+$lang['first_contact_title36'] = 'Themes';
+$lang['first_contact_stp36'] = 'Themes have a system of dependency: that\'s why some theme can\'t be deleted (a parent theme can\'t be deleted if a child theme is enabled) or others can\'t be enabled (a child theme need its parent theme). For instance, when you put you\'re mouse over a Delete link, if the theme can\'t be deleted, a information bubble will explain you why.';
+$lang['first_contact_title37'] = 'Themes';
+$lang['first_contact_stp37'] = 'To install new themes, you can directly download them from the tab \'Add a theme\'. Only the themes marked as compatible with your version of Piwigo are showed.<br>Let\'s discover the plugins now! Click on Plugin->Manage';
+$lang['first_contact_title38'] = 'Plugins';
+$lang['first_contact_stp38'] = 'Plugins are very easy ways to customize your Piwigo. They can do almost anything you can imagine from small text addition to complete features, like the Community plugin which allows non admistrators users to upload without entering to the administration part.';
+$lang['first_contact_title39'] = 'Plugins';
+$lang['first_contact_stp39'] = 'On that first page, are listed the installed plugins. At the top, are listed the plugins activated, which are currently running. At the bottom, the plugins which are installed in the /plugins folder, but disabled. Deleting a plugin means that any trace of the plugin will be removed (files, options etc). For most of the plugins, disabling will keep the data registered by the plugins.';
+$lang['first_contact_title40'] = '';
+$lang['first_contact_stp40'] = 'Here it\'s me! Don\'t disable me now, but you can see you can Disable or Restore an activated plugin.';
+$lang['first_contact_title41'] = '';
+$lang['first_contact_stp41'] = 'You can see on the last tab all the plugins available for your version of Piwigo. Hundred of plugins are there!';
+$lang['first_contact_title42'] = 'Languages';
+$lang['first_contact_stp42'] = 'Piwigo is multilingual. By default, the language displayed by Piwigo change according to the language of the browser of the visitor. If the language of the visitor is not availble, the language set by default is used.';
+$lang['first_contact_title43'] = 'It\'s been a great time';
+$lang['first_contact_stp43'] = 'This tour was quite long, but we only have seen a small part of how powerfull Piwigo is. Everything has a end, this overview is finished.<br>You can discover much deeper the features of Piwigo by taking an other tour or reading our documentation, on the piwigo.org website.';
 $lang[''] = '';
 $lang[''] = '';
Index: /extensions/TakeATour/language/fr_FR/plugin.lang.php
===================================================================
--- /extensions/TakeATour/language/fr_FR/plugin.lang.php	(revision 28096)
+++ /extensions/TakeATour/language/fr_FR/plugin.lang.php	(revision 28097)
@@ -1,5 +1,5 @@
 <?php
 $lang['First Contact'] = 'Premier contact';
-$lang['Launch the Tour'] = 'Commencez la visite';
+$lang['Start the Tour'] = 'Commencez la visite';
 $lang[''] = '';
 $lang['Welcome in your Piwigo gallery'] = 'Bienvenue dans votre galerie Piwigo';
Index: /extensions/TakeATour/main.inc.php
===================================================================
--- /extensions/TakeATour/main.inc.php	(revision 28096)
+++ /extensions/TakeATour/main.inc.php	(revision 28097)
@@ -26,5 +26,9 @@
 }
 
-if ( pwg_get_session_var('tour_to_launch') and defined('IN_ADMIN') and IN_ADMIN  )
+if (pwg_get_session_var('tour_to_launch') and defined('IN_ADMIN') and IN_ADMIN and isset($_GET['page']) and $_GET['page']=="plugin-TakeATour" )
+{ 
+  pwg_unset_session_var('tour_to_launch');
+}
+elseif ( pwg_get_session_var('tour_to_launch') and defined('IN_ADMIN') and IN_ADMIN)
 {
   global $conf;
@@ -35,4 +39,5 @@
   }
 }
+
 function TAT_add_js_css()
 {
Index: /extensions/TakeATour/tours/first_contact/tour.tpl
===================================================================
--- /extensions/TakeATour/tours/first_contact/tour.tpl	(revision 28096)
+++ /extensions/TakeATour/tours/first_contact/tour.tpl	(revision 28097)
@@ -1,4 +1,4 @@
 {footer_script require='jquery.bootstrap-tour'}{literal}
-// Instance the tour
+
 var tour = new Tour({
   name: "first_contact",
@@ -7,10 +7,10 @@
 });
 {/literal}{if $TAT_restart}tour.restart();{/if}{literal}
-// Add your steps. Not too many, you don't really want to get your users sleepy
+
 tour.addSteps([
   {
     path: "{/literal}{$TAT_path}{literal}admin.php",
-    title: "{/literal}{'Welcome in your Piwigo gallery'|@translate}{literal}",
-    content: "{/literal}{'Hello! I will be your guide to discover Piwigo. Please follow my instructions, and click Next (or use the arrows of your keyboard) to navigate. If you go in an other page of the administration, you will be redirected to the current page of the Tour.<br>Let\'s start by adding pictures!'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title1'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp1'|@translate}{literal}"
   },
   {
@@ -19,5 +19,6 @@
     element: ".icon-plus-circled",
     reflex:true,
-    content: "{/literal}{'The link is here. Click Next to continue'|@translate}{literal}",
+    title: "{/literal}{'first_contact_title2'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp2'|@translate}{literal}",
   },
   {
@@ -25,6 +26,6 @@
     placement: "bottom",
     element: ".selected_tab",
-    title: "{/literal}{'Add Photo Page'|@translate}{literal}",
-    content: "{/literal}{'First tab to add photos from your browser, other tabs to add from a software, mobile or FTP'|@translate}{literal}",
+    title: "{/literal}{'first_contact_title3'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp3'|@translate}{literal}",
   },
   {
@@ -32,6 +33,6 @@
     placement: "left",
     element: "#albumSelection",
-    title: "{/literal}{'Lets add photo!'|@translate}{literal}",
-    content: "{/literal}{'First choose an album; create one if there is no album yet.'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title4'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp4'|@translate}{literal}"
   },
   {//5
@@ -39,30 +40,33 @@
     placement: "top",
     element: "#uploadify",
-    content: "{/literal}{'Then click the button to select photos to send from your computer'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title5'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp5'|@translate}{literal}"
   },
   {
     path: /admin\.php\?page=photos_add/,
-    redirect:function (tour) {tour.goTo(4);},
+    redirect:function (tour) {window.location = "admin.php?page=photos_add";},
     placement: "left",
     element: "#fileQueue",
-    title: "{/literal}{''|@translate}{literal}",
-    content: "{/literal}{'You see that photos are being listed. Add at least 2 pictures and when you\'re ready click the button Start Upload'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title6'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp6'|@translate}{literal}"
   },
   {
     path: /admin\.php\?page=photos_add/,
-    redirect:function (tour) {tour.goTo(4);},
+    redirect:function (tour) {window.location = "admin.php?page=photos_add";},
     placement: "top",
     element: "#photosAddContent legend",
-    content: "{/literal}{'Here a summary of your uploaded pictures. See that Piwigo has generated itself the thumbnails. You can know add more photos with the link at the bottom, edit the properties of a picture by cliking on it, or click to manage all the uploaded pictures in the Batch Manager...'|@translate}{literal}",
-    onPrev:function (tour) {tour.goTo(4);}
+    title: "{/literal}{'first_contact_title7'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp7'|@translate}{literal}",
+    prev:4
   },
   {
     path: /admin\.php\?page=photos_add/,
-    redirect:function (tour) {tour.goTo(4);},
+    redirect:function (tour) {window.location = "admin.php?page=photos_add";},
     placement: "bottom",
     element: "#batchLink",
     reflex:true,
-    content: "{/literal}{'Let\'s edit them! Click on the link. If you don\'t see it click Prev to add at least 2 photos.'|@translate}{literal}",
-    onPrev:function (tour) {tour.goTo(4);}
+    title: "{/literal}{'first_contact_title8'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp8'|@translate}{literal}",
+    prev:4
   },
   {
@@ -71,6 +75,6 @@
     placement: "top",
     element: "",
-    title: "{/literal}{'The Batch Manager'|@translate}{literal}",
-    content: "{/literal}{'You are know in the Batch Manager, where you can batch edit multiple pictures. Here the Caddy is set as a filter because we comes from the upload result page.'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title9'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp9'|@translate}{literal}"
   },
   {//10
@@ -79,5 +83,6 @@
     placement: "right",
     element: ".icon-flag",
-    content: "{/literal}{'Here is the link to directly access to your caddy: that/s a tool for administrators to easily add pictures to a set in order to edit them in the Batch Manager. You can add photos to the caddy from the public picture page when logged as an admin, or using the action \"Add to caddy\" on the Batch Manager'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title10'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp10'|@translate}{literal}"
   },
   {
@@ -86,6 +91,6 @@
     placement: "left",
     element: "#checkActions",
-    title: "{/literal}{'How to edit a photos'|@translate}{literal}",
-    content: "{/literal}{'So you can select from here one or more photos'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title11'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp11'|@translate}{literal}"
   },
   {
@@ -94,5 +99,6 @@
     placement: "top",
     element: "#action",
-    content: "{/literal}{'then edit them using and action. But for instance, you can\'t -for now- batch edit descriptions since they are mostly unique'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title12'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp12'|@translate}{literal}"
   },
   {
@@ -101,5 +107,6 @@
     placement: "bottom",
     element: "#tabsheet .normal_tab",
-    content: "{/literal}{'You can edit descriptions and more from the batch manager in unit mode. But for now, let\'s stay in the global mode'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title13'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp13'|@translate}{literal}"
   },
   {
@@ -109,5 +116,6 @@
     element: "#TAT_FC_14",
     reflex:true,
-    content: "{/literal}{'We will see now the edition page of one picture. That page is reachable from here but also from the public picture page when logged as an administrator. Click on Edit or go next'|@translate}{literal}",
+    title: "{/literal}{'first_contact_title14'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp14'|@translate}{literal}",
     onNext:function (tour) {window.location = "admin.php?page=photo-{/literal}{$TAT_image_id}{literal}";}
   },
@@ -117,6 +125,6 @@
     placement: "bottom",
     element: ".selected_tab",
-    title: "{/literal}{'The edition page of a picture'|@translate}{literal}",
-    content: "{/literal}{'On that page you can edit all the properties of a photo, for instance...'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title15'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp15'|@translate}{literal}"
   },
   {
@@ -125,5 +133,6 @@
     placement: "top",
     element: "#TAT_FC_16",
-    content: "{/literal}{'here to add or remove the photo from albums. The link is virtual, no photos will be physcally moved ever.'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title16'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp16'|@translate}{literal}"
   },
   {
@@ -132,5 +141,6 @@
     placement: "top",
     element: "#TAT_FC_17",
-    content: "{/literal}{'and here to set the photo as a picture representative of an album. So you can set as a representative of a public album, a photo in a private album, which is ideal to set custom thumbnails for albums but the user won\'t see those pictures inside those albums. Like setting a portrait of someone as representative, for an album which contains photos of nature; it would be weird to see that photo of the man/woman among trees or animals.'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title17'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp17'|@translate}{literal}"
   },
   {
@@ -138,6 +148,6 @@
     redirect:function (tour) {window.location = "admin.php?page=photo-{/literal}{$TAT_image_id}{literal}";},
     placement: "top",
-    title: "{/literal}{'Manage albums'|@translate}{literal}",
-    content: "{/literal}{'That previous example was just a small overview of tricks and how powerfull Piwigo is. So I\'ve told about private albums, but how can we manage albums? Click On album->Manage or hit Next'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title18'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp18'|@translate}{literal}"
   },
   {
@@ -145,6 +155,6 @@
     placement: "left",
     element: "#content",
-    title: "{/literal}{'Manage Albums'|@translate}{literal}",
-    content: "{/literal}{'Here are listed all the \'top\' albums, the ones at the root of your gallery. If you see an album with a dashed backgroung, it\'s an real physical album from a FTP synchro, which can\'t be moved or deleted from here. The others albums are called virtual albums.'|@translate}{literal}",
+    title: "{/literal}{'first_contact_title19'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp19'|@translate}{literal}",
     onPrev: function (tour) {window.location = "admin.php?page=photo-{/literal}{$TAT_image_id}{literal}";},
 
@@ -154,6 +164,6 @@
     placement: "top",
     element: "#categoryOrdering",
-    title: "{/literal}{'Manage Albums'|@translate}{literal}",
-    content: "{/literal}{'When your mouse is hover a album, links and information appear. When you drag and drop an album -a rounded block-, you will change its position and then you can save or cancel your manual order.'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title20'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp20'|@translate}{literal}"
   },
   {
@@ -161,6 +171,6 @@
     placement: "left",
     element: "#tabsheet:first-child",
-    title: "{/literal}{'Other Tabs'|@translate}{literal}",
-    content: "{/literal}{'The next tab is a page where you can move any virtual album.<br>The permalink tab is to set a particular url for an album, for tecnhical reasons like to set a specific template or for just sending cool customized links.<br>But let\'s edit an album: click on Edit of a album'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title21'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp21'|@translate}{literal}"
   },
   {
@@ -169,6 +179,6 @@
     placement: "top",
     element: ".selected_tab",
-    title: "{/literal}{'Album Edition Page'|@translate}{literal}",
-    content: "{/literal}{'Like for a picture, here you can edit the properties of an album'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title22'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp22'|@translate}{literal}"
   },
   {
@@ -177,5 +187,6 @@
     placement: "top",
     element: "#TAT_FC_23",
-    content: "{/literal}{'Locking a album means only administrators will be able to see that album: it\'s usually used when an admin is managing the properties of an album or don\'t want to publish the album immediatly'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title23'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp23'|@translate}{literal}"
   },
   {
@@ -184,5 +195,6 @@
     placement: "bottom",
     element: ".tabsheet",
-    content: "{/literal}{'Certainly, one of the most important page in the permission page of an album. Click on the permission tab or click next'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title24'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp24'|@translate}{literal}"
   },
   {//25
@@ -191,6 +203,6 @@
     placement: "left",
     element: "#content",
-    title: "{/literal}{'Album Permission'|@translate}{literal}",
-    content: "{/literal}{'As you can read in the Help of your Piwigo -link at the top right-, album permissions are set by groups and users. You can directly set private/public multiple albums using the Administration » Albums » Properties page.'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title25'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp25'|@translate}{literal}"
   },
   {
@@ -199,5 +211,6 @@
     placement: "top",
     element: "#selectStatus",
-    content: "{/literal}{'Here you can set the current album as private, then grant access to users and groups. By default, permissions are not recursive for sub albums, but upper-albums will be granted with the same permission in order to let the granted users browse to the album.'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title26'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp26'|@translate}{literal}"
   },
   {
@@ -206,5 +219,6 @@
     placement: "top",
     element: "#selectStatus",
-    content: "{/literal}{'Important fact: the webmasters and administrators are not omniscient when browsing the public part, but they can access to every album and photos on the admin part.'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title27'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp27'|@translate}{literal}"
   },
   {
@@ -212,13 +226,13 @@
     redirect:function (tour) {window.location = "admin.php?page=album-{/literal}{$TAT_cat_id}{literal}-permissions";},
     placement: "top",
-    title: "{/literal}{'Configuration'|@translate}{literal}",
-    content: "{/literal}{'Now we will look at the options available to set Piwigo working your way. Click on Configuration->Options or just hit Next.'|@translate}{literal}"
-  },
-  {
-    path: "{/literal}{$TAT_path}{literal}admin.php?page=configuration",
-    placement: "top",
-    element: "",
-    title: "{/literal}{'Configuration->Options->General'|@translate}{literal}",
-    content: "{/literal}{'Here, on that first page, you will set the essential and basic configuration of your gallery.'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title28'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp28'|@translate}{literal}"
+  },
+  {
+    path: "{/literal}{$TAT_path}{literal}admin.php?page=configuration",
+    placement: "top",
+    element: "",
+    title: "{/literal}{'first_contact_title29'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp29'|@translate}{literal}"
   },
   {//30
@@ -226,5 +240,6 @@
     placement: "right",
     element: "#gallery_title",
-    content: "{/literal}{'Let\'s start by changing the tittle'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title30'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp30'|@translate}{literal}"
   },
   {
@@ -232,5 +247,6 @@
     placement: "right",
     element: "#page_banner",
-    content: "{/literal}{'Then the banner, which will be displayed on top of every pages. As you can see, HTML tags are allowed here. You can also use the %gallery_title% tag to display the tittle you just typed above.'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title31'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp31'|@translate}{literal}"
   },
   {
@@ -239,12 +255,13 @@
     placement: "top",
     element: ".formButtons input",
-    content: "{/literal}{'Now save you changes'|@translate}{literal}"
-  },
-  {
-    path: "{/literal}{$TAT_path}{literal}admin.php?page=configuration",
-    placement: "top",
-    title: "{/literal}{'Guest settings'|@translate}{literal}",
-    content: "{/literal}{'Just a final word about the options, the \'Guest settings\' page is to set the preferences of unregistered visitors. Each time Piwigo refers to \'guest\' that means unregistered visitors.<br>Let\'s continue about Configuration: click on Configuration->Themes or just hit Next.'|@translate}{literal}",
-    onPrev:function (tour) {tour.goTo(30);}
+    title: "{/literal}{'first_contact_title32'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp32'|@translate}{literal}"
+  },
+  {
+    path: "{/literal}{$TAT_path}{literal}admin.php?page=configuration",
+    placement: "top",
+    title: "{/literal}{'first_contact_stp33'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp33'|@translate}{literal}",
+    prev:30
   },
   {
@@ -252,6 +269,6 @@
     placement: "top",
     element: "",
-    title: "{/literal}{'Themes'|@translate}{literal}",
-    content: "{/literal}{'Themes are one of the three way to customize your Piwigo, with Plugins and Templates. Themes installed are listed here.<br>More than one theme can be enabled: users can change their theme by choosing one among the one enabled here, if the option \'Allow user customization\' is checked on the Option page.'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title34'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp34'|@translate}{literal}"
   },
   {//35
@@ -259,6 +276,6 @@
     placement: "top",
     element: "#TAT_FC_35",
-    title: "{/literal}{'Themes'|@translate}{literal}",
-    content: "{/literal}{'Themes can also be set as Default, which means that\'s the theme for unregistred visitors (guests, you remember?) and any new registred user will be have this theme. But for any previously registred users, the theme won\'t change until you do it from the User Management page or you disable their theme: be carefull, you might disturb your users by changing their whole display.'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title35'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp35'|@translate}{literal}"
   },
   {
@@ -266,6 +283,6 @@
     placement: "top",
     element: "",
-    title: "{/literal}{'Themes'|@translate}{literal}",
-    content: "{/literal}{'Themes have a system of dependency: that\'s why some theme can\'t be deleted (a parent theme can\'t be deleted if a child theme is enabled) or others can\'t be enabled (a child theme need its parent theme). For instance, when you put you\'re mouse over a Delete link, if the theme can\'t be deleted, a information bubble will explain you why.'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title36'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp36'|@translate}{literal}"
   },
   {
@@ -273,6 +290,6 @@
     placement: "right",
     element: ".tabsheet",
-    title: "{/literal}{'Themes'|@translate}{literal}",
-    content: "{/literal}{'To install new themes, you can directly download them from the tab \'Add a theme\'. Only the themes marked as compatible with your version of Piwigo are showed.<br>Let\'s discover the plugins now! Click on Plugin->Manage'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title37'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp37'|@translate}{literal}"
   },
   {
@@ -280,6 +297,6 @@
     placement: "left",
     element: "",
-    title: "{/literal}{'Plugins'|@translate}{literal}",
-    content: "{/literal}{'Plugins are very easy ways to customize your Piwigo. They can do almost anything you can imagine from small text addition to complete features, like the Community plugin which allows non admistrators users to upload without entering to the administration part.'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title38'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp38'|@translate}{literal}"
   },
   {
@@ -287,12 +304,13 @@
     placement: "left",
     element: "#content",
-    title: "{/literal}{'Plugins'|@translate}{literal}",
-    content: "{/literal}{'On that first page, are listed the installed plugins. At the top, are listed the plugins activated, which are currently running. At the bottom, the plugins which are installed in the /plugins folder, but disabled. Deleting a plugin means that any trace of the plugin will be removed (files, options etc). For most of the plugins, disabling will keep the data registered by the plugins.'|@translate}{literal}"
-  },
-  {
+    title: "{/literal}{'first_contact_title39'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp39'|@translate}{literal}"
+  },
+  {//40
     path: "{/literal}{$TAT_path}{literal}admin.php?page=plugins",
     placement: "bottom",
     element: "#TakeATour",
-    content: "{/literal}{'Here it\'s me! Don\'t disable me now, but you can see you can Disable or Restore an activated plugin.'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title40'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp40'|@translate}{literal}"
   },
   {
@@ -300,10 +318,11 @@
     placement: "right",
     element: ".tabsheet",
-    content: "{/literal}{'You can see on the last tab all the plugins available for your version of Piwigo. Hundred of plugins are there!'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title41'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp41'|@translate}{literal}"
   },
   {
     path: "{/literal}{$TAT_path}{literal}admin.php?page=languages",
-    title: "{/literal}{'Languages'|@translate}{literal}",
-    content: "{/literal}{'Piwigo is multilingual. By default, the language displayed by Piwigo change according to the language of the browser of the visitor. If the language of the visitor is not availble, the language set by default is used.'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title42'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp42'|@translate}{literal}"
   },
   {
@@ -311,6 +330,6 @@
     placement: "top",
     element: "",
-    title: "{/literal}{'It\'s been a great time'|@translate}{literal}",
-    content: "{/literal}{'This tour was quite long, but we only have seen a small part of how powerfull Piwigo is. Everything has a end, this overview is finished.<br>You can discover much deeper the features of Piwigo by taking an other tour or reading our documentation, on the piwigo.org website'|@translate}{literal}"
+    title: "{/literal}{'first_contact_title43'|@translate}{literal}",
+    content: "{/literal}{'first_contact_stp43'|@translate}{literal}"
   }
 ]);
Index: tensions/TakeATour/tours/tours.inc.php
===================================================================
--- /extensions/TakeATour/tours/tours.inc.php	(revision 28096)
+++ 	(revision )
@@ -1,2 +1,0 @@
-<?php
-?>
Index: /extensions/TakeATour/tpl/admin.tpl
===================================================================
--- /extensions/TakeATour/tpl/admin.tpl	(revision 28096)
+++ /extensions/TakeATour/tpl/admin.tpl	(revision 28097)
@@ -6,8 +6,8 @@
   <fieldset>
     <legend>{'First Contact'|@translate}</legend>
-    <div class="TAT_description">{'Recommended for beginners, this tour introduce you Piwigo, its basic features. It will start by adding pictures, then manage them. The tour continues with album management and permissions, and ends on the customization using the configuration, the themes and the plugins.'|@translate}</div>
+    <div class="TAT_description">{'first_contact_descrp'|@translate}</div>
     <form action="{$F_ACTION}" method="post">
       <input type="hidden" name="submited_tour" value="first_contact">
-      <input type="submit" name="button2" id="button2" value="{'Launch the Tour'|@translate}">
+      <input type="submit" name="button2" id="button2" value="{'Start the Tour'|@translate}">
     </form>
   </fieldset>
