/**
 * 数値の先頭に0を追加し、Stringで返す
 * @return String
 */
function formatNum(keta, num) {
	var src = new String(num);
	var cnt = keta - src.length;
	if (cnt <= 0) {
		return src;
	}
	while (cnt-- > 0) {
		src = "0" + src;
	}
	return src;
}

/**
 * 日付が有効か
 * @return Boolean
 */
function checkDate(year, month, day) {
	//alert(year+month+day);
    var date = new Date(year , month - 1 ,day);
    if (
    	date.getFullYear() == year
     && date.getMonth()    == month - 1
     && date.getDate()     == day
    ) {
        return true;
    } else {
    	return false;
    }
}

/**
 * 見た目を「無効」にする。
 */
var css_show_disabled = {
	'background-color':'#eeeeee',
	'color':'#aaaaaa'
};
/**
 * 見た目を「有効」にする。
 */
var css_show_enabled = {
	'background-color':'#ffffff',
	'color':'#000000'
};

/**
 * l_areaリストをprefectureを基に更新する。
 * /system/getLargeAreaListから取得する。
 * @return void
 */
function updateLargeArea() {
	$('#search_empty_prefecture').attr('disabled', 'disabled');
	$('#search_empty_l_area').attr('disabled', 'disabled').empty();
	var pref = $('#search_empty_prefecture option:selected').attr('value');
	var append_option = function(value, content) {
		$('#search_empty_l_area').append('<option value="' + value + '">' + content + '</option>');
		return;
	};
	if (pref != undefined && pref != '______') {
		try {
			var data = jQuery.ajax({
				url:'/system/getLargeAreaList',
				data:'code=' + pref,
				async:false
			}).responseText;
			data = data.replace(/\/\/.*/, '');
			data = eval('('+data+')');
			//$('#search_empty_l_area').append('<option value="______">地域名（必須）</option>');
			append_option('______', '地域名 (必須)');
			for (var i=0; i<data.length; i++) {
				append_option(data[i].cd, data[i].name);
				/*$('#search_empty_l_area')
					.append('<option value="' + data[i].cd + '">' + data[i].name + '</option>');*/
			};
			$('#search_empty_l_area').removeAttr('disabled');
		} catch (e) {
			//$('#search_empty_l_area').append('<option value="______">データを読み込めませんでした。</option>');
			append_option('______', 'リストを取得出来ませんでした。');
		}
	} else {
		append_option('______', '都道府県を選択して下さい。');
	}
	$('#search_empty_prefecture').removeAttr('disabled');
	return;
}

/**
 * stay_date_yearとstay_date_monthを基に、stay_date_dayのリストを更新する。
 * return void;
 */
function updateDateDay() {
	$("#search_empty_stay_date_day").empty();
	var year = $("#search_empty_stay_date_year option:selected").attr("value");
	var month = $("#search_empty_stay_date_month option:selected").attr("value");
	if (year != undefined && month != undefined) {
		try {
			var i = 0;
			while (checkDate(year, month, ++i)) {
				$("#search_empty_stay_date_day").append("<option value=\""+i+"\">"+i+"</option>");
			}
		} catch (e) {}
	}
}

function setInitialFormConditionHotelName(name) {
	$("#search_empty_h_name").attr('title', '宿泊日・日数が無視されます');
	if (name == undefined) {
		$("#search_empty_h_name").css(css_show_disabled);
	} else {
		$("#search_empty_h_name").val(decodeURIComponent(name));
		$("#search_empty_h_name").css(css_show_enabled);
	}
	return;
}

function checkRequired() {
	if (
		(
			$("#search_empty_h_name").val() != $("#search_empty_h_name").attr('title')
			&& $("#search_empty_h_name").val() != ''
		)
		 || (
			$("#search_empty_prefecture").val() != undefined
			&& $("#search_empty_prefecture").val() != '______'
		)
		 || (
			$("#search_empty_l_area").val() != undefined
			&& $("#search_empty_l_area").val() != '______'
		)
	) {
		return true;
	} else {
		$("#search_empty_submit").attr('disabled', 'disabled');
		return false;
	}
}

