// 現在のVersion
var version		= "1.32";

/* VerUp内容：
 * カード配列を連想配列に変更、出力処理の速度向上対応。
 *
 */

// ブックのリストを保持する
var bookList	= new Array();
// ブック情報（種類）を保持する
var kindData	= new Array();

// カードデータをリストにロードする
function loadCardList(){
	// 初期化
	var cardListLength = document.gemoid.cardList.options.length;
	for( var i = 0; i < cardListLength; i++ ){
		document.gemoid.cardList.options[0] = null;
	}

	// カードリスト再設定
	var j = 0;
	for( var i in cardDataAll ) {
		document.gemoid.cardList.options[j] = new Option( cardDataAll[i].name, cardDataAll[i].num );
		setBgColor( document.gemoid.cardList.options[j], cardDataAll[i].attribute, cardDataAll[i].type );
		j++;
	}
}

// カードリストでEnterが押された場合
function keyAddBook(){
	if( window.event.keyCode == "13" ){
		addBook();
	}
	if( window.event.keyCode == "39" ){
		document.gemoid.book.focus();
	}
}

// ブックでEnterもしくはDelが押された場合
function keyDelBook(){
	if( window.event.keyCode == "13" || window.event.keyCode == "46"){
		delBook();
	}
	if( window.event.keyCode == "37" ){
		document.gemoid.cardList.focus();
	}
}

// ブックにカードを追加する
function addBook( cardNum ){
// カードリストにfocusが当たってる
	with( document.gemoid ){
		var tmpCardNum = -1;
		if ( cardNum != null ) {
			tmpCardNum = cardNum;
		} else {
			tmpCardNum = cardList.value;
		}
		if (cardDataAll[tmpCardNum].name == "？") {
			return;
		}
	/** チェック処理 **/
		if( tmpCardNum != -1 && tmpCardNum != "" ){
			if( book.options.length > 59 ){
				window.alert("60枚以上は追加出来ません。");
				return;
			}
		// 50枚チェック
			if( book.options.length >= 50 ){
				if(!window.confirm("50枚を超えていますが追加しますか？")){
					return;
				}
			}

		// 4枚チェック
			var cCheck = 0;
			for( var i = 0; i < book.options.length; i++ ){
				if( tmpCardNum == book.options[i].value ){
					cCheck++;
				}
			}
			if( cCheck >= 4 ){
				alert("同じカードは4枚までしか入れられません。");
				return;
			}
		/** 追加処理 **/
		// ブックリストに追加
			bookList[bookList.length] = tmpCardNum;
		// 配列をカード番号順にソートする
			bookList.sort( sortNum );

		// bookのOPTIONを一度初期化
			var bookLength = book.options.length;
			for( var i = 0; i < bookLength; i++ ){
				book.options[0] = null;
			}
		// 再度生成
			for( var i = 0; i < bookList.length; i++ ){
				var tmp = bookList[i];
				book.options[i] = new Option( cardDataAll[tmp].name, cardDataAll[tmp].num );
				setBgColor( book.options[i], cardDataAll[tmp].attribute,cardDataAll[tmp].type );
			}
			addBookInfo( tmpCardNum );

			cardList.focus();
		}
	}
	return;
}

