// CMONOS.JP JavaScript Library cmonos.js
// Copyright 2007-2011 cmonos.jp
// Last Modified:2011-12-29

var cmonos = {};
cmonos.persistent = {};
cmonos.tool = {};
cmonos.current = {};

cmonos.document = {
	supportTouch : ('createTouch' in document),

	getCookie : function(name) {
		var cookies = new Array();
		var cookiePairs = document.cookie.split(/;\s*/);
		for (var i=0; i < cookiePairs.length; i++) {
			if (cookiePairs[i] != "") {
				var eq = cookiePairs[i].indexOf("=");
				if (eq >= 0) {
					var key = cookiePairs[i].substring(0, eq);
					var value = cookiePairs[i].substring(eq+1, cookiePairs[i].length);
					cookies[key] = value;
				}
			}
		}
		return (name != null && cookies[name] != null) ? cookies[name] : "";
	},

	setCookie : function(name,value,expires,domain,path) {
		if (expires == null || expires == "") {
			expires = new Date();
			expires.setTime(expires.getTime() + 86400000000);
		}
		document.cookie = name + '=' + value + '; expires=' + expires.toGMTString() + ';' + ((domain != null && domain != "") ? ' domain=' + domain : '') + ';' + ((path != null && path != "") ? ' path=' + path : '');
		return this;
	},

	deleteCookie : function(name,domain,path) {
		this.setCookie(name, '', new Date(70, 0, 1, 0, 0, 1),domain,path);
		return this;
	},

	addEventListener : function(type,func,capture) {
		return cmonos.element._addEventListener(document,type,func,capture);
	},

	removeEventListener : function(type,func,capture) {
		return cmonos.element._removeEventListener(document,type,func,capture);
	},

	event : {},
	mousedown : {},
	followPointer : function () {
		if (!this.event.followPointer) {
			var this_document = this;
			this.event.followPointer = this.addEventListener('mousedown',function (e) {
				var e = e || event;
				if (cmonos.document.supportTouch && e.touches) e = e.touches[0];
				var scroll_x = cmonos.window.getPageXOffset();
				var scroll_y = cmonos.window.getPageYOffset();
				this_document.mousedown = {
					offset_x: scroll_x,
					offset_y: scroll_y,
					max_x : (scroll_x + cmonos.window.getInnerWidth()),
					max_y : (scroll_y + cmonos.window.getInnerHeight()),
					x: ((e.pageX) ? e.pageX : scroll_x + e.clientX),
					y: ((e.pageY) ? e.pageY : scroll_y + e.clientY)
				};
			});
		}
		return this;
	}
};

cmonos.window = {
	getPageXOffset : function () {
		return (self.pageXOffset) ? self.pageXOffset : (document.compatMode != null && document.compatMode != "BackCompat") ? document.documentElement.scrollLeft : document.body.scrollLeft;
	},

	getPageYOffset : function () {
		return (self.pageYOffset) ? self.pageYOffset : (document.compatMode != null && document.compatMode != "BackCompat") ? document.documentElement.scrollTop : document.body.scrollTop;
	},

	getInnerWidth : function () {
		return (self.innerWidth) ? self.innerWidth : (document.compatMode != null && document.compatMode != "BackCompat") ? document.documentElement.clientWidth : document.body.clientWidth;
	},

	getInnerHeight : function () {
		return (self.innerWidth) ? self.innerHeight : (document.compatMode != null && document.compatMode != "BackCompat") ? document.documentElement.clientHeight : document.body.clientHeight;
	},

	open : function (name,width,height,url,fixed) {
		if (!url) url = '';
		if (window.screen.availWidth && width > window.screen.availWidth) width = window.screen.availWidth;
		if (window.screen.availHeight && height > window.screen.availHeight) height = window.screen.availHeight;
		var w = window.open(url,name,'width='+width+',height='+height+((fixed) ? ',scrollbars=no,resizable=no' : ',scrollbars=yes,resizable=yes'));
		w.focus();
		return true;
	},

	setOnLoad : function (func) {
		return cmonos.element._addEventListener(window,'load',func,false);
	},

	setOnUnload : function (func) {
		return cmonos.element._addEventListener(window,'unload',func,false);
	},

	openBgSample : function (this_path) {
		var bg_sample = '<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />';
		bg_sample += '<title>背景見本</title></head><body background="'+this_path+'">';
		bg_sample += '<form action="#" style="padding-top: 170px; text-align: center;"><input type="button" value="閉じる" onclick="window.close()" /></form>';
		bg_sample += '</body></html>';
		var sample_window = window.open('','BgSampleViewer','width=600,height=400,scrollbars=yes');
		sample_window.document.open("text/html");
		sample_window.document.write(bg_sample);
		sample_window.document.close();
	},

	openMsg : function (msg,html,win_title,win_option) {
		var html_header = '';
		var html_footer = '';
		if (html) {
			html_header = '<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /><title>'+win_title+'</title></head><body bgcolor="#ffffff">';
			html_footer = '</body></html>';
		}
		if (win_option == null) {
			win_option = 'width=400,height=500,scrollbars=yes';
		}
		var msg_window = window.open('','MessageViewer',win_option);
		msg_window.document.open("text/html");
		msg_window.document.write(html_header+msg+html_footer);
		msg_window.document.close();
	},

	openOriginalText : function (msg) {
		this.openMsg(msg,true,'テキストウィンドウ');
	},

	refreshOpener : function (this_url,mk_opener_flag) {
		if (this_url == null || this_url == "") {
			if (window.opener) window.opener.location.reload(); 
		} else {
			if (window.opener) {
				window.opener.location.href = this_url;
			} else if (mk_opener_flag) {
				window.opener = window.open(this_url,'main_' + (new Date()).getMilliseconds(),'toolbar=yes,location=yes,titlebar=yes,directories=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes');
			}
		}
	}
};

cmonos.element = {
	z_index_top : 100000,

	item : function(element) {
		if (arguments.length > 1) element = Array.prototype.slice.call(arguments);
		this.elements = new Array();
		return this.append(element);
	},

	form : function(element) {
		this.elements = new Array();
		if (typeof element == 'object') {
			this.currentForm = element;
		} if (typeof element == "string") {
			this.currentForm = document.getElementById(element);
		}
		return this;
	},

	tagClass : function (tag_class) {
		if (arguments.length > 1) tag_class = Array.prototype.slice.call(arguments);
		this.elements = new Array();
		for (var i=0; i<tag_class.length; i+=2) {
			this.appendElementsByTagClass(tag_class[i],tag_class[i+1])
		}
		return this;
	},

	fieldname : function(name,num) {
		if (typeof name == 'object') {
			if (!this.isIncluded(name)) this.elements[this.elements.length] = name;
		} else if (this.currentForm && typeof name == "string") {
			var n = 0;
			for (var i=0; i < this.currentForm.elements.length; i++) {
				if (this.currentForm.elements[i].name == name) {
					if ((!num || num == n) && (!this.isIncluded(this.currentForm.elements[i]))) this.elements[this.elements.length] = this.currentForm.elements[i];
					n++;
				}
			}
		}
		return this;
	},

	list : function () { return (this.elements) ? this.elements : [] },
	shift : function () { return (this.elements) ? this.elements.shift() : null },
	first : function () { return (this.elements) ? this.elements[0] : null },

	append : function(element) {
		if (arguments.length > 1) element = Array.prototype.slice.call(arguments);
		if (!element) return this;
		if (!this.elements) this.elements = new Array();
		if (element.constructor == Array) {
			for (var i=0; i<element.length; i++) {
				this.append(element[i]);
			}
		} else if (typeof element == 'object') {
			if (!this.isIncluded(element)) this.elements[this.elements.length] = element;
		} else if (typeof element == "string") {
			if (element.match(/^(\w+)\.([\w\-]+)$/)) {
				this.appendElementsByTagClass(RegExp.$1.toLowerCase(),RegExp.$2)
			} else {
				element = document.getElementById(element.replace('#',''));
				if (element && !this.isIncluded(element)) this.elements[this.elements.length] = element;
			}
		}
		return this;
	},

	appendElementsByTagClass : function (tag,cName) {
		var elements = new Array();
		if (typeof document.getElementsByClassName == "function") {
			elements = document.getElementsByClassName(cName);
			for (var i=0; i<elements.length; i++) {
				if (elements[i].tagName.toLowerCase() == tag && !this.isIncluded(elements[i])) this.elements[this.elements.length] = elements[i];
			}
		}
		if (typeof document.getElementsByClassName != "function" || elements.length == 0) {
			elements = document.getElementsByTagName(tag);
			var regexp = new RegExp("(^|\\s)"+cName+"(?![\\w\\-])");
			for (var i=0; i<elements.length; i++) {
				if (elements[i].className.search(regexp) != -1 && !this.isIncluded(elements[i])) this.elements[this.elements.length] = elements[i];
			} 
		}
	},

	isIncluded : function(value) {
		for (var i=0; i < this.elements.length; i++) {
			if (this.elements[i] == value) return true;
		}
		return false;
	},

	removeClassName : function(cName) {
		return this.replaceClassName(cName,'');
	},

	replaceClassName : function(cName,newName) {
		if (this.elements && cName != null && cName != "") {
			var regexp = new RegExp("(^|\\s)"+cName+"(?![\\w\\-])");
			if (newName == null) newName = '';
			for (var i=0; i < this.elements.length; i++) {
				if (this.elements[i].className != null) this.elements[i].className = this.elements[i].className.replace(regexp,newName);
			}
		}
		return this;
	},

	hasClassName : function(cName) {
		if (this.elements && cName != null && cName != "") {
			var regexp = new RegExp("(^|\\s)"+cName+"(?![\\w\\-])");
			for (var i=0; i < this.elements.length; i++) {
				if (this.elements[i].className == null || this.elements[i].className.search(regexp) == -1) return false;
			}
			return true;
		} else {
			return false;
		}
	},

	addClassName : function(cName) {
		if (this.elements && cName != null && cName != "") {
			var regexp = new RegExp("(^|\\s)"+cName+"(?![\\w\\-])");
			for (var i=0; i < this.elements.length; i++) {
				if (this.elements[i].className == null || this.elements[i].className == "") {
					this.elements[i].className = cName;
				} else if (this.elements[i].className.search(regexp) == -1) {
					this.elements[i].className += ' ' + cName;
				}
			}
		}
		return this;
	},

	changeClassName : function(cName,flag) {
		if ((flag == null || flag) && this.elements && cName != null && cName != "") {
			for (var i=0; i < this.elements.length; i++) {
				this.elements[i].className = cName;
			}
		}
		return this;
	},

	setSrc : function(src) {
		if (this.elements && src != null && src != "") {
			for (var i=0; i < this.elements.length; i++) {
				this.elements[i].src = src;
			}
		}
		return this;
	},

	setTitle : function(title) {
		if (this.elements && title != null) {
			for (var i=0; i < this.elements.length; i++) {
				this.elements[i].title = title;
			}
		}
		return this;
	},

	exec : function(func) {
		if (this.elements && func != null && typeof func == "function") {
			for (var i=0; i < this.elements.length; i++) {
				func(this.elements[i]);
			}
		}
		return this;
	},

	select : function(selected) {
		return this.exec(function (element) {
			cmonos.form.field(element).select(selected);
		});
	},

	setValue : function(value) {
		return this.exec(function (element) {
			cmonos.form.field(element).setValue(value);
		});
	},

	reset : function() {
		return this.exec(function (element) {
			cmonos.form.field(element).reset();
		});
	},

	fixTarget : function () {
		if (this.elements) {
			var f = 0;
			for (var i=0; i < this.elements.length; i++) {
				if (this.elements[i].tagName.toLowerCase() == 'a' || this.elements[i].tagName.toLowerCase() == 'form') {
					if (window.opener) {
						if (!window.opener.name) window.opener.name = 'main_' + (new Date()).getMilliseconds() + (f++);
						this.elements[i].target = window.opener.name;
					} else {
						this.elements[i].target = '_self';
					}
				}
			}
		}
	},

	addEventListener : function(type,func,capture) {
		if (this.elements) {
			for (var i=0; i < this.elements.length; i++) {
				this._addEventListener(this.elements[i],type,func,capture);
			}
		}
		return this;
	},

	_addEventListener : function(element,type,func,capture) {
		if (capture == null) capture = false;
		if (typeof element.addEventListener =='function') {
			type = this.fixEventHandler(type);
			element.addEventListener(type, func, capture);
		} else if (typeof element.attachEvent == 'object') {
			element.attachEvent("on" + type, func);
		}
		return func;
	},

	fixEventHandler : function (type) {
		return (type == 'mousewheel' && typeof document.onmousewheel == 'undefined') ? 'DOMMouseScroll' : 
			(!cmonos.document.supportTouch) ? type : 
			(type == 'mousedown') ? 'touchstart' : 
			(type == 'mousemove') ? 'touchmove' : 
			(type == 'mouseup') ? 'touchend' : type;
	},

	removeEventListener : function(type,func,capture) {
		if (this.elements) {
			for (var i=0; i < this.elements.length; i++) {
				this._removeEventListener(this.elements[i],type,func,capture);
			}
		}
		return this;
	},

	_removeEventListener : function(element,type,func,capture) {
		if (capture == null) capture = false;
		if (typeof element.removeEventListener == 'function') {
			type = this.fixEventHandler(type);
			element.removeEventListener(type,func,capture);
		} else if (typeof element.detachEvent == 'object') {
			element.detachEvent("on" + type, func);
		}
		return func;
	},

	stopPropagation : function(e) {
		e = e || event || window.event;
		if (e.stopPropagation) {
			e.stopPropagation();
		} else {
			e.cancelBubble = true;
		}
		return this;
	},

	preventDefault : function (e) {
		e = e || event || window.event;
		if (e.preventDefault) {
			e.preventDefault();
		} else {
			e.returnValue = false;
		}
		return this;
	},

	getStyle : function(element) {
		if (element.currentStyle) {
			return element.currentStyle;
		} else {
			var style = document.defaultView.getComputedStyle(element, null);
			var div = document.createElement('div');
			if (style.length) {
				for (var i=0; i<style.length; i++) {
					div.style.setProperty(style[i],style.getPropertyValue(style[i]),'');
				}
				for (var i=0; i<element.style.length; i++) {
					div.style.setProperty(element.style[i],element.style.getPropertyValue(element.style[i]),'');
				}
			} else {
				div.style.cssText = style.cssText + element.style.cssText;
			}
			return div.style;
		}
	},

	getProperty : function (e,k) {
		return (e.cmonos_property != null && e.cmonos_property[k] != null) ? e.cmonos_property[k] : null;
	},

	setProperty : function (e,k,v) {
		if (e.cmonos_property == null) e.cmonos_property = {};
		e.cmonos_property[k] = v; 
		return this;
	},

	setOpacity : function (opacity) {
		if (this.elements) {
			for (var i=0; i < this.elements.length; i++) {
				this._setOpacity(this.elements[i],opacity);
			}
		}
	},

	_setOpacity : function (element,opacity) {
		var clear_timer = false;
		if (opacity <= 0) {
			opacity = 0;
			element.style.display = 'none';
			clear_timer = true;
		} else {
			if (opacity >= 1) {
				opacity = 1;
				clear_timer = true;
			}
			if (element.style.display != null && element.style.display == 'none') {
				element.style.display = '';
			}
			if (element.style.visibility != null && element.style.visibility == 'hidden') {
				element.style.visibility = 'visible';
			}
		}
		this.setProperty(element,'opacity',opacity);
		element.style.MozOpacity = opacity;
		element.style.OOpacity = opacity;
		element.style.webkitOpacity = opacity;
		element.style.opacity = opacity;
		if (navigator.appVersion.search(/MSIE/) != -1 || window.opera) {
			if (!window.opera && (!document.documentMode || document.documentMode < 8) && !element.currentStyle.hasLayout) element.style.zoom = 1;
			if (element.nodeName.toLowerCase() == "tr") {
				for (var i=0; i<element.childNodes.length; i++) {
					if (element.childNodes[i].nodeName.toLowerCase() == "td" || element.childNodes[i].nodeName.toLowerCase() == "th") {
						if (window.opera) {
							element.childNodes[i].style.OOpacity = opacity;
							element.childNodes[i].style.opacity = opacity;
						} else {
							element.childNodes[i].style.filter = (opacity == 1) ? '' : 'alpha(opacity='+(opacity*100)+')';
						}
					}
				}
			} else if (!window.opera) {
				element.style.filter = (opacity == 1) ? '' : 'alpha(opacity='+(opacity*100)+')';
			}
		}
		if (clear_timer) this.clearFadeTimer(element);
	},

	clearFadeTimer : function (element) {
		var timer = this.getProperty(element,'fadeTimer');
		if (timer != null) {
			this.setProperty(element,'fadeTimer',null);
			this.setProperty(element,'fadeIn',null);
			clearInterval(timer);
		}
	},

	fadeIn : function () {
		if (this.elements) {
			for (var i=0; i < this.elements.length; i++) {
				if (this.getProperty(this.elements[i],'fadeTimer') != null) this.clearFadeTimer(this.elements[i]);
				this.setFadeIn(this.elements[i]);
			}
		}
	},

	setFadeIn : function (element) {
		var this_element = this;
		var timer = setInterval(function () {
			var opacity = this_element.getProperty(element,'opacity');
			if (opacity == null) opacity = 0;
			if (element.style.display != null && element.style.display == 'none') {
				element.style.display = '';
				this_element.setProperty(element,'opacity',0);
			}
			if (element.style.visibility != null && element.style.visibility == 'hidden') {
				element.style.visibility = 'visible';
				this_element.setProperty(element,'opacity',0);
			}
			opacity += 0.1;
			this_element._setOpacity(element,opacity);
		},50);
		this.setProperty(element,'fadeTimer',timer);
	},

	fadeOut : function () {
		if (this.elements) {
			for (var i=0; i < this.elements.length; i++) {
				if (this.getProperty(this.elements[i],'fadeTimer') != null) this.clearFadeTimer(this.elements[i]);
				this.setFadeOut(this.elements[i]);
			}
		}
	},

	setFadeOut : function (element) {
		if (element.style.display && element.style.display == 'none') element.style.display = '';
		this_element = this;
		var timer = setInterval(function () {
			var opacity = this_element.getProperty(element,'opacity');
			if (opacity == null) opacity = 1;
			opacity -= 0.05;
			this_element._setOpacity(element,opacity);
		},50);
		this.setProperty(element,'fadeTimer',timer);
	},

	sleep : function () {
		if (this.elements) {
			for (var i=0; i < this.elements.length; i++) {
				if (this.getProperty(this.elements[i],'fadeTimer') != null) this.clearFadeTimer(this.elements[i]);
				if (!this.elements[i].style.display || this.elements[i].style.display != 'none') this.setSleep(this.elements[i]);
			}
		}
	},

	wakeUp : function () {
		this.setOpacity(1);
	},

	setSleep : function (element) {
		if (element.style.display && element.style.display == 'none') element.style.display = '';
		this_element = this;
		var timer = setInterval(function () {
			var opacity = this_element.getProperty(element,'opacity');
			var fade_in = this_element.getProperty(element,'fadeIn');
			if (opacity == null) opacity = 1;
			if (opacity <= 0.1 && !fade_in) {
				this_element.setProperty(element,'fadeIn',true);
				fade_in = true;
			} else if (opacity >= 0.9 && fade_in) {
				this_element.setProperty(element,'fadeIn',false);
				fade_in = false;
			} 
			if (fade_in) {
				opacity += 0.05;
			} else {
				opacity -= 0.05;
			} 
			this_element._setOpacity(element,opacity);
		},100);
		this.setProperty(element,'fadeTimer',timer);
	},

	appear : function (flag) {
		if (this.elements) {
			for (var i=0; i < this.elements.length; i++) {
				if (flag == null || (typeof flag == 'boolean' && flag) || (typeof flag == 'string' && flag == 'toggle' && this.elements[i].style.display && this.elements[i].style.display == 'none')) {
					this._setOpacity(this.elements[i],1);
				} else {
					this._setOpacity(this.elements[i],0);
				}
			}
		}
	},

	disappear : function (flag) {
		this.appear(!flag);
	},

	toggle : function () {
		this.appear('toggle');
	},

	moveToFront : function () {
		if (this.elements) {
			var updated = false;
			for (var i=0; i < this.elements.length; i++) {
				if (this.elements[i].style.zIndex != null && this.elements[i].style.zIndex < this.z_index_top) updated = true;
				this.elements[i].style.zIndex = this.z_index_top + ((updated) ? 1 : 0);
			}
			if (updated) this.z_index_top++;
		}
	},

	draggable : function (options, no_move) {
		if (cmonos.document.event.draggable == null) cmonos.document.event.draggable = {};
		if (this.elements) {
			options = options || {};
			if (!no_move) this.moveToFront();
			var this_element = this;
			var maxTop = null;
			var minTop = null;
			var maxLeft = null;
			var minLeft = null;
			var inner_width = cmonos.window.getInnerWidth();
			var inner_height = cmonos.window.getInnerHeight();
			var grip = (options.grip) ? options.grip : 24;
			var drawer_enabled = false;
			for (var i=0; i < this.elements.length; i++) {
				var controller_element = (options.target) ? this.elements[i] : null;
				var element = (options.target) ? options.target : this.elements[i];
				if (element.style.position == null || (element.style.position != "absolute" && element.style.position != "fixed")) element.style.position = (options.fixed) ? 'fixed' : "absolute";
				if (!options.boundless) {
					if (options.canvas) {
						maxTop = parseInt(options.canvas.height - grip);
						maxLeft = parseInt(options.canvas.width - grip);
						if (element.offsetHeight < options.canvas.height || element.offsetWidth < options.canvas.width) drawer_enabled = true;
					} else if (element.style.position == 'fixed') {
						maxTop = parseInt(inner_height - grip - 18);
						maxLeft = parseInt(inner_width - grip - 18);
						if (element.offsetHeight < inner_height || element.offsetWidth < inner_width) drawer_enabled = true;
					}
					minTop = parseInt(grip - element.offsetHeight);
					minLeft = parseInt(grip - element.offsetWidth);
					var t = parseInt(element.style.top);
					var l = parseInt(element.style.left);
					if (maxTop != null && t > maxTop) {
						element.style.top = maxTop + 'px';
					} else if (minTop != null && t < minTop) {
						element.style.top = minTop + 'px';
					}
					if (maxLeft != null && l > maxLeft) {
						element.style.left = maxLeft + 'px';
					} else if (minLeft != null && l < minLeft) {
						element.style.left = minLeft + 'px';
					}
				}
				this._addEventListener(this.elements[i],'mousedown',function(e) {
					if (cmonos.document.event.draggable.disabled) return false;
					if (cmonos.document.event.draggable.onmousemove != null) this_element.clearDraggable();
					e = e || event;
					if (!no_move) cmonos.element.item(element).moveToFront();
					var x = this_element.getClientX(e) - ((element.style.left) ? parseInt(element.style.left) : element.offsetLeft);
					var y = this_element.getClientY(e) - ((element.style.top) ? parseInt(element.style.top) : element.offsetTop);
					if (!options.propagation) {
						cmonos.element.stopPropagation(e);
						cmonos.element.preventDefault(e);
					}
					cmonos.document.event.draggable.onmousemove = cmonos.document.addEventListener('mousemove',function(e) {
						if (document.compatMode) {
							element.style.cursor = "move";
							if (controller_element) controller_element.style.cursor = "move";
						}
						e = e || event;
						var minTop = parseInt(grip - element.offsetHeight);
						var minLeft = parseInt(grip - element.offsetWidth);
						var l = this_element.getClientX(e) - x;
						var t = this_element.getClientY(e) - y;
						element.style.top = ((maxTop != null && t > maxTop) ? maxTop : (minTop != null && t < minTop) ? minTop : t) + 'px';
						element.style.left = ((maxLeft != null && l > maxLeft) ? maxLeft : (minLeft != null && l < minLeft) ? minLeft : l) + 'px';
						if (!options.propagation) {
							cmonos.element.stopPropagation(e);
							cmonos.element.preventDefault(e);
						}
						return false;
					});
					cmonos.document.event.draggable.onmouseup = cmonos.document.addEventListener('mouseup',function() {
						if (document.compatMode) {
							element.style.cursor = "pointer";
							if (controller_element) controller_element.style.cursor = "pointer";
						}
						this_element.clearDraggable();
						if (typeof options.endeffect == 'function') options.endeffect(element);
						return false;
					});
					if (typeof options.starteffect == 'function') options.starteffect(element);
					return false;
				});
				if (drawer_enabled && document.compatMode) {
					cmonos.element._addEventListener(element,'mouseover',function(e) {
						if (cmonos.element.getProperty(element,'drawer') == null) {
							cmonos.element.setProperty(element,'drawer',true);
							var maxX = parseInt(((options.canvas) ? options.canvas.width : inner_width) - element.offsetWidth);
							var maxY = parseInt(((options.canvas) ? options.canvas.height : inner_height) - element.offsetHeight);
							var x = parseInt(element.style.left);
							var y = parseInt(element.style.top);
							var target_x = (x < 0) ? 0 : (x > maxX) ? maxX : x;
							var target_y = (y < 0) ? 0 : (y > maxY) ? maxY : y;
							if (target_x != x || target_y != y) {
								cmonos.element.item(element).pull(target_x,target_y);
								cmonos.element._addEventListener(element,'mouseout',function(e) {
									if (cmonos.document.event.draggable.drawerDisabled) return;
									e = e || event;
									var r = e.toElement || e.relatedTarget;
									while (r) {
										if (r == element) return;
										r = r.parentNode;
									}
									cmonos.element.setProperty(element,'drawer',null);
									if (parseInt(element.style.left) == target_x || parseInt(element.style.top) == target_y) {
										var minTop = parseInt(grip - element.offsetHeight);
										var minLeft = parseInt(grip - element.offsetWidth);
										cmonos.element.item(element).pull(((x < minLeft) ? minLeft : x),((y < minTop) ? minTop : y));
									}
									cmonos.element.item(element).removeEventListener('mouseout',arguments.callee);
								});
							}
							cmonos.element._addEventListener(element,'mouseup',function(e) {
								if (parseInt(element.style.left) != x || parseInt(element.style.top) != y) {
									cmonos.element.setProperty(element,'drawer',null);
									cmonos.element.item(element).removeEventListener('mouseup',arguments.callee);
								}
							});
						}
					});
				}
			}
		}
	},

	clearDraggable : function () {
		if (cmonos.document.event.draggable == null) return this;
		if (typeof cmonos.document.event.draggable.onmousemove == 'function') cmonos.document.removeEventListener('mousemove',cmonos.document.event.draggable.onmousemove);
		if (typeof cmonos.document.event.draggable.onmouseup == 'function') cmonos.document.removeEventListener('mouseup',cmonos.document.event.draggable.onmouseup);
		cmonos.document.event.draggable = {};
		return this;
	},

	dragDisabled : function () {
		if (cmonos.document.event.draggable == null) cmonos.document.event.draggable = {};
		cmonos.document.event.draggable.disabled = true;
		return this;
	},

	dragEnabled : function () {
		if (cmonos.document.event.draggable == null) return this;
		cmonos.document.event.draggable.disabled = null;
		return this;
	},

	drawerDisabled : function () {
		if (this.elements) {
			for (var i=0; i < this.elements.length; i++) {
				cmonos.element.clearDrawer(this.elements[i]);
			}
		}
		if (cmonos.document.event.draggable == null) cmonos.document.event.draggable = {};
		cmonos.document.event.draggable.drawerDisabled = true;
		return this;
	},

	drawerEnabled : function () {
		if (cmonos.document.event.draggable == null) return this;
		cmonos.document.event.draggable.drawerDisabled = null;
		return this;
	},

	pull : function (target_x,target_y,endeffect) {
		if (this.elements) {
			for (var i=0; i < this.elements.length; i++) {
				var element = this.elements[i];
				cmonos.element.clearDrawer(element);
				var timer = setInterval(function () {
					var x = parseInt(element.style.left);
					var y = parseInt(element.style.top);
					var x_gap = target_x - x;
					var y_gap = target_y - y;
					if (Math.abs(x_gap) < 10 && Math.abs(y_gap) < 10) {
						element.style.left = target_x + 'px';
						element.style.top = target_y + 'px';
						cmonos.element.clearDrawer(element);
						if (typeof endeffect == 'function') endeffect(element);
					} else {
						element.style.left = x + Math.ceil(x_gap / 2) + 'px';
						element.style.top = y + Math.ceil(y_gap / 2) + 'px';
					}
				},50);
				this.setProperty(element,'pullTimer',timer);
			}
		}
		return this;
	},

	clearDrawer : function (element) {
		var this_timer = cmonos.element.getProperty(element,'pullTimer');
		if (this_timer != null) {
			cmonos.element.setProperty(element,'pullTimer',null);
			clearInterval(this_timer);
		}
	},

	getClientX : function (e) {
		e = e || event;
		if (cmonos.document.supportTouch && e.touches) e = e.touches[0];
		if (e.clientX != null) {
			return e.clientX;
		} else {
			return e.width;
		}
	},

	getClientY : function (e) {
		e = e || event;
		if (cmonos.document.supportTouch && e.touches) e = e.touches[0];
		if (e.clientY != null) {
			return e.clientY;
		} else {
			return e.height;
		}
	},

	getPageX : function (e) {
		e = e || event;
		if (cmonos.document.supportTouch && e.touches) e = e.touches[0];
		if (e.pageX != null) {
			return e.pageX;
		} else {
			return e.clientX + cmonos.window.getPageXOffset();
		}
	},

	getPageY : function (e) {
		e = e || event;
		if (cmonos.document.supportTouch && e.touches) e = e.touches[0];
		if (e.pageY != null) {
			return e.pageY;
		} else {
			return e.clientY + cmonos.window.getPageYOffset();
		}
	},

	getOffsetX : function (e) {
		e = e || event;
		if (cmonos.document.supportTouch && e.touches) e = e.touches[0];
		if (e.offsetX != null) {
			return e.offsetX;
		} else {
			return e.layerX;
		}
	},

	getOffsetY : function (e) {
		e = e || event;
		if (cmonos.document.supportTouch && e.touches) e = e.touches[0];
		if (e.offsetY != null) {
			return e.offsetY;
		} else {
			return e.layerY;
		}
	},

	offsetLeft : function (element) {
		var l = 0;
		do {
			l += element.offsetLeft || 0;
			element = element.offsetParent;
		} while (element);
		return l;
	},

	offsetTop : function (element) {
		var t = 0;
		do {
			t += element.offsetTop || 0;
			element = element.offsetParent;
		} while (element);
		return t;
	}
};
cmonos.persistent.element = function () {};
cmonos.persistent.element.prototype = cmonos.element;

