/// <summary>
        /// Konstruktor.
        /// </summary>
        /// <param name="szSessKey">Key welcher für die Identifikation des States in der Session verwendet wird.</param>
        public StateMachine(string szSessKey)
        {
            sessionKey = szSessKey + "State";

            // Wir versuchen den aktuellen Status aus der Session zu laden.
            if (null != System.Web.HttpContext.Current.Session[sessionKey])
            {
                currentState = (ForumStates)System.Web.HttpContext.Current.Session[sessionKey];
                System.Web.HttpContext.Current.Session[sessionKey] = currentState;
            }
        }
    /// <summary>
    /// Konstruktor.
    /// </summary>
    /// <param name="szSessKey">Key welcher für die Identifikation des States in der Session verwendet wird.</param>
    public StateMachine(string szSessKey)
    {
      sessionKey = szSessKey + "State";

      // Wir versuchen den aktuellen Status aus der Session zu laden.
      if (null != System.Web.HttpContext.Current.Session[sessionKey])
      {
        currentState = (ForumStates)System.Web.HttpContext.Current.Session[sessionKey];      
        System.Web.HttpContext.Current.Session[sessionKey] = currentState;
      }
    }
        /// <summary>
        /// Signalisiert ein Event, welches den Status der Statusmaschine beeinflussen kann. Der Status wird wenn nötig
        /// angepasst.
        /// </summary>
        /// <returns>true, wenn eine Änderung erfolgt ist.</returns>
        /// <param name="NewEvent">Das aufgetretene Ereignis.</param>
        public virtual bool SetEvent(StateEvents newEvent)
        {
            bool changed = false;

            switch (currentState)
            {
            case ForumStates.ForumView:                   // Aktueller Status MainView.
            {
                switch (newEvent)
                {
                case StateEvents.ShowThread:
                    currentState = ForumStates.ThreadView;
                    changed      = true;
                    break;

                case StateEvents.NewArticle:
                    currentState = ForumStates.WriteArticleView;
                    changed      = true;
                    break;
                }
                break;
            }

            case ForumStates.ThreadView:
            {
                switch (newEvent)
                {
                case StateEvents.CancelToForumView:
                    currentState = ForumStates.ForumView;
                    changed      = true;
                    break;

                case StateEvents.NewArticle:
                    currentState = ForumStates.WriteArticleView;
                    changed      = true;
                    break;
                }
                break;
            }

            case ForumStates.WriteArticleView:
            {
                if ((newEvent == StateEvents.CancelToThreadView) ||
                    (newEvent == StateEvents.ShowThread))
                {
                    currentState = ForumStates.ThreadView;
                    changed      = true;
                }
                else if (newEvent == StateEvents.CancelToForumView)
                {
                    currentState = ForumStates.ForumView;
                    changed      = true;
                }
                break;
            }

            case ForumStates.SearchResults:
            {
                if (newEvent == StateEvents.CancelToForumView)
                {
                    currentState = ForumStates.ForumView;
                    changed      = true;
                }
                else if (newEvent == StateEvents.ShowThread)
                {
                    currentState = ForumStates.ThreadView;
                    changed      = true;
                }
                break;
            }
            }

            if (newEvent == StateEvents.SearchText)
            {
                currentState = ForumStates.SearchResults;
                changed      = true;
            }

            // Abspeichern des aktuellen Status.
            if (changed)
            {
                System.Web.HttpContext.Current.Session[sessionKey] = currentState;
            }

            return(changed);
        }
 /// <summary>
 /// Setzt den Zustand der Statusmaschine zurück.
 /// </summary>
 public void ResetState()
 {
     currentState = ForumStates.ForumView;
     System.Web.HttpContext.Current.Session[sessionKey] = currentState;
 }
    /// <summary>
    /// Signalisiert ein Event, welches den Status der Statusmaschine beeinflussen kann. Der Status wird wenn nötig 
    /// angepasst.
    /// </summary>
    /// <returns>true, wenn eine Änderung erfolgt ist.</returns>    
    /// <param name="NewEvent">Das aufgetretene Ereignis.</param>
    public virtual bool SetEvent(StateEvents newEvent)
    {
      bool changed = false;

      switch(currentState)
      {
        case ForumStates.ForumView:                       // Aktueller Status MainView.
        {
          switch(newEvent)
          {
            case StateEvents.ShowThread:
              currentState = ForumStates.ThreadView;
              changed = true;
              break;
            case StateEvents.NewArticle:
              currentState = ForumStates.WriteArticleView;
              changed = true;
              break;
          }
          break;
        }

        case ForumStates.ThreadView:
        {
          switch (newEvent)
          {
            case StateEvents.CancelToForumView:
              currentState = ForumStates.ForumView;
              changed = true;
              break;
            case StateEvents.NewArticle:
              currentState = ForumStates.WriteArticleView;
              changed = true;
              break;
          }
          break;
        }

        case ForumStates.WriteArticleView:
        {
          if((newEvent == StateEvents.CancelToThreadView) ||
             (newEvent == StateEvents.ShowThread))
          {
            currentState = ForumStates.ThreadView;
            changed = true;
          }
          else if (newEvent == StateEvents.CancelToForumView)
          {
            currentState = ForumStates.ForumView;
            changed = true;
          }
          break;
        }

        case ForumStates.SearchResults:
        {
          if (newEvent == StateEvents.CancelToForumView)
          {
            currentState = ForumStates.ForumView;
            changed = true;
          }
          else if (newEvent == StateEvents.ShowThread)
          {
            currentState = ForumStates.ThreadView;
            changed = true;
          }
          break;
        }
      }

      if (newEvent == StateEvents.SearchText)
      {
        currentState = ForumStates.SearchResults;
        changed = true;
      }

      // Abspeichern des aktuellen Status.
      if(changed)
        System.Web.HttpContext.Current.Session[sessionKey] = currentState;
              
      return changed;
    }
 /// <summary>
 /// Setzt den Zustand der Statusmaschine zurück.
 /// </summary>
 public void ResetState()
 {
   currentState = ForumStates.ForumView;
   System.Web.HttpContext.Current.Session[sessionKey] = currentState;
 }