// ブック移動値に値をADDする
function addBookInfo( tmpCardNumber ){
	with( document.gemoid ){
		var cardNumber = tmpCardNumber;
		if ( cardNumber == -1 ) {
			return;
		}
		var tmpType= cardDataAll[cardNumber].type;
		var tmpAtr = cardDataAll[cardNumber].attribute;
		if( tmpType == 1 && tmpAtr >= 6 ) {
			// 複属性
			tmpAtr = 6;
		} else if( tmpType != 1 ) {
			tmpAtr = cardDataAll[cardNumber].kind;
		}
		// ブック情報（レア度）に追加
		var tmp = parseInt(elements["rareValue[" + cardDataAll[cardNumber].rarelity + "]"].value) + 1;
		elements["rareValue[" + cardDataAll[cardNumber].rarelity + "]"].value = tmp;

		// ブック種類情報に追加
		var kindLength = kindData[tmpType][tmpAtr].length;
		var checkFlg = 0;
		for( var i = 0; i < kindLength; i++ ) {
			if(kindData[tmpType][tmpAtr][i].num == cardDataAll[cardNumber].num ) {
				kindData[tmpType][tmpAtr][i].leaves++;
				checkFlg = 1;
				break;
			}
		}
		if ( checkFlg == 0 ) {
			addFlg = 0;
			for( var i = 1; i < kindLength; i++ ) {
				if ( parseInt( kindData[tmpType][tmpAtr][i].num, 33 )
					 > parseInt( cardDataAll[cardNumber].num, 33 )) {
					tmpStartArray = kindData[tmpType][tmpAtr].slice( 0, i );
					tmpEndArray   = kindData[tmpType][tmpAtr].slice( i, kindLength );
					tmpStartArray.push(new kindClass(cardDataAll[cardNumber].num, 1));
					kindData[tmpType][tmpAtr] = tmpStartArray.concat( tmpEndArray );
					addFlg = 1;
					break;
				}
			}
			if ( addFlg == 0 ) {
				kindData[tmpType][tmpAtr][kindLength] = new kindClass(cardDataAll[cardNumber].num, 1);
			}
		}

		// ブック情報に出力
		tmpKindNum = kindData[tmpType][tmpAtr].length - 1;
		tmpNum = 0;
		for( var i = 1; i < kindData[tmpType][tmpAtr].length; i++ ) {
			tmpNum += kindData[tmpType][tmpAtr][i].leaves;
		}
		elements["kindValue[" + tmpType + "][" + tmpAtr + "]"].value = tmpKindNum;
		elements["leavesValue[" + tmpType + "][" + tmpAtr + "]"].value = tmpNum;

		// 合計を出力
		totalKindNum.value = 0;
		totalNum.value = 0;
		for( var i = 1; i < kindList.length; i++ ) {
			elements["kindValue[" + i + "][0]"].value = 0;
			elements["leavesValue[" + i + "][0]"].value = 0;
			kindListLength = 0;
			if ( i == 1 ) {
				kindListLength = attributeList.length;
			} else {
				kindListLength = kindList[i].length;
			}
			for( var j = 1; j < kindListLength; j++ ) {
				elements["kindValue[" + i + "][0]"].value = parseInt( elements["kindValue[" + i + "][0]"].value ) 
															+ parseInt(elements["kindValue[" + i + "][" + j + "]"].value );
				elements["leavesValue[" + i + "][0]"].value = parseInt( elements["leavesValue[" + i + "][0]"].value ) 
															+ parseInt( elements["leavesValue[" + i + "][" + j + "]"].value );

			}
			totalKindNum.value = parseInt( totalKindNum.value ) 
								+ parseInt( elements["kindValue[" + i + "][0]"].value );
			totalNum.value = parseInt( totalNum.value ) 
								+ parseInt( elements["leavesValue[" + i + "][0]"].value );
		}

	}
	return;
}

