//====================================================================
// テーブル処理用ライブラリ jslb_writetable.js
//
// 最新情報 http://jsgt.org/mt/archives/01/000414.html 
// 上記コメント削除不可。商用利用、改造、自由。連絡不要です。
// 

// dataAry テーブルの指標
var t_program		= 0;
var t_pno			= 1;
var t_version		= 2;
var t_os			= 3;
var t_osType		= 4;
var t_fee			= 5;
var t_icon			= 6;
var t_name_tag		= 7;
var t_dl_tag		= 8;
var t_dl_tag_src	= 9;
var t_detail_url	= 10;
var t_content		= 11;

////
// テーブルを書き出します
// @param  tableId       対象テーブルを書き出すDIVのID名（「_m」を付加するとリストのDIV）
// @param  dataAry       データ 二次元配列で渡します
// @param  mode          0=全部、1=フリーウェア、2=シェアウェア、3=外字ツール、4=フリーソース、5=最近の更新、9=旧プログラム
// @sample               writeTable('ddtil',[['名前','data'],['山田','12']])
//
var saveMode = 0;
function writeTable(tableId,dataAry,mode)
{
	//引数があれば下記を実行
	if(!!writeTable.arguments[0]){
		removeTable(tableId+"_m");				//テーブル削除（リスト）
		mkTable_m(tableId+"_m",dataAry,mode);	//テーブル生成（リスト）
		removeTable(tableId);					//テーブル削除（明細）
		mkTable(tableId,dataAry,mode);			//テーブル生成（明細）
	}
	saveMode = mode;
}

////
// テーブルをソートして書き出します
// @param  tableId       対象テーブルを書き出すDIVのID名
// @param  dataAry       データ
// @param  sortFunc      数値ソート関数名 昇順sortA|降順sortD
// @sample               reWriteTable('ddtil',[['名前','data'],['a',8],['b',3]],sortD)
//
function reWriteTable(tableId,dataAry,sortFunc)
{
	sortwk(dataAry,sortFunc)
	writeTable(tableId,dataAry,saveMode)
}


////
// 対象テーブル削除
// @param  tableId       対象テーブルを書き出すDIVのID名
//
function removeTable(tableId){
	document.getElementById(tableId).innerHTML=''
}

