(function($,window,document,undefined){var lazyLoadXT='lazyLoadXT',dataLazied='lazied',load_error='load error',classLazyHidden='lazy-hidden',docElement=document.documentElement||document.body,forceLoad=(window.onscroll===undefined||!!window.operamini||!docElement.getBoundingClientRect),options={autoInit:true,selector:'img[data-src]',blankImage:'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',throttle:99,forceLoad:forceLoad,loadEvent:'pageshow',updateEvent:'load orientationchange resize scroll touchmove',forceEvent:'',oninit:{removeClass:'lazy'},onshow:{addClass:classLazyHidden},onload:{removeClass:classLazyHidden,addClass:'lazy-loaded'},onerror:{removeClass:classLazyHidden},checkDuplicates:true},elementOptions={srcAttr:'data-src',edgeX:0,edgeY:0,visibleOnly:true},$window=$(window),$isFunction=$.isFunction,$extend=$.extend,$data=$.data||function(el,name){return $(el).data(name);},elements=[],topLazy=0,waitingMode=0;$[lazyLoadXT]=$extend(options,elementOptions,$[lazyLoadXT]);function getOrDef(obj,prop){return obj[prop]===undefined?options[prop]:obj[prop];}$.fn[lazyLoadXT]=function(overrides){overrides=overrides||{};var blankImage=getOrDef(overrides,'blankImage'),checkDuplicates=getOrDef(overrides,'checkDuplicates'),scrollContainer=getOrDef(overrides,'scrollContainer'),elementOptionsOverrides={},prop;$(scrollContainer).on('scroll',queueCheckLazyElements);for(prop in elementOptions){elementOptionsOverrides[prop]=getOrDef(overrides,prop);}return this.each(function(){if(this===window){$(options.selector).lazyLoadXT(overrides);}else{if(checkDuplicates&&$data(this,dataLazied)){return;}var $el=$(this).data(dataLazied,1);if(blankImage&&$el[0].tagName==='IMG'&&!this.src){this.src=blankImage;}$el[lazyLoadXT]=$extend({},elementOptionsOverrides);triggerEvent('init',$el);elements.push($el);}});};function triggerEvent(event,$el){var handler=options['on'+event];if(handler){if($isFunction(handler)){handler.call($el[0]);}else{$el.addClass(handler.addClass||'').removeClass(handler.removeClass||'');}}$el.trigger('lazy'+event,[$el]);queueCheckLazyElements();}function triggerLoadOrError(e){triggerEvent(e.type,$(this).off(load_error,triggerLoadOrError));}function checkLazyElements(force){if(!elements.length){return;}force=force||options.forceLoad;topLazy=Infinity;var viewportTop=$window.scrollTop(),viewportHeight=window.innerHeight||$window.height(),viewportWidth=window.innerWidth||$window.width(),i,length;for(i=0,length=elements.length;i<length;i++){var $el=elements[i],el=$el[0],objData=$el[lazyLoadXT],removeNode=false,visible=force,topEdge;if(!$.contains(docElement,el)){removeNode=true;}else if(force||!objData.visibleOnly||el.offsetWidth||el.offsetHeight){if(!visible){var elPos=el.getBoundingClientRect(),edgeX=objData.edgeX,edgeY=objData.edgeY;topEdge=(elPos.top+viewportTop-edgeY)-viewportHeight;visible=(topEdge<=viewportTop&&elPos.bottom>-edgeY&&elPos.left<=viewportWidth+edgeX&&elPos.right>-edgeX);}if(visible){triggerEvent('show',$el);var srcAttr=objData.srcAttr,src=$isFunction(srcAttr)?srcAttr($el):el.getAttribute(srcAttr);if(src){$el.on(load_error,triggerLoadOrError);el.src=src;}removeNode=true;}else{if(topEdge<topLazy){topLazy=topEdge;}}}if(removeNode){elements.splice(i--,1);length--;}}if(!length){triggerEvent('complete',$(docElement));}}function timeoutLazyElements(){if(waitingMode>1){waitingMode=1;checkLazyElements();setTimeout(timeoutLazyElements,options.throttle);}else{waitingMode=0;}}function queueCheckLazyElements(e){if(!elements.length){return;}if(e&&e.type==='scroll'&&e.currentTarget===window){if(topLazy>=$window.scrollTop()){return;}}if(!waitingMode){setTimeout(timeoutLazyElements,0);}waitingMode=2;}function initLazyElements(){$window.lazyLoadXT();}function forceLoadAll(){checkLazyElements(true);}$(document).ready(function(){triggerEvent('start',$window);$window.on(options.loadEvent,initLazyElements).on(options.updateEvent,queueCheckLazyElements).on(options.forceEvent,forceLoadAll);$(document).on(options.updateEvent,queueCheckLazyElements);if(options.autoInit){initLazyElements();}});})(window.jQuery||window.Zepto,window,document);