﻿﻿var getListHtml;
//trueの時ajax通信を行う。falseの場合はsubmitする。
var ajaxF = true;
var firstF = true;


$(document).ready(function(){

var url; // 非同期通信するURL
var ajaxRequest;

url = $("input[name='ajaxpath']").val();

//表示モデル　リストに必要な変数を持つ
var ListView = {
	clickObject:"",
	initHeight:150
};

//リストのHTMLモデル(速度の問題からjObjectに変更)
var ListHtml = {
	conditionHtml:"",
	headHtml:"",
	contentsHtml:"",
	naviHtml:""
}

//リスト内のページング情報用モデル
var ListNavi = {
	currentPageNum:0 //現在の表示ページ
}

//HTMLを取得する
getListHtml = function(pageNum) {
	var dataObject;

	//formにhiddenをセットする
	if (pageNum != null) {

		if ($(".page").size() > 0) {
			$(".page").html(pageNum);
		} else {
			$("#search_dtl_result_form form").append('<div sytle="diplay:none" class="page">' + pageNum + '</div>');
		}
	}

	if (ajaxF && firstF) {

		//通信を停止する
		if (ajaxRequest != null) {
			ajaxRequest.abort()
		}
		ListHtml.headHtml = "";
		ListHtml.contentsHtml = getLoadingInitHtml();
		ListHtml.naviHtml = "";
		updateViewNoCondition();

		if (!firstF) {
			//ロード中の表示
			ListHtml.contentsHtml = getLoadingHtml();
			updateView();	//表示を更新する
		}

		//valueが入っていないhiddenを削除する
		clearNullValue();

		//リクエスト用の文字列を生成する
		dataObject = getHiddenString();

		//検索語句にでhtmlエンコードされているものをデコードする
		//さらに｢&｣と「%」はajaxのdataに存在すると別の意味を持ってしまうので、正しい形に変換
		dataObject = dataObject.replace("&lt;","<");
		dataObject = dataObject.replace("&gt;",">");
		dataObject = dataObject.replace("%","%25");
		dataObject = dataObject.replace("&amp;","%26");

		//ajax通信をしてリスト内に表示するhtmlを取得する
		ajaxRequest = $.ajax({
			type: "POST",
			cache: true,
		  url: url,
	  	dataType: "html",
			data: dataObject,
		  error: function(XMLHttpRequest, textStatus, errorThrown){
					closeList();
			},
			success: function(msg){
				var data;
				var beforeContentsHeight;
				var targetObjName;
				var jObjectTemp;

				beforeContentsHeight = getContentsHeight();

				//ローディング中を消す
				ListHtml.contentsHtml = "<div id=\"tmp_brank\" style=\"height:" + beforeContentsHeight + "px\"></div>";
				updateView();

				//初回
				if (ListHtml.headHtml == "") {
					targetObjName = ".sale_list";
					jObjectTemp = $(msg);
					ListHtml.conditionHtml = jObjectTemp.closest("#condition_html");
					ListHtml.headHtml = jObjectTemp.closest("#head_html");
					ListHtml.contentsHtml =jObjectTemp.closest("#contents_html");
					ListHtml.naviHtml =jObjectTemp.closest("#navi_html");
				} else {
					targetObjName =  "#tmp_brank";

					jObjectTemp = $(msg);
					ListHtml.conditionHtml = jObjectTemp.closest("#condition_html");
					ListHtml.headHtml = jObjectTemp.closest("#head_html");
					ListHtml.contentsHtml =jObjectTemp.closest("#contents_html");
					ListHtml.naviHtml =jObjectTemp.closest("#navi_html");
				}

				//表示を更新する
				updateView();
				//イベントをセットする
				setListEvent();

				//IE6の高さ崩れ対策
				$(".foot_menu dd").css("zoom","1");

				//IE7の高さ崩れ対策
				$("#wrap").removeAttr("style");
				$("#p_top").removeAttr("style");
				fixFooter();

				firstF = false;
		  }
		});

	} else {

		//フォーム内のdivをinputに変更する
		changeDivToInput();

		//フォームをサブミットする
		$("#search_dtl_result_form form").submit();
	  return false; //リンクを無効にする

	}
}

//画面表示後に#wrapのサイズを再調整する
function fixFooter(){
	var height =$(window).height()-$("#ftr").outerHeight();
	var presentHeight= $("#wrap").height();

	if(height-presentHeight>0){
		$("#wrap").height(height);
		var element = document.getElementById("p_top");
		if(element!=null){
			element.style.position = 'absolute';
			element.style.bottom = '0';
		}
	}
}

//リストを初期化する
function initListForm() {
	$(".sale_list").height(ListView.initHeight + "px");
}

//表示を更新する
function updateView() {
	$(".sale_list > *").remove();
	$(".search_condition_wrap > *").remove();
	$(".search_condition_wrap").append(ListHtml.conditionHtml);
	$(".sale_list").append(ListHtml.headHtml);
	$(".sale_list").append(ListHtml.contentsHtml);
	$(".sale_list").append(ListHtml.naviHtml);
	$(".sale_list").css("overflow", "visible");
	setAddRemindEvent();
}

function updateViewNoCondition() {
	$(".sale_list > *").remove();
	$(".sale_list").append(ListHtml.headHtml);
	$(".sale_list").append(ListHtml.contentsHtml);
	$(".sale_list").append(ListHtml.naviHtml);
	$(".sale_list").css("overflow", "visible");
	setAddRemindEvent();
}

//リストの高さを取得する。
function getListHeight() {
	var height;
	$(".sale_list").append("<div id=\"tmp_h\"></div");
	$("#tmp_h").hide();
	$("#tmp_h").append(ListHtml.headHtml);
	$("#tmp_h").append(ListHtml.contentsHtml);
	$("#tmp_h").append(ListHtml.naviHtml);
	height = $("#tmp_h").outerHeight();
	$("#tmp_h").remove();
	return height;
}

//リストの高さを取得する。
function getContentsHeight() {
	var height;
	$(".sale_list").append("<div id=\"tmp_h\"></div");
	$("#tmp_h").hide();
	$("#tmp_h").append(ListHtml.contentsHtml);
	height = $("#tmp_h").outerHeight();
	$("#tmp_h").remove();
	return height;
}

//ローディング中のHTMLを返す
function getLoadingHtml() {
	var height = $(".sale_contents").height();
	var width = $(".sale_contents").width();
	var margin_top = $(".sale_contents").css("margin-top");
	var margin_bottom = $(".sale_contents").css("margin-bottom");
	var imageWidth = 16;
	var imageHeight = 16;
	var top = height / 2 - imageHeight / 2;
	var left = width / 2 - imageWidth / 2;
  var imageHtml = "<img style=\"margin-left:" + left + "px;margin-top:" + top + "px\" src=\"" + imagePath + "ajax/ajax-loader.gif\"></img>";//Todo 仮 gifのパスをあわせる
	var loadingHtml = "<div style=\"height:" + height + "px;margin-top:" + margin_top + ";margin-bottom:" + margin_bottom + "\" >" + imageHtml + "</div>";

	return loadingHtml;
}

//ローディング中のHTMLを返す(初期状態)
function getLoadingInitHtml() {
	var height = $(".sale_list").height();
	var width = $(".sale_list").width();
	var margin_top = $(".sale_list").css("margin-top");
	var margin_bottom = $(".sale_list").css("margin-bottom");
	var imageWidth = 16;
	var imageHeight = 16;
	var top = height / 2 - imageHeight / 2;
	var left = width / 2 - imageWidth / 2;
	var imageHtml = "<img style=\"margin-left:" + left + "px;margin-top:10px;margin-bottom:10px\" src=\"" + imagePath + "ajax/ajax-loader-l.gif\"></img>";
	var loadingHtml = "<div style=\"margin-top:" + margin_top + ";margin-bottom:" + margin_bottom + "\" >" + imageHtml + "</div>";

	return loadingHtml;
}

//リストを閉じる
function closeList() {
		//ToDo ローディング中を消す
		var left = $(".sale_list").offset().left;
		var top = $(".sale_list").offset().top;
		var width = $(".sale_list").width();
		var height = $(".sale_list").height();
		var leftAfter = ListView.clickObject.offset().left;
		var topAfter = ListView.clickObject.offset().top;
		var widthAfter = ListView.clickObject.width();
		var heightAfter = ListView.clickObject.height();

		$(".sale_list").css("height",height);

		$("#move_contents").css("opacity", "1.0");
		$("#move_contents").css("left",left);
		$("#move_contents").css("top",top);
		$("#move_contents").css("width",width);
		//$("#move_contents").css("height",height);
		$("#move_contents").css("height",ListView.initHeight + "px");
		$("#move_contents").show();
		$(".sale_list").hide();

		ListHtml.headHtml = "";
		ListHtml.contentsHtml = "";
		ListHtml.naviHtml = "";

		updateView();

		$("#move_contents").animate({
			opacity: 0.4,
		 	width: widthAfter,
			//height: heightAfter,
			height: "10px",
			left:leftAfter,
			top:topAfter,
			padding: "0%"
		},
		250,
		"easeInCubic",
		 function() {
				$("#move_contents").hide();
		 });
}


//タブと改行を削除する
function remove_tab(text){
	if (text != null && text != "") {
	  text = text.replace(/\t/g, "");
		text = text.replace(/\v/g, "");
		text = text.replace(/\r\n/g, "");//IE
		text = text.replace(/\n/g, "");//Firefox
	}
  return text;
}

//リストのイベントハンドラを設定する
function setListEvent() {

	//次のページへボタンが押された
	$(".page_form_event").click(function() {
		pageNum = $(this).next("input").val();

		//Ajax通信を行い、HTMLを取得する
		getListHtml(pageNum);
		return false;
	});

}

//フォームの内容をセットする
function getHiddenString() {
	var i;
	var hiddenString;

	for ( i = 0 ; i < $("#search_dtl_result_form form > div").size() ; i++ ) {
    //dataObject[$("#search_dtl_result_form form > input:eq(" + i + ")").attr("name")] = $("#search_dtl_result_form form > input:eq(" + i + ")").val();

		if (i == 0) {
			hiddenString = $("#search_dtl_result_form form > div:eq(" + i + ")").attr("class") + "=" + remove_tab($("#search_dtl_result_form form > div:eq(" + i + ")").html());
		} else {
			hiddenString += "&" + $("#search_dtl_result_form form > div:eq(" + i + ")").attr("class") + "=" + remove_tab($("#search_dtl_result_form form > div:eq(" + i + ")").html());
		}

	}

	return hiddenString;
}

//divの内容をInputに変更する
function changeDivToInput() {
	var i;
	var hiddenString;
	var name;

	for ( i = 0 ; i < $("#search_dtl_result_form form > div").size() ; i++ ) {
    //dataObject[$("#search_dtl_result_form form > input:eq(" + i + ")").attr("name")] = $("#search_dtl_result_form form > input:eq(" + i + ")").val();
		name = $("#search_dtl_result_form form > div:eq(" + i + ")").attr("class");
		val = remove_tab($("#search_dtl_result_form form > div:eq(" + i + ")").html());

		//検索文字列のみ、htmkエンコードされた文字列が格納される可能性があるので、
		//javaへ正しい形で引き渡せるように変換する
		if(name=="kw"){
			val = val.replace("&lt;","<");
			val = val.replace("&gt;",">");
			val = val.replace("&amp;","&");
		}

		$("#search_dtl_result_form form").append('<input type="hidden" name="' + name + '" value="' + val + '">');
		//Google chromeで値が書き変わらない為、ここで書き換えている
		$("#search_dtl_result_form form input:last").val(val);
	}
}

//valueが入っていないhiddenを削除する
function clearNullValue() {
	var i;
	for ( i = 0 ; i < $("#search_dtl_result_form form > div").size() ; i++ ) {
		if ($("#search_dtl_result_form form > div:eq(" + i + ")").html() == "" || $("#search_dtl_result_form form > div:eq(" + i + ")").html() == null) {
			$("#search_dtl_result_form form > div:eq(" + i + ")").remove();
			--i;
		}
	}
}

//Ajax通信を行い、HTMLを取得する
getListHtml(remove_tab($(".page").html()));

});