// ブックからカードを削除する
function delBook(){
	with( document.gemoid ){
		if( bookList.length != 0 && book.value != -1 && book.value != "" ){
			var index = book.value;
			var sIndex = parseInt( book.selectedIndex );

		// ブックの値変更
			var topbook = bookList.slice( 0, sIndex );
			var btmbook = new Array();
			if( sIndex != bookList.length ){
				var btmbook = bookList.slice( sIndex + 1, bookList.length );
			}
			bookList = topbook.concat(btmbook);

		// 再度生成
			for( var i = sIndex; i < bookList.length; i++ ){
				var tmp = bookList[i];
			// IE用チラ修正(恐ろしく適当)
				if( i == sIndex ){
					book.options[sIndex + 1].selected = true;
				}
				book.options[i] = new Option(	cardDataAll[tmp].name, bookList[i] );
				setBgColor( book.options[i], cardDataAll[tmp].attribute, cardDataAll[tmp].type );
			// IE用チラ修正
				if( i == sIndex ){
					book.options[i].selected = true;
				}
			}
			book.options[bookList.length] = null;
		
			if( sIndex == bookList.length && bookList.length != 0){
				book.options[sIndex - 1].selected = true;
			}else if( bookList.length > 0){
				book.options[sIndex].selected = true;
			}
			book.focus();
			if( book.value != "" ){
				loadCMove(book);
			}
			delBookInfo( index );
		}
	}
	return;
}

// ブック移動値から値をDEL
function delBookInfo( tmpCardNumber ){
	with( document.gemoid ){
		var cardNumber = tmpCardNumber;
		var tmpType= cardDataAll[cardNumber].type;
		var tmpAtr = cardDataAll[cardNumber].attribute;
		if( tmpType == 1 && tmpAtr >= 6 ) {
			// 複属性
			tmpAtr = 6;
		} else if( tmpType != 1 ) {
			tmpAtr = cardDataAll[cardNumber].kind;
		}
		// ブック情報（レア度）から削除
		var tmp = parseInt(elements["rareValue[" + cardDataAll[cardNumber].rarelity + "]"].value) - 1;
		elements["rareValue[" + cardDataAll[cardNumber].rarelity + "]"].value = tmp;
		// ブック種類情報から削除
		var kindLength = kindData[tmpType][tmpAtr].length;
		for( var i = 0; i < kindLength; i++ ) {
			if(kindData[tmpType][tmpAtr][i].num == cardDataAll[cardNumber].num ) {
				kindData[tmpType][tmpAtr][i].leaves--;
				if ( kindData[tmpType][tmpAtr][i].leaves == 0 ) {
					tmpStartArray = kindData[tmpType][tmpAtr].slice( 0, i );
					tmpEndArray   = kindData[tmpType][tmpAtr].slice( i + 1, kindLength );
					kindData[tmpType][tmpAtr] = tmpStartArray.concat( tmpEndArray );
				}
				break;
			}
		}
		// ブック情報に出力
		tmpKindNum = kindData[tmpType][tmpAtr].length - 1;
		tmpNum = 0;
		for( var i = 1; i < kindData[tmpType][tmpAtr].length; i++ ) {
			tmpNum += kindData[tmpType][tmpAtr][i].leaves;
		}
		elements["kindValue[" + tmpType + "][" + tmpAtr + "]"].value = tmpKindNum;
		elements["leavesValue[" + tmpType + "][" + tmpAtr + "]"].value = tmpNum;

		// 合計を出力
		totalKindNum.value = 0;
		totalNum.value = 0;
		for( var i = 1; i < kindList.length; i++ ) {
			elements["kindValue[" + i + "][0]"].value = 0;
			elements["leavesValue[" + i + "][0]"].value = 0;
			kindListLength = 0;
			if ( i == 1 ) {
				kindListLength = attributeList.length;
			} else {
				kindListLength = kindList[i].length;
			}
			for( var j = 1; j < kindListLength; j++ ) {
				elements["kindValue[" + i + "][0]"].value = parseInt( elements["kindValue[" + i + "][0]"].value ) 
															+ parseInt(elements["kindValue[" + i + "][" + j + "]"].value );
				elements["leavesValue[" + i + "][0]"].value = parseInt( elements["leavesValue[" + i + "][0]"].value ) 
															+ parseInt( elements["leavesValue[" + i + "][" + j + "]"].value );
			}
			totalKindNum.value = parseInt( totalKindNum.value ) 
								+ parseInt( elements["kindValue[" + i + "][0]"].value );
			totalNum.value = parseInt( totalNum.value ) 
								+ parseInt( elements["leavesValue[" + i + "][0]"].value );
		}
	}
	return;
}

