<script type="text/javascript">
<!--

function tatecalc(tableID) {
alert("calc");
	//記述の手抜き用
	var d = document;

	//非対応ブラウザはなにもしない（最後のはタチの悪いOpera6を刎ねるための条件）
	if (!d.getElementById || !d.getElementsByTagName || (window.opera && !d.createEvent))
		return false;

	//各<td>の合計値（<td>ごとに別で計算するので配列を使う）
	var sum = new Array();

	//<table id="ID名">を取得
	var table = d.getElementById(tableID);

	//<table>内の<tr>を全部取得（配列）
	var tr = table.getElementsByTagName("tr");

	//===== ループ開始 =====//

	for (var i = 0; i < tr.length - 1; i++) { //<tr> -1(合計欄)の数だけ繰り返し

		//===== tr[i] から計算対象の<td>を取得 =====//

		var td = tr[i].getElementsByTagName("td"); //i番目の<tr>内にある<td>を全部取得（配列）

		if (!td || !td.length) //tr[i] に<td>が含まれなかったら次のループへ
			continue;

		//2個以上の引数を与えられてるか
		if (arguments.length > 1) {
			var temp = new Array(); //一時的な配列
			for (var ii = 1; ii < arguments.length; ii++) { //引数[0] は tableID なので 引数[1] から開始
				temp[temp.length] = td[arguments[ii]]; //td[ 引数[ii] ] の<td>を一時配列にコピー
			}
			td = temp; //<td>の配列を上書き。これによって引数にない列の<td>は消される
		}

		//===== <td>の合計値を列ごとに計算 =====//

			//jは「左からj番目の<td>」に相当。つまり sum[0] は左から0番目の<td>の合計値を指す

		for (var j = 0; j < td.length; j++) { //<td>の数だけ繰り返し

			//<td>の内容を列ごとに分けて足していく
			var num; //計算用の一時変数
			if (!sum[j]) { //1回目のループでは sum[j] は空なので0を入れる
				sum[j] = 0;
			}

			//<td>内に文字が入っていて、かつ数字か
			if (td[j].hasChildNodes() && !isNaN(td[j].firstChild.data)) {
				num = td[j].firstChild.data; //<td>内の数字を取得
				num = parseFloat(num); //数値に変換
				num = num *1000; //小数点問題を回避するために適当な整数にする

			//セルの中身がない時や数字以外が入ってたら0として扱う
			} else {
				num = 0;
			}

			sum[j] = sum[j] + num; //sum[j] に加算していく（td[j] の合計値になる）
			//次の<td>ループへ
		}
		//次の<tr>ループへ
	}



	if (arguments.length == 1) { //引数がひとつの時のみ下のセルに結果を挿入

		//新しい行を作る（これに結果の<td>を挿入していき、最後に<table>へ追加する）
		var newtr = d.createElement("tr");
		newtr.style.backgroundColor = "#dfd"; //背景色なんかつけてみる

		var th = d.createElement("th"); //見出しセルを作る
		var text = d.createTextNode("結果"); //<th>のテキスト
		th.appendChild(text); //<th>にテキストを挿入
		newtr.appendChild(th); //<tr>の最後に<th>を追加

		//結果を入れた<td>を作って<tr>へ次々に追加していく
		for (i = 0; i < sum.length; i++) {
			text = (sum[i] >= 0) ? (sum[i] /1000) : ""; //sum[j] を小数に戻す
			td = d.createElement("td");
			td.appendChild(d.createTextNode(text)); //ちょっとズボラな書き方
			newtr.appendChild(td);
		}

		//新しく作った<tr>を追加
		var endtr = tr[tr.length -1]; //一番最後の<tr>
		endtr.parentNode.insertBefore(newtr, endtr.nextSibling);

		/* ちょっと解説
		追加対象ノード.insertBefore(追加するノード, 追加する場所);

		<table> ← endtr.parentNode（追加対象ノード）
			<tr>
				<td><\/td>
			<\/tr>
			<tr> ← endtr
				<td><\/td>
			<\/tr>
			■ ← endtr.nextSibling（追加する場所）
		<\/table>
		*/
	}

	return sum; //配列sumを返す
}



function loadComplete() {

	//引数をID名だけにすると結果をセルへ挿入する
	//tdsum = 各列ごとの合計値（配列）
	var tdsum = tatecalc("table1"); //<table id="table1">を対象にする

	//表示するHTMLを作る
	//数値は *1000 されたままなので小数に戻す
	var allsum = 0; //すべての<td>の合計値
	var text = "";
	var d = document; //記述の省略用
	var p = d.createElement("p"); //<p>を作る

	for (var i = 0; i < tdsum.length; i++) {
		allsum += tdsum[i];
		text = "td[" + i + "] の合計は " + (tdsum[i] /1000)+ "。";

		p.appendChild(d.createTextNode(text)); //text をノードに変換して<p>の最後に挿入
		p.appendChild(d.createElement("br")); //<br>を作って<p>の最後に挿入
	}

	text = d.createTextNode("全部のセルの合計は " + (allsum /1000) + "。")
	var strong = d.createElement("strong"); //<strong>を作る
	strong.appendChild(text); //<strong>の最後に text を入れる
	p.appendChild(strong); //<p>の最後に<strong>を入れる

	var table = d.getElementById("table1"); //<table id="table1"> を取得する
	table.parentNode.insertBefore(p, table.nextSibling); // <\/table>の直後に<p>を挿入する
}
//-->
</script>	