/**
 * 初期設定
 */
function setInitialFormCondition(data) {
	// ホテル名
	setInitialFormConditionHotelName(data.h_name);
	$("#search_empty_h_name").blur();
	
	// 都道府県名
	if (data.pref != undefined && data.pref != '______') {
		var pref = formatNum(6, data.pref);
		$('#search_empty_prefecture option[value="' + pref + '"]').attr('selected', 'selected');
	}
	$('#search_empty_prefecture').removeAttr('disabled');
	// 大エリア
	updateLargeArea();
	if (data.l_area != undefined) {
		var l_area = formatNum(6, data.l_area);
		$("#search_empty_l_area").ready(
			function() {
				$('#search_empty_l_area option[value="' + l_area + '"]').attr('selected', 'selected');
			}
		);
	}
	
	// 宿泊開始日・日数
	if ($('#search_empty_l_area').attr('disabled') != undefined) {
		$('#search_empty_stay_date_year').css(css_show_disabled);
		$('#search_empty_stay_date_month').css(css_show_disabled);
		$('#search_empty_stay_date_day').css(css_show_disabled);
		$('#search_empty_stay_count').css(css_show_disabled);
	}
	if (
		data.stay_date_year != undefined
	 && data.stay_date_month != undefined
	 && data.stay_date_day != undefined
	) {
		$('#search_empty_stay_date_year option[value="'　+　data.stay_date_year　+　'"]').attr('selected', 'selected');
		$('#search_empty_stay_date_month option[value="'　+　data.stay_date_month　+　'"]').attr('selected', 'selected');
		$('#search_empty_stay_date_day option[value="'　+　data.stay_date_day　+　'"]').attr('selected', 'selected');
	} else {
		$('#search_empty_stay_date_year option[value="'　+　date.getFullYear()　+　'"]').attr('selected', 'selected');
		$('#search_empty_stay_date_month option[value="'　+　String(date.getMonth()　+　1)　+　'"]').attr('selected', 'selected');
		$('#search_empty_stay_date_day option[value="'　+　date.getDate()　+　'"]').attr('selected', 'selected');
	}
	$('#search_empty_stay_date_year').removeAttr('disabled');
	$('#search_empty_stay_date_month').removeAttr('disabled');
	$('#search_empty_stay_date_day').removeAttr('disabled');
	$('#search_empty_stay_count').removeAttr('disabled');
	
	// 人数
	if (data.adult_num != undefined) {
		if (data.adult_num > 10) {
			data.adlut_num = 10;
		}
		$('#search_empty_adult_num option[value="'　+　data.adult_num　+　'"]').attr('selected', 'selected');
	}
	$('#search_empty_adult_num').removeAttr('disabled');
	
	// 部屋数
	if (data.room_count != undefined) {
		if (data.room_count > 10) {
			data.room_count = 10;
		}
		$('#search_empty_room_count option[value="'　+　data.room_count　+　'"]').attr('selected', 'selected');
	}
	$('#search_empty_room_count').removeAttr('disabled');
	
	// 予算
	if (data.min_rate != undefined) {
		if (data.min_rate > 10) {
			data.min_rate = 10;
		}
		$('#search_empty_min_rate option[value="'　+　data.min_rate　+　'"]').attr('selected', 'selected');
	}
	if (data.max_rate != undefined) {
		if (data.max_rate > 10) {
			data.max_rate = 10;
		}
		$('#search_empty_max_rate option[value="'　+　data.max_rate　+　'"]').attr('selected', 'selected');
	}
	$('#search_empty_min_rate').removeAttr('disabled');
	$('#search_empty_max_rate').removeAttr('disabled');
	
	// オプション
	if (data.options != undefined) {
		for (var i=0; i < data.options.length; i++) {
			$("#search_option_"+data.options[i]).attr('checked', 'checked');
		};
	}
	$('#search_empty_option_onsen').removeAttr('disabled');
	$('#search_empty_option_r_room').removeAttr('disabled');
	$('#search_empty_option_prv_bath').removeAttr('disabled');
	
	if (checkRequired()) {
		$('#search_empty_submit').removeAttr('disabled');
	};
}