// カード移動値に値をロードする
function loadCMove( select ){
	with( document.gemoid ){
		// 共通
		var i =  select.value
		cName.value		 = cardDataAll[i].name;
		cRarelity.value	 = rarelityList[cardDataAll[i].rarelity];
		cType.value		 = typeList[cardDataAll[i].type];
		cCost.value		 = cardDataAll[i].costValue;
		var tmpCost = cardDataAll[i].costOther.toString();
		if ( tmpCost != "0" ) {
			cCost.value		 += "+";
			for( var j = 0; j < tmpCost.length; j++ ) {
				cCost.value += costOtherList[tmpCost.charAt(j)];
			}
		}
		cAbility.value	 = cardDataAll[i].abilityText;
		// クリーチャーの場合
		if (cardDataAll[i].type == 1 ) {
			cAttribute.value = "";
			var tmpAttribute = cardDataAll[i].attribute.toString();
			for( var j = 0; j < tmpAttribute.length; j++ ) {
				cAttribute.value += attributeList[tmpAttribute.charAt(j)];
			}
			cPlace.value	 = "";
			var tmpPlace = cardDataAll[i].placeRestriction.toString();
			for( var j = 0; j < tmpPlace.length; j++ ) {
				cPlace.value += attributeList[tmpPlace.charAt(j)];
			}
			cItem.value	 = "";
			var tmpItem = cardDataAll[i].itemRestriction.toString();
			for( var j = 0; j < tmpItem.length; j++ ) {
				cItem.value += itemList[tmpItem.charAt(j)];
			}
			cStMhp.value	 = cardDataAll[i].st + "/" + cardDataAll[i].mhp;
		} else {
		// アイテム、スペルの場合
			cAttribute.value =  kindList[cardDataAll[i].type][cardDataAll[i].kind];
			cPlace.value	 = "−";
			cItem.value		 = "−";
			cStMhp.value	 = "−";
		}
	}
	return;
}

// カード番号順にソート」
function sortNum( a, b ){
	var x = a.num;
	var y = b.num;

	if( x == null ) {
		x = a;
	}
	if( y == null ) {
		y = b;
	}
	return parseInt( x, 33 ) - parseInt( y, 33 );
}

// ListのBG色付け
function setBgColor( form, col, type ){

	if( type == 1 ) {
		if( col == 1 ){
		// 無
			form.style.backgroundColor = "#ffffff";
		}else if( col == 2 ){
		// 火
			form.style.backgroundColor = "#ff8080";
		}else if( col == 3 ){
		// 水
			form.style.backgroundColor = "#8080ff";
		}else if( col == 4 ){
		// 地
			form.style.backgroundColor = "#80ff80";
		}else if( col == 5 ){
		// 風
			form.style.backgroundColor = "#ffff80";
		}else {
		// 複属性
			form.style.backgroundColor = "#ff80ff";
		}
	} else {
		if( type == 2 ){
		// アイテム
			form.style.backgroundColor = "#c0c0c0";
		}else if( type == 3 ){
		// スペル
			form.style.backgroundColor = "#A8A8A8";
		}
	}
	return;
}

// focus制御
//1=cardList,2=book
function  setFocus( select ){
	with( document.gemoid ){
		var temp = select.selectedIndex;

		cardList.selectedIndex	= -1;
		book.selectedIndex		= -1;

		select.selectedIndex	= temp;
	}
	return;
}

