function _fnDrawHead(settings, source) {
		var layout = _fnHeaderLayout(settings, source);
		var tr, n;

		for (var row = 0; row < source.length; row++) {
			tr = source[row].row;

			// All cells are going to be replaced, so empty out the row
			// Can't use $().empty() as that kills event handlers
			if (tr) {
				while ((n = tr.firstChild)) {
					tr.removeChild(n);
				}
			}

			for (var column = 0; column < layout[row].length; column++) {
				var point = layout[row][column];

				if (point) {
					$(point.cell)
						.appendTo(tr)
						.attr('rowspan', point.rowspan)
						.attr('colspan', point.colspan);
				}
			}
		}
	}
Draw the header (or footer) element based on the column visibility states.

 @param object oSettings dataTables settings object
 @param array aoSource Layout array from _fnDetectHeader
 @memberof DataTable#oApi