var Loader={MULTIPLE:"multiple",SINGULAR:"singular",ASC:"asc",DESC:"desc",ERROR:"error",COMPLETE:"complete",FILE_COMPLETE:"fileComplete",guid:99,localID:-1,loadingType:null,loadingAmount:0,loadedCount:0,loadPercent:0,totalWeight:0,loadedWeight:0,loadPercentWeighted:0,autoFillCount:0,estimate:-1,loadingGraphic:null,fade:0,hide:false,attach:null,scale:null,position:null,css:null,append:null,attach:null,setup:[],loadQueue:[],loading:[],loaded:[],errored:[],load:function(items){Loader.localID=-1;Loader.filterItems(items);return Loader;},stripAndLoad:function(selector){var images=selector.find("img");var objs=[];images.each(function(){var img=$(this);var obj={url:img.attr("src"),attach:img.parent()};if(img.attr("title")||img.attr("alt"))obj.altTitle=img.attr("title")?img.attr("title"):img.attr("alt");objs.push(obj);$(this).remove();});Loader.load(objs);return Loader;},start:function(type){Loader.loadingAmount=Loader.setup.length;Loader.loadedCount=0;Loader.autoFillCount=0;while(Loader.setup.length>0)Loader.loadQueue.push(Loader.setup.shift());for(var i in Loader.loadQueue){if(Loader.isUndefined(Loader.loadQueue[i].weight))Loader.loadQueue[i].weight=1;Loader.totalWeight+=Loader.loadQueue[i].weight;Loader.loadQueue[i].queueTime=new Date().getTime();if(!Loader.isUndefined(Loader.loadQueue[i].append)||!Loader.isUndefined(Loader.loadQueue[i].prepend)||!Loader.isUndefined(Loader.loadQueue[i].autoFill)){if(!Loader.isUndefined(Loader.loadQueue[i].append)){if(!Loader.isUndefined(Loader.loadQueue[i].attach)){Loader.loadQueue[i].attach.append("<"+Loader.loadQueue[i].append+"/>");Loader.loadQueue[i].attach=$(Loader.loadQueue[i].attach).find(Loader.loadQueue[i].append).last();}else if(Loader.attach){Loader.attach.append("<"+Loader.loadQueue[i].append+"/>");Loader.loadQueue[i].attach=$(Loader.attach).find(Loader.loadQueue[i].append).last();}}else if(!Loader.isUndefined(Loader.loadQueue[i].prepend)){if(!Loader.isUndefined(Loader.loadQueue[i].attach)){Loader.loadQueue[i].attach.prepend("<"+Loader.loadQueue[i].prepend+"/>");Loader.loadQueue[i].attach=$(Loader.loadQueue[i].attach).find(Loader.loadQueue[i].prepend).first();}else if(Loader.attach){Loader.attach.prepend("<"+Loader.loadQueue[i].prepend+"/>");Loader.loadQueue[i].attach=$(Loader.attach).find(Loader.loadQueue[i].prepend).first();}}else if(!Loader.isUndefined(Loader.loadQueue[i].autoFill)){Loader.loadQueue[i].attach=Loader.loadQueue[i].autoFill.eq(Loader.autoFillCount);Loader.autoFillCount++;}}else if(Loader.attach||Loader.prepend||Loader.autoFill){if(Loader.append!=null){if(!Loader.isUndefined(Loader.loadQueue[i].attach)){Loader.loadQueue[i].attach.append("<"+Loader.append+"/>");Loader.loadQueue[i].attach=$(Loader.loadQueue[i].attach).find(Loader.append).last();}else if(Loader.attach){Loader.attach.append("<"+Loader.append+"/>");Loader.loadQueue[i].attach=$(Loader.attach).find(Loader.append).last();}}else if(Loader.prepend){if(!Loader.isUndefined(Loader.loadQueue[i].attach)){Loader.loadQueue[i].attach.prepend("<"+Loader.prepend+"/>");Loader.loadQueue[i].attach=$(Loader.loadQueue[i].attach).find(Loader.prepend).first();}else if(Loader.attach){Loader.attach.prepend("<"+Loader.prepend+"/>");Loader.loadQueue[i].attach=$(Loader.attach).find(Loader.prepend).first();}}else if(Loader.autoFill){Loader.loadQueue[i].attach=Loader.autoFill.eq(Loader.autoFillCount);Loader.autoFillCount++;}}if(!Loader.isUndefined(Loader.loadQueue[i].fade)){Loader.loadQueue[i].attach.hide().fadeIn(Loader.loadQueue[i].fade);}else if(Loader.isUndefined(Loader.loadQueue[i].fade)&&Loader.fade>0){Loader.loadQueue[i].attach.hide().fadeIn(Loader.fade);}if(!Loader.isUndefined(Loader.loadQueue[i].loadingGraphic)){Loader.loadQueue[i].attach.css({backgroundImage:"url("+Loader.loadQueue[i].loadingGraphic+")",backgroundPosition:"center center",backgroundRepeat:"no-repeat"});}else if(Loader.loadingGraphic&&Loader.loadQueue[i].loadingGraphicHide!=true){Loader.loadQueue[i].attach.css({backgroundImage:"url("+Loader.loadingGraphic+")",backgroundPosition:"center center",backgroundRepeat:"no-repeat"});}}if(type==Loader.MULTIPLE){Loader.loadingType=Loader.MULTIPLE;while(Loader.loadQueue.length>0)Loader.loadImage(Loader.loadQueue.shift());}else{Loader.loadingType=Loader.SINGULAR;Loader.sortObjectArray(Loader.loadQueue,"priority",Loader.ASC);Loader.loadImage(Loader.loadQueue.shift());}return Loader;},getContent:function(search,property){if(!property)property="url";return Loader.searchArray(search,property,Loader.loaded).content;},getContentAsCopy:function(search,property){if(!property)property="url";var image=new Image();$(image).attr("src",Loader.searchArray(search,property,Loader.loaded).url);return image;},clearLoader:function(search,property){Loader.loaded.splice(Loader.loaded.indexOf(Loader.searchArray(search,property,Loader.loaded)),1);},clearAll:function(){for(var i in Loader.loaded){var loader=Loader.loaded.splice(Loader.loaded.indexOf(Loader.loaded[i]),1);}},loadImage:function(imageDetails){imageDetails.loadingTime=new Date().getTime();Loader.loading.push(imageDetails);var image=new Image();var imageObj=$(image);imageObj.load(function(){Loader.imageLoaded(image,imageDetails);}).error(function(){Loader.imageErrored(imageDetails);}).attr("src",imageDetails.url);},imageLoaded:function(image,imageDetails){var jImage=$(image);Loader.loadedCount++;Loader.loadedWeight+=imageDetails.weight;Loader.loadPercent=Loader.loadedCount/Loader.loadingAmount;Loader.loadPercentWeighted=Loader.loadedWeight/Loader.totalWeight;imageDetails.content=image;imageDetails.loadedTime=new Date().getTime();imageDetails.loadTime=((imageDetails.loadedTime-imageDetails.loadingTime)/1000)+"s";Loader.estimate=((imageDetails.loadedTime-imageDetails.loadingTime)/1000)/imageDetails.weight*(Loader.totalWeight-Loader.loadedWeight);if(Loader.estimate==0){Loader.estimate='Complete';}else if(Loader.estimate<1&&Loader.estimate>0){Loader.estimate="< 1s";}else{Loader.estimate=Math.floor(Loader.estimate)+"s";}Loader.loaded.push(Loader.loading.splice(Loader.loading.indexOf(imageDetails),1)[0]);Loader.handleSettings(image,jImage,imageDetails);$(Loader).trigger(Loader.FILE_COMPLETE,[imageDetails]);if(Loader.loading.length===0&&Loader.loadQueue.length===0){$(Loader).trigger(Loader.COMPLETE);}else{if(Loader.loadingType==Loader.SINGULAR)Loader.loadImage(Loader.loadQueue.shift());}},handleSettings:function(image,jImage,imageDetails){if(imageDetails.hide==true||Loader.hide==true||!Loader.isUndefined(imageDetails.fade)||Loader.fade>0&&(imageDetails.hide!=false||Loader.hide!=false))jImage.hide();!Loader.isUndefined(imageDetails.altTitle)?jImage.attr("alt",imageDetails.altTitle).attr("title",imageDetails.altTitle):jImage.attr("alt",imageDetails.name).attr("title",imageDetails.name);if(Loader.css)jImage.css(Loader.css);if(!Loader.isUndefined(imageDetails.css))jImage.css(imageDetails.css);if(!Loader.isUndefined(imageDetails.attach))imageDetails.attach.append(imageDetails.content);if(!Loader.isUndefined(imageDetails.fade)||Loader.fade!=0){var fadeValue=imageDetails.fade?imageDetails.fade:Loader.fade;if(Loader.isUndefined(imageDetails.loadingGraphic)&&!Loader.loadingGraphic||imageDetails.loadingGraphicHide===true)jImage.fadeIn(fadeValue);if(!Loader.isUndefined(imageDetails.loadingGraphic)||Loader.loadingGraphic)jImage.fadeIn(fadeValue,function(){imageDetails.attach.css("background-image","none");});}if(!Loader.isUndefined(imageDetails.scale)||Loader.scale!=null){var scaleValue=imageDetails.scale?imageDetails.scale:Loader.scale;Scale.scale(jImage,imageDetails.attach.width(),imageDetails.attach.height(),scaleValue);}if(!Loader.isUndefined(imageDetails.position)){var obj=imageDetails.position.constructor===String?{position:imageDetails.position,offsetX:0,offsetY:0}:imageDetails.position;Position.position(obj.position,imageDetails.content,imageDetails.attach.width(),imageDetails.attach.height(),obj.offsetX,obj.offsetY);}else if(Loader.position){var obj=Loader.position.constructor===String?{position:Loader.position,offsetX:0,offsetY:0}:obj=Loader.position;Position.position(obj.position,imageDetails.content,imageDetails.attach.width(),imageDetails.attach.height(),obj.offsetX,obj.offsetY);}if((!Loader.isUndefined(imageDetails.loadingGraphic)||Loader.loadingGraphic)&&Loader.isUndefined(imageDetails.fade)&&Loader.fade===0)imageDetails.attach.css("background-image","none");},imageErrored:function(imageDetails){Loader.loadedCount++;imageDetails.content=null;imageDetails.errorTime=new Date().getTime();Loader.errored.push(Loader.loading.splice(Loader.loading.indexOf(imageDetails),1));$(Loader).trigger(Loader.ERROR,["File "+imageDetails.url+" failed to load."]);},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:Loader.guid++;Loader.localID++;items.guid=Loader.guid;items.localID=Loader.localID;items.extension=Loader.getExtensionFromURL(items.url);items.name=Loader.getNameFromURL(items.url);items.setupTime=new Date().getTime();if(!items.priority)items.priority=1000;Loader.setup.push(items);break;}},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;},getNameFromURL:function(url){var result=url.lastIndexOf(".")==-1?url.slice(url.indexOf("/")+1):url.slice(url.lastIndexOf('/')+1,url.lastIndexOf('.'));return result;},getExtensionFromURL:function(url){return url.slice(url.lastIndexOf('.')+1);},isUndefined:function(variable){var result=typeof(variable)=="undefined"?true:false;return result;},sortObjectArray:function(array,property,direction){if(array[0][property].constructor==String){if(direction==Loader.DESC){array.sort(function(a,b){var nameA=a[property].toLowerCase(),nameB=b[property].toLowerCase();if(nameA>nameB){return-1;}else if(nameA<nameB){return 1;}else{return 0;}});}else{array.sort(function(a,b){var nameA=a[property].toLowerCase(),nameB=b[property].toLowerCase();if(nameA<nameB){return-1;}else if(nameA>nameB){return 1;}else{return 0;}});}}else if(array[0][property].constructor==Number){if(direction==Loader.DESC){array.sort(function(a,b){return b[property]-a[property];});}else{array.sort(function(a,b){return a[property]-b[property];});}}return array;}}
