// Author: Fabrice Marguerie
// http://weblogs.asp.net/fmarguerie
// fabrice @ madgeek .com
//
// Free for use
namespace Madgeek.Web.UI.WebControls
{
	#region Imports
	using System;
	using System.ComponentModel;
	using System.Web;
	using System.Web.UI;
	using Microsoft.Web.UI.WebControls;
	#endregion
	public class TreeNode : Microsoft.Web.UI.WebControls.TreeNode
	{
		/// 
		/// Render the downlevel version of the TreeNode.
		/// 
		/// The HtmlTextWriter that will receive the markup.
		protected override void RenderDownLevelPath(HtmlTextWriter output)
		{
			AddAttributesToRender(output);
			base.RenderDownLevelPath(output);
		}
	}
	/// 
	/// Possible usages for web controls' client behavior.
	/// 
	public enum BehaviorUsage {Default, Deactivated, Forced}
	/// 
	/// TreeView Web Control that can be configured to use the client behavior or not.
	/// 
	/// Being able to deactivate the client behavior can be useful to get correct printing.
	public class TreeView : Microsoft.Web.UI.WebControls.TreeView
	{
		/// 
		/// Indicates whether the client behavior must forced or deactivated.
		/// 
		[Category("Custom"), DefaultValue(BehaviorUsage.Default)]
		public BehaviorUsage BehaviorUsage
		{
			get
			{
				object o = ViewState["BehaviorUsage"];
				return (o == null) ? BehaviorUsage.Default : (BehaviorUsage) o; 
			}
			set
			{
				ViewState["BehaviorUsage"] = value;
			}
		}
		/// 
		/// The ID of the rendering path being used.
		/// 
		protected override RenderPathID RenderPath
		{
			get 
			{
				/* base code
				if (IsDesignMode)
				{
					return RenderPathID.DesignerPath;
				}
				if (_BrowserLevelChecker.IsUpLevelBrowser(Context))
				{
					return RenderPathID.UpLevelPath;
				}
				return RenderPathID.DownLevelPath;
				*/
				if (IsDesignMode)
				{
					return RenderPathID.DesignerPath;
				}
				switch (BehaviorUsage)
				{
					case BehaviorUsage.Deactivated:
						return RenderPathID.DownLevelPath;
					case BehaviorUsage.Forced:
						return RenderPathID.UpLevelPath;
					case BehaviorUsage.Default:
						return base.RenderPath;
					default:
						throw new Exception("BehaviorUsage not defined :"+BehaviorUsage);
				}
			}
		}
	}
}