/**
 * 指定エレメントの後ろにあるdatepickerインスタンスを表示状態にします。
 */
var EZMCalendarOpen = function(button) {
    $(button).next().datepicker("show");

}
/**
 * 指定エレメントの前にあるinput:hiddenを空にします。
 */
var EZMCalendarReset = function(button) {
    $(button).prevAll("input[type='hidden']").val('');
    EZMCalendarSync($(button).prevAll("input[type='hidden']").attr("id"));
}
/**
 * 指定idのvalueに応じてspanとselectの表示をコントロールします。
 */
var EZMCalendarSync = function(id) {
    var instance = $("#"+id);
    var text = instance.val() ? instance.val(): '日付指定なし';
    instance.next("span").html(text);
    if (!instance.val() && instance.parent().find("select").length>0) {
	instance.parent().find("select").closest("span").hide();
    }
    if (instance.val() && instance.parent().find("select").length>0) {
	instance.parent().find("select").closest("span").show();
    }
}
/**
 * 単独datepickerインスタンスを生成します。
 */
var EZMCalendarInit = function(id) {
    var selectedFunction = function(selectedDate) {
	EZMCalendarSync(this.id);
    }
    $("#"+id).datepicker({"onSelect":selectedFunction, minDate: '+1d', maxDate: '+2m'});
    EZMCalendarSync(id);
}
/**
 * 単独datepickerインスタンスを生成します。
 */
var EZMCalendarInit2 = function(id) {
    var selectedFunction = function(selectedDate) {
	EZMCalendarSync(this.id);
    }
    $("#"+id).datepicker({"onSelect":selectedFunction, minDate: '+1d'});
    EZMCalendarSync(id);
}
/**
 * 範囲datepickerインスタンスを生成します。
 */
var EZMCalendarRangeInit = function(from, to) {
    var dates = $("#"+from+", #"+to).datepicker({
	onSelect : function(selectedDate) {
	    EZMCalendarSync(this.id);
	    var option = this.id == from ? "minDate" : "maxDate";
	    var instance = $(this).data("datepicker");
	    var date = $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, selectedDate, instance.settings);
	    var otherDate = dates.not(this).datepicker("option", option, date).datepicker("getDate");
            var times = $("#"+from+"Hour, #"+to+"Hour");
	    var select = this.id == from ? 0 : 1;
	    EZMCalendarTimesValidate(dates,times,times.eq(select));
	},
	beforeShow : function(input, instance) {
	    var selectedDate = dates.not(this).val();
            if(!selectedDate) {
		$(this).datepicker("option","minDate",null).datepicker("option","maxDate",null);
            } else {
		var option = this.id == from ? "maxDate" : "minDate";
		var instance = $(this).data("datepicker");
		var date = $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, selectedDate, instance.settings);
		dates.filter(this).datepicker("option", option, date);
	    }
	}
    });
    EZMCalendarSync(from);
    EZMCalendarSync(to);
    var times = $("#"+from+"Hour, #"+to+"Hour");
    if (times.length) {
	EZMCalendarTimeInit(from, to);
    }
}
/**
時間管理を設定します。

時間指定について
時間のselectを変更したタイミングで、
対になるselectが存在する。
お互いに日付が選択されている。
選択されている日付が同じときに、
操作されたselectのvalueで対になるselectのvalueを書き換える。
****************************************************************/
var EZMCalendarTimeInit = function(from, to) {
    var times = $("#"+from+"Hour, #"+to+"Hour");
    var dates = $("#"+from+", #"+to);
    var changedFunction = function(){
	EZMCalendarTimesValidate(dates,times,$(this));
    }
    times.bind("change", changedFunction);
}
/**
 * 日付が同じなら時間の前後を調整します。
 */
var EZMCalendarTimesValidate = function(dates,times,select) {
    if(times.length>1 && dates.length>1) {
	var f = dates.eq(0).val();
	var t = dates.eq(1).val();
	if (f != "" && t !="" && f == t) {
            if (times.eq(0).attr("id") == select.attr("id")) { //From was changed.
                if (times.eq(1).val()*1 <= times.eq(0).val()*1) {
                    times.eq(1).val(times.eq(0).val());
                }
            } else { //To was changed.
                if (times.eq(0).val()*1 >= times.eq(1).val()*1) {
                    times.eq(0).val(times.eq(1).val());
                }
            }
	}
    }	
}

/**
 * 期間指定ダイアログ
 */
//ダイアログオプション
var EZMEnableDialogOptions = {
    resizable: false,
    width:600,
    modal: true,
    buttons: {
	'適用する': function() {
	    $(this).find('form').submit();
	    $(this).dialog('destroy');
	},
	'閉じる' : function() {
	    $(this).dialog('destroy');
	}
    }
}
var EZMEnableDialogOpen = function(id) {
    $("#div-enable-dialog-t-"+id).dialog(EZMEnableDialogOptions);
}
var EZMEnableYDialogOpen = function(id) {
    $("#div-enable-dialog-y-"+id).dialog(EZMEnableDialogOptions);
}
var EZMEnableNDialogOpen = function(id) {
    $("#div-enable-dialog-n-"+id).dialog(EZMEnableDialogOptions);
}
