Hey I'm sort of stuck. It almost works, but there are so many different ways to do what I'm trying to do it's confusing. I look at 10 examples and they're all different.

Code:
/* ------------------- ADD ROW ------------------- */

function addRow(tableID) { 
            var table = document.getElementById(tableID);
 
            var rowCount = table.rows.length;
            var row = table.insertRow(rowCount);
		// checkbox
            var cell1 = row.insertCell(0);
            var element1 = document.createElement("input");
            element1.type = "checkbox";
			element1.name = "chk" + rowCount;
            cell1.appendChild(element1);
		// row number
            var cell2 = row.insertCell(1);
            cell2.innerHTML = rowCount;
		// quantity
            var cell3 = row.insertCell(2);
			cell3.className = "span4";
            var element2 = document.createElement("input");
			element2.type = "text";
			element2.name = "qty" + rowCount;
			element2.className = "span4";
			cell3.appendChild(element2);
		// SKU
			var cell4 = row.insertCell(3);
			var skudiv = document.createElement("div");
			skudiv.className = "input-prepend input-append";
            var element3 = document.createElement("input");
            element3.type = "text";
			element3.name = "sku" + rowCount;
			var skuspanelement = document.createElement("span");
			skuspanelement.className = "add-on";
			skuspanelement.innerHTML = "SKU";
            skudiv.appendChild(skuspanelement);
			skudiv.appendChild(element3);
			cell4.appendChild(skudiv);
		// cost
			var cell5 = row.insertCell(4);
			var costdiv = document.createElement("div");
			costdiv.className = "input-prepend input-append";
            var element4 = document.createElement("input");
            element4.type = "text";
			element4.name = "cost" + rowCount;
			element4.className = "span5";
			var spanelement = document.createElement("span");
			spanelement.className = "add-on";
			spanelement.innerHTML = "$";
            costdiv.appendChild(spanelement);
			costdiv.appendChild(element4);
			cell5.appendChild(costdiv);
		// add items
            var cell6 = row.insertCell(5);
            var element5 = document.createElement("button");
			element5.name = "additembutton" + rowCount;
			element5.className = "btn btn-mini";
			element5.onclick = function() { addmultirow('dataTable') };
			element5.innerHTML = "Add Items";
			cell6.appendChild(element5);
		}
		
/* ------------------- DELETE ROW ------------------- */
 
        function deleteRow(tableID) {
            try {
            var table = document.getElementById(tableID);
            var rowCount = table.rows.length;
 
            for(var i=0; i<rowCount; i++) {
                var row = table.rows[i];
                var chkbox = row.cells[0].childNodes[0];
                if(null != chkbox && true == chkbox.checked) {
                    table.deleteRow(i);
                    rowCount--;
                    i--;
                }
 
 
            }
            }catch(e) { alert(e); }
        }


		
/* ------------------- ADD ROW SN ------------------- */
		function addRowSN(tableID) { 
            var table = document.getElementById(tableID);
 
            var rowCount = table.rows.length;
            var row = table.insertRow(rowCount);
		// checkbox
            var cell1 = row.insertCell(0);
            var element1 = document.createElement("input");
            element1.type = "checkbox";
			element1.name = "chk" + rowCount;
            cell1.appendChild(element1);
		// row number
            var cell2 = row.insertCell(1);
            cell2.innerHTML = rowCount;
		// quantity
            var cell3 = row.insertCell(2);
			cell3.className = "span4";
            var element2 = document.createElement("input");
			element2.type = "text";
			element2.name = "qty" + rowCount;
			element2.className = "span4";
			cell3.appendChild(element2);
		// SN
			var cell4 = row.insertCell(3);
			var sndiv = document.createElement("div");
			sndiv.className = "input-prepend input-append";
            var element3 = document.createElement("input");
            element3.type = "text";
			element3.name = "sn" + rowCount;
			element3.className = "span5";
			var snspanelement = document.createElement("span");
			snspanelement.className = "add-on";
			snspanelement.innerHTML = "SN";
            sndiv.appendChild(snspanelement);
			sndiv.appendChild(element3);
			cell4.appendChild(sndiv);
		// UniqueID
			var cell5 = row.insertCell(4);
			var costdiv = document.createElement("div");
			costdiv.className = "input-prepend input-append";
            var element4 = document.createElement("input");
            element4.type = "text";
			element4.name = "uid" + rowCount;
			element4.className = "span5";
			var spanelement = document.createElement("span");
			spanelement.className = "add-on";
			spanelement.innerHTML = "ID";
            costdiv.appendChild(spanelement);
			costdiv.appendChild(element4);
			cell5.appendChild(costdiv);
		// delete items
            var cell6 = row.insertCell(5);
            var element5 = document.createElement("button");
			element5.name = "deleteitem" + rowCount;
			element5.className = "btn btn-mini btn-inverse";
			element5.innerHTML = "Delete Item"
			element5.onclick = function() { deleteRowNCB('dataTable') };
			cell6.appendChild(element5);
		}
