var orderlist_kana_str = null;
var orderlist_size_str = null;
var inputlist_str = null;
var inputlist_free_str = null;

var arInputlist = new Array();
arInputlist.keyword = new Array();

var arInputlist_free = new Array();
arInputlist_free.keyword = new Array();

var arOrderlist;

var alertMessage = new Array();

// 登録できる件数
var numFreeKeyword = 1;

// 現在の条件（かな順 or 件数順）
var strKeywordType;

// 区切り文字
var strKeywordSpace = "--------------------";

/* 
 * 選択した条件（かな順 or 件数順）に応じて、一覧の内容を書き換える
 */
function setAllKeyword(type) {
strKeywordType = type;
	arOrderlist = null;
	if (type == "kana") {
		arOrderlist = eval(orderlist_kana_str);
	} else {
		arOrderlist = eval(orderlist_size_str);
	}
	var output = "";
	var key = arOrderlist.keyword;
	for (var i=0; i<key.length; i++) {

		// 既に登録されていないかチェック
		var listInputkey = arInputlist.keyword;
		var flgInput = false;
		for (var j=0; j<listInputkey.length; j++) {
			if (key[i].text == listInputkey[j].text) {
				flgInput = true;
				break;
			}
		}

		// 登録されていないものだけ表示
		if (!flgInput) {
			output += "<option value=\"" + key[i].value + "\">" + key[i].text + "(" + key[i].size + ")</option>";
		}
	}
	$("#selAllKeyword").html(output);
}

/* 
 * 既に登録しているキーワード情報をリストに復元する
 */
function restoreInputKeyword() {
	// 登録済みキーワードを配列化
	arInputlist = eval(inputlist_str);
	arInputlist_free = eval(inputlist_free_str);

	// 上記配列化したものと、ベースとなる「全てのキーワード」を比較し、該当件数を取得する
	var key = arInputlist.keyword;
	for (var i=0; i<key.length; i++) {
		var baseKey = arOrderlist.keyword;
		for (var j=0; j<baseKey.length; j++) {
			if (key[i].value == baseKey[j].value) {
				key[i].size = baseKey[j].size;
				break;
			}
		}
	}
	setInputKeyword();
	// 全てのキーワードリストを更新
	setAllKeyword(strKeywordType);
}




/* 
 * 「全てのキーワード」から選択したキーワードを「登録するキーワード」に追加する
 */
function selectKeyword() {
	$("option", "#selAllKeyword").each(function() {
		if (this.selected) {
			arInputlist = addListValue(arInputlist, this.value);
		}
	});
	setInputKeyword();
	// 全てのキーワードリストを更新
	setAllKeyword(strKeywordType);
}

/* 
 * 「登録するキーワード」から選択したキーワードを削除する
 */
function deleteKeyword() {

	$("option", "#selInputKeyword").each(function() {
		if (this.selected) {
			if (this.value) {
				arInputlist = removeListValue(arInputlist, this.value, this.text);
			} else {
				arInputlist_free = removeListValue(arInputlist_free, this.value, htmlEncode(this.text));
			}
		}
	});
	setInputKeyword();
	// 全てのキーワードリストを更新
	setAllKeyword(strKeywordType);
}

$(function() {
	$("#selAllKeyword").dblclick(selectKeyword);
	$("#selInputKeyword").dblclick(deleteKeyword);
});

/* 
 * 「登録するキーワード」において、選択したキーワードの表示順を変更する
 */
function changeOrderKeyword(method) {
	var arSelKeyword = new Array();
	var selNos = new Array();
	$("option", "#selInputKeyword").each(function() {
		if (this.selected && this.value) {
			arSelKeyword[arSelKeyword.length] = this.value;
		}
	});

	for (var i=0; i<arSelKeyword.length; i++) {
		selNos[i] = 0;
		var key = arInputlist.keyword;
		for (var j=0; j<key.length; j++) {
			if (arSelKeyword[i] == key[j].value) {
				selNos[i] = j;
				break;
			}
		}
	}

	// 選択したキーワードの表示順を上げる場合
	if (method == "up") {
		if (0 < selNos[0]) {
			for (var i=0; i<selNos.length; i++) {
				var valNo = selNos[i];

				// 前後の順序を入れ替える
				var beforeValue = arInputlist.keyword[valNo - 1].value;
				var beforeText = arInputlist.keyword[valNo - 1].text;
				var beforeSize = arInputlist.keyword[valNo - 1].size;

				arInputlist.keyword[valNo - 1].value = arInputlist.keyword[valNo].value;
				arInputlist.keyword[valNo - 1].text = arInputlist.keyword[valNo].text;
				arInputlist.keyword[valNo - 1].size = arInputlist.keyword[valNo].size;

				arInputlist.keyword[valNo].value = beforeValue;
				arInputlist.keyword[valNo].text = beforeText;
				arInputlist.keyword[valNo].size = beforeSize;

				selNos[i] = selNos[i] - 1;
			}
		}

	// 選択したキーワードの表示順を下げる場合
	} else {
		var key = arInputlist.keyword;

		if (selNos[selNos.length - 1] < key.length - 1) {
			for (var i=selNos.length - 1; 0<=i; i--) {
				var valNo = selNos[i];

				// 前後の順序を入れ替える
				var afterValue = arInputlist.keyword[valNo + 1].value;
				var afterText = arInputlist.keyword[valNo + 1].text;
				var afterSize = arInputlist.keyword[valNo + 1].size;

				arInputlist.keyword[valNo + 1].value = arInputlist.keyword[valNo].value;
				arInputlist.keyword[valNo + 1].text = arInputlist.keyword[valNo].text;
				arInputlist.keyword[valNo + 1].size = arInputlist.keyword[valNo].size;

				arInputlist.keyword[valNo].value = afterValue;
				arInputlist.keyword[valNo].text = afterText;
				arInputlist.keyword[valNo].size = afterSize;

				selNos[i] = selNos[i] + 1;
			}
		}
	}

	// 一覧を再表示
	setInputKeyword();

	// 選択済み情報を反映
	var setNo = 0;
	$("option", "#selInputKeyword").each(function() {
		var isSelect = false;
		for (var i=0; i<selNos.length; i++) {
			if (setNo == selNos[i]) {
				isSelect = true;
				break;
			}
		}
		this.selected = isSelect;
		setNo ++;
	});
}


