public JsCall CreateNewCall(ScriptFormat format, string className, params object[] items)
		{
			JsCall c = new JsCall(this.Document, className, items);
			c.New = true;
			c.SetFormat(format);
			return c;
		}
 public void SetFormat(ScriptFormat format)
 {
     switch (format)
     {
         case ScriptFormat.None:
             break;
         case ScriptFormat.Inline:
             this._StartOnNewLine = false;
             this._MultiLine = false;
             break;
         case ScriptFormat.MultiLine:
             this._MultiLine = true;
             this._StartOnNewLine = false;
             break;
         case ScriptFormat.StartOnNewLine:
             this._StartOnNewLine = true;
             this._MultiLine = true;
             break;
         default:
             break;
     }
 }
		public ScriptSet S(ScriptFormat format, params object[] items)
		{
			return CreateScriptSet(format, items);
		}
		public ScriptSet CreateScriptSet(ScriptFormat format, params object[] items)
		{
			ScriptSet j = new ScriptSet(this.Document, items);
			j.SetFormat(format);
			return j;
		}
        public void AddNewScript( string name, ScriptFormat format )
        {
            string scriptName = name;
            int i = 1;
            while( _scriptItems.ContainsKey( scriptName ) )
            {
                scriptName = name + i;
                i++;
            };

            Script script = new Script( scriptName );
            script.ScriptText = GetScriptGeneratedCode( scriptName, format );
            script.ScriptType = ScriptType.CSharp;
            script.FilePath = Path.Combine( GetAssetFolder( AssetType.Script ), scriptName + GetScriptExtension( script.ScriptType ) );

            AddScript( script );

            script.Save( );

            _lastCreatedScript = script.Parent;

            Global.ScriptEditor.OpenScript( script.Parent );

            Global.MainWindow.OnScriptAdded( );
        }
		public ScriptLines CreateScriptLines(ScriptFormat format, params object[] lines)
		{
			ScriptLines sl = new ScriptLines(this.Document, lines);
			sl.SetFormat(format);
			return sl;
		}
		public JsProperty P(ScriptFormat format, string name, object value)
		{
			return CreateProperty(format, name, value);
		}
		public JsObject O(ScriptFormat format, params object[] properties)
		{
			return CreateObject(format, properties);
		}
		public JsFunction F(ScriptFormat format, ScriptLines commands)
		{
			return CreateFunction(format, commands);
		}
		public JsFunction CreateFunction(ScriptFormat format, ScriptLines commands)
		{
			JsFunction f = new JsFunction(this.Document, commands);
			f.SetFormat(format);
			return f;
		}
		public JsFunction F(ScriptFormat format, JsList parameters, ScriptLines commands)
		{
			return CreateFunction(format, parameters, commands);
		}
		public JsBlock B(ScriptFormat format, params object[] lines)
		{
			return CreateBlock(format, lines);
		}
		public JsBlock CreateBlock(ScriptFormat format, params object[] lines)
		{
			JsBlock m = new JsBlock(this.Document, lines);
			m.SetFormat(format);
			return m;
		}
		public JsArray A(ScriptFormat format, params object[] list)
		{
			return CreateArray(format, list);
		}
        private string GetScriptGeneratedCode( string className, ScriptFormat format )
        {
            string defaultMethods =
                        "\t\t//This is called once, when the object is created.\n" +
                        "\t\tpublic override void Init( )\n" +
                        "\t\t{\n" +
                        "\t\t\t\n" +
                        "\t\t}\n\n" +
                        "\t\t//This is called every frame.\n" +
                        "\t\tpublic override void Update( GameTime gameTime )\n" +
                        "\t\t{\n" +
                        "\t\t\t\n" +
                        "\t\t}\n\n" +
                        "\t\t//This is called when the object is about to be destroyed.\n" +
                        "\t\tpublic override void End( )\n" +
                        "\t\t{\n" +
                        "\t\t\t\n" +
                        "\t\t}\n\n";
            switch( format )
            {
                case ScriptFormat.Blank:
                    return
                        "using LunarEngine;\n\n" +
                        "namespace " + Global.World.Name + "\n" +
                        "{\n\t\n}";

                case ScriptFormat.Game:
                    return
                        "using LunarEngine;\n" +
                        "using Microsoft.Xna.Framework;\n\n" +
                        "namespace " + Global.World.Name + "\n" +
                        "{\n"+
                        "\tpublic class " + className + " : LunarGame\n" +
                        "\t{\n" +
                        "\t\t//This is called when the game is being initialized.\n" +
                        "\t\tpublic override void Init( )\n" +
                        "\t\t{\n" +
                        "\t\t\t\n" +
                        "\t\t}\n\n" +
                        "\t\t//This is called every frame.\n" +
                        "\t\tpublic override void Update( GameTime gameTime )\n" +
                        "\t\t{\n" +
                        "\t\t\t\n" +
                        "\t\t}\n\n" +
                        "\t}\n" +
                        "}";

                case ScriptFormat.Level:
                    return
                        "using LunarEngine;\n" +
                        "using Microsoft.Xna.Framework;\n\n" +
                        "namespace " + Global.World.Name + "\n" +
                        "{\n"+
                        "\tpublic class " + className + " : Level\n" +
                        "\t{\n" +
                        defaultMethods +
                        "\t}\n" +
                        "}";

                case ScriptFormat.Actor:
                    return
                        "using LunarEngine;\n" +
                        "using Microsoft.Xna.Framework;\n\n" +
                        "namespace " + Global.World.Name + "\n" +
                        "{\n"+
                        "\tpublic class " + className + " : Actor\n" +
                        "\t{\n" +
                        defaultMethods +
                        "\t}\n" +
                        "}";

                case ScriptFormat.TextActor:
                    return
                        "using LunarEngine;\n" +
                        "using Microsoft.Xna.Framework;\n\n" +
                        "namespace " + Global.World.Name + "\n" +
                        "{\n"+
                        "\tpublic class " + className + " : TextActor\n" +
                        "\t{\n" +
                        defaultMethods +
                        "\t}\n" +
                        "}";

                default:
                    return "";
            }
        }
		public JsCall N(ScriptFormat format, string className, params object[] items)
		{
			return CreateNewCall(format, className, items);
		}
		public JsObject CreateObject(ScriptFormat format, params object[] properties)
		{
			JsObject o = new JsObject(this.Document, properties);
			o.SetFormat(format);
			return o;
		}
		public JsCall CreateCall(ScriptFormat format, string function, params object[] items)
		{
			JsCall c = new JsCall(this.Document, function, items);
			c.SetFormat(format);
			return c;
		}
		public JsProperty CreateProperty(ScriptFormat format, string name, object value)
		{
			JsProperty p = new JsProperty(this.Document, name, value);
			p.SetFormat(format);
			return p;
		}
		public JsCall C(ScriptFormat format, string function, params object[] items)
		{
			return CreateCall(format, function, items);
		}
		public JsArray CreateArray(ScriptFormat format, params object[] list)
		{
			JsArray a = new JsArray(this.Document, list);
			a.SetFormat(format);
			return a;
		}
		public JsList CreateList(ScriptFormat format, params object[] items)
		{
			JsList l = new JsList(this.Document, items);
			l.SetFormat(format);
			return l;
		}
		public ScriptLines SL(ScriptFormat format, params object[] lines)
		{
			return CreateScriptLines(format, lines);
		}
		public JsList L(ScriptFormat format, params object[] items)
		{
			return CreateList(format, items);
		}