/*
 * Lazy Load - jQuery plugin for lazy loading images
 *
 * Copyright (c) 2007-2012 Mika Tuupola {ADDONVAR}
 *
 * Licensed under the MIT license:
 *   /www.opensource.org/licenses/mit-license.php
 *
 * Project home:
 *   /www.appelsiini.net/projects/lazyload
 *
 * Version:  1.7.2
 *
 */
(function(a, b) {
	$window = a(b), a.fn.lazyload = function(c) {
		function f() {
			var b = 0;
			d.each(function() {
				var c = a(this);
				if (e.skip_invisible && !c.is(":visible")) return;
				if (!a.abovethetop(this, e) && !a.leftofbegin(this, e)) if (!a.belowthefold(this, e) && !a.rightoffold(this, e)) c.trigger("appear");
				else if (++b > e.failure_limit) return !1
			})
		}
		var d = this,
			e = {
				threshold: 0,
				failure_limit: 0,
				event: "scroll",
				effect: "show",
				container: b,
				data_attribute: "original",
				data_rel:"rel",
				skip_invisible: !0,
				appear: null,
				load: null
			};
		return c && (undefined !== c.failurelimit && (c.failure_limit = c.failurelimit, delete c.failurelimit), undefined !== c.effectspeed && (c.effect_speed = c.effectspeed, delete c.effectspeed), a.extend(e, c)), $container = e.container === undefined || e.container === b ? $window : a(e.container), 0 === e.event.indexOf("scroll") && $container.bind(e.event, function(a) {
			return f()
		}), this.each(function() {
			var b = this,
				c = a(b);
			b.loaded = !1, c.one("appear", function() {
				if (!this.loaded) {
					if (e.appear) {
						var f = d.length;
						e.appear.call(b, f, e)
					}
					var originalUrl = c.data(e.data_attribute);
					if(c.data(e.data_rel)=="1"){
						//说明需要进行转换
						originalUrl = decode64(originalUrl);
					}
					a("<img />").bind("load", function() {
						
						c.hide().attr("src", originalUrl)[e.effect](e.effect_speed), b.loaded = !0;
						var f = a.grep(d, function(a) {
							return !a.loaded
						});
						d = a(f);
						if (e.load) {
							var g = d.length;
							e.load.call(b, g, e)
						}
					}).attr("src",originalUrl)
				}
			}), 0 !== e.event.indexOf("scroll") && c.bind(e.event, function(a) {
				b.loaded || c.trigger("appear")
			})
		}), $window.bind("resize", function(a) {
			f()
		}), f(), this
	}, a.belowthefold = function(c, d) {
		var e;
		return d.container === undefined || d.container === b ? e = $window.height() + $window.scrollTop() : e = $container.offset().top + $container.height(), e <= a(c).offset().top - d.threshold
	}, a.rightoffold = function(c, d) {
		var e;
		return d.container === undefined || d.container === b ? e = $window.width() + $window.scrollLeft() : e = $container.offset().left + $container.width(), e <= a(c).offset().left - d.threshold
	}, a.abovethetop = function(c, d) {
		var e;
		return d.container === undefined || d.container === b ? e = $window.scrollTop() : e = $container.offset().top, e >= a(c).offset().top + d.threshold + a(c).height()
	}, a.leftofbegin = function(c, d) {
		var e;
		return d.container === undefined || d.container === b ? e = $window.scrollLeft() : e = $container.offset().left, e >= a(c).offset().left + d.threshold + a(c).width()
	}, a.inviewport = function(b, c) {
		return !a.rightofscreen(b, c) && !a.leftofscreen(b, c) && !a.belowthefold(b, c) && !a.abovethetop(b, c)
	}, a.extend(a.expr[":"], {
		"below-the-fold": function(c) {
			return a.belowthefold(c, {
				threshold: 0,
				container: b
			})
		},
		"above-the-top": function(c) {
			return !a.belowthefold(c, {
				threshold: 0,
				container: b
			})
		},
		"right-of-screen": function(c) {
			return a.rightoffold(c, {
				threshold: 0,
				container: b
			})
		},
		"left-of-screen": function(c) {
			return !a.rightoffold(c, {
				threshold: 0,
				container: b
			})
		},
		"in-viewport": function(c) {
			return !a.inviewport(c, {
				threshold: 0,
				container: b
			})
		},
		"above-the-fold": function(c) {
			return !a.belowthefold(c, {
				threshold: 0,
				container: b
			})
		},
		"right-of-fold": function(c) {
			return a.rightoffold(c, {
				threshold: 0,
				container: b
			})
		},
		"left-of-fold": function(c) {
			return !a.rightoffold(c, {
				threshold: 0,
				container: b
			})
		}
	})
})(jQuery, window)