diff --git a/Gemfile b/Gemfile
index 6e4b9a36730fa75222918f2bfef66bfd050c5d64..aff8b7649cd0192ab45bfab24772f57ff39bbb4f 100644
--- a/Gemfile
+++ b/Gemfile
@@ -86,6 +86,7 @@ gem 'rails-assets-punycode', '1.3.1'
 
 # jQuery plugins
 
+gem 'rails-assets-jquery-idletimer',   '0.9.3'
 gem 'rails-assets-jquery-placeholder', '2.0.8'
 gem 'rails-assets-jquery-textchange',  '0.2.3'
 gem 'rails-assets-perfect-scrollbar',  '0.4.11'
diff --git a/Gemfile.lock b/Gemfile.lock
index 6d93daccfd72b20b7fbf1dbf52016dc6598ea8c0..e3b669b1f1ec3c6671704fcb090e59247f0a3d7d 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -357,6 +357,7 @@ GEM
       railties (= 4.1.6)
       sprockets-rails (~> 2.0)
     rails-assets-jquery (1.11.1)
+    rails-assets-jquery-idletimer (0.9.3)
     rails-assets-jquery-placeholder (2.0.8)
     rails-assets-jquery-textchange (0.2.3)
       rails-assets-jquery
@@ -577,6 +578,7 @@ DEPENDENCIES
   rack-ssl (= 1.4.1)
   rails (= 4.1.6)
   rails-assets-jquery (= 1.11.1)
+  rails-assets-jquery-idletimer (= 0.9.3)
   rails-assets-jquery-placeholder (= 2.0.8)
   rails-assets-jquery-textchange (= 0.2.3)
   rails-assets-perfect-scrollbar (= 0.4.11)
diff --git a/app/assets/javascripts/main.js b/app/assets/javascripts/main.js
index b0ae002b8dc28313b22ce738842ea03f3fe8f489..d683db631db8429fea4318af113b96b26bb6b93f 100644
--- a/app/assets/javascripts/main.js
+++ b/app/assets/javascripts/main.js
@@ -17,7 +17,7 @@
 //= require jquery.events.input
 //= require jquery.elastic
 //= require jquery.mentionsInput
-//= require jquery.idle-timer
+//= require jquery-idletimer/dist/idle-timer
 //= require jquery.infinitescroll-custom
 //= require jquery.autocomplete-custom
 //= require keycodes
