(function ($){
	$.fn.lazyload=function (options){
		var settings={
			threshold:0,failurelimit:0,event:"scroll",effect:"show",container:window
		};
		if(options){
			$.extend(settings,options)
		}var elements=this;
		if("scroll"==settings.event){
			$(settings.container).bind("scroll",function (event){
				var counter=0;
				elements.each(function (){
					if(!$.belowthefold(this,settings)&&!$.rightoffold(this,settings)){
						$(this).trigger("appear")
					}else {
						if(counter++>settings.failurelimit){
							return false
						}
					}
				});
				var temp=$.grep(elements,function (element){
					return !element.loaded
				});
				elements=$(temp)
			})
		}return this.each(function (){
			var self=this;
			//$(self).attr("lb-lazyload",$(self).attr("src")); 
			if("scroll"!=settings.event||$.belowthefold(self,settings)||$.rightoffold(self,settings)){
				if(settings.placeholder){
					$(self).attr("src",settings.placeholder)
				}else {
					$(self).removeAttr("src")
				}self.loaded=false
			}else {
				$(self).attr("src",$(self).attr("lb-lazyload")) 
				self.loaded=true
			}$(self).one("appear",function (){
				if(!this.loaded){
					$("<img />").bind("load",function (){
						$(self).hide().attr("src",$(self).attr("lb-lazyload"))[settings.effect](settings.effectspeed);
						self.loaded=true
					}).attr("src",$(self).attr("lb-lazyload"))
				}
			});
			if("scroll"!=settings.event){
				$(self).bind(settings.event,function (event){
					if(!self.loaded){
						$(self).trigger("appear")
					}
				})
			}
		})
	};
	$.belowthefold=function (element,settings){
		if(settings.container===undefined||settings.container===window){
			var fold=$(window).height()+$(window).scrollTop()
		}else {
			var fold=$(settings.container).offset().top+$(settings.container).height()
		}return fold<=$(element).offset().top-settings.threshold
	};
	$.rightoffold=function (element,settings){
		if(settings.container===undefined||settings.container===window){
			var fold=$(window).width()+$(window).scrollLeft()
		}else {
			var fold=$(settings.container).offset().left+$(settings.container).width()
		}return fold<=$(element).offset().left-settings.threshold
	};
	$.extend($.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);