////
// テーブル生成（一覧リスト）
// @param  tableId       対象テーブルを書き出すDIVのID名
// @param  dataAry     データ
// @param  mode          モード（writeTable参照）
//
function mkTable_m(tableId,dataAry,mode) 
{
	if(!dataAry)return 
	var table, tbody, tr, td, text, i, j, wk, wkar ,titleName, sty , url, lineSty, lineSty2, lineSty3, cnt;
	var row = dataAry.length;		// テーブルデータ行数
	var mydoc = document;			// documentオブジェクト
	var className=(typeof ScriptEngine=='function')?'className':'class';

	//tableとtbody要素を生成
	table = mydoc.createElement("TABLE")
	table.setAttribute(className,'tbl')
	tbody = mydoc.createElement("TBODY")

	//tableへtbody要素を挿入しさらに出力用DIVへ挿入
	table.insertBefore(tbody, null)
	document.getElementById(tableId).insertBefore(table, null)

	titleName = "全一覧　　：旧プログラム除く";
	if (mode == 1)	titleName = "フリーウェア一覧";
	if (mode == 2)	titleName = "シェアウェア一覧";
	if (mode == 3)	titleName = "外字ツール一覧";
	if (mode == 4)	titleName = "フリーソース一覧";
	if (mode == 5)	titleName = "最近の更新一覧";
	if (mode == 9)	titleName = "旧プログラム一覧";

	// タイトル部分
	tr	 = mydoc.createElement("TR")
	tbody.insertBefore(tr, null)

	td	 = mydoc.createElement("TD")
	td.setAttribute(className,'list_titl_r')
	td.setAttribute('width','6')
	text = mydoc.createTextNode("Seq")
	tr.insertBefore(td, null)
	td.insertBefore(text, null)

	td	 = mydoc.createElement("TD")
	sty  = mydoc.createElement("STRONG")
	td.setAttribute(className,'list_titl')
	td.setAttribute('width','265')
	text = mydoc.createTextNode(titleName)
	sty.insertBefore(text, null)
	tr.insertBefore(td, null)
	td.insertBefore(sty, null)

	td	 = mydoc.createElement("TD")
	td.setAttribute(className,'list_titl_r')
	td.setAttribute('width','55')
	text = mydoc.createTextNode("料金")
	tr.insertBefore(td, null)
	td.insertBefore(text, null)

	td	 = mydoc.createElement("TD")
	td.setAttribute(className,'list_titl')
	td.setAttribute('width','92')
	text = mydoc.createTextNode("Version")
	tr.insertBefore(td, null)
	td.insertBefore(text, null)

	td	 = mydoc.createElement("TD")
	td.setAttribute(className,'list_titl')
	text = mydoc.createTextNode("コメント")
	tr.insertBefore(td, null)
	td.insertBefore(text, null)

	//行の処理
	cnt = 0
	for (i=0; i<row; i++) {
		// 対象データを判定
		if (!isBingo(dataAry,i,mode))	continue;

		tr	 = mydoc.createElement("TR")
		tbody.insertBefore(tr, null)

		lineSty = "list_item"
		if (cnt % 2)	lineSty += "2"
		lineSty2 = "list_item_memo"
		if (cnt % 2)	lineSty2 += "2"
		lineSty3 = "list_item_r"
		if (cnt % 2)	lineSty3 += "2"

		td	 = mydoc.createElement("TD")
		td.setAttribute(className,lineSty3)
		text = mydoc.createTextNode(cnt+1)
		td.insertBefore(text, null)
		tr.insertBefore(td, null)

		td	 = mydoc.createElement("TD")
		td.setAttribute(className,lineSty)
		img	   = mydoc.createElement("IMG")
		if (dataAry[i][t_osType] == '0')	wk = "/img/icons/all.png"
		if (dataAry[i][t_osType] == '1')	wk = "/img/icons/win.png"
		if (dataAry[i][t_osType] == '2')	wk = "/img/icons/mac.png"
		if (dataAry[i][t_osType] == '3')	wk = "/img/icons/palm.png"
		if (dataAry[i][t_osType] == '4')	wk = "/img/icons/ios.png"
		img.setAttribute("src",wk)
		img.setAttribute("align","absmiddle")
		td.insertBefore(img, null)
		text = mydoc.createTextNode(dataAry[i][t_program].getAttribute('name'))
		url	 = mydoc.createElement("A")
		url.setAttribute("href","#" + dataAry[i][t_name_tag])
		url.insertBefore(text, null)
		td.insertBefore(url, null)
		tr.insertBefore(td, null)
		
		td	 = mydoc.createElement("TD")
		td.setAttribute(className,lineSty3)
		wkar = dataAry[i][t_fee].split("円");
		if (wkar.length > 1)	{
			text = mydoc.createTextNode("\\"+wkar[0])
			td.insertBefore(text, null)
		}
		else	{
			text = mydoc.createTextNode(dataAry[i][t_fee])
			td.insertBefore(text, null)
		}
		tr.insertBefore(td, null)
		
		td	 = mydoc.createElement("TD")
		td.setAttribute(className,lineSty)
		text = mydoc.createTextNode(dataAry[i][t_version])
		tr.insertBefore(td, null)
		td.insertBefore(text, null)
		
		td	 = mydoc.createElement("TD")
		td.setAttribute(className,lineSty2)
		wk = dataAry[i][t_program].getAttribute('memo')
		if (wk)	{
			text = mydoc.createTextNode(wk)
			td.insertBefore(text, null)
		}
		else	{
			td.innerHTML = "&nbsp;"
		}
		tr.insertBefore(td, null)
		
		cnt++
	}
	return table
}

