/// <summary>
		/// Renders function syntax:
		/// function(param, param) { lines } 
		/// </summary>
		/// <param name="parameters"></param>
		/// <param name="lines"></param>
		/// <returns></returns>
		public static JsFunction Function(JsParameters parameters, params object[] lines)
		{
			return new JsFunction(parameters, lines);
		}
		/// <summary>
		/// Renders function syntax:
		/// function(param, param) { scriptBlock } 
		/// </summary>
		/// <param name="parameters"></param>
		/// <param name="scriptBlock"></param>
		/// <returns></returns>
		public static JsFunction Function(JsParameters parameters, JsBlock scriptBlock)
		{
			return new JsFunction(parameters, scriptBlock);
		}
		/// <summary>
		/// Renders function syntax:
		/// function(param, param) { lines } 
		/// </summary>
		/// <param name="layout"></param>
		/// <param name="parameters"></param>
		/// <param name="lines"></param>
		/// <returns></returns>
		public static JsFunction Function(ScriptLayout layout, JsParameters parameters, params object[] lines)
		{
			return new JsFunction(layout, parameters, lines);
		}
		/// <summary>
		/// Renders function syntax:
		/// function name(param, param) { scriptBlock } 
		/// </summary>
		/// <param name="name"></param>
		/// <param name="parameters"></param>
		/// <param name="scriptBlock"></param>
		/// <returns></returns>
        public static JsFunction Function(object name, JsParameters parameters, JsBlock scriptBlock)
		{
			return new JsFunction(name, parameters, scriptBlock);
		}
		/// <summary>
		/// Renders function syntax:
		/// function(param, param) { scriptBlock } 
		/// </summary>
		/// <param name="layout"></param>
		/// <param name="parameters"></param>
		/// <param name="scriptBlock"></param>
		/// <returns></returns>
		public static JsFunction Function(ScriptLayout layout, JsParameters parameters, JsBlock scriptBlock)
		{
			return new JsFunction(layout, parameters, scriptBlock);
		}
		/// <summary>
		/// Create a named function
		/// function name(param, param) { script } 
		/// </summary>
		/// <param name="name"></param>
		/// <param name="parameters"></param>
		/// <param name="script"></param>
		public JsFunction(string name, JsParameters parameters, JsBlock script)
		{
			Name = name;
			Parameters = parameters;
			Block = script;
		}
		/// <summary>
		/// Create a named function
		/// function name(param, param) { lines } 
		/// </summary>
		/// <param name="name"></param>
		/// <param name="parameters"></param>
		/// <param name="lines"></param>
		public JsFunction(string name, JsParameters parameters, params object[] lines)
		{
			Name = name;
			Parameters = parameters;
			Block = Js.Block(lines);
		}
		/// <summary>
		/// Create an anonymous function
		/// function(param, param) {  } 
		/// </summary>
		/// <param name="layout"></param>
		/// <param name="parameters"></param>
		public JsFunction(ScriptLayout layout, JsParameters parameters)
			: base(layout)
		{
			Parameters = parameters;
		}
		/// <summary>
		/// Create an anonymous function
		/// function(param, param) { lines } 
		/// </summary>
		/// <param name="layout"></param>
		/// <param name="parameters"></param>
		/// <param name="lines"></param>
		public JsFunction(ScriptLayout layout, JsParameters parameters, params object[] lines)
			: base(layout)
		{
			Parameters = parameters;
			Block = Js.Block(lines);
		}
		/// <summary>
		/// Create an anonymous function
		/// function(param, param) { script }  
		/// </summary>
		/// <param name="layout"></param>
		/// <param name="parameters"></param>
		/// <param name="scriptBlock"></param>
		public JsFunction(ScriptLayout layout, JsParameters parameters, JsBlock scriptBlock)
			: base(layout)
		{
			Parameters = parameters;
			Block = scriptBlock;
		}
		/// <summary>
		/// Create a named function
		/// function name(param, param) { lines } 
		/// </summary>
		/// <param name="layout"></param>
		/// <param name="name"></param>
		/// <param name="parameters"></param>
		/// <param name="script"></param>
		public JsFunction(ScriptLayout layout, string name, JsParameters parameters, JsBlock script)
			: base(layout)
		{
			Name = name;
			Parameters = parameters;
			Block = script;
		}
		/// <summary>
		/// Create an anonymous function
		/// function(param, param) { lines } 
		/// </summary>
		/// <param name="parameters"></param>
		/// <param name="lines"></param>
		public JsFunction(JsParameters parameters, params object[] lines)
		{
			Parameters = parameters;
			Block = Js.Block(lines);
		}
		/// <summary>
		/// Create an anonymous function
		/// function(param, param) {  } 
		/// </summary>
		/// <param name="parameters"></param>
		public JsFunction(JsParameters parameters)
		{
			Parameters = parameters;
		}
		/// <summary>
		/// Create an anonymous function
		/// function(param, param) { script } 
		/// </summary>
		/// <param name="parameters"></param>
		/// <param name="scriptBlock"></param>
		public JsFunction(JsParameters parameters, JsBlock scriptBlock)
			: this(null, parameters, scriptBlock)
		{
			Parameters = parameters;
			Block = scriptBlock;
		}