";
		//
		// (0,0) cell is exceptional, it's a big merged cell with no choice
		//
		if ($nColumnIdx == 1)
			{
			echo "| ";
			echo $sHeaderDesign;
			echo "";
			}
		//
		// Get number of choices of current Y-attribute
		//
		$nAttributeChoiceCount = count($listHeaderDesigns[$nBaseAttributeIdx + $nColumnIdx - 1]) - 1;
		//
		// Determine table cell offset, i.e. how many columns this choice occupies
		//
		$nColSpan = 1;
		for ($nAttributeIdx = $nColumnIdx + 1; $nAttributeIdx <= $nYAttributeCount; $nAttributeIdx++)
			{
			$nColSpan *= (count($listHeaderDesigns[$nBaseAttributeIdx + $nAttributeIdx - 1]) - 1);
			}
		//
		// Draw header table cells - one for each choice
		//
		for ($nRepeat = 1; $nRepeat <= $nRepeatChoicesBy; $nRepeat++)
			{
			for ($nChoiceIdx = 1; $nChoiceIdx <= $nAttributeChoiceCount; $nChoiceIdx++)
				{
				echo " | ";
				echo $listHeaderDesigns[$nBaseAttributeIdx + $nColumnIdx - 1][$nChoiceIdx];
				echo "";
				}
			}
		//
		// Content of the next row should be repeated for each choice in this row
		//
		$nRepeatChoicesBy = $nRepeatChoicesBy * $nAttributeChoiceCount;
		//
		// Row end tag
		//
		echo " | 
";  
	  }
	//
	// Draw table rows
	//
	$listCellChoiceIndices = array();
	$nAttributeIdx = 1;
	$sRowHeader = "";
	drawRows($nAttributeIdx, $listCellChoiceIndices, $sRowHeader);
	//
	// Close table tag
	//
	echo "";