////
// テーブル生成（明細リスト）
// @param  tableId       対象テーブルを書き出すDIVのID名
// @param  dataAry       データ
// @param  mode          モード（writeTable参照）
//
function mkTable(tableId,dataAry,mode) 
{
	if(!dataAry)return 
	var table, tbody, table2, tbody2, table3, tbody3;
	var tr, td, tr2, td2, text, img, i , j, content, url, wk, cnt;
	var row = dataAry.length;			// テーブルデータ行数
	var mydoc = document;				// documentオブジェクト
	var className=(typeof ScriptEngine=='function')?'className':'class';

	cnt = 1;

	//tableとtbody要素を生成
	table = mydoc.createElement("TABLE")
	tbody = mydoc.createElement("TBODY")

	//tableへtbody要素を挿入しさらに出力用DIVへ挿入
	table.insertBefore(tbody, null)
	table.setAttribute(className,'tbl1')
	document.getElementById(tableId).insertBefore(table, null)

	//行の処理
	for (i=0; i<row; i++) {
	
		// 対象データを判定
		if (!isBingo(dataAry,i,mode))	continue;
	
		// 1番外側のテーブル(table)に行を追加
		tr	 = mydoc.createElement("TR")
		tbody.insertBefore(tr, null)
		td	 = mydoc.createElement("TD")
	
			// 2番目のテーブル(table)にTBODYを挿入
			table2 = mydoc.createElement("TABLE")
			table2.setAttribute("id",dataAry[i][t_name_tag])
			table2.setAttribute(className,'tbl2')
			tbody2 = mydoc.createElement("TBODY")
			table2.insertBefore(tbody2, null)
	
			// 2番目のテーブルの１行目（プログラムNO）
			tr2	 = mydoc.createElement("TR")
			tbody2.insertBefore(tr2, null)
			td2	 = mydoc.createElement("TD")
			if (dataAry[i][t_program].getAttribute('shareware') == "yes")	{
				td2.setAttribute(className,'title')
			}
			else	{
				if (dataAry[i][t_program].getAttribute('level') == 1)	{
					td2.setAttribute(className,'title_free_src')
				}
				else	{
					if (dataAry[i][t_program].getAttribute('level') == 9)	{
						td2.setAttribute(className,'title_free_old')
					}
					else	{
						td2.setAttribute(className,'title_free')
					}
				}
			}
			text = mydoc.createTextNode("No." + dataAry[i][t_pno])
			td2.insertBefore(text, null)
			tr2.insertBefore(td2, null)
					
			// 2番目のテーブルの２行目（TABLE2）
			tr2	 = mydoc.createElement("TR")
			tbody2.insertBefore(tr2, null)
			td2	 = mydoc.createElement("TD")

			// 2番目のテーブルの最初にアイコン(DIV)を挿入
			img	   = mydoc.createElement("IMG")
			img.setAttribute("src","/img/icons/" + dataAry[i][t_icon])
			img.setAttribute("align","left")
			img.setAttribute("alt",dataAry[i][t_program].getAttribute('name'))
			td2.insertBefore(img, null)

				// 3番目のテーブル(table)にTBODYを挿入
				table3 = mydoc.createElement("TABLE")
				table3.setAttribute(className,'tbl3')
				tbody3 = mydoc.createElement("TBODY")
				table3.insertBefore(tbody3, null)

				// 3番目のテーブルの１行目-１列（プログラム名）
				tr3	 = mydoc.createElement("TR")
				tbody3.insertBefore(tr3, null)
				td3	 = mydoc.createElement("TD")
				td3.setAttribute(className,'name')
				text = mydoc.createTextNode(dataAry[i][t_program].getAttribute('name'))
				tr3.insertBefore(td3, null)
				td3.insertBefore(text, null)

				// 3番目のテーブルの１行目-２列（Ver）
				td3	 = mydoc.createElement("TD")
				td3.setAttribute(className,'ver')
				text = mydoc.createTextNode("バージョン: " + dataAry[i][t_version])
				tr3.insertBefore(td3, null)
				td3.insertBefore(text, null)

				// 3番目のテーブルの２行目-１列（OS）
				tr3	 = mydoc.createElement("TR")
				tbody3.insertBefore(tr3, null)
				td3	 = mydoc.createElement("TD")
				td3.setAttribute(className,'info')
				img	   = mydoc.createElement("IMG")
				if (dataAry[i][t_osType] == '0')	wk = "/img/icons/all.png"
				if (dataAry[i][t_osType] == '1')	wk = "/img/icons/win.png"
				if (dataAry[i][t_osType] == '2')	wk = "/img/icons/mac.png"
				if (dataAry[i][t_osType] == '3')	wk = "/img/icons/palm.png"
				if (dataAry[i][t_osType] == '4')	wk = "/img/icons/ios.png"
				img.setAttribute("src",wk)
				img.setAttribute("align","absmiddle")
				td3.insertBefore(img, null)
				text = mydoc.createTextNode(dataAry[i][t_os])
				tr3.insertBefore(td3, null)
				td3.insertBefore(text, null)

				// 3番目のテーブルの２行目-２列（料金）
				td3	 = mydoc.createElement("TD")
				td3.setAttribute(className,'info')
				text = mydoc.createTextNode("料金: " + dataAry[i][t_fee])
				tr3.insertBefore(td3, null)
				td3.insertBefore(text, null)

				// 3番目のテーブルの３行目-１列（ダウンロード、詳細…　のアイコン群）
				tr3	 = mydoc.createElement("TR")
				tbody3.insertBefore(tr3, null)
				td3	 = mydoc.createElement("TD")
				td3.setAttribute(className,'info')
					wk = dataAry[i][t_dl_tag];
					if (wk != "none")	{
						img	 = mydoc.createElement("IMG")
						img.setAttribute("src","http://jjworkshop.com/img/download.png")
						img.setAttribute("align","absmiddle")
						img.setAttribute("alt","ダウンロード")
						img.setAttribute("border","0")
						url	 = mydoc.createElement("A")
						if (dataAry[i][t_program].getAttribute('level') == 9)	{
							// 直にURLからダウンロード
							url.setAttribute("href",dataAry[i][t_dl_tag])
						}
						else	{
							// CGIでダウンロード
							url.setAttribute("href","http://jjworkshop.com/cgi-bin/lime.cgi?" + dataAry[i][t_dl_tag])
						}
						url.insertBefore(img, null)
						td3.insertBefore(url, null)
					}
					wk = dataAry[i][t_dl_tag_src];
					if (wk != "none")	{
						img	 = mydoc.createElement("IMG")
						img.setAttribute("src","http://jjworkshop.com/img/sourcecode.png")
						img.setAttribute("align","absmiddle")
						img.setAttribute("alt","ソースコードダウンロード")
						img.setAttribute("border","0")
						url	 = mydoc.createElement("A")
						url.setAttribute("href","http://jjworkshop.com/cgi-bin/lime.cgi?" + wk)
						url.insertBefore(img, null)
						td3.insertBefore(url, null)
					}
					wk = dataAry[i][t_detail_url];
					if (wk != "none")	{
						img	 = mydoc.createElement("IMG")
						img.setAttribute("src","http://jjworkshop.com/img/pgminfo.png")
						img.setAttribute("align","absmiddle")
						img.setAttribute("alt","詳細説明")
						img.setAttribute("border","0")
						url	 = mydoc.createElement("A")
						url.setAttribute("href",wk)
						url.insertBefore(img, null)
						url.setAttribute("target","_blank")
						td3.insertBefore(url, null)
					}
					wk = dataAry[i][t_program].getAttribute('sr');
					if (wk)	{
						img	 = mydoc.createElement("IMG")
						img.setAttribute("src","http://jjworkshop.com/img/sregi.png")
						img.setAttribute("align","absmiddle")
						img.setAttribute("alt","ベクターシェアレジ")
						img.setAttribute("border","0")
						url	 = mydoc.createElement("A")
						url.setAttribute("href","https://sw.vector.co.jp/swreg/detail.info?srno=" + wk)
						url.insertBefore(img, null)
						url.setAttribute("target","_blank")
						td3.insertBefore(url, null)
					}
				tr3.insertBefore(td3, null)

				// 3番目のテーブルの３行目-２列（コメント）
				td3	 = mydoc.createElement("TD")
				td3.setAttribute(className,'memo')
				wk = dataAry[i][t_program].getAttribute('memo')
				if (wk)	{
					text = mydoc.createTextNode(wk)
					td3.insertBefore(text, null)
				}
				else	{
					td3.innerHTML = "&nbsp;"
				}
				tr3.insertBefore(td3, null)

			tr2.insertBefore(td2, null)
			td2.insertBefore(table3, null)

			// 2番目のテーブルの３行目（概要）
			tr2	 = mydoc.createElement("TR")
			tbody2.insertBefore(tr2, null)
			td2	 = mydoc.createElement("TD")
			content = dataAry[i][t_content]
			tr2.insertBefore(td2, null)
			if (content)	{
				for (j=0;j<content.childNodes.length;j++)	{
					if (content.childNodes[j].nodeValue)	{
						text = mydoc.createTextNode(content.childNodes[j].nodeValue)
						td2.insertBefore(text, null)
						td2.insertBefore(mydoc.createElement("BR"), null)
					}
				}
				// URLのパラメタがある場合
				wk = content.getAttribute('url')
				if (wk)	{
					url	 = mydoc.createElement("A")
					url.setAttribute("href",wk)
					url.setAttribute("target","_blank")
					text = mydoc.createTextNode(wk)
					url.insertBefore(text, null)
					td2.insertBefore(url, null)
				}
			}
			
			// 2番目のテーブルの４行目（SeqNo）
			tr2	 = mydoc.createElement("TR")
			tbody2.insertBefore(tr2, null)
			td2	 = mydoc.createElement("TD")
			td2.setAttribute(className,'seqno')
			text = mydoc.createTextNode("↑↑ Return page top")
			url	 = mydoc.createElement("A")
			url.setAttribute("href","#")
			url.insertBefore(text, null)
			td2.insertBefore(url, null)
			text = mydoc.createTextNode("　　")
			td2.insertBefore(text, null)
			text = mydoc.createTextNode("Seq." + cnt)
			td2.insertBefore(text, null)
			tr2.insertBefore(td2, null)
			cnt++

		tr.insertBefore(td, null)
		td.insertBefore(table2, null)
	}
	return table
}

