// 全ページから利用できるJSを書く

// ======================================= 日付関連のOPTIONリストを生成
function getYearList(selected) {
	selected = selected || new Date().getFullYear();
	document.write(getNumOptions(2005, 2010, selected));
}

function getMonthList(selected) {
	selected = selected || new Date().getMonth() + 1;
	document.write(getNumOptions(1, 12, selected));
}

function getDayList(selected) {
	selected = selected || new Date().getDate();
	document.write(getNumOptions(1, 31, selected));
}

function getNumOptions(s, e, selected) {
	var str = "";
	for(var i = s; i <= e; i++) {
		var sel = i == selected ? " selected" : "";
		str += '<option value="' + i + '" ' + sel + '>' + i + '</option>';
	}
	return str;
}




window.onerror = function(msg, file, line){
	var err = "エラー:"+msg;
	err += "\nファイル：" + file;
	err += "\nライン：" + line;
	//alert(err);
}



// formデバッグ
var Debug = {};
Debug.showFormNames = function() {
	$("[@name]").each(function(){
		$this = $(this);
		$this.before("<div class=info>name = " + $this.attr('name') + " / " + $this[0].tagName + "(" + $this[0].type +")</div>");
	});
	$("form").each(function(){
		$this = $(this);
		$this.before("<div class=info>form action=" + $this.attr('action') + " / method=" + $this.attr('method') +"</div>");
	});
}

// 送信時にグレーアウト
$(function(){
	$('input[@type=submit]').click(function(){ 
		window.setTimeout(setDisableSubmit, 10);
		window.setTimeout(setEnableSubmit,  5000);
	});

	function setDisableSubmit() {
		$('input[@type=submit]').each(function(){
			this.disabled = true;
		});
	}
	function setEnableSubmit() {
		$('input[@type=submit]').each(function(){
			this.disabled = false;
		});
	}		

	//$('.formError').Highlight(1000, '#FF3366');
});


// ===========================================================
// Cookieっぽく扱いたい
// ===========================================================
var Cookie = {};
Cookie.get = function() {
	var cookie = {};
	var cook   = document.cookie.split(';');
	for(var i in cook){
		var pair = cook[i].split('=');
		pair[0] = pair[0].replace(/^\s+/, "");
		cookie[pair[0]] = decodeURIComponent(pair[1]);
	}
	return cookie;
}
Cookie.set = function(name, value, path) {
	if (!path) path = "/";
	document.cookie = name + "=" + value + "; path=" + path + ";";
}

// ===========================================================
// LoadVarsっぽく扱いたい
// ===========================================================
function LoadVars(opts){
	this.url      = "";
	this.result   = "";
	this.success  = false;
	this.status   = "";
	this.data    = {};				// 送信データ
	this._options = {
		data       : this.data,		// 送信データ
		async      : true,			// 非同期通信 true/false
		ifModified : false,			// 変更があった場合のみ
		timeout    : 1000 * 10,		// タイムアウト
		type       : "GET", 		// GET or POST
		url        : "",			// URL
		success    : Delegate.create(this, this.onAjaxSuccess),
		error      : Delegate.create(this, this.onAjaxError)
	}
	for (var i in opts) this.setOption(i, opts[i]);
	
};
LoadVars.prototype = {
	setOption:function(name, value) {
		this._options[name]	= value;
	},

	load : function(url, method) {
		this.url = url;
		if(url)    this._options.url  = url;
		if(method) this._options.type = method;
		this._options.data = this.data;
		$.ajax(this._options);
		return this;
	},
	
	onAjaxSuccess : function(data, status) {

		switch(status) {
			case "success":
				this.success = true;
				this.status = "success";
				this.result = data;
				this.onData(data);
				break;
			case "notmodified":
				this.success = true;
				this.status = "notmodified";
				this.onData(data);
				break;
		}
	},
		
	onAjaxError   : function(req, settings) {
		this.success = false;
		this.status = "error";
		this.onError(req.status);
	},
	
	onData : function(data){},
	onError: function(httpStatus){}
	
	
}



// ===========================================================
// 委譲
// ===========================================================
function Delegate(){};
Delegate.create = function(obj, func){ 
	return function(){
		func.apply(obj, arguments);
	}
}

// ===========================================================
// グレーアウト
// ===========================================================
function ModalLayer(){}
ModalLayer.init = function() {
	var $overlay = $("#ModalLayer_box");
	if (!$overlay[0]){
		$overlay = $('<div id="ModalLayer_box"></div><div id="ModalLayer_window"></div><iframe id="ModalLayer_hide_select"></iframe>');
		$("body").prepend($overlay);
	}
	
	this.$overLayer  = $("#ModalLayer_box");
	this.$overWindow = $("#ModalLayer_window");
	this.$overHideSelect  = $("#ModalLayer_hide_select");

	this.$overLayer.css("position","absolute");
	this.$overLayer.css("z-index","1024");

	this.$overHideSelect.width("99%");
	this.$overHideSelect.height("99%");
	this.$overHideSelect.css("z-index","1023");
	this.$overHideSelect.css("position","absolute");
	this.$overHideSelect.css("filter", "alpha(opacity=0)");
	this.$overHideSelect.css("-moz-opacity", 0);
	this.$overHideSelect.css("opacity", 0);
	this.$overHideSelect.show();

	this.$overWindow.css("display", "none");
}
	
ModalLayer.popup = function(wid, hei, data, opt){ 
	$popup = this.$overWindow;
	$popup.css("z-index", "1025");
	$popup.css("position","absolute");
	$popup.width(wid);
	$popup.height(hei);
	$popup.html(data);
	if (opt.clickHide) $popup.click(ModalLayer.hide);
	if (opt.center) {
		ModalLayer.popupCenter = true;
		ModalLayer.center();
	} else {
		ModalLayer.popupCenter = false;	
	}
	return $popup;
}

ModalLayer.show = function(color, alpha, fade) {
	if (!this.$overLayer) ModalLayer.init();

	// Glayer
	$overlay = this.$overLayer;
	$overlay.css("background-color", color);
	$overlay.css("filter", "alpha(opacity=" + alpha + ")");
	$overlay.css("-moz-opacity", alpha / 100);
	$overlay.css("opacity",      alpha / 100);
	$overlay.fadeIn(fade);
	$overlay.click(ModalLayer.hide);

	$(window).bind("resize", ModalLayer.resize);
	$(window).bind("scroll", ModalLayer.resize);
	
	ModalLayer.resize();
	return this;
}

ModalLayer.hide = function() {
	$(window).unbind("resize", ModalLayer.resize);
	$(window).unbind("scroll", ModalLayer.resize);
	$("#ModalLayer_box").unbind("click").fadeOut(150, function(){$(this).hide();});
	$("#ModalLayer_window").hide();
	$("#ModalLayer_hide_select").hide();
}

ModalLayer.resize = function(){
	$overlay = ModalLayer.$overLayer;
	$overlay.css("top", $(window).scrollTop());
	$overlay.css("left", $(window).scrollLeft());	
	$overlay.width($(window).width());
	$overlay.height($(window).height());
	
	if (ModalLayer.popupCenter) {
		ModalLayer.center();
	}
} 

ModalLayer.center = function() {
	$popup = this.$overWindow;
	$popup.css("left", $(window).scrollLeft()+($(window).width() - $popup.width()) / 2);
	$popup.css("top",  $(window).scrollTop()+($(window).height() - $popup.height()) / 2);		
}


