<!--- Kill extra output. --->
<cfsilent>

	<!---
		Check to see if we are in the start mode of the tag. There
		is no need to param any attributes after the start mode.
	--->
	<cfif (THISTAG.ExecutionMode EQ "Start")>

		<!---
			Param the align attribute. This till determine if we
			show the list one after another in-line, or if the
			list should be displayed as block elements.

			Possible values:
			- horizontal (default)
			- vertical
		--->
		<cfparam
			name="ATTRIBUTES.align"
			type="string"
			default="horizontal"
			/>

	</cfif>

</cfsilent>

<!---
	Since this is a parent tag that is designed to have child
	tags, we can't really do anything until the child tags have
	been defined. Therefore, we can only really work in the
	End mode of execution.
--->
<cfif (THISTAG.ExecutionMode EQ "End")>

	<!---
		ASSERT:
		At this point, we should have all the child tags
		associated with this parent tag. As per the child tags,
		all the attribute data should be in a structure:
		THISTAG.Items.
	--->

	<!---
		Now, we have to check to see how to display the items.
		Vertically or horizontally?
	--->
	<cfif (ATTRIBUTES.align EQ "vertical")>

		<!--- Display veritcally. --->

		<!---
			Loop over the Items array. Remember, this array
			contains the attributes of the child tags. Remember
			to use CFOutput tags as custom tags are NOT natural
			CFOutput blocks.
		--->
		<cfoutput>

			<cfloop
				index="intI"
				from="1"
				to="#ArrayLen( THISTAG.Items )#"
				step="1">

				<!--- Output value. --->
				<p>
					Item #intI#: #THISTAG.Items[ intI ].value#
				</p>

			</cfloop>

		</cfoutput>

	<cfelse>

		<!---
			We are going with the default, which is vertical.
			You might think the first CFIF clause should be the
			default statement since the default is probably the
			most often used. By making the default the ELSE
			clause, we don't really have to validate the types
			passed in. But that's not really here nor there.
		--->

		<!---
			Loop over the Items array. Remember, this array
			contains the attributes of the child tags. Remember
			to use CFOutput tags as custom tags are NOT natural
			CFOutput blocks.
		--->
		<cfoutput>

			<cfloop
				index="intI"
				from="1"
				to="#ArrayLen( THISTAG.Items )#"
				step="1">

				<!--- Output value. --->
				Item #intI#: #THISTAG.Items[ intI ].value#

			</cfloop>

		</cfoutput>

	</cfif>

</cfif>