var MyApp = {};
MyApp.common = {
	scroll: {
		offsetY: 0,
		offsetX: 0
	},
	element: {
		img: {
			change: function (filename, el_name) {
				if (typeof el_name == "undefined" || ! $(el_name)) {
					alert("サーバデータを受信できません");
					return false;
				}
				filename += "?";
				filename += Math.random();
				$(el_name).src = filename;
				return false;
			}
		},
		show: function (el_id, top, left) {
			if ($(el_id)) {
				$(el_id).style.zIndex     = 100;
				$(el_id).style.position   = "absolute";
				$(el_id).style.top        = MyApp.common.scroll.offsetY + (top  || 0) + "px";
				$(el_id).style.left       = MyApp.common.scroll.offsetX + (left || 0) + "px";
				$(el_id).style.display    = "block";
				$(el_id).style.visibility = "visible";
			}
			return false;
		},
		hide: function (el_id) {
			if ($(el_id)) {
				$(el_id).style.zIndex     = -1;
				$(el_id).style.display    = "none";
				$(el_id).style.visibility = "hidden";
				$(el_id).style.position   = "absolute";
				$(el_id).style.top        = "-1000px";
				$(el_id).style.left       = "-1000px";
			}
			return false;
		},
		_getAll: function (e) {
			var list = new Array();
			if (e && e.id && (e.tagName).toUpperCase() == "FORM") {
				list.push(e);
			}
			if (e.hasChildNodes()) {
				$A(e.childNodes).each(function(e1) {
					MyApp.common.element._getAll(e1).each(function(e2){
						list.push(e2);
					});
				});
			}
			return list;
		},
		_setHidden: function (el_id, el_value, form_id) {
			if ($(el_id)) {
				Element.remove($(el_id));
			}
			var e = document.createElement("input");
			e.type  = "hidden";
			e.id    = el_id;
			e.name  = el_id;
			e.value = el_value;
			$(form_id).appendChild(e);
			return false;
		}
	},
	location: {
		href: function (args) {
			Glayer.show("glayer");
			var hash = $H({});
			$$("input").each(function(el) {
				if (el.type == "hidden") {
					hash[el.name] = el.value;
				}
			});
			hash.merge(args);
			window.location.href = window.location.pathname + "?" + hash.toQueryString();
			return false;
		}
	},
	ajax: {
		_success: function(request, json, form_id) {
			var response = eval(request.responseText);
			var message  = "";
			if (typeof response.error == 'object') {
				var list = response.error;
				for(var i = 0; i < list.size(); i++) {
					if (list[i].message) {
						message += "・ ";
						message += list[i].message;
						message += "\n";
					}
					if (form_id && $(form_id) && typeof list[i].element == 'string') {
						(Form.getElements(form_id)).each(function(el) {
							if ((el.type == "text" || el.type == "password" || el.type == "textarea") && el.name == list[i].element) {
								el.style.backgroundColor = "#fdd";
								throw $break;
							} else if (el.type == "hidden" && el.name == list[i].element && el.id && typeof FCKeditorAPI == 'object') {
								var obj = null;
								if (obj = FCKeditorAPI.GetInstance(el.id)) {
									obj.EditingArea.Document.body.style.backgroundColor = "#fdd";
								}
								throw $break;
							}
						});
					}
				}
				alert(message);
			}
			if (typeof response.message == 'string') {
				Windows.closeAll();
				alert(response.message);
			}
			if (response.redirect) {
	            Windows.closeAll();
	            window.location.href = response.redirect;
			}
			return false;
		}
	},
	submit: {
		form: function (e, form_id, args) {
			Glayer.show("glayer");
			var hash = $H({});
			hash.merge(args);
			hash.each(function(h) {
				MyApp.common.element._setHidden(h.key, h.value, form_id);
			});
			if (typeof $(form_id).action == 'undefined' || $(form_id).action.length == 0) {
				$(form_id).action = (typeof e == 'object' && typeof e.href == 'string' && e.href.length > 0)
				? e.getAttribute('href','2')
				: run_file_name;
			}
			$(form_id).method = "post";
			$(form_id).submit();
			return false;
		},
		self: function (e, form_id, args) {
			var hash = $H({});
			$$("input").each(function(el) {
				if (el.type == "hidden") {
					hash[el.name] = el.value;
				}
			});
			hash.merge(args);
			$(form_id).action = window.location.pathname;
			return MyApp.common.submit.form(e, form_id, hash);
		},
		frame: function (form_id, args) {
			(Form.getInputs(form_id, "button")).each(function(el, idx) {
				el.disabled = true;
			});
			var hash = $H({});
			hash.merge(args);
			hash.each(function(h) {
				MyApp.common.element._setHidden(h.key, h.value, form_id);
			});
			$(form_id).action = run_file_name;
			$(form_id).submit();
			return false;
		},
		ajax: function (runmode, mode, form_id, success) {
			var parameters = "";
			if (form_id && $(form_id)) {
				(Form.getElements(form_id)).each(function(el) {
					if (el.type == "text" || el.type == "password" || el.type == "textarea") {
						el.style.backgroundColor = "";
					} else if (el.type == "hidden" && el.id && typeof FCKeditorAPI == 'object') {
						var obj = null;
						if (obj = FCKeditorAPI.GetInstance(el.id)) {
							obj.UpdateLinkedField();
							obj.EditingArea.Document.body.style.backgroundColor = "";
						}
					}
				});
				MyApp.common.element._setHidden("rm", runmode, form_id);
				MyApp.common.element._setHidden("mode", mode, form_id);
				parameters = Form.serialize(form_id);
				if (parameters == "") {
					alert("処理できませんでした。");
					return false;
				}
			} else {
				parameters = "rm=" + runmode + "&mode=" + mode;
			}
	        Glayer.show("glayer");
			var ajax = new Ajax.Request(
				run_file_name, {
					"method"    : "post",
					"parameters": parameters,
					onSuccess   : function(request, json) {
						return (success)
								? success(request, json, form_id)
								: MyApp.common.ajax._success(request, json, form_id)
						;
					},
					onComplete  : function(request) {
						var response = null;
						if (! $("glayer")) return false;
						try {
							response = eval(request.responseText);
						} catch (e) {
						} finally {
							if (! response || ! response.redirect) Glayer.hide("glayer");
						}
						return false;
					},
					onFailure   : function(request) {
						alert("サーバデータを受信できません");
						if ($("glayer")) Glayer.hide("glayer");
						return false;
					},
					onException : function (request, ex) {
//						alert(ex.name + ": " + ex.message);
						alert("送受信時にエラーが発生しました");
						if ($("glayer")) Glayer.hide("glayer");
						return false;
					}
				}
			);
			return false;
		}
	},
	window: {
		open: {
			html: function (title, width, height, content) {
				var win = MyApp.common.window._get(title, width, height);
				win.getContent().update(content);
				win.showCenter();
				return false;
			},
			ajax: function (title, width, height, url, param) {
				Glayer.show("glayer");
				var win = MyApp.common.window._get(title, width, height);
				win.setAjaxContent(url, {
					"method"    : "post",
					"parameters": param,
					onSuccess   : function(request) {
					},
					onComplete  : function(request) {
						MyApp.common.element._getAll($(win.getId())).each(function(e) {
							Form.getElements(e).each(function(el) {
								if (el.type == "text" || el.type == "password" || el.type == "textarea") {
									Event.observe(el, "focus", function() {
										el.style.backgroundColor = "#eef";
									}, false);
									Event.observe(el, "blur", function() {
										el.style.backgroundColor = "";
									}, false);
								}
							});
						});
						Glayer.hide("glayer");
					},
					onFailure   : function(request) {
						alert("サーバデータを受信できません");
						win.close();
						if ($("glayer")) Glayer.hide("glayer");
					},
					onException : function (request, ex) {
						alert("送受信時にエラーが発生しました");
						win.close();
						if ($("glayer")) Glayer.hide("glayer");
					}
				}, true, true);
				return false;
			}
		},
		close: function (e) {
			Windows.close(Windows.focusedWindow.getId(), e);
			return false;
		},
		_get: function (t, w, h) {
			return new Window("", {
				className     : "mac_os_x",
				title         : t,
				width         : w,
				height        : h,
				zIndex        : 10,
				destroyOnClose: true,
				recenterAuto  : false
			});
		}
	}
};