// クリアボタンの処理
function dataClear(){
	with( document.gemoid ){
		// bookList初期化
		bookList = new Array();
		// bookのOPTIONを一度初期化
		var bookLength = book.options.length;
		for( var i = 0; i < bookLength; i++ ){
			book.options[0] = null;
		}

		// ブック情報（レア度）をクリア
		for( var i = 1; i < rarelityList.length; i++ ) {
			elements["rareValue["+ i + "]"].value = 0;
		}

		// ブック情報（種類）をクリア
		kindData = new Array();
		for( var i = 0; i < kindList.length; i++ ) {
			kindData[i] = new Array();
			kindLength = 0;
			if( i == 1 ) {
				kindLength = attributeList.length;
			} else {
				kindLength = kindList[i].length;
			}
			for( var j = 0; j < kindLength; j++ ) {
				kindData[i][j] = new Array();
				kindData[i][j][0] = new kindClass( "0", 0 );
			}
		}
		// 表示ブック情報をクリア
		for( var i = 1; i < typeList.length; i++ ) {
			kindLength = 0;
			if (i == 1) {
				kindLength = attributeList.length;
			} else {
				kindLength =  kindList[i].length;
			}
			for( var j = 0; j < kindLength; j++ ) {
				elements["leavesValue["+ i + "][" + j + "]"].value = 0;
				elements["kindValue["+ i + "][" + j + "]"].value = 0;
			}
		}
		totalKindNum.value = 0;
		totalNum.value = 0;
	}
	return;
}

// ブックをクリアする
function clrBook(){
	if( confirm( "現在のブックをクリアします。よろしいですか？" )){
		dataClear();
	}
	return;
}

// 桁数をそろえるなげやり関数('A`)
function ketasu( val ){
	if( val < 10 ){
		ret = " " + val;
	}else{
		ret = val;
	}
	return ret;
}

// ブック出力を開く
function openOutputBook(){

	// アドレス生成
	var book = "";
	for( var i = 0; i < bookList.length; i++ ) {
		book += bookList[i];
	}
	tmpAddress = window.location.href.split("?");
	bookAddress = "<BR>アドレス出力：<BR><A href = \'" + tmpAddress[0] + "?ver=" + version + "?book=" + book
				 + "\' target=\'_blank\'>" + tmpAddress[0] + "?ver=" + version + "?book=" + book + "</A><BR>";


	var syuzokuBetu = new Array();
	with( document.gemoid ){

		viewData = new Array();
		viewData[1] = new Array( "", "", "", "", "", "", "" );
		viewData[2] = new Array( "", "" );
		viewData[3] = new Array( "", "" );

		for( var i = 1; i < kindData.length; i++ ) {
			var tmpKindData = new Array();
			var tmpKindSize = 0;
			if ( i == 1 ) {
				tmpKindSize = kindData[i].length;
			} else {
				tmpKindSize = 2;
			}
			for( var j = 1; j < tmpKindSize; j++ ) {
				if ( i == 1 ) {
					tmpKindData = kindData[i][j];
				} else {
					tmpKindData[0] = new kindClass( "0", 0 );
					for( var l = 1; l < kindData[i].length; l++ ) {
						tmpLength = kindData[i][l].length;
						tmpArray =  kindData[i][l].slice( 1, tmpLength );
						tmpKindData = tmpKindData.concat( tmpArray );
					}
				tmpKindData.sort( sortNum );
				}
				for( var k = 1; k < tmpKindData.length; k++ ) {
					if( k != 1 ) {
						viewData[i][j] += "、 ";
					}
					if ( k != 1 && k % 5 - 1 == 0 && k < tmpKindData.length ) {
						if ( i == 1 ) {
							viewData[i][j] += "<BR>　　";
						} else {
							viewData[i][j] += "<BR>";
						}
					}
					viewData[i][j] += cardDataAll[tmpKindData[k].num].name;
					if( tmpKindData[k].leaves != 1 ) {
						viewData[i][j] += "×" + tmpKindData[k].leaves;
					}
				}
			}
		}

		var viewFlg = 0;
		for( var i = 1; i < viewData[1].length; i++ ) {
			if ( viewData[1][i] != "" ) {
				viewData[1][i] = attributeList[i] + "：" + viewData[1][i];
				viewFlg = 1;
			}
		}

		if ( viewFlg == 1 ) {
			viewData[1][0] = "[クリーチャー] " + 
				ketasu( parseInt( elements["leavesValue[1][1]"].value ) + 
					parseInt( elements["leavesValue[1][2]"].value ) + 
					parseInt( elements["leavesValue[1][3]"].value ) + 
					parseInt( elements["leavesValue[1][4]"].value ) + 
					parseInt( elements["leavesValue[1][5]"].value ) + 
					parseInt( elements["leavesValue[1][6]"].value )) + "枚";
		}

		// アイテム
		if( viewData[2][1] != "" ) {
			viewData[2][0] = "[アイテム] " + ketasu( parseInt( elements["leavesValue[2][1]"].value ) + 
										parseInt( elements["leavesValue[2][2]"].value ) + 
										parseInt( elements["leavesValue[2][3]"].value ) + 
										parseInt( elements["leavesValue[2][4]"].value )) + "枚";
		}
		// スペル
		if( viewData[3][1] != "" ) {
			viewData[3][0] = "[スペル] " + ketasu( parseInt( elements["leavesValue[3][1]"].value ) + 
										parseInt( elements["leavesValue[3][2]"].value ) + 
										parseInt( elements["leavesValue[3][3]"].value ) + 
										parseInt( elements["leavesValue[3][4]"].value )) + "枚";
		}

		var textOutput = "";

		for( var i = 1; i < viewData.length; i++ ) {
			for( var j = 0; j < viewData[i].length; j++ ) {
				if ( viewData[i][j] != "" ) {
					textOutput += viewData[i][j] + "<BR>";
				}
			}
			if ( textOutput != "" ) {
				textOutput += "<BR>";
			}
		}

		writeBook.value = "";
		// アドレス出力
		writeBook.value += bookAddress;
		// テキスト出力
		writeBook.value += "<BR>テキスト出力：<BR>" + textOutput;
		
		// エラー情報設定
		errMessage.value = "";
		if ( bookList.length < 50 ) {
			errMessage.value = "※ブックが５０枚以下です。";
		} else if (bookList.length > 50) {
			errMessage.value = "※ブックが５０枚以上です。";
		}

		deckWindow=window.open("./book.html","book");

	}
}