/* ------------------- DELETE ROW SN ------------------- */
        function deleteRowSN(tableID) {
            try {
            var table = document.getElementById(tableID);
            var rowCount = table.rows.length;
 
            for(var i=0; i<rowCount; i++) {
                var row = table.rows[i];
                var chkbox = row.cells[0].childNodes[0];
                if(null != chkbox && true == chkbox.checked) {
                    table.deleteRow(i);
                    rowCount--;
                    i--;
                }
 
 
            }
            }catch(e) { alert(e); }
        }
/* ------------------- DELETE ROW W/O CHECKBOX ------------------- */
                   // this needs a little TLC //
        function deleteRowNCB(tableID) 
		
		{
			var table = document.getElementById(tableID);
            var rowCount = table.rows.length;
			
			table.deleteRow(2);
                    rowCount--;
                    i--;
		}
		
		
/* ------------------- ADD MULTI ROW ------------------- */
		function addmultirow() {
			var qtyofrows = document.getElementById("qty");
			var theqty = qtyofrows.value;
			for (var i=0; i < theqty; i++)
				{
				addRowSN("dataTable");
				}
			}
/* ------------------- ROW COLLAPSER ------------------- */
		function hiderow() {
			if( document.getElementById("hidethis").style.display=='none' ){
			document.getElementById("hidethis").style.display = '';
			}else{
			document.getElementById("hidethis").style.display = 'none';
			}
			}
Big blob of the HTML:

Code:
<div class="row-fluid">
	<div class="span12">
		<div class="span9">
		<div class="well">
			<legend>Invoice Items</legend><input type="button" value="Delete Item Type" onclick="deleteRow('dataTable')" class="btn btn-inverse pull-right"/><input type="button" value="Add Item Type" onclick="addRow('dataTable')" class="btn btn-info pull-right"/>
 			<br /><br />
			<table id="dataTable" width="350px" border="1" class="table table-hover">
			<tr><th></th><th></th><th>QTY</th><th>SKU</th><th>Cost (each)</th><th></th></tr>
			<tr id="hidethis">
			<td><input type="checkbox" name="chk"/></td>
			<td> 1 </td>
			<td> <input type="text" id="qty" class="span4"/> </td> <td> <div class="ui-widget input-prepend input-append"><span class="add-on">SKU</span><input type="text" id="skubox"/></div> </td> <td> <div class="input-prepend input-append"><span class="add-on">$</span><input type="text" class="span5"/></div> </td> <td> <button class="btn btn-mini" type="button" onclick="addmultirow('dataTable')">Add Items</button> </td>
			</tr>
			</table>
			</div><!--/well-->
		</div><!--/span-->
	</div><!--/span-->
</div><!--/row-->
<div class="row-fluid">
	<div class="span12">
		<button onClick="hiderow();">Hide Row</button>
	</div><!--/span-->
</div><!--/row-->
Right now if you input text into the first qty box and hit 'add items' it will create that many rows to put serial numbers onto. That's great, but I want to make those rows attach together somehow, so they are collapsible. The only way I can think of would be to make the tables nest together. So if we were to apply some jQuery to re-organise the table, they would move as a set. Figuring how how to change the function to create a table containing rows right now instead of just adding the rows, it's confusing.

Help greatly appreciated.