/*以下、表一覧画面の表示オブジェクト*/
var _ =function(){
	var constructorF = function(){
		var _this = this;
		var loadCol = function( ){
			//列定義のロード(PK判別のために)
			_sysData._load("col", { db_id : _this.dbId } , loadUq );
		};
		var loadUq = function( ){
			//列定義のロード
			_sysData._load("uq", { db_id : _this.dbId } , loadRrt );
		};
		var loadRrt = function( ){
			//関連付け定義のロード(利用するには、一意制約,PKの情報が必要)
			_sysData._load("rlt", { db_id : _this.dbId } , disp );
		};
		this.init = function(){

			//まずはカレントのTableをクリアする。
			_disp.tblId = null;
			//続いて、サーバから、表一覧を取得する。
			_sysData._load("tbl" , { db_id : _this.dbId } , loadCol )

		};
		var open = function(){
			_disp.tblId = this.dataset.id;
			_disp.dipsCtrl( _disp.id.LstV );
		};

		var nodeDef ={
			mainInner :{attr:{
				tagname:"div",
				className:"_vh_sc_auto_ _tbllst_"
			},children:[
				{attr:{
					tagname:"h1",
					innerHTML:"Table List",
					className:"_titles_"
				}},{attr:{
					tagname:"table",
					id:"tbl_tbllst"
				},children:[
					{attr:{
						tagname:"thead",
						id:"thead_tbllst"
					},children:[
						{attr:{
							tagname:"tr",
							id:"tr_tbllst_head"
						},children:[
							{attr:{
								tagname:"th",
								id:"th_tbllst_talbe"
							},children:[
								{attr:{
									tagname:"span",
									innerHTML:"Table"
								}}
							]},{attr:{
								tagname:"th",
								id:"th_tbllst_parent"
							},children:[
								{attr:{
									tagname:"span",
									innerHTML:"Parent Tables"
								}}
							]},{attr:{
								tagname:"th",
								id:"th_tbllst_sibling"
							},children:[
								{attr:{
									tagname:"span",
									innerHTML:"Sibling Tables"
								}}
							]},{attr:{
								tagname:"th",
								id:"th_tbllst_child"
							},children:[
								{attr:{
									tagname:"span",
									innerHTML:"Child Tables"
								}}
							]},{attr:{
								tagname:"th",
								id:"th_tbllst_relative"
							},children:[
								{attr:{
									tagname:"span",
									innerHTML:"relative Tables"
								}}
							]}
						]}
					]},{attr:{
						tagname:"tbody",
						id:"tbody_tbllst"
					}}
				]}
			]},
			tableTr :{attr:{
				tagname:"tr",
				onclick:open,
				className:"_tbllst_tr_body_"
			},children:[
				{attr:{
					tagname:"td",
					className:"_tbllst_td_table_"

				}},
				{attr:{
					tagname:"td",
					className:"_tbllst_td_parent_"

				}},
				{attr:{
					tagname:"td",
					className:"_tbllst_td_sibling_"

				}},
				{attr:{
					tagname:"td",
					className:"_tbllst_td_child_"

				}},
				{attr:{
					tagname:"td",
					className:"_tbllst_td_relative_"

				}}
			]}
		};

		var disp = function( ){
			var main = _D.g("main");
			//ここまででエラーがあった場合は既に画面通知済みのはず。

			main.innerHTML = "";

			//ひとまず、基本の画面要素作成
			_D.aCAndCN( main , nodeDef.mainInner );
			var uq = _sysData._getData( "rlt" , _sysData._getMode.rlt );
			//tbodyにDB毎の要素を作成する。
			var tbody = _D.g("tbody_tbllst");
			var aryTable = _sysData._getData("tbl");
			for( var i = 0 ; _U.isIdx( i , aryTable ) ; i ++ ){
				var tId = aryTable[ i ].id;
				var tr = _D.aCAndCN( tbody , nodeDef.tableTr );
				tr.dataset.id = tId;
				_D.fEC( tr ).innerHTML = _U.htmlEscape( aryTable[ i ].name );
				var wkUq = uq[ tId ];
				for( var j = 0 ; _U.isIdx( j , wkUq ) ; j ++ ){
					var targTd;
					if( wkUq[ j ].type == _sysData._rltType.p ){
						targTd = tr.children[ 1 ]
					} else if( wkUq[ j ].type == _sysData._rltType.s ){
						targTd = tr.children[ 2 ]
					} else if( wkUq[ j ].type == _sysData._rltType.c ){
						targTd = tr.children[ 3 ]
					} else {
						targTd = tr.children[ 4 ]
					};
					for( var k = 0 ; _U.isIdx( k , aryTable ) && wkUq[ j ].table != aryTable[k].id ; k ++ );
					if( ! _U.isIdx( k , aryTable ) ){
						continue;
					}
					if( targTd.innerHTML != "" ){
						targTd.innerHTML += "<br />";
					};
					targTd.innerHTML += _U.htmlEscape( aryTable[ k ].name );
				};
			};


		};
	};

	constructorF.prototype = _protoEachDisp;
	_eachDisp.TLst = new constructorF();
}();
delete _;
