$(function(){

	//因子追加ボタン
	$('#addBtn').click(function(){
		var tr = $(document.createElement('tr'));
		tr.html('<td><input class="insi" type="text" size="20"/></td><td><input type="text" size="20"/></td><td><input type="text" size="20"/></td><td><input type="button" value="削除"/></td>')
			.appendTo($('#tbody'));
		
		//削除
		$('input:last', tr).click(function(){
			tr.remove();
		});
		
	});
	
	//直交表作成ボタン
	$('#makeTableBtn').click(function(){
		
		//表リセット
		$('#chokkou').html('<thead id="chokkouHead"><tr><th></th><th>1</th></tr></thead><tbody id="chokkouBody"><tr><th>1</th><td>0</td></tr><tr><th>2</th><td>1</td></tr></tbody>');
		
		var trs = $('#tbody tr');
		//因子数
		var insiCnt = trs.length;
		
		//ヘッダを一つ追加する関数
		var appendHead = function(){
			//ヘッダの一番最後の値ゲット
			var lastHeadNumber = $('#chokkouHead th:last').html();
			lastHeadNumber = parseInt(lastHeadNumber, 10);
			
			//ヘッダ一つ追加
			lastHeadNumber++;
			$(document.createElement('th'))
				.html(lastHeadNumber)
				.appendTo($('#chokkouHead tr'));
		}
		
		//直交表を一段大きくする関数
		var expandFunction = function(){
			
			//行を2倍
			var chTrs = $('#chokkouBody tr');
			chTrs.each(function(idx, elm){
				$(elm).clone(false).insertAfter(elm);
			});
			//番号振りなおし
			var chTrs = $('#chokkouBody tr');
			chTrs.each(function(idx, elm){
				$('th', elm).html(idx + 1);
			});
			
			//ヘッダを一つ追加
			appendHead();
			
			// 0,1交互に割りつけた列を追加 
			var chTrs = $('#chokkouBody tr');
			chTrs.each(function(idx, elm){
				$(document.createElement('td'))
					.html(idx % 2)
					.appendTo(elm);
			});
			
			//各列と追加した列の排他的論理和を取った列を追加
			var chTrs = $('#chokkouBody tr');
			chTrs.each(function(idx, elm){
				var tds = $('td', elm);
				var trElm = elm;
				var idx1 = idx;
				
				var lastNumber = parseInt($(tds[tds.length - 1]).html(), 10);
				tds.each(function(idx, elm){
					//最後は無視
					if((tds.length - 1) == idx) return;
					
					//ヘッダを追加
					if(idx1 == 0){
						appendHead();
					}
					
					//排他論理和を追加
					var number = parseInt($(elm).html(), 10);
					$(document.createElement('td'))
						.html((lastNumber + number) == 1 ? 1 : 0)
						.appendTo(trElm);
				});
			});
		}
		
		//因子数により必要な直交表を判定
		var tableName = 'L';
		var l = 2;
		while((l - 1) < insiCnt){
			expandFunction();
			l = l * 2;
		}
		tableName += l + '直交表';
		$('#tableName').html(tableName);
		
	});

	//カード作成ボタン
	$('#makeCardBtn').click(function(){
		//リセット
		$('#cardsArea').empty();
		
		//因子表
		var insiTrs = $('#tbody tr');
		
		//直交表
		var chTrs = $('#chokkouBody tr');
		
		//カード生成
		chTrs.each(function(idx, elm){
			
			//カードのテンプレート
			var card = $(document.createElement('div'))
				.html('<p></p><table><tbody></tbody></table>')
				.addClass('card')
				.appendTo($('#cardsArea'));
			
			//番号振る
			$('p', card).html('No.' + (idx + 1));
			
			//因子水準の表
			$('td', elm).each(function(idx, elm){
				//必要分だけ
				if(idx >= insiTrs.length) return;
				
				//因子データソース
				var insiTds = $('td', insiTrs[idx]);
				
				var tbody = $('tbody', card);
				var tr = $(document.createElement('tr'))
					.appendTo(tbody);
				//因子セル
				$(document.createElement('th'))
					.html($('input', insiTds[0]).val())
					.appendTo(tr);
				//水準セル
				$(document.createElement('td'))
					.html($('input', insiTds[parseInt(elm.innerHTML, 10) + 1]).val())
					.appendTo(tr);
			});
			
		});
	});
	
	$('#printBtn').click(function(){
		window.print();
	});
});