diff --git a/vendor/assets/javascripts/jquery.idle-timer.js b/vendor/assets/javascripts/jquery.idle-timer.js
deleted file mode 100644
index 8df88d61e18c7fc6b1b00280197ff5eade806f5a..0000000000000000000000000000000000000000
--- a/vendor/assets/javascripts/jquery.idle-timer.js
+++ /dev/null
@@ -1,246 +0,0 @@
-/*!
- * jQuery idleTimer plugin
- * version 0.9.100511
- * by Paul Irish.
- *   http://github.com/paulirish/yui-misc/tree/
- * MIT license
-
- * adapted from YUI idle timer by nzakas:
- *   http://github.com/nzakas/yui-misc/
-*/
-/*
- * Copyright (c) 2009 Nicholas C. Zakas
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-/* updated to fix Chrome setTimeout issue by Zaid Zawaideh */
-
- // API available in <= v0.8
- /*******************************
-
- // idleTimer() takes an optional argument that defines the idle timeout
- // timeout is in milliseconds; defaults to 30000
- $.idleTimer(10000);
-
-
- $(document).bind("idle.idleTimer", function(){
-    // function you want to fire when the user goes idle
- });
-
-
- $(document).bind("active.idleTimer", function(){
-  // function you want to fire when the user becomes active again
- });
-
- // pass the string 'destroy' to stop the timer
- $.idleTimer('destroy');
-
- // you can query if the user is idle or not with data()
- $.data(document,'idleTimer');  // 'idle'  or 'active'
-
- // you can get time elapsed since user when idle/active
- $.idleTimer('getElapsedTime'); // time since state change in ms
-
- ********/
-
-
-
- // API available in >= v0.9
- /*************************
-
- // bind to specific elements, allows for multiple timer instances
- $(elem).idleTimer(timeout|'destroy'|'getElapsedTime');
- $.data(elem,'idleTimer');  // 'idle'  or 'active'
-
- // if you're using the old $.idleTimer api, you should not do $(document).idleTimer(...)
-
- // element bound timers will only watch for events inside of them.
- // you may just want page-level activity, in which case you may set up
- //   your timers on document, document.documentElement, and document.body
-
-
- ********/
-
-(function($){
-
-$.idleTimer = function(newTimeout, elem){
-
-    // defaults that are to be stored as instance props on the elem
-
-    var idle    = false,        //indicates if the user is idle
-        enabled = true,        //indicates if the idle timer is enabled
-        timeout = 30000,        //the amount of time (ms) before the user is considered idle
-        events  = 'mousemove keydown DOMMouseScroll mousewheel mousedown touchstart touchmove'; // activity is one of these events
-
-
-    elem = elem || document;
-
-
-
-    /* (intentionally not documented)
-     * Toggles the idle state and fires an appropriate event.
-     * @return {void}
-     */
-    var toggleIdleState = function(myelem){
-
-        // curse you, mozilla setTimeout lateness bug!
-        if (typeof myelem === 'number'){
-            myelem = undefined;
-        }
-
-        var obj = $.data(myelem || elem,'idleTimerObj');
-
-        //toggle the state
-        obj.idle = !obj.idle;
-
-        // reset timeout 
-        var elapsed = (+new Date()) - obj.olddate;
-        obj.olddate = +new Date();
-
-        // handle Chrome always triggering idle after js alert or comfirm popup
-        if (obj.idle && (elapsed < timeout)) {
-                obj.idle = false;
-                clearTimeout($.idleTimer.tId);
-                if (enabled)
-                  $.idleTimer.tId = setTimeout(toggleIdleState, timeout);
-                return;
-        }
-        
-        //fire appropriate event
-
-        // create a custom event, but first, store the new state on the element
-        // and then append that string to a namespace
-        var event = jQuery.Event( $.data(elem,'idleTimer', obj.idle ? "idle" : "active" )  + '.idleTimer'   );
-
-        // we do want this to bubble, at least as a temporary fix for jQuery 1.7
-        // event.stopPropagation();
-        $(elem).trigger(event);
-    },
-
-    /**
-     * Stops the idle timer. This removes appropriate event handlers
-     * and cancels any pending timeouts.
-     * @return {void}
-     * @method stop
-     * @static
-     */
-    stop = function(elem){
-
-        var obj = $.data(elem,'idleTimerObj') || {};
-
-        //set to disabled
-        obj.enabled = false;
-
-        //clear any pending timeouts
-        clearTimeout(obj.tId);
-
-        //detach the event handlers
-        $(elem).off('.idleTimer');
-    },
-
-
-    /* (intentionally not documented)
-     * Handles a user event indicating that the user isn't idle.
-     * @param {Event} event A DOM2-normalized event object.
-     * @return {void}
-     */
-    handleUserEvent = function(){
-
-        var obj = $.data(this,'idleTimerObj');
-
-        //clear any existing timeout
-        clearTimeout(obj.tId);
-
-
-
-        //if the idle timer is enabled
-        if (obj.enabled){
-
-
-            //if it's idle, that means the user is no longer idle
-            if (obj.idle){
-                toggleIdleState(this);
-            }
-
-            //set a new timeout
-            obj.tId = setTimeout(toggleIdleState, obj.timeout);
-
-        }
-     };
-
-
-    /**
-     * Starts the idle timer. This adds appropriate event handlers
-     * and starts the first timeout.
-     * @param {int} newTimeout (Optional) A new value for the timeout period in ms.
-     * @return {void}
-     * @method $.idleTimer
-     * @static
-     */
-
-
-    var obj = $.data(elem,'idleTimerObj') || {};
-
-    obj.olddate = obj.olddate || +new Date();
-
-    //assign a new timeout if necessary
-    if (typeof newTimeout === "number"){
-        timeout = newTimeout;
-    } else if (newTimeout === 'destroy') {
-        stop(elem);
-        return this;
-    } else if (newTimeout === 'getElapsedTime'){
-        return (+new Date()) - obj.olddate;
-    }
-
-    //assign appropriate event handlers
-    $(elem).on($.trim((events+' ').split(' ').join('.idleTimer ')),handleUserEvent);
-
-
-    obj.idle    = idle;
-    obj.enabled = enabled;
-    obj.timeout = timeout;
-
-
-    //set a timeout to toggle state
-    obj.tId = setTimeout(toggleIdleState, obj.timeout);
-
-    // assume the user is active for the first x seconds.
-    $.data(elem,'idleTimer',"active");
-
-    // store our instance on the object
-    $.data(elem,'idleTimerObj',obj);
-
-
-
-}; // end of $.idleTimer()
-
-
-// v0.9 API for defining multiple timers.
-$.fn.idleTimer = function(newTimeout){
-    if(this[0]){
-        $.idleTimer(newTimeout,this[0]);
-    }
-
-    return this;
-};
-
-
-})(jQuery);