// モードによる対象データの判定
// @param  dataAry       データ
// @param  mode          モード（writeTable参照）
//
function isBingo(dataAry,idx,mode) 
{
	if (mode != 0)	{
		if (mode == 1)	{
			// フリーウェアのみ（旧プログラムは除く）
			if (dataAry[idx][t_program].getAttribute('level') != 9 &&
				dataAry[idx][t_program].getAttribute('shareware') == "no")	{
				// bingo!
				return true;
			}
			else	return false;
		}
		if (mode == 2)	{
			// シェアウェアのみ（旧プログラムは除く）
			if (dataAry[idx][t_program].getAttribute('level') != 9 &&
				dataAry[idx][t_program].getAttribute('shareware') == "yes")	{
				// bingo!
				return true;
			}
			else	return false;
		}
		if (mode == 3)	{
			// 外字ツールのみ（旧プログラムは除く）
			if (dataAry[idx][t_program].getAttribute('level') != 9 &&
				dataAry[idx][t_program].getAttribute('section') == "gaiji")	{
				// bingo!
				return true;
			}
			else	return false;
		}
		if (mode == 4)	{
			// フリーソースのみ
			if (dataAry[idx][t_program].getAttribute('level') == 1)			{
				// bingo!
				return true;
			}
			else	return false;
		}
		if (mode == 5)	{
			// 最近の更新のみ
			if (dataAry[idx][t_program].getAttribute('memo'))					{
				// bingo!
				return true;
			}
			else	return false;
		}
		if (mode == 9)	{
			// 旧プログラムのみ
			if (dataAry[idx][t_program].getAttribute('level') == 9)			{
				// bingo!
				return true;
			}
			else	return false;
		}
	}
	else	{
		// 全てから、旧プログラムは除く
		if (dataAry[idx][t_program].getAttribute('level') == 9)			{
			return false;
		}
		else	{
			return true;
		}
	}
	return false;
}

//====================================================================
// 並べ替え
//

////
// 並べ替え
// @param  dataAry       並べ替え対象配列
// @param  sortFunc      数値ソート関数名 昇順sortA|降順sortD
//
function sortwk(dataAry,sortFunc)
{
	if(!dataAry)return 
	dataAry.sort(sortFunc)
	return dataAry
}

//数値ソート昇順
function sortA(a,b){ return a[1] - b[1] }
//数値ソート降順
function sortD(a,b){ return b[1] - a[1] }
