Hi
Better. But incomplete.
[ul]
[li]We not know what elements are those with dynamic_tp_table_heading, dynamic_tp_table and time_period [tt]id[/tt][/li]
[li]We not know what IsValidNumber() function does[/li]
[li]canHaveChildren is Explorer-only, so your code will not work in standard-compliant browsers[/li]
[li]We not know what the AppendRow() function does[/li]
[li]We not know what the AppendCell() function does[/li]
[/ul]
Reducing your function to what we know, this works for me :
Code:
[b]function[/b] [COLOR=darkgoldenrod]createTable[/color][teal]([/teal]rowCount[teal],[/teal] colCount[teal],[/teal] srcHolder[teal])[/teal]
[teal]{[/teal]
srcHolder[teal].[/teal]innerHTML [teal]=[/teal] [green][i]""[/i][/green][teal];[/teal]
[b]var[/b] srcTable [teal]=[/teal] document[teal].[/teal][COLOR=darkgoldenrod]createElement[/color][teal]([/teal][green][i]"table"[/i][/green][teal]);[/teal]
srcTable[teal].[/teal]border [teal]=[/teal] [purple]1[/purple][teal];[/teal]
srcTable[teal].[/teal]borderColor [teal]=[/teal] [green][i]"Black"[/i][/green][teal];[/teal]
srcTable[teal].[/teal]width [teal]=[/teal] [purple]320[/purple][teal];[/teal]
[b]var[/b] tmpRow [teal]=[/teal] [b]null[/b][teal];[/teal]
[b]var[/b] tmpCell [teal]=[/teal] [b]null[/b][teal];[/teal]
srcHolder[teal].[/teal][COLOR=darkgoldenrod]appendChild[/color][teal]([/teal]srcTable[teal]);[/teal]
[b]for[/b] [teal]([/teal]i[teal]=[/teal][purple]0[/purple][teal];[/teal] i[teal]<[/teal]rowCount[teal];[/teal] i[teal]++)[/teal] [teal]{[/teal]
tmpRow [teal]=[/teal] srcTable[teal].[/teal][COLOR=darkgoldenrod]insertRow[/color][teal](-[/teal][purple]1[/purple][teal])[/teal]
[b]for[/b] [teal]([/teal]j[teal]=[/teal][purple]0[/purple][teal];[/teal] j[teal]<[/teal]colCount[teal];[/teal] j[teal]++)[/teal] [teal]{[/teal]
tmpCell [teal]=[/teal] tmpRow[teal].[/teal][COLOR=darkgoldenrod]insertCell[/color][teal](-[/teal][purple]1[/purple][teal])[/teal]
tmpCell[teal].[/teal]innerHTML [teal]=[/teal] [green][i]"<input type='text' value='' id='test' size='16' >"[/i][/green][teal];[/teal]
tmpCell [teal]=[/teal] [b]null[/b][teal];[/teal]
[teal]}[/teal]
tmpRow [teal]=[/teal] [b]null[/b][teal];[/teal]
[teal]}[/teal]
[teal]}[/teal]
Regarding your 4 column requirement, I would change my above function like this :
Code:
[b]function[/b] [COLOR=darkgoldenrod]createTable[/color][teal]([/teal]rowCount[teal],[/teal] srcHolder[teal])[/teal]
[teal]{[/teal]
srcHolder[teal].[/teal]innerHTML [teal]=[/teal] [green][i]""[/i][/green][teal];[/teal]
[b]var[/b] srcTable [teal]=[/teal] document[teal].[/teal][COLOR=darkgoldenrod]createElement[/color][teal]([/teal][green][i]"table"[/i][/green][teal]);[/teal]
srcTable[teal].[/teal]border [teal]=[/teal] [purple]1[/purple][teal];[/teal]
srcTable[teal].[/teal]borderColor [teal]=[/teal] [green][i]"Black"[/i][/green][teal];[/teal]
srcTable[teal].[/teal]width [teal]=[/teal] [purple]320[/purple][teal];[/teal]
[b]var[/b] tmpRow [teal]=[/teal] [b]null[/b][teal];[/teal]
[b]var[/b] tmpCell [teal]=[/teal] [b]null[/b][teal];[/teal]
srcHolder[teal].[/teal][COLOR=darkgoldenrod]appendChild[/color][teal]([/teal]srcTable[teal]);[/teal]
[b]for[/b] [teal]([/teal]i[teal]=[/teal][purple]0[/purple][teal];[/teal] i[teal]<[/teal]rowCount[teal];[/teal] i[teal]++)[/teal] [teal]{[/teal]
tmpRow [teal]=[/teal] srcTable[teal].[/teal][COLOR=darkgoldenrod]insertRow[/color][teal](-[/teal][purple]1[/purple][teal])[/teal]
[b]for[/b] [teal]([/teal]j[teal]=[/teal][purple]0[/purple][teal];[/teal] j[teal]<[/teal][purple]4[/purple][teal];[/teal] j[teal]++)[/teal] [teal]{[/teal]
tmpCell [teal]=[/teal] tmpRow[teal].[/teal][COLOR=darkgoldenrod]insertCell[/color][teal](-[/teal][purple]1[/purple][teal])[/teal]
[b]switch[/b] [teal]([/teal]j[teal])[/teal] [teal]{[/teal]
[b]case[/b] [purple]0[/purple][teal]:[/teal] tmpCell[teal].[/teal]innerHTML [teal]=[/teal] i[teal];[/teal] [b]break[/b]
[b]case[/b] [purple]1[/purple][teal]:[/teal] tmpCell[teal].[/teal]innerHTML [teal]=[/teal] [green][i]"<input type='text' name='SD["[/i][/green][teal]+[/teal]i[teal]+[/teal][green][i]"]' >"[/i][/green][teal];[/teal] [b]break[/b]
[b]case[/b] [purple]2[/purple][teal]:[/teal] tmpCell[teal].[/teal]innerHTML [teal]=[/teal] [green][i]"<input type='text' name='ED["[/i][/green][teal]+[/teal]i[teal]+[/teal][green][i]"]' >"[/i][/green][teal];[/teal] [b]break[/b]
[b]case[/b] [purple]3[/purple][teal]:[/teal] tmpCell[teal].[/teal]innerHTML [teal]=[/teal] [green][i]"<input type='text' name='label["[/i][/green][teal]+[/teal]i[teal]+[/teal][green][i]"]' >"[/i][/green][teal];[/teal] [b]break[/b]
[teal]}[/teal]
[teal]}[/teal]
[teal]}[/teal]
[teal]}[/teal]
Regarding the validation, tell us when you want the validation to happen.
By the way, personally I hate this approach. The user has to know from the beginning the number of rows. Is easier for the user to get a table with one row and a button to add one more row. The he can press the button when needed, as many times needed.
Feherke.