/*
 * @require jade.js
 * @require jade/Object.js
 * @require jade/Log.js
 */
jade.ImageFactory=function(){jade.Object.call(this);
this.finishedCallbacks=[]};jade.inherit(jade.ImageFactory,jade.Object);jade.ImageFactory.prototype.finishedCallback=null;
jade.ImageFactory.prototype.loading=0;jade.ImageFactory.prototype.createImage=function(b){var a;
if(!b){throw new Error("URL must be set!")}a=new Image();a.onload=jade.ImageFactory.handleImageLoad;
a.onabort=jade.ImageFactory.handleImageError;a.onerror=jade.ImageFactory.handleImageError;
a.error=false;a.url=b;a.src=b;if(a.complete&&a.width&&a.height){a.onload=null;a.onabort=null;
a.onerror=null;a.loaded=true}else{a.loaded=false;a.factory=this;this.loading++}return a
};jade.ImageFactory.prototype.preload=function(f,e,b){var c,d,a;c=[];for(d=2,a=arguments.length;
d<a;d++){c.push(arguments[d])}if(!this.loading){if(f){f.apply(e?e:window,c)}return true
}if(f){this.finishedCallback=[f,e,c]}return false};jade.ImageFactory.handleImageLoad=function(){var d,c,b,a;
a=this.factory;if(!a){return}this.loaded=true;this.onload=null;this.onabort=null;
this.onerror=null;a.loading--;this.factory=null;if(!a.loading&&a.finishedCallback){d=a.finishedCallback[0];
c=a.finishedCallback[1];b=a.finishedCallback[2];this.finishedCallback=null;d.apply(c?c:window,b)
}};jade.ImageFactory.handleImageError=function(a){this.error=true;jade.Log.warn("Unable to load image "+this.url);
jade.ImageFactory.handleImageLoad.apply(this)};jade.ImageFactory.createImage=function(a,b,j,h){var f,d,g,e,c;
f=[];f.push(b);f.push(j);for(d=3,g=arguments.length;d<g;d++){f.push(arguments[d])
}e=new jade.ImageFactory();c=e.createImage(a);f.push(c);e.preload.apply(e,f);return c
};