﻿(function(){
ImageLazyLoad={};
ImageLazyLoad.LazyLoad=(function(){
			function _CalculateObjects(lzobjs,lock){
				var objTop, objLeft;
				var calObjects = {
					Top : {},
					Left : {}
				};
				lzobjs.each(function(i){
					objTop = $(this).offset().top;
					objLeft = $(this).offset().left;
					if(lock!="lockY"){
						if(typeof calObjects.Top[objTop] == "undefined"){
							calObjects.Top[objTop] = [];
						}
						calObjects.Top[objTop].push($(this));
					}
					if(lock!="lockX"){
						if(typeof calObjects.Left[objLeft] == "undefined"){
							calObjects.Left[objLeft] = [];
						}
						calObjects.Left[objLeft].push($(this));
					}
				});
				return calObjects;
			}
			function _LazyLoadRun(parent,objs,islockarea,lockposition,oriobjs){
				if(typeof islockarea == "boolean" && islockarea == true){
					var _parent = parent.selector == "" ? $("document") : parent;
					if(typeof parentHeight=="undefined" || typeof parentWidth =="undefined"){
						parentHeight = Kutrue.UI.GetArea(_parent).height, parentWidth = Kutrue.UI.GetArea(_parent).width;
					}
					if(parentHeight != Kutrue.UI.GetArea(_parent).height || parentWidth != Kutrue.UI.GetArea(_parent).width){
						objs = _CalculateObjects($("'" + oriobjs + "[lazyload]'"),lockposition);
						parentHeight = Kutrue.UI.GetArea(_parent).height, parentWidth = Kutrue.UI.GetArea(_parent).width;
					}
				}
				parentTop = parent.scrollTop(), parentLeft = parent.scrollLeft();
				parentBottom = parentTop + parent.height(), parentRight = parentLeft + parent.width();
				if(objs==null || objs=={} || ((objs.Top==null || objs.Top=={})&&(objs.Left==null || objs.Left=={}))){
					parent.scroll(function(){});
					return;
				}
				for(var i in objs.Top){
					if(Math.floor(i)>=parentTop && Math.floor(i)<=parentBottom && objs.Top[i].length>0){
						var arrayobjs = objs.Top[i];
						for(var j=0; j<arrayobjs.length; j++){
							arrayobjs[j].attr("src",arrayobjs[j].attr("lazyload")).removeAttr("lazyload");
						}
						delete objs.Top[i];
					}
				}
				for(var i in objs.Left){
					if(Math.floor(i)>=parentLeft && Math.floor(i)<=parentRight && objs.Left[i].length>0){
						var arrayobjs = objs.Left[i];
						for(var j=0; j<arrayobjs.length; j++){
							arrayobjs[j].attr("src",arrayobjs[j].attr("lazyload")).removeAttr("lazyload");
						}
						delete objs.Left[i];
					}
				}
				return objs;
			}
			var Objects = {};
			var Handler = 0;
			return function(lzobj,parent,lockarea,lockposition){
				var lazyLoadObject = $("'" + lzobj + "[lazyload]'");
				var objParent = $(parent);
				var parentTop, parentLeft;
				var parentBottom, parentRight;
				var parentHeight,parentWidth;
				
				Handler ++;
				if(Handler > 100){
					return false;
				}
				lockposition = lockposition || "lockX";
				if(typeof Objects[Handler]=="undefined"){
					Objects[Handler] = _CalculateObjects(lazyLoadObject,lockposition);
				}
				return {
					Run : function(){
						Objects[Handler] = _LazyLoadRun(objParent,Objects[Handler],lockarea,lockposition,lzobj);
						objParent.scroll(function(){
							Objects[Handler] = _LazyLoadRun(objParent,Objects[Handler],lockarea,lockposition,lzobj);
						});
						objParent.resize(function(){
							Objects[Handler] = _LazyLoadRun(objParent,Objects[Handler],lockarea,lockposition,lzobj);
						});
					}
				}
			}
		})()	
	window.ImageLazyLoad = ImageLazyLoad;
})();

$(function(){	   
	ImageLazyLoad.LazyLoad("img",window).Run();	//启动延迟加载
});

