/* * Lazy Load - jQuery plugin for lazy loading images * * Copyright (c) 2007-2009 Mika Tuupola * * Licensed under the MIT license: *   http://www.opensource.org/licenses/mit-license.php * * Project home: *   http://www.appelsiini.net/projects/lazyload * * Version:  1.4.0 * */
(function(jQuery) {jQuery.fn.lazyload = function(options) {var settings = {threshold: 0,failurelimit : 0,event: "scroll",effect   : "show",container: window};if(options) {jQuery.extend(settings, options);}/* Fire one scroll event per scroll. Not one scroll event per image. */var elements = this;if ("scroll" == settings.event) {jQuery(settings.container).bind("scroll", function(event) {var counter = 0;elements.each(function() {if (!jQuery.belowthefold(this, settings) &&!jQuery.rightoffold(this, settings)) {jQuery(this).trigger("appear");} else {if (counter++ > settings.failurelimit) {return false;}}});/* Remove image from array so it is not looped next time. */var temp = jQuery.grep(elements, function(element) {return !element.loaded;});elements = jQuery(temp);});}return this.each(function() {var self = this;/* TODO: use .data() instead of .attr() */jQuery(self).attr("original", jQuery(self).attr("src"));if ("scroll" != settings.event  || jQuery.belowthefold(self, settings)  || jQuery.rightoffold(self, settings)) {if (settings.placeholder) {jQuery(self).attr("src", settings.placeholder);  } else {jQuery(self).removeAttr("src");}self.loaded = false;} else {self.loaded = true;}/* When appear is triggered load original image. */jQuery(self).one("appear", function() {if (!this.loaded) {jQuery("<img />").bind("load", function() {jQuery(self).hide().attr("src", jQuery(self).attr("original"))[settings.effect](settings.effectspeed);self.loaded = true;}).attr("src", jQuery(self).attr("original"));};});/* When wanted event is triggered load original image *//* by triggering appear.  */if ("scroll" != settings.event) {jQuery(self).bind(settings.event, function(event) {if (!self.loaded) {jQuery(self).trigger("appear");}});}});};/* Convenience methods in jQuery namespace.   *//* Use as  jQuery.belowthefold(element, {threshold : 100, container : window}) */jQuery.belowthefold = function(element, settings) {if (settings.container === undefined || settings.container === window) {

	var fold = jQuery(window).height() + jQuery(window).scrollTop();
	}else {var fold = jQuery(settings.container).offset().top + jQuery(settings.container).height();}return fold <= jQuery(element).offset().top - settings.threshold;};jQuery.rightoffold = function(element, settings) {if (settings.container === undefined || settings.container === window) {var fold = jQuery(window).width() + jQuery(window).scrollLeft();}else {var fold = jQuery(settings.container).offset().left + jQuery(settings.container).width();}return fold <= jQuery(element).offset().left - settings.threshold;};/* Custom selectors for your convenience.   *//* Use as jQuery("img:below-the-fold").something() */jQuery.extend(jQuery.expr[':'], {"below-the-fold" : "jQuery.belowthefold(a, {threshold : 0, container: window})","above-the-fold" : "!jQuery.belowthefold(a, {threshold : 0, container: window})","right-of-fold"  : "jQuery.rightoffold(a, {threshold : 0, container: window})","left-of-fold"   : "!jQuery.rightoffold(a, {threshold : 0, container: window})"});})(jQuery);