text: /*
   * jQuery.appear
   * https://github.com/bas2k/jquery.appear/
   * http://code.google.com/p/jquery-appear/
   * http://bas2k.ru/
   *
   * Copyright (c) 2009 Michael Hixson
   * Copyright (c) 2012-2014 Alexander Brovikov
   * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
   */
  (function(root, factory) {
    if (typeof define === "function" && define.amd) {
      define(["jquery"], factory);
    } else if (typeof module === "object" && module.exports) {
      factory(require("jquery"));
    } else {
      factory(root.jQuery);
    }
  })(this, function($) {
    $.fn.appear = function(fn, options) {
      var settings = $.extend(
        {
          //arbitrary data to pass to fn
          data: undefined,
  
          //call fn only on the first appear?
          one: true,
  
          // X & Y accuracy
          accX: 0,
          accY: 0
        },
        options
      );
  
      return this.each(function() {
        var t = $(this);
  
        //whether the element is currently visible
        t.appeared = false;
  
        if (!fn) {
          //trigger the custom event
          t.trigger("appear", settings.data);
          return;
        }
  
        var w = $(window);
  
        //fires the appear event when appropriate
        var check = function() {
          //is the element hidden?
          if (!t.is(":visible")) {
            //it became hidden
            t.appeared = false;
            return;
          }
  
          //is the element inside the visible window?
          var a = w.scrollLeft();
          var b = w.scrollTop();
          var o = t.offset();
          var x = o.left;
          var y = o.top;
  
          var ax = settings.accX;
          var ay = settings.accY;
          var th = t.height();
          var wh = w.height();
          var tw = t.width();
          var ww = w.width();
  
          if (
            y + th + ay >= b &&
            y <= b + wh + ay &&
            x + tw + ax >= a &&
            x <= a + ww + ax
          ) {
            //trigger the custom event
            if (!t.appeared) t.trigger("appear", settings.data);
          } else {
            //it scrolled out of view
            t.appeared = false;
          }
        };
  
        //create a modified fn with some additional logic
        var modifiedFn = function() {
          //mark the element as visible
          t.appeared = true;
  
          //is this supposed to happen only once?
          if (settings.one) {
            //remove the check
            w.unbind("scroll", check);
            var i = $.inArray(check, $.fn.appear.checks);
            if (i >= 0) $.fn.appear.checks.splice(i, 1);
          }
  
          //trigger the original fn
          fn.apply(this, arguments);
        };
  
        //bind the modified fn to the element
        if (settings.one) t.one("appear", settings.data, modifiedFn);
        else t.bind("appear", settings.data, modifiedFn);
  
        //check whenever the window scrolls
        w.scroll(check);
  
        //check whenever the dom changes
        $.fn.appear.checks.push(check);
  
        //check now
        check();
      });
    };
  
    //keep a queue of appearance checks
    $.extend($.fn.appear, {
      checks: [],
      timeout: null,
  
      //process the queue
      checkAll: function() {
        var length = $.fn.appear.checks.length;
        if (length > 0) while (length--) $.fn.appear.checks[length]();
      },
  
      //check the queue asynchronously
      run: function() {
        if ($.fn.appear.timeout) clearTimeout($.fn.appear.timeout);
        $.fn.appear.timeout = setTimeout($.fn.appear.checkAll, 20);
      }
    });
  
    //run checks when these methods are called
    $.each(
      [
        "append",
        "prepend",
        "after",
        "before",
        "attr",
        "removeAttr",
        "addClass",
        "removeClass",
        "toggleClass",
        "remove",
        "css",
        "show",
        "hide"
      ],
      function(i, n) {
        var old = $.fn[n];
        if (old) {
          $.fn[n] = function() {
            var r = old.apply(this, arguments);
            $.fn.appear.run();
            return r;
          };
        }
      }
    );
  });
  