/*
 * Extended by Gen Ichino
 * * added success, error events callback options
 * * added notFound options to replace 404 images
 * * optimized script
 * * * used jQuery.data instead of using attr to store temp data.
 * * * removing events after candidates of lazyload are gone.
 * 
 * Lazy Load - jQuery plugin for lazy loading images
 *
 * Copyright (c)	2007-2009 Mika Tuupola
 *					2009 Gen Ichino
 *
 * Licensed under the MIT license:
 *   http://www.opensource.org/licenses/mit-license.php
 *
 * Project home:
 *   http://www.appelsiini.net/projects/lazyload
 *   http://www.zenoplex.jp/tools/lazyload/extended_lazyload_sample.html
 * 
 * Version:  based on 1.4.0
 */
(function(a){a.fn.lazyload=function(b){var k={threshold:0,failurelimit:0,event:"scroll",effect:"show",container:window,success:null,error:null,complete:null};var b=a.extend(k,b);var h=this;if("scroll"==b.event){function i(d){var e=0;h.each(function(){if(!a.belowthefold(this,b)&&!a.rightoffold(this,b)){a(this).trigger("APPEAR")}else{if(e++>b.failurelimit){return false}}});var f=a.grep(h,function(g){return!a(g).data('loaded')});h=a(f);if(h.length<1){a(b.container).unbind('scroll',i)}};a(b.container).bind("scroll",i)};return this.each(function(){var c=a(this);c.data('original',c.attr("src"));c.one("APPEAR",function(f,l){if(!c.data('loaded')){function j(g){c.data('loaded',true);var d;var e;if(g.type=='load'){d=b.success;e=c.data('original')}else{d=b.error;e=b.notFound}a(this).unbind('load').unbind('error');c.hide().removeData('original');if(!e){return}if(l){c.attr('src',e).show()}else{c.attr('src',e)[b.effect](b.effectspeed)}if(a.isFunction(d)){d(c.get(0))};if(a.isFunction(b.complete)){b.complete(c.get(0))}}var m=a('<img />');m.bind('load',j).bind('error',j).attr('src',c.data('original'))}});if("scroll"!=b.event||a.belowthefold(c.get(0),b)||a.rightoffold(c.get(0),b)){if(b.placeholder){c.attr("src",b.placeholder)}else{c.removeAttr("src")}c.data('loaded',false)}else{if(b.placeholder){c.attr("src",b.placeholder)}else{c.removeAttr("src")}if(!a.belowthefold(c.get(0),b)){c.trigger('APPEAR',[true])}}if("scroll"!=b.event){c.bind(b.event,function(g){if(!c.data('loaded')){c.trigger("APPEAR")}})}})};a.belowthefold=function(g,d){var e=a(window);if(d.container===undefined||d.container===window){var f=e.height()+e.scrollTop()}else{var f=a(d.container).offset().top+a(d.container).height()}return f<=a(g).offset().top-d.threshold};a.rightoffold=function(g,d){var e=a(window);if(d.container===undefined||d.container===window){var f=e.width()+e.scrollLeft()}else{var f=a(d.container).offset().left+a(d.container).width()}return f<=a(g).offset().left-d.threshold};a.extend(a.expr[':'],{"below-the-fold":"$.belowthefold(a, {threshold : 0, container: window})","above-the-fold":"!$.belowthefold(a, {threshold : 0, container: window})","right-of-fold":"$.rightoffold(a, {threshold : 0, container: window})","left-of-fold":"!$.rightoffold(a, {threshold : 0, container: window})"})})(jQuery);