/* 
 * 「登録するキーワード」の一覧をサーバーにPOSTする
 */
function postKeywodData() {
	var post_str = "";

	var key = arInputlist.keyword;
	for (var i=0; i<key.length; i++) {
		if (post_str != "") {
			post_str +=",";
		}
		post_str += key[i].value + "-" + key[i].text;
	}

	key = arInputlist_free.keyword;
	for (var i=0; i<key.length; i++) {
		if (post_str != "") {
			post_str +=",";
		}
		post_str += "null-" + key[i].text;
	}
	$("#hdnKeywordList").val(post_str);
	//alert($("#hdnKeywordList").val());
	$("#formKeywordList")[0].submit();
}

/* 
 * 「登録するキーワード」の一覧を出力する
 */
function setInputKeyword() {
	var output = "";

	// 定義済みのキーワードを一覧に出力する
	var flgKey = false;
	var key = arInputlist.keyword;
	for (var i=0; i<key.length; i++) {
		flgKey = true;
		output += "<option value=\"" + key[i].value + "\">" + key[i].text + "(" + key[i].size + ")</option>";
	}

	// ユーザーが自由に作成したキーワードを一覧に出力する
	key = arInputlist_free.keyword;
	for (var i=0; i<key.length; i++) {
		if (i == 0 && flgKey) {
			output += "<option value=\"\" class=\"new\">" + strKeywordSpace + "</option>";
		}

		output += "<option value=\"\" class=\"new\">[新] " + key[i].text + "</option>";
	}
	$("#selInputKeyword").html(output);
}


/* 
 * 配列に対し、指定されたキーワードの情報を追加する
 */
function addListValue(ary, value) {
	var no = ary.keyword.length;

	// 指定されたキーワードが既に選択済みかを確認
	var isSet = true;
	for (var i=0; i<no; i++) {
		if (ary.keyword[i].value == value) {
			isSet = false;
			break;
		}
	}

	// 選択されていない場合は、配列に追加
	if (isSet) {
		var setText = "";
		var setSize = "";

		// 「全てのキーワード」の配列から、必要な情報を取得する
		var baseKey = arOrderlist.keyword;
		for (var i=0; i<baseKey.length; i++) {
			if (baseKey[i].value == value) {
				setText = baseKey[i].text;
				setSize = baseKey[i].size;
				break;
			}
		}

		ary.keyword[no] = new Object();
		ary.keyword[no].value = value;
		ary.keyword[no].text = setText;
		ary.keyword[no].size = setSize;
	}
	return ary;
}

/* 
 * 配列から、指定されたキーワードの情報を取りのぞく
 */
function removeListValue(ary, value, text) {
	var no = ary.keyword.length;
	var new_array = new Array();
	new_array.keyword = new Array();

	if (value) {
		var a = 0;
		for (var i=0; i<no; i++) {
			var base_key = ary.keyword[i];
			if (base_key.value != value) {
				new_array.keyword[a] = new Object();
				new_array.keyword[a].value = base_key.value;
				new_array.keyword[a].text = base_key.text;
				new_array.keyword[a].size = base_key.size;
				a++;
			}
		}
	} else {
		var a = 0;
		var comp_key = text.substring(4, text.length);
		for (var i=0; i<no; i++) {
			var base_key = ary.keyword[i];
			if (base_key.text != comp_key) {
				new_array.keyword[a] = new Object();
				new_array.keyword[a].text = base_key.text;
				a++;
			}
		}
	}
	return new_array;
}


/* 
 * キーワード登録用の画面（オーバーレイ形式）を開く
 */
