protected void AddError(MicrosoftScriptError error)
        {
            if (_errors == null)
            {
                _errors = new ArrayList();
            }

            this._errors.Add(error);
        }
		public void ExecuteFunction(string functionName, params object[] parameters)
		{
			IZeusContext context = null;
			try 
			{
				context = MicrosoftScriptControl.Eval("context") as IZeusContext;	
				object tmpReturn = MicrosoftScriptControl.Run(functionName, ref parameters);
			}
			catch (System.Runtime.InteropServices.COMException)
			{
                MicrosoftScriptError error = new MicrosoftScriptError(MicrosoftScriptControl.Error, context);
				this.AddError(error);
			}
		}
        public void ExecuteFunction(string functionName, params object[] parameters)
        {
            IZeusContext context = null;

            try
            {
                context = MicrosoftScriptControl.Eval("context") as IZeusContext;
                object tmpReturn = MicrosoftScriptControl.Run(functionName, ref parameters);
            }
            catch (System.Runtime.InteropServices.COMException)
            {
                MicrosoftScriptError error = new MicrosoftScriptError(MicrosoftScriptControl.Error, context);
                this.AddError(error);
            }
        }
		public void EngineExecuteGuiCode(IZeusCodeSegment segment, IZeusContext context)
		{
			// If the template has an interface block, execute it
			if (!segment.IsEmpty) 
			{
				if (!HasErrors) 
				{
                    int step = 0;
                    try
                    {
                        MicrosoftScriptControl.Timeout = (_timeout == -1 ? MSScriptControl.ScriptControlConstants.NoTimeout : (_timeout * 1000));
                        MicrosoftScriptControl.Language = segment.Language;
                        MicrosoftScriptControl.AllowUI = true;
                        MicrosoftScriptControl.UseSafeSubset = false;
                        MicrosoftScriptControl.Reset();
                        MicrosoftScriptControl.AddObject("input", context.Input, true);
                        MicrosoftScriptControl.AddObject("context", context, true);

                        foreach (string key in context.Objects.Keys)
                        {
                            if (key != "input")
                                MicrosoftScriptControl.AddObject(key, context.Objects[key], true);
                        }

                        step = 1;

                        MicrosoftScriptControl.AddCode(segment.Code);
                        
                        step = 2;

                        object[] paramList = new object[0];

                        object tmpReturn = MicrosoftScriptControl.Run(GUI_ENTRY_NAME, ref paramList);

                        if (context.Gui.ShowGui || context.Gui.ForceDisplay)
                        {
                            OnShowGUI(context.Gui);
                        }
                    }
                    catch (System.Runtime.InteropServices.COMException)
                    {
                        MicrosoftScriptError error = new MicrosoftScriptError(MicrosoftScriptControl.Error, context);
                        if (step < 2) error.IsRuntime = false;
                        this.AddError(error);
                    }
                    catch (Exception ex)
                    {
                        if ((MicrosoftScriptControl.Error == null) || (MicrosoftScriptControl.Error.Description == null))
                        {
                            throw ex;
                        }
                        else
                        {
                            MicrosoftScriptError error = new MicrosoftScriptError(MicrosoftScriptControl.Error, context);
                            if (step < 2) error.IsRuntime = false;
                            this.AddError(error);
                        }
                    }

					MicrosoftScriptControl.Reset();
				}
			}
		}
		protected void AddError(MicrosoftScriptError error) 
		{
			if (_errors == null) _errors = new ArrayList();
 
			this._errors.Add(error);
		}
		public void EngineExecuteCode(IZeusCodeSegment segment, IZeusContext context)
		{
			// If the segment isn't empty, execute it
			if (!segment.IsEmpty) 
			{
				if (!HasErrors)
                {
                    int step = 0;
					try 
					{
						if (context.ExecutionDepth > 1) 
						{
								ScriptStack.Push( new MSScriptControl.ScriptControl() );
						}

						MicrosoftScriptControl.Timeout = (_timeout == -1 ? MSScriptControl.ScriptControlConstants.NoTimeout : (_timeout * 1000) );
						MicrosoftScriptControl.Language = segment.Language;
						MicrosoftScriptControl.AllowUI = true;
						MicrosoftScriptControl.UseSafeSubset = false;

						MicrosoftScriptControl.AddObject("output", context.Output, true);
						MicrosoftScriptControl.AddObject("input", context.Input, true);
						MicrosoftScriptControl.AddObject("context", context, true);
			
						foreach (string key in context.Objects.Keys) 
						{
							if ((key != "output") && (key != "input"))
								MicrosoftScriptControl.AddObject(key, context.Objects[key], true);
						}

						string entryCode = this.ScriptingEntryCall(segment.Language) as String;
						string entryCall = BODY_ENTRY_NAME;

                        step = 1;
						MicrosoftScriptControl.AddCode(segment.Code);
						MicrosoftScriptControl.AddCode(entryCode);
                        step = 2;

						object[] paramList = new object[0];
			
						object tmpReturn = MicrosoftScriptControl.Run(entryCall, ref paramList);
					}
					catch (System.Runtime.InteropServices.COMException)
					{
						MicrosoftScriptError error = new MicrosoftScriptError(MicrosoftScriptControl.Error, context);
                        if (step < 2) error.IsRuntime = false;
						this.AddError(error);
					}
                    catch (Exception ex)
                    {
                        if ((MicrosoftScriptControl.Error == null) || (MicrosoftScriptControl.Error.Description == null))
                        {
                            throw ex;
                        }
                        else
                        {
                            MicrosoftScriptError error = new MicrosoftScriptError(MicrosoftScriptControl.Error, context);
                            if (step < 2) error.IsRuntime = false;
                            this.AddError(error);
                        }
                    }
					finally 
					{
						MicrosoftScriptControl.Reset();
						if (context.ExecutionDepth > 1) ScriptStack.Pop();
					}
				}
			}
		}
        public void EngineExecuteGuiCode(IZeusCodeSegment segment, IZeusContext context)
        {
            // If the template has an interface block, execute it
            if (!segment.IsEmpty)
            {
                if (!HasErrors)
                {
                    int step = 0;
                    try
                    {
                        MicrosoftScriptControl.Timeout       = (_timeout == -1 ? MSScriptControl.ScriptControlConstants.NoTimeout : (_timeout * 1000));
                        MicrosoftScriptControl.Language      = segment.Language;
                        MicrosoftScriptControl.AllowUI       = true;
                        MicrosoftScriptControl.UseSafeSubset = false;
                        MicrosoftScriptControl.Reset();
                        MicrosoftScriptControl.AddObject("input", context.Input, true);
                        MicrosoftScriptControl.AddObject("context", context, true);

                        foreach (string key in context.Objects.Keys)
                        {
                            if (key != "input")
                            {
                                MicrosoftScriptControl.AddObject(key, context.Objects[key], true);
                            }
                        }

                        step = 1;

                        MicrosoftScriptControl.AddCode(segment.Code);

                        step = 2;

                        object[] paramList = new object[0];

                        object tmpReturn = MicrosoftScriptControl.Run(GUI_ENTRY_NAME, ref paramList);

                        if (context.Gui.ShowGui || context.Gui.ForceDisplay)
                        {
                            OnShowGUI(context.Gui);
                        }
                    }
                    catch (System.Runtime.InteropServices.COMException)
                    {
                        MicrosoftScriptError error = new MicrosoftScriptError(MicrosoftScriptControl.Error, context);
                        if (step < 2)
                        {
                            error.IsRuntime = false;
                        }
                        this.AddError(error);
                    }
                    catch (Exception ex)
                    {
                        if ((MicrosoftScriptControl.Error == null) || (MicrosoftScriptControl.Error.Description == null))
                        {
                            throw ex;
                        }
                        else
                        {
                            MicrosoftScriptError error = new MicrosoftScriptError(MicrosoftScriptControl.Error, context);
                            if (step < 2)
                            {
                                error.IsRuntime = false;
                            }
                            this.AddError(error);
                        }
                    }

                    MicrosoftScriptControl.Reset();
                }
            }
        }
        public void EngineExecuteCode(IZeusCodeSegment segment, IZeusContext context)
        {
            // If the segment isn't empty, execute it
            if (!segment.IsEmpty)
            {
                if (!HasErrors)
                {
                    int step = 0;
                    try
                    {
                        if (context.ExecutionDepth > 1)
                        {
                            ScriptStack.Push(new MSScriptControl.ScriptControl());
                        }

                        MicrosoftScriptControl.Timeout       = (_timeout == -1 ? MSScriptControl.ScriptControlConstants.NoTimeout : (_timeout * 1000));
                        MicrosoftScriptControl.Language      = segment.Language;
                        MicrosoftScriptControl.AllowUI       = true;
                        MicrosoftScriptControl.UseSafeSubset = false;

                        MicrosoftScriptControl.AddObject("output", context.Output, true);
                        MicrosoftScriptControl.AddObject("input", context.Input, true);
                        MicrosoftScriptControl.AddObject("context", context, true);

                        foreach (string key in context.Objects.Keys)
                        {
                            if ((key != "output") && (key != "input"))
                            {
                                MicrosoftScriptControl.AddObject(key, context.Objects[key], true);
                            }
                        }

                        string entryCode = this.ScriptingEntryCall(segment.Language) as String;
                        string entryCall = BODY_ENTRY_NAME;

                        step = 1;
                        MicrosoftScriptControl.AddCode(segment.Code);
                        MicrosoftScriptControl.AddCode(entryCode);
                        step = 2;

                        object[] paramList = new object[0];

                        object tmpReturn = MicrosoftScriptControl.Run(entryCall, ref paramList);
                    }
                    catch (System.Runtime.InteropServices.COMException)
                    {
                        MicrosoftScriptError error = new MicrosoftScriptError(MicrosoftScriptControl.Error, context);
                        if (step < 2)
                        {
                            error.IsRuntime = false;
                        }
                        this.AddError(error);
                    }
                    catch (Exception ex)
                    {
                        if ((MicrosoftScriptControl.Error == null) || (MicrosoftScriptControl.Error.Description == null))
                        {
                            throw ex;
                        }
                        else
                        {
                            MicrosoftScriptError error = new MicrosoftScriptError(MicrosoftScriptControl.Error, context);
                            if (step < 2)
                            {
                                error.IsRuntime = false;
                            }
                            this.AddError(error);
                        }
                    }
                    finally
                    {
                        MicrosoftScriptControl.Reset();
                        if (context.ExecutionDepth > 1)
                        {
                            ScriptStack.Pop();
                        }
                    }
                }
            }
        }