var JS;JS=function(){var e;var b,c,a,d;b=function(){return(e)};c=function(k){var f,g,j,h;g=k.split(".");h=window;for(f=0;f<g.length;f++){j=g[f];if(!h[j]){h[j]={}}h=h[j]}};a=function(f){e=f};d=function(f){f.main()};return({getPkgPath:b,pkg:c,setPkgPath:a,start:d})}();JS.lang={};JS.lang.reflect={};JS.lang.JSObject=function(){var c;var e,d,b,a;e=function(){if(!JS.lang.JSObject.HASHCODE){JS.lang.JSObject.HASHCODE=0}JS.lang.JSObject.HASHCODE++;c=JS.lang.JSObject.HASHCODE};d=function(f){return(c==f.hashCode())};b=function(){return(new JS.lang.Class({name:"JSObject",methods:[{equals:function(){}},{getClass:function(){}},{hashCode:function(){}}]}))};a=function(){return(c)};e();return({equals:d,getClass:b,hashCode:a})};JS.lang.reflect.Modifier=function(a){var d,e,c,b;d=function(){return(a.isPrivate)};e=function(){return(a.isProtected)};c=function(){return(a.isPublic)};b=function(){return(a.isStatic)};return({isPrivate:d,isProtected:e,isPublic:c,isStatic:b})};JS.lang.reflect.Modifier.PUBLIC=1;JS.lang.reflect.Modifier.PRIVATE=2;JS.lang.reflect.Modifier.PROTECTED=3;JS.lang.reflect.Modifier.STATIC=4;JS.lang.reflect.Field=function(b){var c,k,p,f,n,h,j,g;var o,e,m,a,l,d;o=function(q){if(!q.name){throw"Syntax Error: No Field Name Specified"}f=q.name;c=q.defaultValue;if(q.access){h=q.access==JS.lang.reflect.Modifier.PUBLIC?true:false;n=q.access==JS.lang.reflect.Modifier.PRIVATE?true:false;g=q.access==JS.lang.reflect.Modifier.STATIC?true:false}else{h=false;n=true;g=false}j=q.setter?q.setter:false;k=q.getter?q.getter:false;p=new JS.lang.reflect.Modifier({isPrivate:n,isPublic:h,isStatic:g})};e=function(){return(c)};m=function(){return(p)};a=function(){return(f)};l=function(){return(k)};d=function(){return(j)};o(b);return({getDefaultValue:e,getModifier:m,getName:a,hasGetter:l,hasSetter:d})};JS.lang.reflect.Method=function(k){var e,n,d,h,l,f,g;var m,b,j,a,c;m=function(o){for(i in o){if(o[i] instanceof Function){d=i;o.code=o[i]}}if(!d){throw (new JS.lang.Exception("Unnamed method provided."))}if(o.access){f=o.access==JS.lang.reflect.Modifier.PUBLIC?true:false;l=o.access==JS.lang.reflect.Modifier.PRIVATE?true:false;g=o.access==JS.lang.reflect.Modifier.STATIC?true:false}else{if(d=="init"){f=false;l=true;g=false}else{f=true;l=false;g=false}}n=new JS.lang.reflect.Modifier({isPrivate:l,isPublic:f,isStatic:g});e="";e='"'+o.code+'"';h=e.substring(e.indexOf("(")+1,e.indexOf(")")).split(",");e=e.substr(e.indexOf("{")+1);e=e.substr(0,e.lastIndexOf("}"))};b=function(){return(e)};j=function(){return(n)};a=function(){return(d)};c=function(){return(h)};m(k);return({getCode:b,getModifier:j,getName:a,getParameters:c})};JS.lang.Class=function(k){var g,n,f,h;var m,c,b,j,l,a,e,d;m=function(){var p,r,q,o;g=[];n=[];if(!k.name){throw"Syntax Error: No Class Name Specified"}f=k.name;if(k.fields){for(p=0;p<k.fields.length;p++){if(!(k.fields[p] instanceof JS.lang.reflect.Field)){q=new JS.lang.reflect.Field(k.fields[p])}else{q=k.fields[p]}g[q.getName()]=q}}if(k.methods){for(p=0;p<k.methods.length;p++){if(!(k.methods[p] instanceof JS.lang.reflect.Method)){o=new JS.lang.reflect.Method(k.methods[p])}else{o=k.methods[p]}n[o.getName()]=o}}if(!j("getClass")){n[n.length]=new JS.lang.reflect.Method({getClass:function(){return(new JS.lang.Class(k))}})}if(k.inherits){h=k.inherits}else{h=JS.lang.JSObject}};c=function(){return(j("init"))};b=function(){var o,p;o=[];for(p in g){o[o.length]=g[p]}return(o)};j=function(o){if(n[o]){return(n[o])}else{return(null)}};l=function(){var o,p;o=[];for(p in n){o[o.length]=n[p]}return(o)};a=function(){return(f)};e=function(){return(h)};d=function(){return(k.isInterface)};m();return({getConstructor:c,getFields:b,getMethod:j,getMethods:l,getName:a,getSuperClass:e,isInterface:d})};JS.lang.ClassFactory=function(){var createClass;createClass=function(ClassObj){var ClassString,Constructor,DefaultValue,FieldName,Fields,GetterName,HashedConstParams,i,j,MethodName,MethodObj,Methods,NewClass,Params,PublicElementCount,SetterName;NewClass=new JS.lang.Class(ClassObj);Constructor=NewClass.getConstructor();if(ClassObj.pkg){ClassString=ClassObj.pkg+"."+NewClass.getName()+"=function("}else{ClassString=NewClass.getName()+"=function("}if(Constructor){Params=Constructor.getParameters();HashedConstParams=[];for(i=0;i<Params.length;i++){HashString="";for(j=0;j<16;j++){HashString=HashString+String.fromCharCode((Math.floor(Math.random()*26)+97))}HashedConstParams[i]=HashString}if(Params.length>0){ClassString+=HashedConstParams[0]}for(j=1;j<Params.length;j++){ClassString+=", "+HashedConstParams[j]}}ClassString+=")\n{\n";Fields=NewClass.getFields();Methods=NewClass.getMethods();ClassString+="\t/* Fields */\n";for(i=0;i<Fields.length;i++){if(!(Fields[i].getModifier().isStatic())){ClassString+="\tvar "+Fields[i].getName();DefaultValue=Fields[i].getDefaultValue();if(DefaultValue){ClassString+="="+DefaultValue}ClassString+=";\n"}}ClassString+="\tvar SuperClass;\n\n";ClassString+="\t/* Methods */\n";for(i=0;i<Methods.length;i++){if(!(Methods[i].getModifier().isStatic())){ClassString+="\tvar "+Methods[i].getName()+";\n"}}for(i=0;i<Fields.length;i++){FieldName=Fields[i].getName();if(Fields[i].hasGetter()){GetterName="get"+FieldName.charAt(0).toUpperCase()+FieldName.substr(1);if(!NewClass.getMethod(GetterName)){ClassString+="\tvar "+GetterName+";\n"}}if(Fields[i].hasSetter()){SetterName="set"+FieldName.charAt(0).toUpperCase()+FieldName.substr(1);if(!NewClass.getMethod(GetterName)){ClassString+="\tvar "+SetterName+";\n"}}}for(i=0;i<Methods.length;i++){if(!(Methods[i].getModifier().isStatic())){ClassString+="\t"+Methods[i].getName()+"=function(";Params=Methods[i].getParameters();if(Params.length>0){ClassString+=Params[0]}for(j=1;j<Params.length;j++){ClassString+=", "+Params[j]}ClassString+=")\n\t{\n";ClassString+="\t\t"+Methods[i].getCode()+"\n";ClassString+="\t};\n"}}for(i=0;i<Fields.length;i++){FieldName=Fields[i].getName();if(Fields[i].hasGetter()){GetterName="get"+FieldName.charAt(0).toUpperCase()+FieldName.substr(1);if(!NewClass.getMethod(GetterName)){ClassString+="\t"+GetterName+" = function()\n\t{\n\t\treturn ("+FieldName+");\n\t};\n";MethodObj={};MethodObj[GetterName]=function(){return(this[FieldName])};Methods[Methods.length]=new JS.lang.reflect.Method(MethodObj)}}if(Fields[i].hasSetter()){SetterName="set"+FieldName.charAt(0).toUpperCase()+FieldName.substr(1);if(!NewClass.getMethod(SetterName)){ClassString+="\t"+SetterName+" = function(NewValue)\n\t{\n\t\t"+FieldName+" = NewValue;\n\t};\n";MethodObj={};MethodObj[SetterName]=function(NewValue){this[FieldName]=NewValue};Methods[Methods.length]=new JS.lang.reflect.Method(MethodObj)}}}if(NewClass.getSuperClass()!=JS.lang.Object){ClassString+="\tSuperClass = new "+NewClass.getSuperClass()+";\n"}else{ClassString+="\tSuperClass =new JS.lang.Object();\n"}ClassString+="\tfor (var i in SuperClass)\n\t\tif (!this[i])\n\t\t{\n\t\t\tthis[i] = SuperClass[i];\n\t\t}\n";if(Constructor){Params=Constructor.getParameters();ClassString+="\tinit(";if(Params.length>0){ClassString+=HashedConstParams[0]}for(j=1;j<Params.length;j++){ClassString+=", "+HashedConstParams[j]}ClassString+=");\n"}ClassString+="\tvar Instance={\n";PublicElementCount=0;for(i=0;i<Fields.length;i++){FieldName=Fields[i].getName();if(Fields[i].getModifier().isPublic()){ClassString+="\t\t";if(PublicElementCount>0){ClassString+=","}ClassString+=FieldName+":"+FieldName+"\n";PublicElementCount++}}for(i=0;i<Methods.length;i++){if(Methods[i].getModifier().isPublic()){MethodName=Methods[i].getName();ClassString+="\t\t";if(PublicElementCount>0){ClassString+=","}ClassString+=MethodName+":"+MethodName+"\n";PublicElementCount++}}ClassString+="\t};\n";ClassString+="\tfor (var i in SuperClass)\n\t\tif (this[i])\n\t\t{\n\t\t\tInstance[i] = this[i];\n\t\t}\n";ClassString+="\treturn (Instance);\n";ClassString+=" };\n\n";for(i=0;i<Fields.length;i++){if(Fields[i].getModifier().isStatic()){ClassString+=NewClass.getName()+"."+Fields[i].getName();DefaultValue=Fields[i].getDefaultValue();if(DefaultValue){ClassString+="="+DefaultValue}else{ClassString+="=null"}ClassString+=";\n"}}for(i=0;i<Methods.length;i++){if(Methods[i].getModifier().isStatic()){if(ClassObj.pkg){ClassString+=ClassObj.pkg+"."}ClassString+=NewClass.getName()+"."+Methods[i].getName()+"=function(";Params=Methods[i].getParameters();if(Params.length>0){ClassString+=Params[0]}for(j=1;j<Params.length;j++){ClassString+=", "+Params[j]}ClassString+=")\n\t{\n";ClassString+="\t\t"+Methods[i].getCode()+"\n";ClassString+="\t};\n"}}if(ClassObj.pkg){ClassString='JS.pkg("'+ClassObj.pkg+'");\n'+ClassString}eval(ClassString)};return({createClass:createClass})}();JS.lang.Interface=function(d){var b;var a;var e,c;e=function(g){var f;a=[];if(g.methods){for(f=0;f<g.methods.length;f++){if(!(g.methods[f] instanceof JS.lang.reflect.Method)){a[a.length]=new JS.lang.reflect.Method(g.methods[f])}else{a[a.length]=g.methods[f]}}}};c=function(){return(a)};e(d);b={getMethods:c};return(b)};JS.lang.ClassFactory.createClass({pkg:"JS.lang",name:"System",methods:[{access:JS.lang.reflect.Modifier.STATIC,getBrowser:function(){return(navigator.appName)}},{access:JS.lang.reflect.Modifier.STATIC,getBrowserVersion:function(){return(navigator.appVersion)}},{access:JS.lang.reflect.Modifier.STATIC,getOS:function(){return(navigator.platform)}},{access:JS.lang.reflect.Modifier.STATIC,getScreenResolution:function(){var a;a=new JS.graphics.Dimension();a.setSize(screen.width,screen.height);return(a)}},{access:JS.lang.reflect.Modifier.STATIC,getVersion:function(){return("0.93")}}]});JS.lang.Exception=function(c){var e;var a;var b;var d;e=function(f){b=f};d=function(){return(b)};a={getMessage:d};e(c);return(a)};JS.lang.ClassFactory.createClass({pkg:"JS.graphics",name:"Color",fields:[{name:"Alpha",defaultValue:255,setter:true,getter:true},{name:"Blue",defaultValue:0,setter:true,getter:true},{name:"Green",defaultValue:0,setter:true,getter:true},{name:"Red",defaultValue:0,setter:true,getter:true}],methods:[{setRGBA:function(a,c,b,d){Red=a;Green=c;Blue=b;Alpha=d}}]});JS.lang.ClassFactory.createClass({pkg:"JS.graphics",name:"Dimension",fields:[{name:"Height",defaultValue:0,setter:true,getter:true},{name:"Width",defaultValue:0,setter:true,getter:true}],methods:[{setSize:function(b,a){Width=b;Height=a}}]});JS.lang.ClassFactory.createClass({pkg:"JS.graphics",name:"Point",fields:[{name:"X",defaultValue:0,setter:true,getter:true},{name:"Y",defaultValue:0,setter:true,getter:true}],methods:[{setLocation:function(b,a){X=b;Y=a}}]});JS.util={};JS.lang.ClassFactory.createClass({pkg:"JS.util",name:"Vector",fields:[{name:"ItemList",defaultValue:"[]"}],methods:[{addItem:function(a){ItemList[ItemList.length]=a}},{getItem:function(a){return(ItemList[a])}},{getItemCount:function(){return(ItemList.length)}},{hasItem:function(a){var b;for(b=0;b<ItemList.length;b++){if(ItemList[b]===a){return(true)}}return(false)}},{indexOfItem:function(a){var b;for(b=0;b<ItemList.length;b++){if(ItemList[b]===a){return(b)}}return(-1)}},{pop:function(){var a;a=ItemList[ItemList.length-1];removeItem(a);return(a)}},{push:function(a){addItem(a)}},{removeAllItems:function(){ItemList=[]}},{removeItem:function(a){var b;b=indexOfItem(a);if(b!==-1){ItemList.splice(b,1)}}},{replace:function(c,a){var b;b=indexOfItem(Item);if(b!==-1){ItemList[b]=a}}}]});