var KEY_FORM_ID = "overlaykeyword";
function openKeywordForm() {
	// IE6 の場合はスクロールを無効にする
	if (isIE6) {
		$("body","html").css({
			"height": "100%", 
			"width": "100%"
		});
		$("html").css("overflow","hidden");

		// 親HTMLにSELECTがある場合は、表示を隠す（IEのバグ対応）
		$("select").css("visibility","hidden");
	}

	if (!obScreen) {
		obScreen = document.createElement("div");
		obScreen.id = SCREEN_ID;
		$("body").append(obScreen);
	}

	if (!obForm) {
		obForm = document.createElement("div");
		obForm.id = KEY_FORM_ID;
		$("body").append(obForm);
		$(obForm).attr("class", "overlayform");
	}

	// 1件以上登録されているかチェック
	if(arInputlist_free.keyword.length < numFreeKeyword){
		var html = "<div class='header'></div>";
		html += "<div class='body'>";
		html += "<ul>";
		for (var i=0; i<alertMessage.length; i++) {
			html += "<li>" + alertMessage[i] + "</li>";
		}
		html += "</ul>";
		html += "<input type='text' id='txtKeyword' value='' />";
		html += "<p class='button'>";
		html += "<a href='javascript:cancelKeyword();' class='cancelBtn'>キャンセル</a>";
		html += "<a href='javascript:addOKKeyword();' class='okBtn'>OK</a>";
		html += "</p>";
		html += "</div>";
		html += "<div class='footer'></div>";
		html += "<a id='overlayclosebtn' href='javascript:closeLoginForm()'>閉じる</a>";

		$(obForm).html(html);

		var formHeight = $(obForm)[0].offsetHeight;
		var setHeight = "";
		if (isIE6) {
			var srl = getScrollPosition();
			setHeight = (srl.y - Math.floor(formHeight / 2)) + "px";
		} else {
			setHeight = "-" + Math.floor(formHeight / 2) + "px";
		}
		$(obForm).css({"margin-top": setHeight, "visibility": "visible"});

		// 背景部にクリックイベントを付加する
		$(obScreen).click(function() {
			closeKeywordForm();
		});

	}else{
		var html = "";
		html += "<div class='header'></div>";
		html += "<div class='body'>";
		html += "<ul>";
		html += "<li>フリーキーワードは" + numFreeKeyword + "件までしか登録することはできません。</li>";
		html += "<li>新しく登録する場合は既に登録しているフリーキーワードを削除してください。</li>";
		html += "</ul>";
		html += "<p class='button'>";
		html += "<a href='javascript:cancelKeyword();' class='okBtn'>OK</a>";
		html += "</p>";
		html += "</div>";
		html += "<div class='footer'></div>";
		html += "<a id='overlayclosebtn' href='javascript:closeLoginForm()'>閉じる</a>";

		$(obForm).html(html);

		var formHeight = $(obForm)[0].offsetHeight;
		var setHeight = "";
		if (isIE6) {
			var srl = getScrollPosition();
			setHeight = (srl.y - Math.floor(formHeight / 2)) + "px";
		} else {
			setHeight = "-" + Math.floor(formHeight / 2) + "px";
		}
		$(obForm).css({"margin-top": setHeight, "visibility": "visible"});

		// 背景部にクリックイベントを付加する
		$(obScreen).click(function() {
			closeKeywordForm();
		});
	}
}

/*
 * キーワード登録をキャンセルした場合
 */
function cancelKeyword() {
	$("#txtKeyword").val("");
	closeKeywordForm();
}

/*
 * キーワード登録をOKした場合
 */
function addOKKeyword() {
	var val = $("#txtKeyword").val();

	var valHtml = htmlEncode(val);

	// 既に登録されているかチェック
	var listFreekey = arInputlist_free.keyword;
	var flgFree = false;
	for (var j=0; j<listFreekey.length; j++) {
		if (valHtml == listFreekey[j].text) {
			flgFree = true;
			break;
		}
	}

	if (flgFree) {
		alert("既に登録されています。");
	}else{
		if (val) {
			var newNo = arInputlist_free.keyword.length;
			arInputlist_free.keyword[newNo] = new Object();
			arInputlist_free.keyword[newNo].text = htmlEncode(val);
		}

		setInputKeyword();
		cancelKeyword();
		closeKeywordForm();
	}
}

/*
 * キーワード登録フォームの非表示処理
 */
function closeKeywordForm() {

	// 入力フォームをクリアにする
	//cancelKeyword();

	$(obScreen).unbind("click");
	$(obScreen).remove();
	obScreen = null;

	$(obForm).remove();
	obForm = null;

	// IE6 の場合はスクロールを有効にする
	if (isIE6) {
		$("body","html").css({
			"height": "auto",
			"width": "auto"
		});
		$("html").css("overflow","");

		// 親HTMLにSELECTがある場合は、非表示を解除する
		$("select").css("visibility", "visible");
	}
}