cmonos.control = {
	slider : function (handle,track,options) {
		options = options || {};
		if (track.style.position == null || track.style.position != "absolute") track.style.position = "relative";
		handle.style.position = "absolute";
		if (track.style.top == null) handle.style.top = 0;
		var track_width = track.clientWidth - handle.offsetWidth;
		var default_x = (options.sliderValue) ? parseInt(options.sliderValue * track_width) : 0;
		handle.style.left = default_x + 'px';
		var slider_enabled = function(e) {
			if (cmonos.document.event.draggable != null && cmonos.document.event.draggable.onmousemove != null) cmonos.element.clearDraggable();
			if (cmonos.document.event.draggable == null) cmonos.document.event.draggable = {};
			e = e || event;
			var x = cmonos.element.getClientX(e) - ((handle.style.left) ? parseInt(handle.style.left) : handle.offsetLeft);
			cmonos.element.stopPropagation(e);
			cmonos.element.preventDefault(e);
			cmonos.document.event.draggable.onmousemove = cmonos.document.addEventListener('mousemove',function(e) {
				if (document.compatMode) handle.style.cursor = "move";
				e = e || event;
				var v = cmonos.element.getClientX(e) - x;
				if (v >= 0 && v <= track_width) {
					handle.style.left = v + 'px';
					if (typeof options.onSlide == 'function') options.onSlide(v/track_width);
				}
				cmonos.element.stopPropagation(e);
				cmonos.element.preventDefault(e);
				return false;
			});
			cmonos.document.event.draggable.onmouseup = cmonos.document.addEventListener('mouseup',function() {
				if (document.compatMode) handle.style.cursor = "pointer";
				cmonos.element.clearDraggable();
				var v = parseInt(handle.style.left);
				if (typeof options.onChange == 'function' && v != default_x) options.onChange(v/track_width);
				return false;
			});
			return false;
		};
		cmonos.element._addEventListener(handle,'mousedown',slider_enabled);
		cmonos.element._addEventListener(track,'mousedown',function(e) {
			e = e || event;
			var v = cmonos.element.getPageX(e) - cmonos.element.offsetLeft(track) - parseInt(handle.offsetWidth/2);
			if (v < 0) {
				v = 0;
			} else if (v > track_width) {
				v = track_width;
			}
			handle.style.left = v + 'px';
			if (typeof options.onChange == 'function') options.onChange(v/track_width);
			slider_enabled(e);
			return false;
		});
	}
};

cmonos.value = {
	isIncluded : function(array,value) {
		if (array && array.constructor == Array) {
			for (var i=0; i < array.length; i++) {
				if (array[i] == value) return true;
			}
		}
		return false;
	},

	deleteFromArray : function (this_array,this_value) {
		var array = new Array();
		if (this_array) {
			for (var value in this_array) {
				if ((typeof this_array[value] == "string" || this_array[value] == "number") && this_array[value] != this_value) array.push(this_array[value]);
			}
		}
		return array;
	},

	escapeHTML : function (str) {
		var div = document.createElement('div');
		var text = document.createTextNode(str);
		div.appendChild(text);
		return div.innerHTML;
	},

	unescapeHTML : function (str) {
		return (str == null) ? '' : str.replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&quot;/g,'"').replace(/&amp;/g,'&');
	},

	urlDecode : function (query) {
		var hash = new Array();
		if (query == null || query == "" || query.search("=") == -1) return hash;
		query = query.replace(/^\?/,'').split('&');
		for (var i=0; i<query.length; i++) {
			var p = query[i].split('=');
			if (window.decodeURIComponent) {
				p[0] = decodeURIComponent(p[0].replace(/\+/g,' '));
				p[1] = decodeURIComponent(p[1].replace(/\+/g,' '));
			} else {
				p[0] = unescape(p[0].replace(/\+/g,' '));
				p[1] = unescape(p[1].replace(/\+/g,' '));
			}
			if (hash[p[0]] == null) {
				hash[p[0]] = p[1];
			} else {
				if (hash[p[0]].constructor == Array) {
					hash[p[0]].push(p[1]);
				} else {
					hash[p[0]] = new Array(hash[p[0]],p[1]);
				}
			}
		}
		return hash;
	},

	urlEncode : function (hash,required_keys) {
		var query = '';
		for (var key in hash) {
			if (hash[key] != null && (required_keys == null || cmonos.value.isIncluded(required_keys,key))) {
				var encoded_key = ((window.encodeURIComponent) ? encodeURIComponent(key) : escape(key)).replace(/ /g,'+')
				if (hash[key].constructor == Array) {
					for (var i=0; i<hash[key].length; i++) {
						if ((typeof hash[key][i] == "string" || typeof hash[key][i] == "number") && hash[key][i] != null) query += ((query != "") ? "&" : "") + encoded_key + "=" + ((window.encodeURIComponent) ? encodeURIComponent(hash[key][i]) : escape(hash[key][i])).replace(/ /g,'+');
					}
				} else if (typeof hash[key] == "string" || typeof hash[key] == "number") {
					query += ((query != "") ? "&" : "") + encoded_key + "=" + ((window.encodeURIComponent) ? encodeURIComponent(hash[key]) : escape(hash[key])).replace(/ /g,'+');
				}
			}		
		}
		return query;
	},

	toHex : function (this_num) {
		this_num = eval(this_num);
		return ((this_num < 16) ? '0' : '') + this_num.toString(16)
	},

	comma : function (this_number) {
		this_number += "";
		var digit_number = '';
		var number_length = this_number.length;
		for (var i=3; i<number_length+3; i+=3) {
			if (digit_number != '') digit_number = ',' + digit_number;
			var start_point = -1 * i;
			var end_point = 3;
			if (i > number_length) {
				start_point = -1 * number_length;
				end_point = number_length + 3 - i;
			}
			digit_number = this_number.substr(start_point,end_point) + digit_number;
		}
		var check_number = digit_number.replace(/,/g,"");
		if (this_number == check_number) {
			return digit_number;
		} else {
			return this_number;
		}
	}
};

