var Renaissance={version:"0.1",OBJECT_ID_IDENTIFIER:"objectid",copy:function(D,B){var C={};var A;Renaissance.ObjectTraverser.traverse(D,function(K){var J=K.item;var G=K.accessor;var M=K.tag;var H=K.parent;var I=K.parentTag;var L=K.object;var E;var F=(H==null||B)&&L;if(F&&J!=null){if(M!=null&&C[M]!=null){E=C[M]}else{if(J instanceof Array){E=[]}else{if(typeof J=="object"){E={}}}}}if(E==null){E=J}if(H==null){A=E}if(I){C[I][G]=E}if(M!=null){C[M]=E}return F},this);return A},lastId:0,getUniqueId:function(){this.lastId++;return this.lastId},bind:function(C,B){var A=Array.prototype.slice.apply(arguments,[2]);return function(){var D=A.concat(Array.prototype.slice.apply(arguments,[0]));return C.apply(B,D)}},SCRIPT_NAME:"Renaissance.js",getRelativeScriptPath:function(E){var G="";if(!E){E=Renaissance.SCRIPT_NAME}var A=document.getElementsByTagName("script");for(var C=0;C<A.length;C++){var F=A[C].getAttribute("src");if(F){var B=F.lastIndexOf(E);var D=F.lastIndexOf("?");if(D<0){D=F.length}if((B>-1)&&(B+E.length==D)){G=F.slice(0,D-E.length);break}}}return G},getHtmlLocation:function(){var A=window.location.pathname.lastIndexOf("/");return window.location.pathname.substring(0,A+1)},isRelative:function(A){return A.indexOf("http://")!=0},systemProperties:{},registerSystemProperty:function(A){A=A.toUpperCase();this.systemProperties[A]=true},registerSystemProperties:function(B){if(!(B instanceof Array)){B=[B]}for(var A=0;A<B.length;A++){var C=B[A];this.registerSystemProperty(C)}},getSystemProperty:function(A){A=A.toUpperCase();if(!this.systemPropertyExists(A)){throw new Error("Invalid system property '"+A+"'.")}return this[A]},setSystemProperty:function(B,C){B=B.toUpperCase();if(!this.systemPropertyExists(B)){throw new Error("Invalid system property '"+B+"'.")}var A=this[B];this[B]=C;return A},systemPropertyExists:function(A){return this.systemProperties[A]!=null}};Renaissance.registerSystemProperties(["relative_script_path","html_path","autostart_applications"]);Renaissance.setSystemProperty("relative_script_path",Renaissance.getRelativeScriptPath());Renaissance.setSystemProperty("html_path",Renaissance.getHtmlLocation());Renaissance.setSystemProperty("autostart_applications",true);Renaissance.Util={DEFINITION_ACCESSOR:"__def",CLASS_ACCESSOR:"__self",processArguments:function(B,A,C){if(A==null){A=B;B=Renaissance.Object}return{definition:A,parent:B}},inherit:function(B,C,D){C=C.prototype[this.CLASS_ACCESSOR];Renaissance.Util.convertAbstracts(B);var A;if(D){A=this.inheritNamespace(B,C)}else{A=this.inheritClass(B,C)}A.prototype[this.DEFINITION_ACCESSOR]=B;A.superclass=C.prototype;return A},inheritNamespace:function(B,D){var A=new Renaissance.Class(D,B);var C=new A({},false);C.prototype=A.prototype[this.CLASS_ACCESSOR].prototype;return C},inheritClass:function(B,C){var A=function(F,E){for(var G in F){this[G]=F[G]}this[Renaissance.OBJECT_ID_IDENTIFIER]=Renaissance.getUniqueId();if(E!=false){this.initialize()}};A.prototype=new C({},false);for(var D in B){A.prototype[D]=B[D]}A.prototype[this.CLASS_ACCESSOR]=A;return A},convertAbstracts:function(A){for(var B in A){if(A[B] instanceof Renaissance.Abstract){A[B]=function(){Renaissance.Logger.error("'"+B+"()' is an abstract function. It must be overriden by subclasses.")}}}},addMirror:function(A){var C={};for(var B in A.prototype){if(A.prototype[B] instanceof Function){C[A.prototype[B]]=B}}A.prototype.mirror=C},addHelpers:function(klass,parent){Renaissance.Util.addHelper("clone",klass,function(deep){return Renaissance.Object.clone(klass,this,deep)});Renaissance.Util.addHelper("getClass",klass,function(){return this[Renaissance.Util.CLASS_ACCESSOR]});Renaissance.Util.addStaticHelper("getClass",klass,function(){return this});Renaissance.Util.addHelper("kindOf",klass,function(expected){return this instanceof expected});Renaissance.Util.addStaticHelper("kindOf",klass,function(expected){if(typeof expected=="string"){expected=eval(expected)}var object=new this({},false);return object.kindOf(expected)})},addHelper:function(B,A,C){if(A.prototype[B]==null){A.prototype[B]=C}},addStaticHelper:function(B,A,C){if(A[B]==null){A[B]=C}},isNamespace:function(A){return typeof A=="object"?true:A instanceof Renaissance.Namespace}};Renaissance.Object=function(A){};Renaissance.Object.prototype[Renaissance.Util.CLASS_ACCESSOR]=Renaissance.Object;Renaissance.Object.prototype[Renaissance.Util.DEFINITION_ACCESSOR]={};Renaissance.Object.clone=function(A,D,B){var C=Renaissance.copy(D,B);return new A(C,false)};Renaissance.Class=function(D,C){var B=Renaissance.Util.processArguments(D,C,false);var A=Renaissance.Util.inherit(B.definition,B.parent,false);Renaissance.Util.addHelpers(A);Renaissance.Util.addMirror(A);Renaissance.Util.addHelper("initialize",A,function(){});return A};Renaissance.Namespace=function(D,C){var B=Renaissance.Util.processArguments(D,C,true);var A=Renaissance.Util.inherit(B.definition,B.parent,true);Renaissance.Util.addMirror(A);return A};Renaissance.Abstract=function(){};Renaissance.Logger=new Renaissance.Namespace({logger:[],log:function(A){this.logger.log(A)},error:function(A){this.logger.error(A)},setLogger:function(A){this.replaceLogger(A)},replaceLogger:function(B){var A=this.logger;this.logger=B;return A}});Renaissance.Logger.Console=new Renaissance.Class({log:function(A){if(window.console){window.console.log(A)}},error:function(A){throw new Error(A)}});Renaissance.Logger.setLogger(new Renaissance.Logger.Console());Renaissance.Observable=new Renaissance.Namespace({listeners:null,addEvent:function(A){var B=this.getListeners();if(B[A]==null){B[A]=[]}else{throw new Error("Trying to add event '"+A+"' when it already exists.")}},hasEvent:function(A){return listeners[A]!=null},on:function(A,D,C){var B=this.getListeners();if(B[A]!=null){B[A].push({fn:D,scope:C})}else{throw new Error("Event '"+A+"' is not registered.")}},triggerEvent:function(C){var D=this.getListeners();var B=[];for(var A=1;A<arguments.length;A++){B.push(arguments[A])}if(D[C]!=null){for(var A=0;A<D[C].length;A++){var E=D[C][A];E.fn.apply(E.scope,B)}}else{throw new Error("Event '"+C+"' is not registered.")}},getListeners:function(){if(this.listeners==null){this.listeners={}}return this.listeners}});Renaissance.ObjectTraverser=new Renaissance.Namespace({TAG_ACCESSOR:"$$_renaissance_tag_$$",traverse:function(H,G,O){G=Renaissance.bind(G,O)||function(){return true};var E=[];var F=0;E.push({item:H,parent:null,accessor:null});while(F<E.length){var N=E[F].item;var J=E[F].parent;var D=E[F].accessor;var P=null;var A=false;var M=null;var L=N instanceof Object||(N==window&&J==null);try{if(L){if(N!=null){A=N[this.TAG_ACCESSOR]!=null;P=(N[this.TAG_ACCESSOR])?N[this.TAG_ACCESSOR]:Renaissance.getUniqueId()}}if(J!=null){M=J[this.TAG_ACCESSOR]}if(L&&N!=null){delete N[this.TAG_ACCESSOR]}if(J!=null){delete J[this.TAG_ACCESSOR]}}catch(C){}var B=G(new Renaissance.ObjectTraverser.Item({item:N,accessor:D,tag:P,object:N instanceof Object,parent:J,parentTag:M}));if(L&&B==true&&!A){if(N instanceof Array){for(var I=0;I<N.length;I++){E.push({item:N[I],parent:N,accessor:I})}}else{if(typeof N=="object"){for(var K in N){try{E.push({item:N[K],parent:N,accessor:K})}catch(C){}}}}}try{if(L&&N!=null){N[this.TAG_ACCESSOR]=P}if(J){J[this.TAG_ACCESSOR]=M}}catch(C){}F++}while(E.length>0){var N=(E.shift()).item;if(N){delete N[this.TAG_ACCESSOR]}}}});Renaissance.ObjectTraverser.Item=new Renaissance.Class({item:null,accessor:null,tag:null,immutable:null,parent:null,parentTag:null});Renaissance.ClassLoader=new Renaissance.Namespace({chunks:{},CHUNK_PATH_ACCESSOR:"__path",CHUNK_NAME_ACCESSOR:"__name",NUMBER_OF_ACCESSORS:2,PATH_PREFIX:"",nameResolves:function(name){try{var value=eval(name);return value!=undefined}catch(err){return false}},unresolve:function(name){if(this.nameResolves(name)){delete eval(name)}},load:function(B){var A=[];if(typeof B=="string"){A.push(B)}else{if(typeof A=="object"){for(var H=0;H<B.length;H++){A.push(B[H].path)}}else{A=B}}var D=navigator.userAgent;var E=(D.match("MSIE")||D.match("Safari"));if(E){var C=new Array(A.length)}for(var H=0;H<A.length;H++){var G=Renaissance.isRelative(A[H])?this.PATH_PREFIX:"";if(E){C[H]="<script src='"+G+A[H]+"'><\/script>"}else{var I=document.createElement("script");I.src=G+A[H];var F=document.getElementsByTagName("head").length?document.getElementsByTagName("head")[0]:document.body;F.appendChild(I)}}if(E){document.write(C.join(""))}},fly:function(A){for(var D=0;D<A.length;D++){var F=A[D].name.split(".");var C=this.chunks;for(var E=0;E<F.length;E++){var B=F[E];if(C[B]==null){C[B]={};C[B][this.CHUNK_PATH_ACCESSOR]=A[D].path;C[B][this.CHUNK_NAME_ACCESSOR]=A[D].name}C=C[B]}}this.processChunk(window,this.chunks)},processChunk:function(D,C){var A=this;for(var B in C){if(D[B]!=null){this.processChunk(D[B],C[B]);continue}D[B]=this.createStub(D,C,B)}},createStub:function(parent,chunk,name){var loader=this;return function(){var path=chunk[name][loader.CHUNK_PATH_ACCESSOR];var fullName=chunk[name][loader.CHUNK_NAME_ACCESSOR];var success=function(request){delete parent[name];eval(request.responseText);parent[name]=eval(fullName)};var failure=function(request){Renaissance.Logger.error("Could not request class '"+fullName+"' at path: "+path)};var request=Renaissance.Request.GET({url:path,async:false,success:Renaissance.bind(success,parent),failure:Renaissance.bind(failure,parent)});loader.processChunk(parent,chunk);return new parent[name](arguments)}}});Renaissance.ClassLoader.load(Renaissance.getSystemProperty("relative_script_path")+"/Request/Request.js");Renaissance.Application=new Renaissance.Class(Renaissance.Observable,{require:null,fly:null,main:null,autoStart:null,scriptName:Renaissance.SCRIPT_NAME,scriptPath:null,scope:null,timeout:200,errorTimeout:20000,surpassedErrorTimeout:false,errorTimeoutId:null,initialize:function(){if(this.main==null){throw new Error("Could not boostrap application without a main() function.")}this.main=Renaissance.bind(this.main,this);if(this.scope!=null){this.main=Renaissance.bind(this.main,this.scope)}if(this.require==null){this.require=[]}if(this.fly==null){this.fly=[]}this.scriptPath=Renaissance.getRelativeScriptPath(this.scriptName);this.addSupportNamespaces()},load:function(){this.startLoading(this.autoStart||Renaissance.getSystemProperty("autostart_applications"))},reload:function(){this.startLoading(false)},startLoading:function(B){for(var A=0;A<this.require.length;A++){this.ClassLoader.unresolve(this.require[A].name)}for(var A=0;A<this.fly.length;A++){this.ClassLoader.unresolve(this.fly[A].name)}this.ClassLoader.load(this.require);this.errorTimeoutId=setTimeout(Renaissance.bind(this.bootstrapError,this),this.errorTimeout);if(document.body==null){var C=window.onload;window.onload=Renaissance.bind(function(){if(C){C()}this.finishLoading(B)},this)}else{this.finishLoading(B)}},finishLoading:function(C){for(var B=0;B<this.require.length;B++){var A=this.require[B].name;if(!this.ClassLoader.nameResolves(A)){if(this.surpassedErrorTimeout==false){setTimeout(Renaissance.bind(function(){this.finishLoading(C)},this),this.timeout)}return }}clearTimeout(this.errorTimeoutId);this.ClassLoader.fly(this.fly);if(C==true){this.main()}},bootstrapError:function(){var C=[];for(var B=0;B<this.require.length;B++){var A=this.require[B].name;if(!this.ClassLoader.nameResolves(A)){C.push(A)}}Renaissance.Logger.error("Bootstrapping error: The following names could not be resolved: "+C)},addSupportNamespaces:function(){this.Request=Renaissance.Request.clone(true);this.ClassLoader=Renaissance.ClassLoader.clone(true);this.Request.PATH_PREFIX=this.scriptPath;this.ClassLoader.PATH_PREFIX=this.scriptPath}});var RJS=Renaissance;