// ヘルプを開く
function openHelp(){
	window.open("./help.html", "HELP", "directories=no,width=600,height=400,resizable=yes,alwaysRaised=yes,scrollbars=yes");
}

function first() {
	// 値を全てクリア
	dataClear();
	// リクエスト読み込み
	inBookLineData = window.location.search;
	if( inBookLineData != "" ) {
		inBookLineDataList = inBookLineData.split("?");

		// "book"データを識別
		bookLine = 0;
		for( var i = 0; i < inBookLineDataList.length; i++ ) {
			if( inBookLineDataList[i].indexOf("book=", 0) == 0 ) {
				bookLine = i;
			}
		}
		bookLineData = inBookLineDataList[bookLine].split( "=" );
		bookLength = bookLineData[1].length / 2;
		for( var j = 0; j < bookLength; j++ ) {
			cardNum = bookLineData[1].substr( j*2, 2 );

		/** 追加処理 **/
		// ブックリストに追加
			bookList[bookList.length] = cardNum;
			addBookInfo( cardNum );
		}

		// 配列をカード番号順にソートする
		bookList.sort( sortNum );

		with( document.gemoid ){
			// bookのOPTIONを一度初期化
			var bookLength = book.options.length;
			for( var i = 0; i < bookLength; i++ ){
				book.options[0] = null;
			}
			// 再度生成
			for( var i = 0; i < bookList.length; i++ ){
				var tmp = bookList[i];
				book.options[i] = new Option( cardDataAll[tmp].name, cardDataAll[tmp].num );
				setBgColor( book.options[i], cardDataAll[tmp].attribute,cardDataAll[tmp].type );
			}
			cardList.focus();
		}
	}
}

