/*
 * @require jade/ArrayUtils.js
 */
jade.compat.Object=function(a,b){this.children=[];this.connectedSlots={};this.name=b?b:this.createName();a&&a.insertChild(this)};
jade.compat.Object.objCounter=0;jade.compat.Object.prototype.parent=null;jade.compat.Object.prototype.children=null;jade.compat.Object.prototype.name=null;jade.compat.Object.prototype.connectedSlots=null;jade.compat.Object.prototype.busyCounter=0;jade.compat.Object.prototype.getChildren=function(){return this.children.slice(0)};
jade.compat.Object.prototype.getParent=function(){return this.parent};
jade.compat.Object.prototype.setParent=function(a){var b;b=this.parent;if(b!=a)b&&b.removeChild(this),(this.parent=a)&&a.insertChild(this)};
jade.compat.Object.prototype.insertChild=function(a){a.parent!=this?a.setParent(this):jade.ArrayUtils.inArray(this.children,a)||(this.children.push(a),this.sendSignal("insertChild",a))};
jade.compat.Object.prototype.removeChild=function(a){var b;b=a.getParent();if(!b||b!==this)return!1;if(jade.ArrayUtils.remove(this.children,a))a.parent=null,this.sendSignal("removeChild",a);return!0};
jade.compat.Object.prototype.clear=function(){var a,b;for(a=0,b=this.children.length;a<b;a++)this.children[a].parent=null,this.sendSignal("removeChild",this.children[a]);this.children=[]};
jade.compat.Object.prototype.isChild=function(a){return jade.ArrayUtils.inArray(this.children,a)};
jade.compat.Object.prototype.sendSignal=function(a,b){var c,d,e,f,g,h;c=this.connectedSlots[a];if(c===void 0)return!0;f=arguments;f[0]=this;c=c.slice();g=!0;for(d=0,e=c.length;d<e;d++)h=c[d],h[0].apply(h[1],f)===!1&&(g=!1);return g};
jade.compat.Object.prototype.sendQuery=function(a,b,c){var d,e,f,g,h,i;d=this.connectedSlots[a];if(d===void 0)return b;g=arguments;g[0]=this;h=!0;for(e=0,f=d.length;e<f;e++)i=d[e],g[1]=i[0].apply(i[1],g);return g[1]};
jade.compat.Object.prototype.connect=function(a,b,c,d){var e;if(!b)throw Error("Invalid slot");d!==void 0&&d&&this.isConnected(a,b,c)||(c===void 0&&(c=window),e=this.connectedSlots[a],e===void 0&&(e=[],this.connectedSlots[a]=e),e.push([b,c]))};
jade.compat.Object.prototype.disconnect=function(a,b,c){var d,e;c===void 0&&(c=window);d=this.connectedSlots[a];if(d!==void 0)for(e=d.length-1;e>=0;e--)(!b||d[e][0]==b&&d[e][1]==c)&&d.splice(e,1)};
jade.compat.Object.prototype.isConnected=function(a,b,c){var d,e;d=this.connectedSlots[a];if(b===void 0)return d&&!!d.length;c===void 0&&(c=window);if(d===void 0)return!1;for(e=d.length-1;e>=0;e--)if(d[e][0]==b&&d[e][1]==c)return!0;return!1};
jade.compat.Object.prototype.getName=function(){return this.name};
jade.compat.Object.prototype.createName=function(){return"jade.compat.Object-"+jade.compat.Object.objCounter++};
jade.compat.Object.prototype.bringChildToFront=function(a){jade.ArrayUtils.remove(this.children,a)&&this.children.push(a)};
jade.compat.Object.prototype.sendChildToBack=function(a){jade.ArrayUtils.remove(this.children,a)&&this.children.splice(0,0,a)};
jade.compat.Object.prototype.sendToBack=function(){if(this.isAtBack())return!1;this.parent&&this.parent.sendChildToBack(this);return!0};
jade.compat.Object.prototype.isAtFront=function(){var a;a=this.getParent().getChildren();return a.length==1?!0:jade.ArrayUtils.isLast(a,this)};
jade.compat.Object.prototype.isAtBack=function(){var a;a=this.getParent().getChildren();return a.length==1?!0:jade.ArrayUtils.isFirst(a,this)};
jade.compat.Object.prototype.bringToFront=function(){if(this.isAtFront())return!1;this.parent&&this.parent.bringChildToFront(this);return!0};
jade.compat.Object.prototype.busy=function(){this.busyCounter++;this.busyCounter==1&&this.sendSignal("busy")};
jade.compat.Object.prototype.ready=function(){if(!this.busyCounter)throw Error("Object is not busy");this.busyCounter--;this.busyCounter||this.sendSignal("ready")};
jade.compat.Object.prototype.isBusy=function(){return this.busyCounter!=0};
jade.compat.Object.prototype.isReady=function(){return this.busyCounter==0};
jade.compat.Object.prototype.setName=function(a){this.name=a};