function removeExtra() {
	if (
		$("#search_empty_h_name").val() != $("#search_empty_h_name").attr('title')
		&& $("#search_empty_h_name").val() != ''
	) {
		$('#search_empty_stay_date_year option:selected').removeAttr('selected');
		$('#search_empty_stay_date_month option:selected').removeAttr('selected');
		$('#search_empty_stay_date_day option:selected').removeAttr('selected');
		$('#search_empty_stay_count option:selected').removeAttr('selected');
	} else {
		return false;
	}
}

var date = new Date();
// フォームの初期状態をセットする
$(document).ready(function(){
	try {
		jQuery.get(
			"/system/getCurrentCondition",
			{
				page:document.URL,
				domain:document.domain
			},
			function(data) {
				var data = data.replace(/\/\/.*/, '');
				var ret = eval("(" + data + ")");
				setInitialFormCondition(ret);
			}
		)
	} catch (e) {}
}
);

// 都道府県の状態変更→大エリアリストの更新
$("#search_empty_prefecture").change(function() {
	updateLargeArea();
});

// 年/月の状態変更→日付リストの更新
$("#search_empty_stay_date_year").change(function() {
	updateDateDay();
});
$("#search_empty_stay_date_month").change(function() {
	updateDateDay();
});

$("#search_empty_h_name")
	.blur(function() {
		var $$ = $(this);
		if ($$.val() == '' || $$.val() == $$.attr('title')) {
        	$$.css(css_show_disabled).val($$.attr('title'));
		}
		reactiveDateField();
	})
	.focus(function(){
		var $$ = $(this);
		if ($$.val() == $$.attr('title')) {
			$(this).css(css_show_enabled).val('');
		}
    })
	.keyup(function() {
		if (checkRequired()) {
			$("#search_empty_submit").removeAttr('disabled');
		}
	})
	.parents('form:first').submit(function() {
		var $$ = $('#search_empty_h_name');
		if ($$.val() == $$.attr('title')) {
			$$.triggerHandler('focus');
		}
	})
	.end().blur();

function checkHotelNameFieldEmpty() {
	var $$ = $("#search_empty_h_name");
	if ($$.val() == '' || $$.val() == $$.attr('title')) {
		return true;
	} else {
		return false;
	}
}

function reactiveDateField() {
	if (
		checkHotelNameFieldEmpty()
	 && !(
			$('#search_empty_l_area option:selected').val() == '______'
		 || $('#search_empty_l_area option:selected').val() == undefined
		)
	) {
		$("#search_empty_stay_date_year").css(css_show_enabled);
		$("#search_empty_stay_date_month").css(css_show_enabled);
		$("#search_empty_stay_date_day").css(css_show_enabled);
		$("#search_empty_stay_count").css(css_show_enabled);
	} else {
		$("#search_empty_stay_date_year").css(css_show_disabled);
		$("#search_empty_stay_date_month").css(css_show_disabled);
		$("#search_empty_stay_date_day").css(css_show_disabled);
		$("#search_empty_stay_count").css(css_show_disabled);
	}
	return;
}



$("#search_empty_prefecture").change(function() {
	reactiveDateField();
});
$("#search_empty_l_area").change(function() {
	reactiveDateField();
});
$("#search_empty *").change(function(){
	if (checkRequired()) {
		$('#search_empty_submit').removeAttr('disabled');
	}
});

$("#search_empty").submit(function() {
	removeExtra();
});