Event.observe(window, "scroll", function() {
	MyApp.common.scroll.offsetY = document.body.scrollTop  || document.documentElement.scrollTop;
	MyApp.common.scroll.offsetX = document.body.scrollLeft || document.documentElement.scrollLeft;
}, false);

Event.observe(window, 'load', function(e) {
	var menuItemArr = new Array(
			"/images/logo_00r.jpg",
			"/images/menu_00r.gif",
			"/images/menu_01r.gif",
			"/images/menu_02r.gif",
			"/images/menu_03r.gif",
			"/images/menu_04r.gif",
			"/images/menu_05r.gif",
			"/images/menu_06r.gif",
			"/images/menu_07r.gif",
			"/images/menu_08r.gif",
			"/images/menu_09r.gif",
			"/images/menu_10r.gif",
			"/images/menu_11r.gif",
			"/images/menu_91r.gif",
			"/images/menu_92r.gif",
			"/images/menu_93r.gif"
	);
	var imgMax = menuItemArr.length;
	var images = new Array(imgMax);
	for (var i=0; i<imgMax; i++) {
		images[i]     = new Image();
		images[i].src = menuItemArr[i];
	}
	if ($("glayer")) {
		Glayer.hide("glayer");
	}
}, false);

function FCKeditor_OnComplete(e) {
	e.Events.AttachEvent("OnFocus", function() {
		e.EditingArea.Document.body.style.backgroundColor = "#eef";
		return false;
	});
	e.Events.AttachEvent("OnBlur", function() {
		e.EditingArea.Document.body.style.backgroundColor = "";
		return false;
	});
	return false;
}

function trim(s) {
	return regX(s.replace(/^\s+|\s+$/g, ''));
}

function regX(s) {
	//s = s.replace(/;/g, '');
	s = s.replace(/%/g, '%25');
	s = s.replace(/#/g, '%23');
	s = s.replace(/&/g, '%26');
	s = s.replace(/\?/g, '%3F');
	return s;
}

