var Loader={jLoader:null,loadingMethod:"singular",setup:[],queue:[],loading:[],completed:[],errored:[],countGlobal:0,countLocal:0,initialCount:0,weightTotal:0,weightLoaded:0,loadedCountLocal:0,loadedCountGlobal:0,loadedTotalLocal:0,loadedTotalGlobal:0,loadedPercentLocal:0,loadedPercentGlobal:0,weightedLoadedPercent:0,lastLoaded:null,lastLoadedDetails:null,COMPLETE:"complete",PROGRESS:"progress",FILE_COMPLETE:"fileComplete",ERROR:"error",ESTIMATE:"estimate",SINGULAR:"singular",MULTIPLE:"multiple",SETUP:"setup",QUEUE:"queue",LOADING:"loading",COMPLETED:"completed",ERRORED:"errored",loadImage:function(imageDetails){var image=new Image();var imageObj=$(image);Loader.loading.push(Loader.queue.splice(Loader.findIndexInArray(imageDetails,Loader.queue),1)[0]);imageDetails.loadingTime=new Date().getTime();imageDetails.content=image;imageObj.load(function(){Loader.imageLoaded(imageDetails);}).error(function(e){Loader.imageErrored(imageDetails,e);}).attr("src",imageDetails.url);},completeTest:function(){if(Loader.loading.length===0&&Loader.queue.length===0){Loader.jLoader.trigger(Loader.COMPLETE);}else if(Loader.loadingMethod==Loader.SINGULAR){Loader.loadImage(Loader.queue[0]);}},findIndexInArray:function(toSearch,array){for(var i=0;i<array.length;i++)if(array[i]===toSearch)return i;return-1;},addDefaultProperties:function(obj){Loader.countLocal++;Loader.countGlobal++;obj.guid=Loader.countGlobal;obj.lid=Loader.countLocal;obj.name=Loader.getNameFromURL(obj.url);obj.extension=Loader.getExtensionFromURL(obj.url);obj.location=Loader.getLocationFromURL(obj.url);obj.priority=obj.priority||1;obj.weight=obj.weight||1;},filterItems:function(items){switch(items.constructor){case Array:for(var item in items)Loader.filterItems(items[item]);break;case String:Loader.filterItems({url:items});break;case Object:if(typeof(items.url)!="undefined"&&items.url!=""){Loader.addDefaultProperties(items);Loader.setup.push(items);}break;}},getLocationFromURL:function(url){return url.slice(0,url.lastIndexOf('/')+1);},getNameFromURL:function(url){return url.lastIndexOf(".")==-1?url.slice(url.indexOf("/")+1):url.slice(url.lastIndexOf('/')+1,url.lastIndexOf('.'));},getExtensionFromURL:function(url){return url.slice(url.lastIndexOf('.')+1);},searchArray:function(value,property,array){var result=false;property=property.toLowerCase();value=value.toLowerCase();for(var i in array){if(String(array[i][property]).toLowerCase()==value){result=array[i];break;}}return result;},imageLoaded:function(imageDetails){imageDetails.loadedTime=new Date().getTime();imageDetails.loadTime=imageDetails.loadedTime-imageDetails.loadingTime;Loader.loadedCountLocal++;Loader.loadedCountGlobal++;Loader.weightLoaded+=imageDetails.weight;Loader.loadedPercentLocal=Loader.loadedCountLocal/Loader.loadedTotalLocal;Loader.loadedPercentGlobal=Loader.loadedCountGlobal/Loader.loadedTotalGlobal;Loader.weightedLoadedPercent=Loader.weightLoaded/Loader.weightTotal;Loader.lastLoaded=imageDetails.content;Loader.lastLoadedDetails=imageDetails;Loader.completed.push(Loader.loading.splice(Loader.findIndexInArray(imageDetails,Loader.loading),1)[0]);Loader.jLoader.trigger(Loader.FILE_COMPLETE);Loader.completeTest();},imageErrored:function(imageDetails,e){imageDetails.error=e;Loader.errored.push(Loader.loading.splice(Loader.findIndexInArray(imageDetails,Loader.loading),1)[0]);Loader.jLoader.trigger(Loader.ERROR);},load:function(items){if(Loader.jLoader==null)Loader.jLoader=$(Loader);Loader.countLocal=0;Loader.filterItems(items);return Loader;},start:function(){Loader.loadedCountLocal=0;Loader.loadedTotalLocal=0;Loader.loadedPercentLocal=0;Loader.loadedTotalLocal=Loader.setup.length;Loader.loadedTotalGlobal+=Loader.setup.length;Loader.weightLoaded=0;Loader.weightTotal=0;for(var loader in Loader.setup)Loader.weightTotal+=Loader.setup[loader].weight;while(Loader.setup.length>0)Loader.queue.push(Loader.setup.splice(0,1)[0]);if(Loader.loadingMethod==Loader.MULTIPLE){while(Loader.queue.length>0)Loader.loadImage(Loader.queue[0]);}else{Loader.loadImage(Loader.queue[0]);}return Loader;},getContent:function(value,property){if(!property||typeof(property)=="undefined")property="url";return Loader.searchArray(value,property,Loader.completed).content;},getContentAsCopy:function(value,property){if(!property||typeof(property)=="undefined")property="url";var img=new Image();$(img).attr({src:Loader.searchArray(value,property,Loader.completed).url});return img;},getDetails:function(value,property){if(!property||typeof(property)=="undefined")property="url";return Loader.searchArray(value,property,Loader.completed);}}