cmonos.form = {
	item : function(element) {
		if (typeof element == 'object') {
			this.currentForm = element;
		} else if (typeof element == "string") {
			this.currentForm = document.getElementById(element);
		} else {
			this.currentForm = null;
		}
		return this;
	},

	name : function (this_name) {
		for (var i=0; i<document.forms.length; i++) {
			if (document.forms[i].name == this_name) {
				this.currentForm = document.forms[i];
				return this;
			}
		}
		return this;
	},

	field : function(element) {
		if (typeof element == 'object') {
			this.currentField = element;
		} else if (typeof element == "string") {
			this.currentField = document.getElementById(element);
		} else {
			this.currentField = null;
		}
		return this;
	},

	fieldname : function(name,num) {
		if (typeof name == 'object') {
			this.currentField = name;
		} else if (typeof name == "string") {
			if (this.currentForm) {
				var n = 0;
				for (var i=0; i < this.currentForm.elements.length; i++) {
					if (this.currentForm.elements[i].name == name) {
						if (!num || num == n) {
							this.currentField = this.currentForm.elements[i];
							return this;
						}
						n++;
					}
				}
			} else {
				this.currentField = document.getElementById(name);
			}
		}
		return this;
	},

	getFieldsByName : function(name) {
		if (typeof name == 'object') {
			return new Array(name);
		} else if (typeof name == "string") {
			if (this.currentForm) {
				var list = new Array();
				for (var i=0; i < this.currentForm.elements.length; i++) {
					if (this.currentForm.elements[i].name == name) {
						list[list.length] = this.currentForm.elements[i];
					}
				}
				return list;
			} else {
				return new Array(document.getElementById(name));
			}
		}
		return this;
	},

	getFieldProperty : function (k) {
		return (this.currentField) ? cmonos.element.getProperty(this.currentField,k) : null;
	},

	setFieldProperty : function (k,v) {
		if (this.currentField) cmonos.element.setProperty(this.currentField,k,v);
		return this;
	},

	getFormProperty : function (k) {
		return (this.currentForm) ? cmonos.element.getProperty(this.currentForm,k) : null;
	},

	setFormProperty : function (k,v) {
		if (this.currentForm) cmonos.element.setProperty(this.currentForm,k,v);
		return this;
	},

	getCurrentForm : function () { return this.currentForm || null; },
	getCurrentField : function () { return this.currentField || null; },

	setSyncWith : function (targets) {
		if (!this.currentForm || !targets || targets.length == 0) return false;
		var this_form = (new cmonos.persistent.form).item(this.currentForm);
		cmonos.element._addEventListener(this.currentForm,'submit',function () { this_form.syncWith(targets); });
	},

	syncWith : function (targets) {
		if (!this.currentForm || !targets || targets.length == 0) return false;
		var hash = new Array();
		for (var i=0; i < this.currentForm.elements.length; i++) {
			if (typeof this.currentForm.elements[i].name != "undefined" && this.currentForm.elements[i].name != "" && (typeof this.currentForm.elements[i].value == "string" || typeof this.currentForm.elements[i].value == "number")) {
				var name = this.currentForm.elements[i].name;
				var value = null;
				if (this.currentForm.elements[i].type == null || typeof this.currentForm.elements[i].type == "undefined" || this.currentForm.elements[i].type == 'text' || this.currentForm.elements[i].type == 'textarea' || this.currentForm.elements[i].type == 'search') {
					hash[name] = this.setHashValue(hash[name],this.currentForm.elements[i].value);
				} else if (this.currentForm.elements[i].type == 'checkbox' || this.currentForm.elements[i].type == 'radio') {
					if (this.currentForm.elements[i].checked) hash[name] = this.setHashValue(hash[name],this.currentForm.elements[i].value);
				} else if (this.currentForm.elements[i].type.search(/select/) != -1) {
					for (var o=0; o < this.currentForm.elements[i].options.length; o++) {
						if (this.currentForm.elements[i].options[o].selected) hash[name] = this.setHashValue(hash[name],this.currentForm.elements[i].options[o].value);
					}
				}
			}
		}
		for (var i=0; i < targets.length; i++) {
			(new cmonos.persistent.form).item(targets[i]).syncWithHash(hash);
		}
		return true;
	},

	syncWithHash : function (hash) {
		if (!this.currentForm || !hash) return false;
		for (var key in hash) {
			var this_fields = this.getFieldsByName(key);
			var i = 0;
			var list;
			if (hash[key].constructor == Array) {
				list = hash[key];
			} else {
				list = new Array(hash[key]);
			}
			for (i=0; i<list.length; i++) {
				if (this_fields[i] == null) {
					this_fields[i] = document.createElement('input');
					this_fields[i].setAttribute('type','hidden');
					this_fields[i].setAttribute('name',key);
					this_fields[i].value = list[i];
					this.currentForm.appendChild(this_fields[i]);
				} else if (this_fields[i].type && (this_fields[i].type == 'hidden' || this_fields[i].type == 'text' || this_fields[i].type == 'search' || !this_fields[i].type)) {
					this_fields[i].value = list[i];
				}
			}
			if (i < this_fields.length) {
				for (var n=i; n<this_fields.length; n++) {
					this_fields[n].value = '';
				}
			}
		}
		return true;
	},

	toHash : function () {
		if (!this.currentForm) return {};
		var hash = new Array();
		for (var i=0; i < this.currentForm.elements.length; i++) {
			if (typeof this.currentForm.elements[i].name != "undefined" && this.currentForm.elements[i].name != "" && (typeof this.currentForm.elements[i].value == "string" || typeof this.currentForm.elements[i].value == "number")) {
				var name = this.currentForm.elements[i].name;
				if (this.currentForm.elements[i].type == null || typeof this.currentForm.elements[i].type == "undefined") {
					hash[name] = this.setHashValue(hash[name],this.currentForm.elements[i].value);
				} else if (this.currentForm.elements[i].type == 'text' || this.currentForm.elements[i].type == 'password' || this.currentForm.elements[i].type == 'textarea' || this.currentForm.elements[i].type == 'hidden' || this.currentForm.elements[i].type == 'submit' || this.currentForm.elements[i].type == 'image' || this.currentForm.elements[i].type == 'search') {
					if (this.currentForm.elements[i].type == 'hidden' && this.currentForm.elements[i].getAttribute('alt') && typeof this.currentForm.elements[i].getAttribute('alt') == 'string') {
						hash[name] = this.setHashValue(hash[name],this.currentForm.elements[i].getAttribute('alt'));
					} else {
						hash[name] = this.setHashValue(hash[name],this.currentForm.elements[i].value);
					}
				} else if (this.currentForm.elements[i].type == 'checkbox' || this.currentForm.elements[i].type == 'radio') {
					if (this.currentForm.elements[i].checked) hash[name] = this.setHashValue(hash[name],this.currentForm.elements[i].value);
				} else if (this.currentForm.elements[i].type.search(/select/) != -1) {
					for (var o=0; o < this.currentForm.elements[i].options.length; o++) {
						if (this.currentForm.elements[i].options[o].selected) hash[name] = this.setHashValue(hash[name],this.currentForm.elements[i].options[o].value);
					}
				}
			}
		}
		return hash;
	},

	setHashValue : function (p,v) {
		if (p != null) {
			if (p.constructor == Array) {
				p.push(v);
			} else {
				p = new Array(p,v);
			}
		} else {
			p = v;
		}
		return p;
	},

	//	Cookie可能
	cookieEnabled : function () {
		for (var i=0; i < this.currentForm.elements.length; i++) {
			if (this.currentForm.elements[i].name == "set_cookie") return this.currentForm.elements[i].checked;
		}
		return false;
	},

	//	デフォルトの入力
	setDefaultValue : function (cookie_name,editor_link_id) {
		if (cookie_name == null || this.currentForm == null) return false;
		var hash = cmonos.value.urlDecode(cmonos.document.getCookie(cookie_name));
		var cookie_enabled = false;
		for (var i=0; i < this.currentForm.elements.length; i++) {
			var name = this.currentForm.elements[i].name;
			if (hash[name] != null) {
				cookie_enabled = true;
				if (this.currentForm.elements[i].type == 'text' || this.currentForm.elements[i].type == 'password' || this.currentForm.elements[i].type == 'textarea' || this.currentForm.elements[i].type == 'hidden' || this.currentForm.elements[i].type == 'submit' || this.currentForm.elements[i].type == 'image') {
					if (this.currentForm.elements[i].value == null || this.currentForm.elements[i].value == "") this.currentForm.elements[i].value = hash[name];
				} else if (this.currentForm.elements[i].type == 'checkbox' || this.currentForm.elements[i].type == 'radio') {
					if (hash[name].constructor == Array) {
						if (cmonos.value.isIncluded(hash[name],this.currentForm.elements[i].value)) this.currentForm.elements[i].checked = true;
					} else if (this.currentForm.elements[i].value == hash[name]) {
						this.currentForm.elements[i].checked = true;
					}
				} else if (this.currentForm.elements[i].type.match(/select/)) {
					for (var o=0; o < this.currentForm.elements[i].options.length; o++) {
						if (hash[name].constructor == Array) {
							if (cmonos.value.isIncluded(hash[name],this.currentForm.elements[i].options[o].value)) this.currentForm.elements[i].options[o].selected = true;
						} else if (this.currentForm.elements[i].options[o].value == hash[name]) {
							this.currentForm.elements[i].options[o].selected = true;
							if (this.currentForm.elements[i].options[o].value != "") {
								var onchange_function = this.currentForm.elements[i].getAttribute("onchange");
								if (onchange_function != null) {
									onchange_function += "";
									if (onchange_function.match(/cmonos\.element\.item\('([\w\-]+)'\)\.setSrc\(/)) cmonos.element.item(RegExp.$1).setSrc(this.currentForm.elements[i].options[o].value);
								}
							}
						}
					}
				}
			}
			if (cookie_enabled && this.currentForm.elements[i].name == 'set_cookie' && this.currentForm.elements[i].type == 'checkbox') this.currentForm.elements[i].checked = true;
		}
		this.showEditButton(editor_link_id);
		return true;
	},

	showEditButton : function (editor_link_id) {
		if (editor_link_id != null && document.getElementById(editor_link_id)) {
			var authorized_level = cmonos.document.getCookie("AUTHORIZED-LEVEL");
			if (authorized_level > 0) document.getElementById(editor_link_id).style.display = "inline";
		}
	},
	
	//テキストエリアの高さを内容に合わせる
	//このスクリプトは http://p2b.jp/200903-autofit-textarea をベースにしています。
	setAutoFit : function(flag){
		if (!this.currentField) return true;
		var defaultHeight = this.getFieldProperty('defaultHeight');
		if (!defaultHeight) {
			defaultHeight = this.currentField.offsetHeight;
			this.setFieldProperty('defaultHeight',defaultHeight);
		}
		this.currentField.style.height = ((defaultHeight) ? defaultHeight : this.currentField.rows * 16) + 'px';
		if (flag) {
			var this_area = this.currentField;
			var autoFit =  function () {
				if (this_area.scrollHeight > this_area.offsetHeight){
					this_area.style.height = this_area.scrollHeight + 30 + 'px';
				} else {
					while (this_area.scrollHeight - 50 < parseInt(this_area.style.height)) {
						var h = parseInt(this_area.style.height) - 50;
						if (h < 20) {
							this_area.style.height = '20px';
							break;
						} else {
							this_area.style.height = h + 'px';
						}
					}
					if (this_area.scrollHeight > this_area.offsetHeight) this_area.style.height = this_area.scrollHeight + 30 + 'px';
				}
				this_area.focus();
			}
			autoFit();
			cmonos.element.item(this.currentField).addEventListener('keyup',autoFit);
			this.setFieldProperty('autoFit',autoFit);
		} else {
			var autoFit = this.getFieldProperty('autoFit');
			if (typeof autoFit == 'function') cmonos.element.item(this.currentField).removeEventListener('keyup',autoFit);
			this.setFieldProperty('autoFit',null);
		}
		this.currentField.focus();
	},

	quotationByMenu : function(this_selector) {
		if (!this.currentField) return;
		var q = this_selector.options[this_selector.selectedIndex].value.replace(/\\r\\n/g,"\r\n").replace(/\\n/g,"\n");
		this_selector.options[0].selected = true;
		if (q == "[[REPLACE]]") {
			q = prompt('検索文字列と置換文字列を入力してください。\n[検索文字列]=[置換文字列][複数指定するときはカンマ(,)で区切る]','');
			if (q != "") {
				if (q.search(/=/) == -1) {
					alert('置換条件に問題があります。\n[' + q + ']');
					return;
				} else if (confirm('次の条件で選択範囲を置換します。\n[' + q + ']')) {
					q = '[[' + q + ']]';
				}
			} else {
				return;
			}
		}
		if (q == "") return;
		var replace_table = (q.match(/^\[\[(.*)\]\]$/) != null) ? replace_table = RegExp.$1.split(/,/) : new Array();
		if (document.selection != null) {
			this.currentField.focus();
			var selected_text = document.selection.createRange().text;
			if (selected_text) {
				if (replace_table.length > 0) {
					document.selection.createRange().text = this.textReplace(selected_text,replace_table);
				} else if (q.search(/<!--/) != -1) {
					if (q.search(/--><!--\//) != -1) {
						document.selection.createRange().text = q.replace(/--><!--\//,'-->' + selected_text + '<!--/');
					} else {
						document.selection.createRange().text = selected_text + q;
					}
				} else if (q.search(/ href=""/) != -1 && selected_text.search(/^http:\/\//) != -1) {
					document.selection.createRange().text = q.replace(/ href=""/,' href="' + selected_text + '"');
				} else if (q.search(/></) != -1) {
					document.selection.createRange().text = q.replace(/></,'>' + selected_text + '<');
				} else if (q.search(/\n\n/) != -1) {
					document.selection.createRange().text = q.replace(/\n\n/,"\n"+selected_text+"\n");
				} else {
					document.selection.createRange().text = selected_text + q;
				}
			} else if (replace_table.length > 0) {
				if (confirm('全文を置換します。')) this.currentField.value = this.textReplace(this.currentField.value,replace_table);
			} else {
				document.selection.createRange().text = q;
			}
		} else if (this.currentField.selectionStart != null) {
			var scroll_top = this.currentField.scrollTop;
			var selection_start = this.currentField.selectionStart;
			var selection_end = this.currentField.selectionEnd;
			var selected_text = this.currentField.value.substring(selection_start,selection_end);
			if (selected_text) {
				if (replace_table.length > 0) {
					q = this.textReplace(selected_text,replace_table);
				} else if (q.search(/<!--/) != -1) {
					if (q.search(/--><!--\//) != -1) {
						q = q.replace(/--><!--\//,'-->' + selected_text + '<!--/');
					} else {
						q = selected_text + q;
					}
				} else if (q.search(/ href=""/) != -1 && selected_text.search(/^http:\/\//) != -1) {
					q = q.replace(/ href=""/,' href="' + selected_text + '"');
				} else if (q.search(/></) != -1) {
					q = q.replace(/></,'>' + selected_text + '<');
				} else if (q.search(/\n\n/) != -1) {
					q = q.replace(/\n\n/,"\n"+selected_text+"\n");
				} else {
					q = selected_text + q;
				}
			} else if (replace_table.length > 0) {
				if (confirm('全文を置換します。')) this.currentField.value = this.textReplace(this.currentField.value,replace_table);
				return;
			}
			this.currentField.value = this.currentField.value.substring(0,selection_start) + q + this.currentField.value.substring(selection_end,this.currentField.value.length);
			this.currentField.selectionStart = selection_start + q.length;
			this.currentField.selectionEnd = this.currentField.selectionStart;
			this.currentField.scrollTop = scroll_top;
		} else if (replace_table.length > 0) {
			if (confirm('全文を置換します。')) this.currentField.value = this.textReplace(this.currentField.value,replace_table);
		} else {
			this.currentField.value += q;
		}
		return;
	},

	textReplace : function (text,replace_table) {
		for (var i=0; i<replace_table.length; i++) {
			if (replace_table[i].search(/=/) != -1) {
				var t = replace_table[i].split('=');
				text = text.split(t[0]).join(t[1]);
			}
		}
		return text;
	},
	
	//メニューで選んだテキストと入れ替える
	//<select onchange="cmonos.form.item(this.currentForm).fieldname('targetname').textByMenu(this)">
	textByMenu : function(this_selector) {
		if (this.currentField) this.currentField.value = this_selector.options[this_selector.selectedIndex].value;
	},

	//引用
	quotation : function(quot_text) {
		if (this.currentField) {
			this.currentField.value += quot_text;
			this.currentField.focus();
		}
		return true;
	},

	//選択肢補助
	proposalTextMenu : function(text) {
		if (this.currentField && text.constructor == Array) {
			var menu = this.createProposalTextMenu();
			for (var i=0; i<text.length; i++) {
				this.createProposalTextMenuOption(menu,text[i]);
			}
		}
	},
	proposalNumberMenu : function(max) {
		if (this.currentField && !isNaN(max) && max > 0) {
			var menu = this.createProposalTextMenu();
			for (var i=1; i<=max; i++) {
				this.createProposalTextMenuOption(menu,i);
			}
		}
	},
	createProposalTextMenu : function(text) {
		if (this.currentField) {
			var menu = this.getFieldProperty('proposalTexMenu');
			if (menu != null) return menu;
			menu = document.createElement('ul');
			document.getElementsByTagName('body')[0].appendChild(menu);
			menu.className = "proposal-text-menu";
			menu.style.width = this.currentField.offsetWidth + "px";
			menu.style.top = (cmonos.element.offsetTop(this.currentField) + this.currentField.offsetHeight) + "px";
			menu.style.left = cmonos.element.offsetLeft(this.currentField) + "px";
			this.setFieldProperty('proposalTextMenu',menu);
			return menu;
		}
	},
	createProposalTextMenuOption : function(menu,text) {
		var option = document.createElement('li');
		menu.appendChild(option);
		option.appendChild(document.createTextNode(text));
		var this_field = this.currentField;
		cmonos.element.item(option).addEventListener('click',function() {
			cmonos.form.field(this_field).setValue(option.innerHTML);
		});
	},
	clearProposalTextMenu : function() {
		if (this.currentField) {
			var menu = this.getFieldProperty('proposalTextMenu');
			if (menu != null) {
				this.setFieldProperty('proposalTextMenu',null);
				setTimeout(function() { document.getElementsByTagName('body')[0].removeChild(menu); },200);
			}
		}
	},

	//チェックボックスの確認
	checkboxConfirm : function(notice_msg,flag) {
		if (this.currentField && this.currentField.tagName.toLowerCase() == 'input' && (this.currentField.type.toLowerCase() == 'checkbox' || this.currentField.type.toLowerCase() == 'radio')) {
			if (flag == null) flag = true;
			if (((flag && this.currentField.checked) || (!flag && !this.currentField.checked)) && !confirm(notice_msg)) this.currentField.checked = !flag;
		}
		return true;
	},

	//チェックボックス連動（複数）
	checkboxSync : function(this_checked,flag) {
		if (this.currentField && this.currentField.tagName.toLowerCase() == 'input' && (this.currentField.type.toLowerCase() == 'checkbox' || this.currentField.type.toLowerCase() == 'radio')) {
			if (flag == null) flag = true;
			if ((this_checked && flag) || (!this_checked && !flag)) {
				for (var i=2; i<arguments.length; i+=2) {
					cmonos.element.form(this.currentForm).fieldname(arguments[i]).shift().checked = arguments[i+1];
				}
			}
		}
	},
	checkboxSyncById : function() {
		for (var i=0; i<arguments.length; i+=2) {
			document.getElementById(arguments[i]).checked = arguments[i+1];
		}
	},

	//メニュー連動
	menuSync : function(this_value,target_value) {
		for (var i=2; i<arguments.length; i+=2) {
			var this_selector = cmonos.element.form(this.currentForm).fieldname(arguments[i]).shift();
			if (this_selector.tagName.toLowerCase() == 'select') {
				var true_value = arguments[i+1];
				var false_value = arguments[i+2];
				if (this_value == target_value) {
					if (true_value != null) this.field(this_selector).getOptionByValue(true_value).selected = true;
				} else if (false_value != null) {
					this.field(this_selector).getOptionByValue(false_value).selected = true;
				}
			}
		}
	},

	//選択肢
	getOptionByValue : function(target_value) {
		if (this.currentField && this.currentField.tagName.toLowerCase() == 'select') {
			for (var i=0; i <this.currentField.options.length; i++) {
				if (this.currentField.options[i].value == target_value) return this.currentField.options[i];
			}
		}
	},

	//チェックまたは選択
	select : function(selected) {
		if (selected == null) selected = true;
		if (this.currentField.tagName.toLowerCase() == 'input' && (this.currentField.type.toLowerCase() == 'checkbox' || this.currentField.type.toLowerCase() == 'radio')) {
			this.currentField.checked = (selected) ? true : false;
		} else if (this.currentField.tagName.toLowerCase() == 'option') {
			this.currentField.selected = (selected) ? true : false;
		}
		return this;
	},

	//値
	getValue : function () {
		if (this.currentField == null) {
			return "";
		} else if (this.currentField.tagName.toLowerCase() == 'select') {
			return this.currentField.options[this.currentField.options.selectedIndex].value;
		} else if (this.currentField.tagName.toLowerCase() == 'input' && (this.currentField.type.toLowerCase() == 'checkbox' || this.currentField.type.toLowerCase() == 'radio')) {
			return (this.currentField.checked) ? this.currentField.value : "";
		} else if (this.currentField.value != null) {
			return this.currentField.value;
		}
		return "";
	},

	//一致するものだけ選択
	setValue : function(value) {
		if (this.currentField == null) return this;
		if (value == null) value = "";
		value += '';
		if (this.currentField.tagName.toLowerCase() == 'select') {
			for (var i=0; i < this.currentField.options.length; i++) {
				if (
					(value == "" && (this.currentField.options[i].value == null || this.currentField.options[i].value == "")) || 
					(value != "" && this.currentField.options[i].value != null && this.currentField.options[i].value != "" && this.currentField.options[i].value == value)
				) {
					this.currentField.options[i].selected = true;
				} else {
					this.currentField.options[i].selected = false;
				}
			}
		} else if (this.currentField.tagName.toLowerCase() == 'input' && (this.currentField.type.toLowerCase() == 'checkbox' || this.currentField.type.toLowerCase() == 'radio')) {
			this.currentField.checked = (this.currentField.value == value) ? true : false;
		} else {
			this.currentField.value = value;
		}
		return this;
	},

	//強調解除
	bailOut : function () {
		if (this.currentField) cmonos.validate.field(this.currentField).bailOut();
		return this;
	},

	//ダウンロードパスを操作する
	appendDownloadPathByValue : function (nametable) {
		var v = this.getValue();
		this.appendDownloadPath((nametable != null && nametable[v] != null) ? nametable[v] : '');
	},

	//ダウンロードパスを追加する
	appendDownloadPath : function (filename) {
		this.currentForm.action = this.currentForm.action.replace(/\/\.dl\/.*$/,'');
		if (filename) this.currentForm.action += '/.dl/' + filename;
	},

	//日付入力支援
	setDateFromDay : function (day,year_selector,mon_selector,mday_selector,hour_selector,min_selector,sec_selector) {
		var y = '';
		var m = '';
		var md = '';
		var h = '';
		var min = '';
		var sec = '';
		if (day != null && day != "") {
			day = eval(day);
			var this_date;
			if (isNaN(day)) day = 0;
			var this_date = new Date();
			this_date.setTime(86400000*day  + (new Date()).getTime());
			y = this_date.getFullYear();
			m = this_date.getMonth() + 1;
			md = this_date.getDate();
			h = this_date.getHours();
			min = this_date.getMinutes();
			sec = this_date.getSeconds();
		}
		if (year_selector != null && year_selector != "") this.fieldname(year_selector).setValue(y);
		if (mon_selector != null && mon_selector != "") this.fieldname(mon_selector).setValue(m);
		if (mday_selector != null && mday_selector != "") this.fieldname(mday_selector).setValue(md);
		if (hour_selector != null && hour_selector != "") this.fieldname(hour_selector).setValue(h);
		if (min_selector != null && min_selector != "") this.fieldname(min_selector).setValue(min);
		if (sec_selector != null && sec_selector != "") this.fieldname(sec_selector).setValue(sec);
	},

	//リセット
	reset : function () {
		if (this.currentField != null) {
			if (this.currentField.checked) {
				this.currentField.checked = false;
			} else if (this.currentField.options) {
				var done = false;
				for (var o=0; o < this.currentField.options.length; o++) {
					if (this.currentField.options[o].value == '') {
						this.currentField.options[o].selected = true;
						done = true;
					} else {
						this.currentField.options[o].selected = false;
					}
				}
			} else if (this.currentField.type && this.currentField.type == 'text') {
				this.currentField.value = '';
			} else if (this.currentField.type && this.currentField.type == 'file') {
				var id = this.currentField.id;
				if (id && document.getElementById(id+'-wrapper')) {
					var wrapper = document.getElementById(id+'-wrapper');
					var i = wrapper.innerHTML;
					wrapper.innerHTML = i;
				}
			} else if (this.currentField.type && this.currentField.type == 'textarea') {
				this.currentField.value = '';
			}
		}
	},
	resetAll : function (target_name) {
		for (var i=0; i < this.currentForm.elements.length; i++) {
			if (target_name == null || (this.currentForm.elements[i].name && this.currentForm.elements[i].name.search(target_name) != -1)) {
				this.field(this.currentForm.elements[i]).reset();
			}
		}
	},

	//連続投稿防止
	isNotSubmitted : function(upload_check_disabled) {
		var present_time = (new Date()).getTime();
		var submitted_time = this.getFormProperty('submitted');
		if (submitted_time) {
			if ((present_time - submitted_time) > 30000) {
				if (confirm('既にデータが送信されています。\nそれでも送信しますか？')) {
					this.setFormProperty('submitted',present_time);
					if (!upload_check_disabled) this.setUploadProgressBar();
					return true;
				} else {
					return false;
				}
			} else {
				alert('既にデータが送信されています。\n新しい画面が読み込まれるまで、しばらくお待ちください。');
				return false;
			}
		} else {
			this.setFormProperty('submitted',present_time);
			if (!upload_check_disabled) this.setUploadProgressBar();
			return true;
		}
	},
	
	//郵便番号検索
	zip3_field : null,
	zip4_field : null,
	pref_field : null,
	city_field : null,
	street_field : null,
	building_field : null,
	openZipCodeSearchWindow : function(cgi_url,zip3_name,zip4_name,pref_name,city_name,street_name,building_name) {
		this.zip3_field = (!zip3_name) ? false : this.fieldname(zip3_name).currentField;
		this.zip4_field = (!zip4_name) ? false : this.fieldname(zip4_name).currentField;
		this.pref_field = this.fieldname(pref_name).currentField;
		this.city_field = this.fieldname(city_name).currentField;
		this.street_field = this.fieldname(street_name).currentField;
		this.building_field = this.fieldname(building_name).currentField;
		cgi_url += '?zip3=' + ((this.zip3_field) ? this.zip3_field.value : '') + '&zip4=' + ((this.zip4_field) ? this.zip4_field.value : '');
		cmonos.window.open('ZipCodeSearchWindow',500,500,cgi_url);
	},
	
	getAddressFromZipCode : function(cgi_url,zip3_name,zip4_name,pref_name,city_name,street_name,building_name) {
		var zip3_value = this.fieldname(zip3_name).currentField.value;
		var zip4_value = this.fieldname(zip4_name).currentField.value;
		if (zip3_value == "" || isNaN(zip3_value) || zip3_value.search(/^\d{3}$/) == -1 || zip4_value == "" || isNaN(zip4_value) || zip4_value.search(/^\d{4}$/) == -1) return true;
		var pref = this.fieldname(pref_name).currentField;
		var city = this.fieldname(city_name).currentField;
		var street = this.fieldname(street_name).currentField;
		var building = this.fieldname(building_name).currentField;
		if (city.value != "" || street.value != "" || building.value != "") return true;
		var hash = new Array();
		hash["m"] = "AjaxZipCodeSearch";
		hash["k"] = "asearch";
		hash["zip3"] = zip3_value;
		hash["zip4"] = zip4_value;
		cmonos.xml.request(
			cgi_url, 
			{
				method: 'post',
				parameters: hash, 
				onSuccess: function (transport) {
					var response_hash = cmonos.value.urlDecode(transport.responseText);
					if (response_hash["status"] == "success") {
						if (pref.type == 'select-one') {
							cmonos.form.field(pref).getOptionByValue(response_hash["pref"]).selected = true;
						} else {
							pref.value = response_hash["pref"];
						}
						cmonos.validate.field(pref).bailOut();
						if (city == pref) {
							city.value += response_hash["city"];
						} else {
							city.value = response_hash["city"];
							cmonos.validate.field(city).bailOut();
						}
						if (street == city) {
							street.value += response_hash["street"];
						} else {
							street.value = response_hash["street"];
							cmonos.validate.field(street).bailOut();
						}
						if (building == street) {
							building.value += response_hash["building"];
						} else {
							building.value = response_hash["building"];
							cmonos.validate.field(building).bailOut();
						}
					}
				}
			}
		);
		return true;
	},

	//	フォームの無効化制御
	enabled : function (form_enabled) {
		for (var i=0; i < this.currentForm.elements.length; i++) {
			this.currentForm.elements[i].disabled = !form_enabled;
		}
		return this;
	},
	
	//	フォーム送信
	submit : function (content_id,cookie_fields,cookie_name,domain,path) {
		if (!this.isNotSubmitted()) return false;
		var this_form = this.currentForm;
		var hash = this.toHash();
		var submit_button = document.getElementById(content_id+"-submit");
		if (submit_button != null && submit_button.className != null) {
			submit_button.className = submit_button.className.replace(/-(visited|active)$/,'') + '-active';
		} else {
			submit_button = null;
		}
		this.enabled(false);
		hash["m"] = "UserGeneratedFieldUpdater";
		hash["k"] = "ugfieldupdater";
		hash["ajax"] = "1";
		if (content_id != null) {
			var content = document.getElementById(content_id);
			var hidden_content = (content && content.style.display == "none") ? true : false;
			var form_link = document.getElementById(content_id+"-form-link");
			var bargraph = document.getElementById(content_id + "-bargraph");
			if (!hidden_content && content) cmonos.element.item(content).sleep();
			if (bargraph) cmonos.element.item(bargraph).sleep();
		}
		cmonos.xml.request(
			this.currentForm.action, 
			{
				method: 'post',
				parameters: cmonos.value.urlEncode(hash), 
				onFailure: function(){
					cmonos.form.item(this_form).restore(submit_button);
					if (!hidden_content && content) cmonos.element.item(content).wakeUp();
					if (bargraph) cmonos.element.item(bargraph).wakeUp();
					this_form.submit();
				},
				onSuccess: function(transport){
					var response_hash = cmonos.value.urlDecode(transport.responseText);
					var restore_button = true;
					var visited = false;
					if (!hidden_content && content) cmonos.element.item(content).wakeUp();
					if (bargraph) cmonos.element.item(bargraph).wakeUp();
					if (response_hash["hide_form"] != null && response_hash["hide_form"] == "1") {
						this_form.style.display = "none";
						if (content && form_link) form_link.style.display = "none";
					}
					if (response_hash["form"] != null && response_hash["form"] != "") this_form.innerHTML = response_hash["form"];
					if (response_hash["status"] == "success") {
						visited = true;
						if (cookie_name != null && cookie_name != "") {
							if (cmonos.form.item(this_form).cookieEnabled()) {
								cmonos.document.setCookie(cookie_name + "-UTF8",cmonos.value.urlEncode(hash,cookie_fields),"",domain,path);
							} else {
								cmonos.document.deleteCookie(cookie_name + "-UTF8");
							}
						}
						if (content_id != null && content_id != "") {
							if (content) {
								if (response_hash["new_content"] != null && response_hash["new_content"] != "") {
									content.innerHTML += response_hash["new_content"];
								} else if (response_hash["content"] != null && response_hash["content"] != "") {
									content.innerHTML = response_hash["content"];
								}
								if (response_hash["show_content"] != null && response_hash["show_content"] == "1" && content.style.display == "none") {
									if (hidden_content) {
										cmonos.element.item(content).fadeIn();
									} else {
										cmonos.element.item(content).wakeUp();
									}
								}
								if (response_hash["hide_form"] != null && response_hash["hide_form"] == "1") {
									var form_link = document.getElementById(content_id+"-form-link");
									if (form_link) form_link.style.display = "none";
								}
							}
							if (response_hash["new_barwidth"] != null && response_hash["new_barwidth"] != "" && bargraph) {
								(new cmonos.bargraph()).item(bargraph).control(response_hash["old_barwidth"],response_hash["new_barwidth"]);
								if (document.getElementById(content_id + "-bargraphbg") && response_hash["content"] != null && response_hash["content"] != "") {
									document.getElementById(content_id + "-bargraphbg").title = response_hash["content"];
								}
							}
						}
						if (response_hash["new_count"] != null && response_hash["new_count"] != "") {
							if (content_id != null && content_id != "") {
								var count_area = document.getElementById(content_id+"-count");
								if (count_area != null) count_area.innerHTML = '(' + response_hash["new_count"] + ')';
							}
						}
						if (submit_button != null) {
							if (response_hash["button_class"] != null && response_hash["button_class"] != "") {
								submit_button.className = response_hash["button_class"];
								restore_button = false;
							}
							if (response_hash["button_title"] != null && response_hash["button_title"] != "") {
								submit_button.title = response_hash["button_title"];
							}
							if (response_hash["button_value"] != null && response_hash["button_value"] != "") {
								submit_button.value = response_hash["button_value"];
							}
						}
						if (response_hash["message"] != null) {
							var success_message = response_hash["message"].split(";");
							for (var i=0; i < success_message.length; i++) {
								if (success_message[i] != "") alert(success_message[i]);
							}
						}
						if (response_hash["reset_disabled"] == null || response_hash["reset_disabled"] != "1") {
							for (var i=0; i < this_form.elements.length; i++) {
								if (!cmonos.value.isIncluded(cookie_fields,this_form.elements[i].name)) {
									if (this_form.elements[i].type == "text" || this_form.elements[i].type == "textarea") {
										this_form.elements[i].value = "";
										cmonos.tool.htmlEditor.textarea(this_form.elements[i]).update();
									}
								}
							}
						}
						if (response_hash["reset_fields"] != null) {
							var reset_fields = response_hash["reset_fields"].split(",");
							for (var i=0; i < this_form.elements.length; i++) {
								if (cmonos.value.isIncluded(reset_fields,this_form.elements[i].name)) {
									if (this_form.elements[i].type == "text" || this_form.elements[i].type == "textarea") {
										this_form.elements[i].value = "";
										cmonos.tool.htmlEditor.textarea(this_form.elements[i]).update();
									}
								}
							}
						}
					} else {
						if (content_id != null && content_id != "" ) {
							if (response_hash["content"] != null && response_hash["content"] != "") content.innerHTML = response_hash["content"];
							if (content && response_hash["show_content"] != null && response_hash["show_content"] == "1" && content.style.display == "none") content.style.display = "";
							if (response_hash["old_barwidth"] != null && response_hash["old_barwidth"] != "" && bargraph) bargraph.style.width = parseInt(response_hash["old_barwidth"]) + "px";
						}
						if (response_hash["error_fields"] != null) {
							var error_fields = response_hash["error_fields"].split(";");
							for (var i=0; i < error_fields.length; i++) {
								cmonos.element.form(this_form).fieldname(error_fields[i]).addClassName("invalid-field");
							}
						}
						if (response_hash["message"] != null) {
							var error_message = response_hash["message"].split(";");
							for (var i=0; i < error_message.length; i++) {
								if (error_message[i] != "") alert(error_message[i]);
							}
						} else {
							alert("error!");
						}
					}
					if (response_hash["submitted"] != null && response_hash["submitted"] == "1") {
						cmonos.document.setCookie("SUBMITTED"+((content_id != null && content_id != "") ? "-"+content_id : ""),(new Date()).getTime());
					}
					if (response_hash["authorized_level"] != null && response_hash["authorized_level"]  > 0) {
						cmonos.document.setCookie("AUTHORIZED-LEVEL",response_hash["authorized_level"],"",domain,path);
						if (content_id != null && document.getElementById(content_id + '-editor-link')) document.getElementById(content_id + '-editor-link').style.display = "inline";
					} else {
						cmonos.document.deleteCookie("AUTHORIZED-LEVEL",domain,path);
					}
					cmonos.form.item(this_form).restore(((restore_button) ? submit_button : null),visited).setFormProperty('submitted',null);
				}
			}
		);
		return false;
	},
	
	restoreAll : function () {
		for (var i=0; i<document.forms.length; i++) {
			this.item(document.forms[i]).restore();
		}
	},
	
	restore : function (submit_button,is_visited) {
		this.enabled(true);
		if (submit_button != null && submit_button.className != null) {
			if (is_visited) {
				submit_button.className = submit_button.className.replace(/-active$/,"-visited");
			} else {
				submit_button.className = submit_button.className.replace(/-active$/,"");
			}
		}
		return this;
	},

	hideFromRepeater : function (content_id,life_time) {
		var submitted_time = cmonos.document.getCookie("SUBMITTED-"+content_id);
		if (submitted_time != null && submitted_time != "") {
			var now = (new Date()).getTime();
			if (life_time == null || life_time == "" || (now - submitted_time) < life_time) {
				var this_content = document.getElementById(content_id);
				var this_form = document.getElementById(content_id+"-form");
				if (this_content != null) this_content.style.display = "";
				if (this_form != null) this_form.style.display = "none";
			}
		}
	},

	clickableBarGraph : function (content_id,life_time) {
		var this_form = document.getElementById(content_id+"-form");
		if (this_form != null) this_form.style.display = "none";
		var submitted_time = cmonos.document.getCookie("SUBMITTED-"+content_id);
		var now = (new Date()).getTime();
		if (submitted_time == null || submitted_time == "" || (life_time != null && life_time != "" && (now - submitted_time) > life_time)) {
			var this_bar_bg = document.getElementById(content_id+'-bargraphbg');
			var this_bar = document.getElementById(content_id+'-bargraph');
			var this_selector = document.getElementById(content_id+'-selector');
			if (this_bar_bg != null && this_bar != null && this_selector != null) {
				this_form.style.display = "none";
				this_bar_bg.style.position = "relative";
				var w = this_bar_bg.offsetWidth || parseInt(this_bar_bg.style.width);
				var h = this_bar_bg.offsetHeight || parseInt(this_bar_bg.style.height);
				var size = this_bar.offsetWidth || parseInt(this_bar.style.width);
				var box = document.createElement('div');
				box.style.position = "absolute";
				box.style.left = "0";
				box.style.top = "0";
				box.style.width = w + "px";
				box.style.height = h + "px";
				this_bar_bg.appendChild(box);
				var cell_w = parseInt(w / (this_selector.options.length - 1));
				for (var i=0; i < this_selector.options.length; i++) {
					if (this_selector.options[i].value != null && this_selector.options[i].value != "" && this_selector.options[i].value != "0") {
						(function() {
							var this_option = this_selector.options[i];
							var cell = document.createElement('a');
							cell.style.styleFloat = "right";
							cell.style.cssFloat = "right";
							cell.style.width = cell_w + "px";
							cell.style.height = h + "px";
							if (document.compatMode) cell.style.cursor = "pointer";
							cell.style.fontSize = "1px";
							cell.style.textAlign = "left";
							cell.style.textIndent = "-999px";
							cell.innerHTML = this_option.text;
							cell.title = this_option.text;
							var v = parseInt(this_option.value);
							box.appendChild(cell);
							cmonos.element.item(cell).addEventListener('click',function() {
								this_bar_bg.removeChild(box);
								box = null;
								this_option.selected = true;
								cmonos.form.item(this_form).submit(content_id)
							}).addEventListener('mouseover',function() {
								this_bar.style.width = parseInt(cell_w * v) + "px";
							}).addEventListener('mouseout',function() {
								if (box != null) this_bar.style.width = size + "px";
							});
						})();
					}
				}
			}
		} else if (this_form != null) {
			this_form.style.display = "none";
		}
	},

	toggleByUser : function (content_id,life_time,form_disabled_for_repeater,content_disabled_for_visitor) {
		var submitted_time = cmonos.document.getCookie("SUBMITTED-"+content_id);
		var now = (new Date()).getTime();
		var this_content = document.getElementById(content_id);
		var this_form_link = document.getElementById(content_id+"-form-link");
		var this_form = document.getElementById(content_id+"-form");
		var this_content_link = document.getElementById(content_id+"-content-link");
		if (submitted_time != null && submitted_time != "" && (life_time == null || life_time == "" || (now - submitted_time) < life_time)) {
			if (this_content != null) this_content.style.display = "";
			if (this_form_link != null) this_form_link.style.display = (form_disabled_for_repeater) ? "none" : "";
			if (this_content_link != null) this_content_link.style.display = "";
			if (this_form != null) this_form.style.display = "none";
		} else {
			if (this_form_link != null) this_form_link.style.display = "";
			if (this_content != null) this_content.style.display = "none";
			if (this_form != null) this_form.style.display = "";
			if (this_content_link != null) this_content_link.style.display = (content_disabled_for_visitor) ? "none" : "";
		}
	},

	makeProgressBar : function (msg) {
		if (this.currentForm) {
			if (typeof this.progressbar == 'undefined') this.progressbar = {};
			this.progressbar.start = (new Date()).getTime();
			this.progressbar.box_bg = document.createElement('div');
			document.getElementsByTagName('body')[0].appendChild(this.progressbar.box_bg);
			this.progressbar.box_bg.id = 'progress-bar-box-bg';
			if (typeof document.body.style.maxHeight == "undefined") {
				this.progressbar.box_bg.style.height = (cmonos.window.getPageYOffset() + cmonos.window.getInnerHeight()) + 'px';
				this.progressbar.box_bg.style.width = (cmonos.window.getPageXOffset() + cmonos.window.getInnerWidth()) + 'px';
				document.documentElement.scrollTop = 0;
				document.body.scrollTop = 0;
			}
			this.progressbar.max_width = 480;
			if (cmonos.window.getInnerWidth() <= 500) this.progressbar.max_width = cmonos.window.getInnerWidth() - 20;
			this.progressbar.box = document.createElement('div');
			document.getElementsByTagName('body')[0].appendChild(this.progressbar.box);
			this.progressbar.box.id = 'progress-bar-box';
			var progress_bar_dialog = document.createElement('div');
			this.progressbar.box.appendChild(progress_bar_dialog);
			progress_bar_dialog.id = 'progress-bar-dialog';
			if (cmonos.window.getInnerHeight() < 300) progress_bar_dialog.style.paddingTop = (parseInt(cmonos.window.getInnerHeight() / 2) - 20) + 'px';
			progress_bar_dialog.style.width = (this.progressbar.max_width + 2) + 'px';
			if (msg) progress_bar_dialog.appendChild(document.createTextNode(msg));
			this.progressbar.action_counter = document.createElement('span');
			progress_bar_dialog.appendChild(this.progressbar.action_counter);
			this.progressbar.action_counter.id = 'action-counter';
			this.progressbar.time_remain = document.createElement('span');
			progress_bar_dialog.appendChild(this.progressbar.time_remain);
			this.progressbar.time_remain.id = 'time-remain';
			var progress_bar_bg = document.createElement('div');
			this.progressbar.box.appendChild(progress_bar_bg);
			progress_bar_bg.id = 'progress-bar-bg';
			progress_bar_bg.style.width = this.progressbar.max_width + 'px';
			this.progressbar.bar = document.createElement('div');
			progress_bar_bg.appendChild(this.progressbar.bar);
			this.progressbar.bar.id = 'progress-bar';
			var this_form = this;
			cmonos.element._addEventListener(
				self,
				'resize',
				function() {
					if (this_form && this_form.progressbar) {
						if (typeof document.body.style.maxHeight == "undefined") {
							this_form.progressbar.box_bg.style.height = (cmonos.window.getPageYOffset() + cmonos.window.getInnerHeight()) + 'px';
							this_form.progressbar.box_bg.style.width = (cmonos.window.getPageXOffset() + cmonos.window.getInnerWidth()) + 'px';
						}
						var bar_size = parseInt(this_form.progressbar.bar.style.width);
						var bar_width = parseInt(progress_bar_bg.style.width);
						this_form.progressbar.max_width = 480;
						if (cmonos.window.getInnerWidth() <= 500) this_form.progressbar.max_width = cmonos.window.getInnerWidth() - 20;
						progress_bar_dialog.style.paddingTop = ((cmonos.window.getInnerHeight() < 300) ? (parseInt(cmonos.window.getInnerHeight() / 2) - 20) : 200) + 'px';
						this_form.progressbar.bar.style.width = parseInt(bar_size / bar_width * this_form.progressbar.max_width) + 'px';
						progress_bar_dialog.style.width = (this_form.progressbar.max_width + 2) + 'px';
						progress_bar_bg.style.width = this_form.progressbar.max_width + 'px';
					}
				}
			);
			this.progressbar.bar_size = 1;
			this.progressbar.timer = setInterval(function () {
				var t = (new Date()).getTime() - this_form.progressbar.start - 100;
				if (t < 100) t = 100;
				this_form.progressbar.bar_size += this_form.progressbar.bar_size / t * 100;
				if (this_form.progressbar.bar_size < this_form.progressbar.max_width) {
					this_form.progressbar.bar.style.width = parseInt(this_form.progressbar.bar_size) + 'px';
				}
			}, 100);
			return true;
		} else {
			return false;
		}
	},

	removeProgressBar : function () {
		if (this.currentForm) {
			cmonos.element.setProperty(this.currentForm,'submitted',null);
			this.enabled(true);
			this.progressbar.box_bg.style.display = "none";
			this.progressbar.box.style.display = "none";
			document.getElementsByTagName('body')[0].removeChild(this.progressbar.box_bg);
			document.getElementsByTagName('body')[0].removeChild(this.progressbar.box);
			if (this.progressbar.iframe) document.getElementsByTagName('body')[0].removeChild(this.progressbar.iframe);
			if (this.progressbar.timer) clearInterval(this.progressbar.timer);
			this.progressbar = null;
		}
	},

	setUploadProgressBar : function () {
		if (this.currentForm && this.currentForm.enctype && this.currentForm.enctype.toLowerCase() == 'multipart/form-data') {
			this.makeProgressBar('送信中...');
			var expires = new Date();
			expires.setTime(expires.getTime() + 10000);
			cmonos.document.setCookie('UPLOADKEY',this.progressbar.start,expires,document.domain,location.pathname);
			var this_form = this;
			setTimeout(function () { this_form.checkUploadProgress(); },3000);
		}
	},

	checkUploadProgress : function () {
		cmonos.form.current = this;
		if (!this.progressbar.iframe) {
			this.progressbar.iframe = document.createElement('iframe');
			document.getElementsByTagName('body')[0].appendChild(this.progressbar.iframe);
			this.progressbar.iframe.id = 'progress-bar-iframe';
			this.progressbar.iframe.style.position = 'absolute';
			this.progressbar.iframe.style.display = 'block';
			this.progressbar.iframe.style.width = '1px';
			this.progressbar.iframe.style.height = '1px';
			this.progressbar.iframe.style.top = '0';
			this.progressbar.iframe.style.left = '0';
			this.progressbar.iframe.style.marginTop = '-100px';
		}
		this.progressbar.iframe.src = '?m=CheckUploadProgress&check_key=' + this.progressbar.start + '&time=' + (new Date()).getTime();
	},

	updateUploadProgress : function (status,uploaded,total) {
		if (status == "completed") {
			this.progressbar.bar.style.width = this.progressbar.max_width + 'px';
			this.progressbar.action_counter.innerHTML = '(' + ((total != null && total > 0) ? total + '/' + total : '完了') + ')';
			this.progressbar.time_remain.innerHTML = ' [保存処理中]';
			if (this.progressbar.timer) clearInterval(this.progressbar.timer);
			cmonos.element.item(this.progressbar.bar).sleep();
			if (!this.progressbar.counted) setTimeout(function () { this.removeProgressBar(); },30000);
		} else if (status == "success") {
			var w = Math.floor(uploaded / total * this.progressbar.max_width);
			this.progressbar.bar_size = (w > 0) ? w : 1;
			this.progressbar.bar.style.width = ((w > 0) ? w : 1) + 'px';
			this.progressbar.action_counter.innerHTML = '(' + uploaded + '/' + total + ')';
			if (uploaded > 0) {
				var rmin = Math.ceil(((new Date()).getTime() - this.progressbar.start) * (total - uploaded) / uploaded / 60000);
				this.progressbar.time_remain.innerHTML = ' [あと' + rmin + '分]';
			}
			this.progressbar.counted = true;
			var this_form = this;
			setTimeout(function () { this_form.checkUploadProgress(); },3000);
		} else {
			this.removeProgressBar();
		}
	}
};
cmonos.persistent.form = function () {};
cmonos.persistent.form.prototype = cmonos.form;

cmonos.validate = {

	field : function(element) {
		if (typeof element == 'object') {
			this.currentField = element;
		} else if (typeof element == "string") {
			this.currentField = document.getElementById(element);
		} else {
			this.currentField = null;
		}
		return this;
	},

	isInvalid : function () {
		if (this.currentField) cmonos.element.item(this.currentField).addClassName('invalid-field');
	},

	bailOut : function() {
		if (this.currentField) {
			cmonos.element.item(this.currentField).removeClassName('invalid-field');
			if (this.currentField.type && (this.currentField.type == 'checkbox' ||  this.currentField.type == 'radio')) {
				if (this.currentField.parentNode && this.currentField.parentNode.parentNode && this.currentField.parentNode.parentNode.tagName.toLowerCase() == 'li') {
					var this_list = this.currentField.parentNode.parentNode.parentNode;
					for (var i=0; i<this_list.childNodes.length; i++) {
						for (var n=0; n<this_list.childNodes[i].childNodes.length; n++){
							cmonos.element.item(this_list.childNodes[i].childNodes[n]).removeClassName('invalid-field');
						}
					}
				}
			}
		}
		return this;
	},

	//カラーチェック
	asColor : function(color,type) {
		if (color == null && this.currentField) color = this.currentField.value;
		if (type && type == 'rgb') color = color.replace(/^[\+\-]/,'');
		if (color == null || color =='' || color.search(/^#[0-9a-fA-F]{6}$/) != -1
			||	((!type && type == 'css') && (color.search(/^#[0-9a-fA-F]{3}$/) != -1 || color.search(/^(AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGray|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|Darkorange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGray|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGray|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gray|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGrey|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGray|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGray|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)$/i) != -1))
			||	(type && type == 'html4' && color.search(/^(Black|Olive|Teal|Red|Blue|Maroon|Navy|Gray|Lime|Fuchsia|White|Green|Purple|Silver|Yellow|Aqua)$/i) != -1)
		) {
			if (this.currentField) {
				this.bailOut();
				this.currentField.style.backgroundColor = color;
				color.match(/^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})[0-9a-fA-F]{2}$/);
				if (eval("0x"+RegExp.$1) < 128 && eval("0x"+RegExp.$2) < 128) {
					this.currentField.style.color = '#FFF';
				} else {
					this.currentField.style.color = '#000';
				}
			}
			return true;
		} else {
			alert("色の形式を確認してください。");
			if (this.currentField) {
				this.currentField.focus(); 
				this.currentField.select(); 
				this.currentField.style.backgroundColor = "";
				this.isInvalid();
			}
			return false;
		}
	},

	//半角英数書式チェック
	asWord : function(str) {
		if (str == null && this.currentField) str = this.currentField.value;
		if (str && (str.search(/^[a-zA-Z0-9_]+$/) == -1)) {
			alert("半角英数字にしてください。");
			if (this.currentField) {
				this.currentField.focus(); 
				this.currentField.select(); 
				this.isInvalid();
			}
			return false;
		} else {
			this.bailOut();
			return true;
		}
	},

	//入力チェック
	asNotEmpty : function(str) {
		if (str == null && this.currentField) str = this.currentField.value;
		if (str == null || str == "" || str.search(/\S/) == -1) {
			alert("入力してください。");
			if (this.currentField) {
				this.currentField.focus(); 
				this.currentField.select(); 
				this.isInvalid();
			}
			return false;
		} else {
			this.bailOut();
			return true;
		}
	},

	//メールアドレス書式チェック
	asEMailAddress : function(email) {
		if (email == null && this.currentField) email = this.currentField.value;
		if (email && (email.search(/[0-9a-zA-Z_\+\-\.]+@[0-9a-zA-Z\-]+\.[0-9a-zA-Z\-\.]+/) == -1)) {
			alert("メールアドレスを確認してください。");
			if (this.currentField) {
				this.currentField.focus(); 
				this.currentField.select();
				this.isInvalid();
			}
			return false;
		} else {
			this.bailOut();
			return true;
		}
	},

	//URL書式チェック
	asUrl : function(url) {
		if (url == null && this.currentField) url = this.currentField.value;
		if (url && (url.search(/^https?:\/\/[0-9a-zA-Z\-]+\.[0-9a-zA-Z_~\-\.\/#\?\&=\%,]+$/) == -1)) {
			alert("URLを確認してください。");
			if (this.currentField) {
				this.currentField.focus(); 
				this.currentField.select();
				this.isInvalid();
			}
			return false;
		} else {
			this.bailOut();
			return true;
		}
	}
};

cmonos.validate.datetime = {
	gap : new Array(),

	fix : function(dt_type,sy,sm,sd,sh,smin,ey,em,ed,eh,emin) {
		if (this.gap[sy] == null || this.gap[sy] <= 0) this.gap[sy] = (sh == null || sh == "") ? 86400000 : 3600000; 
		var dt_start = this.getDateFromMenu(sy,sm,sd,sh,smin);
		var dt_start_time = dt_start.getTime();
		var dt_end = this.getDateFromMenu(ey,em,ed,eh,emin);
		var dt_end_time = dt_end.getTime();
		if (cmonos.form.field(sy).getValue() == "" && cmonos.form.field(sm).getValue() == "" && cmonos.form.field(sd).getValue() == "" && cmonos.form.field(sh).getValue() == "" && cmonos.form.field(smin).getValue() == "") {
			dt_start_time = dt_end_time - this.gap[sy];
			dt_start.setTime(dt_start_time);
		}
		if (cmonos.form.field(ey).getValue() == "" && cmonos.form.field(em).getValue() == "" && cmonos.form.field(ed).getValue() == "" && cmonos.form.field(eh).getValue() == "" && cmonos.form.field(emin).getValue() == "") {
			dt_end_time = dt_start_time + this.gap[sy];
			dt_end.setTime(dt_end_time);
		}
		if (parseInt(dt_start_time/60000) >= parseInt(dt_end_time/60000)) {
			if (dt_type == 'f') {
				dt_end_time = dt_start_time + this.gap[sy];
				dt_end.setTime(dt_end_time);
				this.setDateMenuByTime(dt_end,ey,em,ed,eh,emin);
			} else if (dt_type == 't') {
				dt_start_time = dt_end_time - this.gap[sy];
				dt_start.setTime(dt_start_time);
				this.setDateMenuByTime(dt_start,sy,sm,sd,sh,smin);
			}
		}
		this.gap[sy] = dt_end_time - dt_start_time;
		if (dt_type == 'f') {
			this.setDateMenuByTime(dt_start,sy,sm,sd,sh,smin);
		} else if (dt_type == 't') {
			this.setDateMenuByTime(dt_end,ey,em,ed,eh,emin);
		}
	},

	getDateFromMenu : function (y,m,d,h,min,date) {
		if (date == null) date = false;
		var md_done = false;
		var dt = new Date();
		if (y != null && y != "") {
			y = cmonos.form.field(y).getValue();
			if (!isNaN(y) && y >= 1970 && y < 2036) dt.setFullYear(parseInt(y));
		}
		if (m != null && m != "") {
			m = cmonos.form.field(m).getValue();
			if (!isNaN(m) && m >= 1 && m <= 12) {
				if (d != null && d != "") {
					d = cmonos.form.field(d).getValue();
					if (!isNaN(d) && d >= 1 && d <= 31) {
						dt.setMonth((parseInt(m) - 1),parseInt(d));
						md_done = true;
					}
				}
				if (!md_done) dt.setMonth(parseInt(m) - 1);
			}
		}
		if (!md_done && d != null && d != "") {
			d = cmonos.form.field(d).getValue();
			if (!isNaN(d) && d >= 1 && d <= 31) dt.setDate(parseInt(d));
		}
		if (h != null && h != "" && !date) {
			h = cmonos.form.field(h).getValue();
			dt.setHours((!isNaN(h) && h >= 0 && h < 24) ? parseInt(h) : 0);
		} else {
			dt.setHours(0);
		}
		if (min != null && min != "" && !date) {
			min = cmonos.form.field(min).getValue()
			dt.setMinutes((!isNaN(min) && min >= 0 && min < 60) ? parseInt(min) : 0);
		} else {
			dt.setMinutes(0);
		}
		dt.setSeconds(0);
		dt.setMilliseconds(0);
		return dt;
	},

	setDateMenuByTime : function (dt,y,m,d,h,min,date) {
		if (date == null) date = false;
		if (y != null && y != "" && !isNaN(dt.getFullYear())) cmonos.form.field(y).setValue(dt.getFullYear());
		if (m != null && m != "" && !isNaN(dt.getMonth())) cmonos.form.field(m).setValue((dt.getMonth() + 1));
		if (d != null && d != "" && !isNaN(dt.getDate())) cmonos.form.field(d).setValue(dt.getDate());
		if (h != null && h != "" && !isNaN(dt.getHours()) && !date) cmonos.form.field(h).setValue(dt.getHours());
		if (min != null && min != "" && !isNaN(dt.getMinutes()) && !date) cmonos.form.field(min).setValue(dt.getMinutes());
	}
};

cmonos.persistent.validate = function () {};
cmonos.persistent.validate.prototype = cmonos.validate;

cmonos.xml = {
	createXmlHttpRequest : function () {
		try {
			if (typeof ActiveXObject != 'undefined') {
				return new ActiveXObject('Microsoft.XMLHTTP');
			} else if (window["XMLHttpRequest"]) {
				return new XMLHttpRequest();
			}
		} catch (e) {
			changeStatus(e);
		}
		return null;
	},

	request : function (url,options) {
		if (!options) {
			options = { method : 'GET', parameters : null };
		} else {
			if (!options.method) {
				options.method = 'GET';
			} else {
				options.method = options.method.toUpperCase();
			} 
			if (!options.parameters) {
				options.parameters = null;
			} else if (typeof options.parameters != 'string') {
				options.parameters = cmonos.value.urlEncode(options.parameters);
			}
			if (options.method == 'GET') {
				if (options.parameters != null) url += '?' + options.parameters;
				options.parameters = null;
			}
		}
		var request = this.createXmlHttpRequest();
		request.open(options.method, url, true);
		request.onreadystatechange = function () {
			if (request.readyState == 4) {
				if (request.status == 200) {
					if (options && typeof options.onSuccess == 'function') options.onSuccess(request);
				} else {
					if (options && typeof options.onFailure == 'function') options.onFailure(request);
				}
				if (options && typeof options.onComplete == 'function') options.onComplete(request);
			}
		}
		request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
		request.send(options.parameters);
		return request;
	},

	parse : function (str) {
		if (typeof ActiveXObject != 'undefined' && typeof GetObject != 'undefined') {
			var doc = new ActiveXObject('Microsoft.XMLDOM');
			doc.loadXML(str);
			return doc;
		}
		if (typeof DOMParser != 'undefined') {
			return (new DOMParser()).parseFromString(str, 'text/xml');
		}
		return createElement('div', null);
	},

	getNodeValue : function (node){
		if (!node) {
			return "";
		}
		var retStr = "";
		if (node.nodeType == 3 || node.nodeType == 4 || node.nodeType == 2) {
			retStr += node.nodeValue;
		} else if(node.nodeType == 1 || node.nodeType == 9 || node.nodeType == 11) {
			for (var i=0; i<node.childNodes.length; ++i) {
				retStr += arguments.callee(node.childNodes[i]);
			}
		}
		return retStr;
	}
};

cmonos.init = {
	sync_buttons : [],

	loadCartJs : function () {
		document.write('<script type="text/javascript" src="/lib/javascript/cart.js"></script>');
	},

	document : function () {
		var this_init = this;
		if (navigator.userAgent.search(/(android|iPhone|mobile)/i) != -1){
			var mobile = cmonos.document.getCookie("MOBILEMODE");
			this.setMobileMode((mobile && mobile == 'true') ? true : false);
		}
		cmonos.window.setOnLoad(function() {
			if (parent && parent.main && parent.navi && parent.navi == self) {
				this.is_current_title = false;
				this.current_location = '';
				setInterval(function() { this_init.getCurrentTitle() },500);
			}
			var sync_button_classes = new Array('button-bbs-1','button-db-1','button-page-1','button-page-2','button-page-3','button-page-4','button-page-5');
			if (sync_button_classes.length > 0) {
				var this_links = document.getElementsByTagName('a');
				for (var i=0; i<this_links.length; i++) {
					for (var n=0; n<sync_button_classes.length; n++) {
						if (this_links[i].className != null && this_links[i].className.search(sync_button_classes[n]) != -1) {
							this_init.sync_buttons[this_init.sync_buttons.length] = this_links[i];
						}
					}
				}
				for (var i=0; i<this_init.sync_buttons.length; i++) {
					cmonos.element.item(this_init.sync_buttons[i]).addEventListener('mousedown',function () { this_init.buttonSync(this); });
				}
			}
			this_init.locationCheck();
			this_init.showPlaceholder();
			cmonos.document.followPointer();
		});
		cmonos.window.setOnUnload(function() {
			this_init.hidePlaceholder();
		});
	},

	setMobileMode : function (mobile) {
		if (document.getElementsByTagName('body')[0]) {
			this.toggleMobileMode(mobile);
		} else {
			var this_init = this;
			setTimeout(function () { this_init.setMobileMode(mobile) },10);
		}
	},

	buttonSync : function (this_link) {
		this.clearButtonSync();
		this_link.className += "-selected";
	},

	clearButtonSync : function () {
		for (var i=0; i<this.sync_buttons.length; i++) {
			this.sync_buttons[i].className = this.sync_buttons[i].className.replace(/-selected/,"");
		}
	},

	getCurrentTitle : function () {
		if (!this.is_current_title || this.current_location != parent.main.document.location.href) {
			this.is_current_title = false;
			this.current_location = parent.main.document.location.href;
			top.document.title = parent.main.document.title;
			var temp_uri = '';
			for (var i=0; i<this.sync_buttons.length; i++) {
				var link_location = this.sync_buttons[i].href;
				var link_directory = link_location.replace(/[^\/]+$/,"").replace(/\/(files|new)\/$/,"/");
				if (this.current_location.search(link_location) != -1 && temp_uri.search(link_location) == -1) {
					buttonSync(this.sync_buttons[i]);
					temp_uri = link_location;
					this.is_current_title = true;
				} else if (this.current_location.search(link_directory) != -1 && temp_uri.search(link_directory) == -1) {
					buttonSync(this.sync_buttons[i]);
					temp_uri = link_directory;
					this.is_current_title = true;
				}
			}
		}
	},

	locationCheck : function () {
		var temp_uri = '';
		for (var i=0; i<this.sync_buttons.length; i++) {
			var link_location = this.sync_buttons[i].href;
			var link_directory = link_location.replace(/[^\/]+$/,"").replace(/\/(files|new)\/$/,"/");
			if (document.location.href.search(link_location) != -1 && temp_uri.search(link_location) == -1) {
				this.buttonSync(this.sync_buttons[i]);
				temp_uri = link_location;
			} else if (document.location.href.search(link_directory) != -1 && temp_uri.search(link_directory) == -1) {
				this.buttonSync(this.sync_buttons[i]);
				temp_uri = link_directory;
			}
		}
	},

	showPlaceholder : function () {
		if (typeof (document.createElement('input')).placeholder != 'undefined') {
			for (var n=0; n<document.forms.length; n++) {
				for (var i=0; i<document.forms[n].elements.length; i++) {
					var this_input = document.forms[n].elements[i];
					if ((this_input.type == 'search' || this_input.type == 'text') && typeof this_input.getAttribute('placeholder') != 'undefined' && typeof this_input.getAttribute('placeholder') != 'object' && this_input.getAttribute('placeholder') != null && this_input.getAttribute('placeholder') != "") {
						this.setPlaceholder(document.forms[n],this_input);
					}
				}
			}
		}
	},

	setPlaceholder : function (this_form,this_input) {
		var this_element = (new cmonos.persistent.element()).item(this_input);
		if (this_input.value == null || this_input.value == "") {
			this_element.addClassName('placeholder');
			this_input.value = this_input.getAttribute('placeholder');
		}
		this_element.addEventListener('blur', function () {
			if (this_input.value == null || this_input.value == "") {
				this_element.addClassName('placeholder');
				this_input.value = this_input.getAttribute('placeholder');
			}
		});
		this_element.addEventListener('focus', function () {
			if (this_element.hasClassName('placeholder')) {
				this_element.removeClassName('placeholder');
				this_input.value = '';
			}
		});
		cmonos.element.item(this_form).addEventListener('submit', function () {
			for (var e=0; e<this_form.elements.length; e++) {
				var search_box = this_form.elements[e];
				if ((search_box.type == 'search' || search_box.type == 'text') && typeof search_box.getAttribute('placeholder') != 'undefined' && search_box.getAttribute('placeholder') != "" && cmonos.element.item(search_box).hasClassName('placeholder')) {
					search_box.value = '';
				}
			}
			return true;
		});
	},

	hidePlaceholder : function () {
		if (typeof (document.createElement('input')).placeholder != 'undefined') {
			for (var n=0; n<document.forms.length; n++) {
				for (var i=0; i<document.forms[n].elements.length; i++) {
					var this_input = document.forms[n].elements[i];
					if ((this_input.type == 'search' || this_input.type == 'text') && typeof this_input.getAttribute('placeholder') != 'undefined' && typeof this_input.getAttribute('placeholder') != 'object' && this_input.getAttribute('placeholder') != null && this_input.getAttribute('placeholder') != "" && cmonos.element.item(this_input).hasClassName('placeholder')) {
						this_input.value = '';
					}
				}
			}
		}
	},

	toggleMobileMode : function (mobile_mode) {
		if (typeof this.mobile_mode != 'undefined' && ((mobile_mode && this.mobile_mode) || (!mobile_mode && !this.mobile_mode))) return true;
		var links = document.getElementsByTagName('link');
		var pc_css = [];
		var mobile_css_href;
		var n = 0;
		for (var i=0; i<links.length; i++) {
			if (links[i].getAttribute('type') == 'text/css' && links[i].href != null && links[i].href != null) {
				if (links[i].href.search(/\/common\.css$/) != -1) {
					if (!this.mobile_css) mobile_css_href = links[i].href.replace('common.css','mobile.css');
				} else if (links[i].href.search(/\/mobile\.css$/) != -1) {
					if (!this.mobile_css) this.mobile_css = links[i];
				} else if ((links[i].href.search(/\/[a-zA-Z0-9]+\.css$/) != -1 && links[i].href.search(/\/(tools|image|cart)\.css$/) == -1) || links[i].href.search(/\/site-navi\.css$/) != -1) {
					pc_css[n++] = links[i];
				}
			}
		}
		if (!this.mobile_mode_toggler) {
			this.mobile_mode_toggler = document.createElement('div');
			document.getElementsByTagName('body')[0].appendChild(this.mobile_mode_toggler);
			this.mobile_mode_toggler.setAttribute('id','mobile-mode-toggler');
			cmonos.element.item(this.mobile_mode_toggler).addEventListener('click', function () {
				cmonos.init.toggleMobileMode((cmonos.init.mobile_mode) ? false : true);
			});
		}
		var header = document.getElementsByTagName('head')[0];
		if (mobile_mode) {
			this.mobile_mode = true;
			this.mobile_mode_toggler.innerHTML = 'PC';
			cmonos.document.setCookie("MOBILEMODE",'true',null,document.domain,'/');
			if (!this.mobile_css && mobile_css_href) {
				this.mobile_css = document.createElement('link');
				header.appendChild(this.mobile_css);
				this.mobile_css.setAttribute('rel','stylesheet');
				this.mobile_css.setAttribute('type','text/css');
				this.mobile_css.setAttribute('href',mobile_css_href);
			}
			if (!this.meta_viewport) {
				this.meta_viewport = document.createElement('meta');
				header.appendChild(this.meta_viewport);
				this.meta_viewport.setAttribute('name','viewport');
			}
			this.meta_viewport.setAttribute('content','width=device-width');
			this.disabled_header = [];
			var n = 0;
			for (var i=0; i<pc_css.length; i++) {
				this.disabled_header[n++] = pc_css[i].cloneNode(true);
				header.removeChild(pc_css[i]);
			}
		} else {
			this.mobile_mode = false;
			this.mobile_mode_toggler.innerHTML = 'Mobile';
			cmonos.document.deleteCookie("MOBILEMODE",document.domain,'/');
			if (this.meta_viewport) this.meta_viewport.setAttribute('content','width=980px');
			if (this.mobile_css) {
				header.removeChild(this.mobile_css);
				this.mobile_css = null;
			}
			if (this.disabled_header) {
				for (var i=0; i<this.disabled_header.length; i++) {
					header.appendChild(this.disabled_header[i]);
				}
				this.disabled_header = null;
			}
		}
	}
};

//警告ダイアログ
cmonos.dialog = {
	hide_timer : null,
	show_timer : null,
	margin_top : 0,

	set : function () {
		var cgi_dialog_box = document.getElementById('cgi-dialog-box');
		if (cgi_dialog_box != null) {
			cgi_dialog_box.style.position = (navigator.userAgent.indexOf("MSIE") != -1 && typeof document.documentElement.style.msInterpolationMode == "undefined") ? "absolute" : "fixed";
			cgi_dialog_box.style.top = "0";
			cgi_dialog_box.style.left = "0";
			cgi_dialog_box.style.zIndex = 999999;
			cgi_dialog_box.style.marginTop = "-192px";
			document.getElementById('hide-cgi-dialog').style.display = "block";
			this.margin_top = -192;
			var this_dialog = this;
			cmonos.element.item('cgi-dialog').addEventListener('click',function () {
				if (this_dialog.margin_top == 0) {
					this_dialog.hide();
				} else {
					this_dialog.show();
				}
			});
			this.show();
		}
	},

	hide : function () {
		if (this.margin_top == 0) {
			clearInterval(this.hide_timer);
			clearInterval(this.show_timer);
			var this_dialog = this;
			this.hide_timer = setInterval(function () {
				if (this_dialog.margin_top == -192) {
					clearInterval(this_dialog.hide_timer);
				} else {
					this_dialog.margin_top -= Math.ceil((192 + this_dialog.margin_top) / 4);
					if (this_dialog.margin_top < -190) this_dialog.margin_top = -192;
					document.getElementById('cgi-dialog-box').style.marginTop = this_dialog.margin_top+"px";
				}
			},100);
			document.getElementById('hide-cgi-dialog').style.display = "none";
			document.getElementById('show-cgi-dialog').style.display = "block";
		}
	},

	show : function () {
		if (this.margin_top != 0) {
			clearInterval(this.hide_timer);
			clearInterval(this.show_timer);
			var this_dialog = this;
			this.show_timer = setInterval(function () {
				if (this_dialog.margin_top == 0) {
					clearInterval(this_dialog.show_timer);
				} else {
					this_dialog.margin_top += Math.ceil((0 - this_dialog.margin_top) / 4);
					if (this_dialog.margin_top >= -2) this_dialog.margin_top = 0;
					document.getElementById('cgi-dialog-box').style.marginTop = this_dialog.margin_top+"px";
				}
			},100);
			document.getElementById('hide-cgi-dialog').style.display = "block";
			document.getElementById('show-cgi-dialog').style.display = "none";
		}
	}
};

//画像差し替え
cmonos.tool.changeImages = function () {
	for (var i=0; i<arguments.length; i+=2) {
		if (arguments[i] != null && arguments[i+1] != null && document.getElementById(arguments[i])) {
			document.getElementById(arguments[i]).src = arguments[i+1];
		}
	}
};

//	バーグラフの増減
cmonos.bargraph = function () {};
cmonos.bargraph.prototype = {

	item : function(element) {
		if (typeof element == 'object') {
			this.bar = element;
		} else if (typeof element == "string") {
			this.bar = document.getElementById(element);
		} else {
			this.bar = null;
		}
		return this;
	},

	getProperty : function (k) {
		return (this.bar) ? cmonos.element.getProperty(this.bar,k) : {};
	},

	setProperty : function (k,v) {
		if (this.bar) cmonos.element.setProperty(this.bar,k,v);
		return this;
	},

	control : function (old_width,new_width) {
		var property = {
			width : old_width,
			target_width : new_width,
			timer : null
		};
		var this_bargraph = this;
		property.timer = setInterval(function () {
			var bargraph = this_bargraph.getProperty('bargraph');
			if (bargraph.width == bargraph.target_width) {
				clearInterval(bargraph.timer);
				this_bargraph.setProperty('bargraph',null);
				return;
			} else if (bargraph.width < bargraph.target_width) {
				bargraph.width++;
			} else {
				bargraph.width--;
			}
			this_bargraph.bar.style.width = bargraph.width + "px";
			this_bargraph.setProperty('bargraph',bargraph);
		},50);
		this.setProperty('bargraph',property);
	}
};

//カラーパレット
cmonos.tool.colorPalette = {
	element : null,
	target : null,
	dom_disabled : false,
	additional_color_enabled : false,

	open : function (target_id,this_mode) {
		if (!this.dom_disabled && (this_mode == null || this_mode != 'window')) {
			if (target_id.search(/\+$/) != -1) {
				target_id = target_id.replace(/\+$/,'');
				this.additional_color_enabled = true;
			} else {
				this.additional_color_enabled = false;
			}
			this.target = document.getElementById(target_id);
			if (document.selection != null) {
				this.target.focus();
				this.range = document.selection.createRange();
			}
			if (this.element == null) this.create();
			this.element.style.left = (cmonos.document.mousedown.x) ? ((cmonos.document.mousedown.x > 60) ? (cmonos.document.mousedown.x+240 > cmonos.document.mousedown.max_x) ? (cmonos.document.mousedown.max_x - 240) : (cmonos.document.mousedown.x-60) : cmonos.document.mousedown.x)+'px' : "50%";
			this.element.style.top = (cmonos.document.mousedown.y) ? (cmonos.document.mousedown.y+14)+'px' : "50%";
			cmonos.element.item(this.element).moveToFront();
			this.resetTimer();
		} else if (this_mode == null || this_mode != 'dom') {
			window.open('/lib/javascript/palette/colorpalette.html?' + target_id,'colorpalette', 'width=251,height=167,scrollbars=no');
		}
	},

	resetTimer : function () {
		clearTimeout(this.timer);
		var colorpalette = this.element;
		cmonos.element._setOpacity(colorpalette,1);
		this.timer = setTimeout(function () { cmonos.element.item(colorpalette).fadeOut(); },3000);
	},

	getRGBColor : function (this_color) {
		if (this_color == null) {
			this.dom_disabled = true;
			cmonos.element.item(this.element).fadeOut();
			alert("色の取得に失敗しました。別ウィンドウでパレットを開きます。");
			this.open(this.target.id + ((this.additional_color_enabled) ? '+'  : ''));
			return;
		}
		this.resetTimer();
		var my_color = this_color;
		var background_color_enabled = true;
		if (this.additional_color_enabled) {
			if ((this.target.value != '') && (this.target.tagName.toLowerCase() == 'input')) {
				this_color = ',' + this_color;
			} else if (this.target.type != 'text') {
				background_color_enabled = false;
			}
			if (document.selection != null){
				if (this.range && this.range.text != null) {
					var selected_text = this.range.text;
					if (selected_text != null && selected_text.search(/^#[0-9a-fA-F]{6}$/) != -1) {
						this.range.text = my_color;
					} else {
						this.range.text = selected_text + this_color;
					}
				} else {
					this.target.value += this_color;
				}
				if (this.target.tagName.toLowerCase() == 'input') {
					this.target.blur();
					this.target.focus();
				}
			} else if (this.target.selectionStart != null) {
				var scroll_top = null;
				if (this.target.type == 'textarea') scroll_top = this.target.scrollTop;
				var selection_start = this.target.selectionStart;
				var selection_end = this.target.selectionEnd;
				var selected_text = this.target.value.substring(selection_start,selection_end);
				if (selected_text != null) {
					if (selected_text.search(/^#[0-9a-fA-F]{6}$/) != -1) {
						this_color = my_color;
					} else {
						this_color = selected_text + this_color;
					}
				}
				this.target.value = this.target.value.substring(0,selection_start) + this_color + this.target.value.substring(selection_end,this.target.value.length);
				this.target.selectionStart = selection_start + this_color.length;
				this.target.selectionEnd = selection_start + this_color.length;
				if (scroll_top != null) this.target.scrollTop = scroll_top;
				if (this.target.tagName.toLowerCase() == 'input') {
					this.target.blur();
					this.target.focus();
				}
			} else {
				this.target.value += this_color;
			}
		} else {
			this.target.value = my_color;
		}
		if (background_color_enabled) {
			this.target.style.backgroundColor = my_color;
			my_color.match(/^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/);
			if (eval("0x"+RegExp.$1) < 128 && eval("0x"+RegExp.$2) < 128) {
				this.target.style.color = '#FFF';
			} else {
				this.target.style.color = '#000';
			}
		}
	},

	create : function () {
		this.element = document.createElement('table');
		document.getElementsByTagName('body')[0].appendChild(this.element);
		this.element.style.display = "none";
		this.element.style.position = "absolute";
		this.element.style.borderCollapse = "collapse";
		this.element.style.emptyCells = "show";
		this.element.style.borderWidth = "1px";
		this.element.style.background = "transparent none";
		this.element.style.padding = 0;
		this.element.style.margin = 0;
		this.element.cellSpacing = 0;
		this.element.cellPadding = 0;
		this.element.style.MozBoxShadow = '2px 6px 8px rgba(0,0,0,0.3)';
		this.element.style.OBoxShadow = '2px 6px 8px rgba(0,0,0,0.3)';
		this.element.style.msBoxShadow = '2px 6px 8px rgba(0,0,0,0.3)';
		this.element.style.webkitBoxShadow = '2px 6px 8px rgba(0,0,0,0.3)';
		this.element.style.BoxShadow = '2px 6px 8px rgba(0,0,0,0.3)';
		var gray_scale = new Array('#FFFFFF','#CCCCCC','#999999','#666666','#333333','#000000');
		var web_safe_color = new Array('FF','CC','99','66','33','00');
		var palette_tbody = document.createElement('tbody');
		this.element.appendChild(palette_tbody);
		for (var row=0; row<2; row++) {
			for (var r=0; r<6 ;r++) {
				var palette_tr = document.createElement('tr');
				palette_tbody.appendChild(palette_tr);
				this.createColorCell(palette_tr,gray_scale[r]);
				var R = web_safe_color[r];
				for (var col=0; col<3; col++) {
					var B = web_safe_color[(row*3)+col];
					for (var g=0; g<6 ;g++) {
						var G = web_safe_color[g];
						this.createColorCell(palette_tr,'#' + R + G +B);
					}
				}
			}
		}
	},

	createColorCell : function (palette_tr,rgb) {
		var palette_cell = document.createElement('td');
		palette_tr.appendChild(palette_cell);
		palette_cell.style.padding = 0;
		palette_cell.style.margin = 0;
		palette_cell.style.width = "10px";
		palette_cell.style.height = "10px";
		palette_cell.style.borderStyle = "solid";
		palette_cell.style.borderWidth= "1px";
		palette_cell.style.borderColor = "#000000";
		palette_cell.style.backgroundImage = "none";
		palette_cell.style.backgroundColor = rgb;
		var palette_anchor = document.createElement('a');
		palette_cell.appendChild(palette_anchor);
		palette_anchor.style.display = "block";
		palette_anchor.style.margin = 0;
		palette_anchor.style.padding = 0;
		palette_anchor.style.width = "10px";
		palette_anchor.style.height = "10px";
		palette_anchor.style.border = "none";
		palette_anchor.style.backgroundImage = "none";
		palette_anchor.style.backgroundColor = rgb;
		palette_anchor.style.fontSize = "1px";
		palette_anchor.style.lineHeight = "1px";
		palette_anchor.title = rgb;
		var this_palette = this;
		cmonos.element.item(palette_anchor).addEventListener("click", function(){this_palette.getRGBColor(rgb);cmonos.element.item(this_palette.element).moveToFront();}, false).addEventListener("mouseover", function(){this_palette.resetTimer()}, false);
	}
};

//カラースライダー
cmonos.tool.colorSlider = {
	element : null,
	target : null,
	cells : new Array(),
	rgb : new Array(0,0,0),

	open : function (target_id,this_mode) {
		if (this_mode == null || this_mode != 'window') {
			this.target = document.getElementById(target_id);
			if (this.element != null) document.getElementsByTagName('body')[0].removeChild(this.element);
			this.getValues();
			this.create();
			this.element.style.left = (cmonos.document.mousedown.x) ? ((cmonos.document.mousedown.x > 80) ? (cmonos.document.mousedown.x+280 > cmonos.document.mousedown.max_x) ? (cmonos.document.mousedown.max_x - 280) : (cmonos.document.mousedown.x-80) : cmonos.document.mousedown.x)+'px' : "50%";
			this.element.style.top = (cmonos.document.mousedown.y) ? (cmonos.document.mousedown.y+14)+'px' : "50%";
			cmonos.element.item(this.element).moveToFront();
			this.resetTimer();
		} else if (this_mode == null || this_mode != 'dom') {
			window.open('/lib/javascript/palette/colorpicker.html?' + target_id,'colorpicker', 'width=240,height=90,scrollbars=no');
		}
	},

	resetTimer : function () {
		clearTimeout(this.timer);
		var colorpalette = this.element;
		cmonos.element._setOpacity(colorpalette,1);
		this.timer = setTimeout(function () { cmonos.element.item(colorpalette).fadeOut(); },3000);
	},

	create : function () {
		this.element = document.createElement('div');
		document.getElementsByTagName('body')[0].appendChild(this.element);
		this.element.style.visibility = "hidden";
		this.element.style.padding = 0;
		this.element.style.margin = 0;
		this.element.style.position = "absolute";
		this.element.style.fontSize = "1px";
		this.element.style.lineHeight = "1px";
		this.element.style.borderLeft = "1px solid #666";
		this.element.style.borderRight = "1px solid #666";
		this.element.style.MozBoxShadow = '2px 6px 8px rgba(0,0,0,0.3)';
		this.element.style.OBoxShadow = '2px 6px 8px rgba(0,0,0,0.3)';
		this.element.style.msBoxShadow = '2px 6px 8px rgba(0,0,0,0.3)';
		this.element.style.webkitBoxShadow = '2px 6px 8px rgba(0,0,0,0.3)';
		this.element.style.BoxShadow = '2px 6px 8px rgba(0,0,0,0.3)';

		var color_slider_bg = document.createElement('table');
		this.element.appendChild(color_slider_bg);
		color_slider_bg.style.position = "relative";
		color_slider_bg.style.borderCollapse = "collapse";
		color_slider_bg.style.borderSpacing = "0 0";
		color_slider_bg.style.emptyCells = "show";
		color_slider_bg.style.padding = 0;
		color_slider_bg.style.margin = 0;
		color_slider_bg.cellSpacing = 0;
		color_slider_bg.cellPadding = 0;
		color_slider_bg.style.background = "transparent none";

		var slider_tbody = document.createElement('tbody');
		color_slider_bg.appendChild(slider_tbody);
		var n = 0;
		for (var row=0; row<3; row++) {
			var slider_tr = document.createElement('tr');
			slider_tbody.appendChild(slider_tr);
			for (var col=0; col<256 ;col++) {
				this.cells[n] = document.createElement('td');
				this.cells[n].style.padding = 0;
				this.cells[n].style.margin = 0;
				this.cells[n].style.border = "none";
				this.cells[n].style.width = "1px";
				this.cells[n].style.height = "30px";
				this.cells[n].style.backgroundImage = "none";
				this.cells[n].style.backgroundColor = this.getRGBColor(col,row);
				slider_tr.appendChild(this.cells[n]);
				n++;
			}
		}
		var this_slider = this;
		for (var col=0; col<3; col++) {
			var color_slider_track = document.createElement('div');
			this.element.appendChild(color_slider_track);
			color_slider_track.style.width = "256px";
			color_slider_track.style.height = "28px";
			color_slider_track.style.margin = "0";
			color_slider_track.style.backgroundColor = "transparent";
			color_slider_track.style.borderTop = "solid 1px #666";
			color_slider_track.style.borderBottom = "solid 1px #ccc";
			color_slider_track.style.position = "absolute";
			color_slider_track.style.top = (30*col) + "px";
			if (document.compatMode) color_slider_track.style.cursor = "pointer";
			cmonos.element.item(color_slider_track).addEventListener("mouseover", function () { this_slider.resetTimer() }, false);

			var color_slider_handle = document.createElement('div');
			color_slider_track.appendChild(color_slider_handle);
			color_slider_handle.style.width = "5px";
			color_slider_handle.style.height = "28px";
			color_slider_handle.style.position = "absolute";
			color_slider_handle.style.top = "-1px";
			color_slider_handle.style.backgroundColor = "transparent";
			color_slider_handle.style.borderTop = "solid 1px #fff";
			color_slider_handle.style.borderRight = "solid 1px #aaa";
			color_slider_handle.style.borderBottom = "solid 1px #666";
			color_slider_handle.style.borderLeft = "solid 1px #aaa";
			if (document.compatMode && !color_slider_handle.style.cursor) color_slider_handle.style.cursor = "pointer";
			if (col == 0) {
				cmonos.control.slider(color_slider_handle,color_slider_track,{
					onSlide:function(v){this_slider.pick(v,0)},
					onChange:function(v){this_slider.pick(v,0)},
					sliderValue: (this_slider.rgb[0]/255)
				});
			} else if (col == 1) {
				cmonos.control.slider(color_slider_handle,color_slider_track,{
					onSlide:function(v){this_slider.pick(v,1)},
					onChange:function(v){this_slider.pick(v,1)},
					sliderValue: (this_slider.rgb[1]/255)
				});
			} else {
				cmonos.control.slider(color_slider_handle,color_slider_track,{
					onSlide:function(v){this_slider.pick(v,2)},
					onChange:function(v){this_slider.pick(v,2)},
					sliderValue: (this_slider.rgb[2]/255)
				});
			}
		}
	},

	getRGBColor : function (col,row) {
		return '#' + cmonos.value.toHex((row == 0) ? col : this.rgb[0]) + cmonos.value.toHex((row == 1) ? col : this.rgb[1]) + cmonos.value.toHex((row == 2) ? col : this.rgb[2]);
	},

	getValues : function () {
		var default_color = this.target.value;
		if (default_color.search(/^rgb/) != -1) {
			default_color.match(/\((\d+),\s*(\d+),\s*(\d+)\)/);
			this.rgb = (RegExp.$1, RegExp.$2, RegExp$3);
		} else if (default_color.search(/^#[0-9a-fA-F]{6}$/) != -1) {
			default_color.match(/^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/);
			this.rgb[0] = eval("0x"+RegExp.$1);
			this.rgb[1] = eval("0x"+RegExp.$2)
			this.rgb[2] =  eval("0x"+RegExp.$3);
			this.target.style.backgroundColor = default_color;
		}
		this.fixFontColor();
	},

	fixFontColor : function () {
		if (this.rgb[0] < 128 && this.rgb[1] < 128) {
			this.target.style.color = '#FFF';
		} else {
			this.target.style.color = '#000';
		}
	},

	pick : function (v,c) {
		cmonos.element.item(this.element).moveToFront();
		this.resetTimer();
		this.rgb[c] = parseInt(v*255);
		var n = 0;
		for (var row=0; row<3; row++) {
			for (var col=0; col<256; col++) {
				this.cells[n++].style.backgroundColor = this.getRGBColor(col,row);
			}
		}
		var this_color = '#' + cmonos.value.toHex(this.rgb[0]) + cmonos.value.toHex(this.rgb[1]) + cmonos.value.toHex(this.rgb[2]);
		this.target.value = this_color.toUpperCase();
		this.target.style.backgroundColor = this_color;
		this.fixFontColor();
	}
};

//カウントダウン
cmonos.tool.writeCountDown = function (this_id,this_time,this_year,this_mon,this_mday,this_hour,this_min,this_sec,target_span,target_span_discountable) {
	var target_element = document.getElementById(this_id);
	if (!target_element)  return;
	if (target_span == null) target_span = 3600000;
	var month_name = new Array('january','february','march','april','may','june','july','august','september','october','november','december');
	var parse_time = ((new Date()).getTime()) - (new Date(month_name[(this_mon-1)]+' '+this_mday+', '+this_year+' '+this_hour+':'+this_min+':'+this_sec).getTime());
	var abs_parse_time = Math.abs(parse_time);
	if (parse_time >= 0 && target_span_discountable) abs_parse_time -= target_span;
	var parse_day = Math.floor(abs_parse_time/86400000);
	abs_parse_time = abs_parse_time%86400000;
	var parse_hour = Math.floor(abs_parse_time/3600000);
	abs_parse_time = abs_parse_time%3600000;
	var parse_min = Math.floor(abs_parse_time/60000);
	abs_parse_time = abs_parse_time%60000;
	var parse_sec = Math.floor(abs_parse_time/1000);
	var parse_txt = ((parse_day > 0) ? parse_day+'日' : '')+((parse_hour>0) ? parse_hour+'時間' : '')+((parse_min>0) ? parse_min+'分' : '')+parse_sec+'秒';
	if (parse_time < 0) {
		target_element.innerHTML = this_time+'まで、あと'+parse_txt;
	} else if (parse_time >= 0 && parse_time <= target_span) {
		target_element.innerHTML = this_time+'です！';
	} else if (parse_time > target_span) {
		target_element.innerHTML = this_time+'から、'+parse_txt+'が経過';
	}
};

//ショッピング情報連動
cmonos.tool.showPrice = function (tax_frac,tax_rate,this_id,price_limit) {
	var price_element = document.getElementById('price-form-'+this_id);
	var price = price_element.value;
	if (price && isNaN(price)) {
		alert('価格を半角英数字にしてください。');
		price_element.focus();
		price_element.select();
		cmonos.element.item(price_element).addClassName('invalid-field');
		return;
	}
	if (price && price_limit != null && (price < price_limit) && confirm('価格が低すぎます。修正しますか？')) {
		price_element.value = '';
		price_element.focus();
		cmonos.element.item(price_element).addClassName('invalid-field');
		return;
	}
	if (price && !isNaN(price)) {
		price = eval(price) * (1 + tax_rate);
		price = new String((tax_frac == 'floor') ? Math.floor(price) : (tax_frac == 'round') ? Math.round(price) : Math.ceil(price));
		document.getElementById('price-'+this_id).innerHTML = cmonos.value.comma(price);
	} else {
		document.getElementById('price-'+this_id).innerHTML = "0";
	}
	cmonos.validate.field(price_element).bailOut();
};

//	カレンダー
cmonos.calendar = function () {};
cmonos.calendar.prototype = {
	id				:	"calendar-palette",
	className		:	"calendar-palette",
	bodyClassName	:	"clplt-daily",
	callerId		:	null,
	autoClosable	:	true,
	draggable		:	false,
	draggableOptions	:	{},
	header			:	"",
	footer			:	"",
	defaultX		:	null,
	defaultY		:	null,
	positionFixed	:	false,
	week			:	new Array('日','月','火','水','木','金','土'),
	year			:	(new Date()).getFullYear(),
	mon				:	((new Date()).getMonth() + 1),
	func			:	function () {},
	appear			:	function (y,m,c) {
							if (c != null) {
								if (c == this.callerId && !this._disappeared) {
									this.disappear();
									return;
								} else {
									this.callerId = c;
								}
							}
							this._disappeared = false;
							if (y != null && y != "" && !isNaN(y) && y >= 1970 && y < 2036) this.year = parseInt(y);
							if (m != null && m != "" && !isNaN(m)) this.mon = parseInt(m);
							var new_cal = false;
							var calendar = this;
							if (!this._calendar) {
								this._calendar = document.createElement('div');
								document.getElementsByTagName('body')[0].appendChild(this._calendar);
								this._calendar.style.visibility = "hidden";
								new_cal = true;
							}
							this._calendar.id = this.id;
							this._calendar.className = this.className;
							if (this.positionFixed) {
								this._calendar.style.position = (navigator.userAgent.indexOf("MSIE") != -1 && typeof document.documentElement.style.msInterpolationMode == "undefined") ? "absolute" : "fixed";
							} else {
								this._calendar.style.position = "absolute";
							}
							this._calendar.style.left = (this.defaultX != null) ? this.defaultX+'px' : (cmonos.document.mousedown.x != null) ? (cmonos.document.mousedown.x+5-((this._calendar.style.position == "absolute") ? 0 : cmonos.window.getPageXOffset()))+'px' : "50px";
							this._calendar.style.top = (this.defaultY != null) ? this.defaultY+'px' : (cmonos.document.mousedown.y != null) ? (cmonos.document.mousedown.y+5-((this._calendar.style.position == "absolute") ? 0 : cmonos.window.getPageYOffset()))+'px' : "50px";
							if (this.autoClosable) {
								cmonos.element.item(this._calendar).addEventListener("mouseover", function () {calendar._setTimer()}, false);
							}

							//ヘッダ
							this._createHeader();

							//ナビ
							if (new_cal) {
								var navi = document.createElement('div');
								navi.className = "clplt-navi";
								this._calendar.appendChild(navi);

								var prevYear = document.createElement('a');
								navi.appendChild(prevYear);
								prevYear.className = "clplt-navi-prev-year";
								prevYear.innerHTML = "&nbsp;&laquo;&nbsp;";
								cmonos.element.item(prevYear).addEventListener('click',function (e) {calendar._prevYear();cmonos.element.stopPropagation(e);cmonos.element.preventDefault(e);});

								var prev = document.createElement('a');
								navi.appendChild(prev);
								prev.className = "clplt-navi-prev";
								prev.innerHTML = "&nbsp;&lsaquo;&nbsp;";
								cmonos.element.item(prev).addEventListener('click',function (e) {calendar._prev();cmonos.element.stopPropagation(e);cmonos.element.preventDefault(e);});

								this._calTitle = document.createElement('span');
								navi.appendChild(this._calTitle);
								this._calTitle.className = "clplt-title";

								var next = document.createElement('a');
								navi.appendChild(next);
								next.className = "clplt-navi-next";
								next.innerHTML = "&nbsp;&rsaquo;&nbsp;";
								cmonos.element.item(next).addEventListener('click',function (e) {calendar._next();cmonos.element.stopPropagation(e);cmonos.element.preventDefault(e);});

								var nextYear = document.createElement('a');
								navi.appendChild(nextYear);
								nextYear.className = "clplt-navi-next-year";
								nextYear.innerHTML = "&nbsp;&raquo;&nbsp;";
								cmonos.element.item(nextYear).addEventListener('click',function (e) {calendar._nextYear();cmonos.element.stopPropagation(e);cmonos.element.preventDefault(e);});

								this._calTable = document.createElement('table');
								this._calendar.appendChild(this._calTable);
								this._calTable.className = "clplt-table";
								var calth = document.createElement('thead');
								this._calTable.appendChild(calth);
								var calthtr = document.createElement('tr');
								calth.appendChild(calthtr);
								var wclass = new Array('su','mo','tu','we','th','fr','sa');
								for (var i = 0; i < 7; i++) {
									var calthtrtd = document.createElement('th');
									calthtr.appendChild(calthtrtd);
									calthtrtd.className = wclass[i];
									calthtrtd.appendChild(document.createTextNode(this.week[i]));
								}
								this._calBody = document.createElement('tbody');
								this._calTable.appendChild(this._calBody);
							}
							this._createCalBody();

							//フッタ
							this._createFooter();

							if (new_cal && this.draggable) {
								if (document.compatMode) this._calendar.style.cursor = "move";
								cmonos.element.item(this._calendar).draggable(this.draggableOptions);
							}
							cmonos.element.item(this._calendar).moveToFront();

							//表示
							if (this._calendar.style.visibility == "hidden" || this._calendar.style.display == "none") {
								cmonos.element.item(this._calendar).fadeIn();
							}
						},
	_createCalTitle	:	function () {
							return this.year + '年' + this.mon + '月';
						},
	_createCalBody	:	function () {
							if (this._calBody == null) {
								this.appear();
								return;
							}
							this._calTitle.innerHTML = this._createCalTitle();
							var first = this._wday(this.year,this.mon,1);
							var last = this._lastDate(this.year,this.mon);
							var cell = last + first - ((last + first) % 7) + (((last + first) % 7 > 0) ? 7 : 0);
							var prev_year;
							var prev_mon;
							var next_year;
							var next_mon;
							if (this.mon == 1) {
								prev_year = parseInt(this.year) - 1;
								prev_mon = 12;
							} else {
								prev_year = parseInt(this.year);
								prev_mon = parseInt(this.mon) - 1;
							}
							if (this.mon == 12) {
								next_year = parseInt(this.year) + 1;
								next_mon = 1;
							} else {
								next_year = parseInt(this.year);
								next_mon = parseInt(this.mon) + 1;
							}
							var prev_last = this._lastDate(prev_year,prev_mon);
							var w = 1;
							var wclass = new Array('su','mo','tu','we','th','fr','sa');
							var caltr;
							var calBody = document.createElement('tbody');
							this._calTable.replaceChild(calBody,this._calBody);
							calBody.className = this.bodyClassName;
							for (var i = 0; i < cell; i++) {
								var date = i - first + 1;
								var wd = i % 7;
								var y = this.year;
								var m = this.mon;
								if (wd == 0) {
									caltr = document.createElement('tr');
									calBody.appendChild(caltr);
									caltr.className = "w" + w++;
								}
								var caltrtd = document.createElement('td');
								caltr.appendChild(caltrtd);
								if (date < 1) {
									date = prev_last + date;
									caltrtd.className = "rest";
									y = prev_year;
									m = prev_mon;
								} else if (date <= last) {
									var title = this._holidayName(this.year,this.mon,date);
									if (title != "") {
										caltrtd.title = title;
										caltrtd.className = "ho";
									} else if (y == (new Date()).getFullYear() && m == ((new Date()).getMonth() + 1) && date == (new Date()).getDate()) {
										caltrtd.className = "to";
									} else {
										caltrtd.className = wclass[wd];
									}
								} else {
									date -= last;
									caltrtd.className = "rest";
									y = next_year;
									m = next_mon;
								}
								var a = document.createElement('a');
								caltrtd.appendChild(a);
								a.appendChild(document.createTextNode(date));
								this._setOnClick(a,y,m,date);
							}
							this._calBody = calBody;
						},
	_setOnClick		:	function (a,y,m,d) {
							var calendar = this;
							cmonos.element.item(a).addEventListener('click',function (e) {calendar.func(y,m,d);calendar._setTimer();cmonos.element.stopPropagation(e);cmonos.element.preventDefault(e);});
						},
	_createHeader	:	function () {
							var header;
							if (this.header != null) {
								if (this.header.constructor == String) {
									header = document.createElement('div');
									header.className = "clplt-header";
									header.innerHTML = this.header;
								} else {
									header = this.header;
								}
							}
							if (this._header == null) {
								this._calendar.appendChild(header);
							} else {
								this._calendar.replaceChild(header,this._header);
							}
							this._header = header;
						},
	_createFooter	:	function () {
							var footer;
							if (this.footer != null) {
								if (this.footer.constructor == String) {
									footer = document.createElement('div');
									footer.className = "clplt-footer";
									footer.innerHTML = this.footer;
								} else {
									footer = this.footer;
								}
							}
							if (this._footer == null) {
								this._calendar.appendChild(footer);
							} else {
								this._calendar.replaceChild(footer,this._footer);
							}
							this._footer = footer;
						},
	_prev			:	function () {
							if (this.mon == 1) {
								this.year--;
								this.mon = 12;
							} else {
								this.mon--;
							}
							this._createCalBody();
							this._setTimer();
						},
	_next			:	function () {
							if (this.mon == 12) {
								this.year++;
								this.mon = 1;
							} else {
								this.mon++;
							}
							this._createCalBody();
							this._setTimer();
						},
	_prevYear		:	function () {
							this.year--;
							this._createCalBody();
							this._setTimer();
						},
	_nextYear		:	function () {
							this.year++;
							this._createCalBody();
							this._setTimer();
						},
	_lastDate		:	function (y,m) {
							return (m == 4 || m == 6 || m == 9 || m == 11) ? 30 : (m == 2 && this._isLeapYear(y)) ? 29 : (m == 2) ? 28 : 31;
						},
	_setTimer		:	function () {
							if (this.autoClosable) {
								if (this._timer != null) clearTimeout(this._timer);
								cmonos.element._setOpacity(this._calendar,1);
								var calendar = this;
								this._timer = setTimeout(function () {calendar.disappear()},3000);
							}
						},
	_disappeared	:	true,
	disappear		:	function () {
							if (this._calendar != null) {
								this.callerId = null;
								cmonos.element.item(this._calendar).fadeOut();
								clearTimeout(this._timer);
							}
							this._disappeared = true;
						},
	isDisappeared	:	function () { return this._disappeared },
	_isLeapYear		:	function (year) {
							return ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) ? true : false;
						},
	_isInvalidDate	:	function (y,m,d) {
							var feb = (this._isLeapYear(y)) ? 29 : 28;
							if (((m == 4 || m == 6 || m == 9 || m == 11) && d > 30) || (m == 2 && d > feb) || d > 31 || d < 1) {
								return true;
							} else {
								return false;
							}
						},
	_wday			:	function (y,m,d) {
							var date = new Date();
							date.setFullYear(parseInt(y));
							date.setMonth(parseInt(m) - 1);
							date.setDate(parseInt(d));
							date.setHours(0);
							return date.getDay();
						},
	_nWday			:	function (year,mon,num,wday) {
							var first = this._wday(year,mon,1);
							mday = (num * 7) + wday - first - 6;
							return (wday >= first) ? mday : 7 + mday;
						},
	_springEquinox	:	function (year) {
							return this._gauss(0.24242 * year - this._gauss(year/4) + 35.84);
						},
	_autumnalEquinox:	function (year) {
							return this._gauss(0.24204 * year - this._gauss(year/4) + 39.01);
						},
	_gauss			:	function (n) {
							return (n >= 0) ? parseInt(n) : parseInt(n-1);
						},
	_holidayName	:	function (y,m,d) {
							var hname = this.__holidayName(y,m,d);
							if (hname != "") {
								return hname;
							} else if (this._wday(y,m,d) == 1 && !this._isInvalidDate(y,m,d-1)) {
								var yname = this.__holidayName(y,m,d-1);
								return (yname != "") ? '振り替え休日' : '';
							} else {
								return "";
							}
						},
	__holidayName	:	function (y,m,d) {
							if (m == 1) {
								return (d == 1) ? '元日' : (d == ((y < 2000) ? 15 : this._nWday(y,1,2,1))) ? '成人の日' : "";
							} else if (m == 2) {
								return (d == 11) ? '建国記念の日' : "";
							} else if (m == 3) {
								return (d == this._springEquinox(y)) ? '春分の日' : "";
							} else if (m == 4) {
								return (d == 29) ? ((y < 1989) ? '天皇誕生日(昭和)' : (y < 2007) ? 'みどりの日' : '昭和の日') : "";
							} else if (m == 5) {
								var w = this._wday(y,m,d);
								return (d == 3) ? '憲法記念日' : (y >= 1988 && d == 4) ? ((y < 2007) ? '国民の休日' : 'みどりの日') : (d == 5) ? 'こどもの日' : (d == 6 && w > 0 && w <= 3) ? '振り替え休日' : "";
							} else if (m == 6) {
								return "";
							} else if (m == 7) {
								return (y >= 1996 && d == ((y < 2003) ? 20 : this._nWday(y,7,3,1))) ? '海の日' : "";
							} else if (m == 8) {
								return "";
							} else if (m == 9) {
								return (y >= 1966 && d == ((y < 2003) ? 15 : this._nWday(y,9,3,1))) ? '敬老の日' : (d == this._autumnalEquinox(y)) ? '秋分の日' : (y >= 2003 && d == 22 && this._nWday(y,9,3,1) == 21 && this._autumnalEquinox(y) == 23) ? '国民祝日法による休日' : "";
							} else if (m == 10) {
								return (y >= 1966 && d == ((y < 2000) ? 10 : this._nWday(y,10,2,1))) ? '体育の日' : "";
							} else if (m == 11) {
								return (d == 3) ? '文化の日' : (d == 23) ? '勤労感謝の日' : "";
							} else if (m == 12) {
								return (y >= 1989 && d == 23) ? '天皇誕生日(平成)' : "";
							}
						}
};

//カレンダーパレット
cmonos.tool.calendarPalette = {
	palette : null,
	open : function (y,m,d,f) {
		if (this.palette == null) this.palette = new cmonos.calendar();
		var year_selector = document.getElementById(y);
		var mon_selector = document.getElementById(m);
		var mday_selector = document.getElementById(d);
		this.palette.func = function (year,mon,mday) {
			cmonos.form.field(year_selector).setValue(year).bailOut();
			cmonos.form.field(mon_selector).setValue(mon).bailOut();
			cmonos.form.field(mday_selector).setValue(mday).bailOut();
			if (f != null) f();
		};
		this.palette.appear(
			((year_selector.type == "text") ? year_selector.value : year_selector.options[year_selector.options.selectedIndex].value),
			((mon_selector.type == "text") ? mon_selector.value : mon_selector.options[mon_selector.options.selectedIndex].value),
			y
		);
	}
};

//ドラッガブルマップ
cmonos.tool.draggableMap = {

	set : function (map_id,marker_id,field_id) {
		if (marker_id != null && marker_id != '') {
			cmonos.element.item(marker_id).draggable(
				{
					endeffect	:	function (element) {
										var element_top = parseInt(element.style.top);
										var element_left = parseInt(element.style.left);
										var map_width = element.parentNode.offsetWidth;
										var map_height = element.parentNode.offsetHeight;
										if (element_top < 0) {
											element.style.top = '0px';
										} else if (element_top > map_height) {
											element.style.top = map_height + 'px';
										}
										if (element_left < 0) {
											element.style.left = '0px';
										} else if (element_left > map_width ) {
											element.style.left = map_width + 'px';
										}
										if (field_id != null) {
											document.getElementById(field_id + '-marker-top').value = parseInt(element.style.top);
											document.getElementById(field_id + '-marker-left').value = parseInt(element.style.left);
										}
									}
				},
				true
			);
		}
		var map = document.getElementById(map_id);
		var map_width = map.offsetWidth;
		var map_height = map.offsetHeight;
		var frame_width = map.parentNode.offsetWidth;
		var frame_height = map.parentNode.offsetHeight;
		var zoom_enabled = (field_id == null && navigator.userAgent.indexOf("Trident/4.0") == -1) ? true : false;
		cmonos.element.item(map.parentNode).draggable(
			{
				endeffect : ((field_id == null) ? null : function (element) {
					document.getElementById(field_id + '-top').value = parseInt(element.style.top);
					document.getElementById(field_id + '-left').value = parseInt(element.style.left);
				}),
				target : map,
				canvas : { width : frame_width, height : frame_height },
				grip : 10,
				boundless : zoom_enabled
			},
			true
		);
		if (zoom_enabled) {
			cmonos.element.item(map.parentNode).addEventListener('mousewheel',function (e) {
				e = e || event;
				var delta;
				var scale = cmonos.element.getProperty(map,'scale');
				if (!scale) scale = 1;
				if (e.wheelDelta) {
					delta = e.wheelDelta / 120; 
					if (window.opera) delta = -delta;
				} else if (e.detail) {
					delta = -e.detail / 3;
				}
				if (delta > 0) {
					scale += 0.05;
				} else {
					scale -= 0.05;
				}
				if (scale > 0.1 && scale < 100) { 
					if (typeof (document.createElement('div')).style.MozTransform != 'undefined'
					 || typeof (document.createElement('div')).style.webkitTransform != 'undefined'
					 || typeof (document.createElement('div')).style.OTransform != 'undefined'
					 || typeof (document.createElement('div')).style.transform != 'undefined') {
						var transform = 'scale('+scale+')';
						map.style.MozTransform = transform;
						map.style.webkitTransform = transform;
						map.style.OTransform = transform;
						map.style.transform = transform;
					} else {
						map.style.zoom = scale;
					}
					cmonos.element.setProperty(map,'scale',scale);
				}
				cmonos.element.stopPropagation(e);
				cmonos.element.preventDefault(e);
			});
		}
	},

	setMapClassById : function (map_id,map_class_id,marker_id) {
		var this_map = document.getElementById(map_id);
		if (map_class_id != null && map_class_id != '') {
			this_map.className = 'map-' + map_class_id;
			this_map.style.top = '0px';
			this_map.style.left = '0px';
		}
		if (marker_id != null) {
			var this_marker = document.getElementById(marker_id);
			var map_width = this_map.offsetWidth;
			var map_height = this_map.offsetHeight;
			var frame_width = this_map.parentNode.offsetWidth;
			var frame_height = this_map.parentNode.offsetHeight;
			var marker_top = parseInt(this_marker.style.top);
			var marker_left = parseInt(this_marker.style.left);
			if (marker_top < 0 || marker_top > frame_height || marker_top > map_height) {
				marker_top = parseInt(frame_height / 2);
				if (marker_top > map_height) marker_top = parseInt(map_height / 2);
				this_marker.style.top = marker_top + 'px';
			}
			if (marker_left < 0 || marker_left > frame_width || marker_left > map_width) {
				marker_left = parseInt(frame_width / 2);
				if (marker_left > map_width) marker_left = parseInt(map_width / 2);
				this_marker.style.left = marker_left + 'px';
			}
		}
	}
};

// niceEdit (http://nicedit.com/) 読み込み/適用
cmonos.tool.htmlEditor = {
	editor : [],
	loaded : false,

	load : function() {
		if (!this.loaded) {
			var scripts = document.getElementsByTagName('script');
			for (var i=0; i<scripts.length; i++) {
				if (scripts[i].src.search(/nicEdit\.js$/) != -1) return true;
			}
			var header = document.getElementsByTagName('head')[0];
			var loader = document.createElement('script');
			loader.setAttribute('type','text/javascript');
			loader.setAttribute('src','/lib/javascript/nicEdit.js');
			header.appendChild(loader);
			this.loaded = true;
		}
	},

	textarea : function(element) {
		if (typeof element == 'object') {
			this.area = element;
		} else if (typeof element == "string") {
			this.area = document.getElementById(element);
		} else {
			this.area = null;
		}
		if (this.area && this.area.id == null) {
			this.area.id = (this.area.name || 'editor-') + (new Date()).getMilliseconds();
		}
		return this;
	},

	update : function() {
		if (this.area != null && this.editor[this.area.id] != null) {
			this.editor[this.area.id].updateInstance(this.area.id);
		}
	},

	toggle : function(open,panel_type) {
		if (open) {
			if (typeof nicEditor == "undefined") {
				this.load();
				var this_area = this.area;
				setTimeout(function() { cmonos.tool.htmlEditor.textarea(this_area).toggle(open,panel_type) },500);
			} else {
				if (this.editor[this.area.id] == null) this.editor[this.area.id] = new nicEditor({panelType : panel_type}).panelInstance(this.area.id);
				this.toggleHelper(false);
			}
		} else {
			if (this.editor[this.area.id] != null) {
				this.editor[this.area.id].removeInstance(this.area.id);
				this.editor[this.area.id] = null;
			}
			this.toggleHelper(true);
		}
	},

	toggleHelper : function(open) {
		if (open) {
			if (document.getElementById(this.area.id + '-helper')) document.getElementById(this.area.id + '-helper').style.display = "";
			if (document.getElementById(this.area.id + '-fit')) document.getElementById(this.area.id + '-fit').style.display = "";
		} else {
			if (document.getElementById(this.area.id + '-helper')) document.getElementById(this.area.id + '-helper').style.display = "none";
			if (document.getElementById(this.area.id + '-fit')) document.getElementById(this.area.id + '-fit').style.display = "none";
		}
	}
}

cmonos.init.document();
//cmonos.init.loadCartJs();



