	var now = new Date();
	var absnow = now;
	var Win = (navigator.userAgent.indexOf('Win') != -1);
	var Mac = (navigator.userAgent.indexOf('Mac') != -1);
	var X11 = (navigator.userAgent.indexOf('X11') != -1);
	var Moz = (navigator.userAgent.indexOf('Gecko') != -1);
	var msie = (navigator.userAgent.indexOf('MSIE') != -1);

	// 文字列に '0' を付け足す
	function ZeroFill(iNum, iDigits) {
		var sNum = CvtNtoS(iNum);
		while (sNum.length < iDigits) {
			sNum = "0" + sNum;
		}
		return sNum;
	}

	// 数値を文字列に変換
	function CvtNtoS(iNum) {
		return ("" + iNum);
	}

	//入力後退避位置
	if (Mac && msie) {
		var gox = 2000;
		var goy = 2000;
	} else {
		var gox = -300;
		var goy = -300;
	}
	//n4用レイヤー出力位置
	if (document.layers) {
		var n4_left = 300;
		var n4_top = 100;
	}

	calenderLay['calender'] = new calenderLay('calender', -100, -100, '');

	function outCalender(oj, e, dateType, arg1) {
		set_event__outCalender(); //イベントキャプチャースタート

		// 日付タイプデフォルト値設定と空白文字列除去
		if (!arguments[2]) {
			dateType = 'yyyy/mm/dd';
		} else {
			arguments[2].split(' ').join('').split('　').join('');
		}

		// 月移動フラグデフォルト設定
		if (!arguments[3]) {
			arg1 = 0;
		}

		outCalender.arg1 = arg1;
		outCalender.oj = oj;
		outCalender.dateType = dateType;

		// 現在初期化
		if (arg1 == 0) {
			now = new Date();
		}

		// 年月日取得
		nowdate   = now.getDate();
		nowmonth = now.getMonth();
		nowyear   = now.getYear();

		// 月移動処理
		if (nowmonth == 11 && arg1 > 0) {
			//12月でarg1が+なら
			nowmonth = -1 + arg1;
			nowyear++;
			//月はarg1-1;1年加算
		} else if (nowmonth == 0 && arg1 < 0) {
			//1月でarg1が-なら
			nowmonth = 12 + arg1;
			nowyear--;
			//月はarg1+12;1年減算
		} else {
			nowmonth += arg1;
			//2-11月なら月は+arg1
		}

		// 2000年問題対応
		if (nowyear < 1900) {
			nowyear = 1900 + nowyear;
		}

		// 現在月を確定
		now   = new Date(nowyear, nowmonth, 1);

		// YYYYMM作成
		nowyyyymm = nowyear * 100 + nowmonth;

		// YYYY/MM作成
		nowtitleyyyymm = nowyear + '/' + (nowmonth + 1);

		// 週設定
		week = new Array('日', '月', '火', '水', '木', '金', '土');

		// カレンダー構築用基準日の取得
		fstday = now;  //今月の1日
		startday = fstday - (fstday.getDay() * 1000*60*60*24);  //最初の日曜日
		startday = new Date(startday);

		// カレンダー構築用HTML
		ddata = '<form><table border=0 cellpadding=0 cellspacing=0 class="border"><tr><td class="border"><table border=0 bgcolor="#e0ffe0">';

		// Month
		ddata += '<TR id="trmonth"><th><a href="javascript:outCalender(parent.document.' + oj.form.name + '.' + oj.name + ',null,\'' + dateType + '\',-1)\;"><img src="../resources/btn-left.png" width=12 height=11 border=0 alt="前の月"></a></th><th><a href="javascript:outCalender(parent.document.' + oj.form.name + '.' + oj.name + ',null,\'' + dateType + '\',0)\;"><img src="../resources/btn-center.png" width=12 height=11 border=0 alt="今月"></a></th><th colspan=3 align="center"><NOBR>';
		ddata += nowtitleyyyymm;
		ddata += '</NOBR></TH><th><a href="javascript:outCalender(parent.document.' + oj.form.name + '.' + oj.name + ',null,\'' + dateType + '\',1)\;"><img src="../resources/btn-right.png" width=12 height=11 border=0 alt="次の月"></a></th><th><a href="javascript:moveLAYOJ(getStyleOj(\'calender\'),' + gox + ',' + goy + ');"><img src="../resources/btn-close.png" width=12 height=11 border=0 alt="閉じる"></a></TH></TR>';

		// Week
		ddata += '<tr bgcolor="#d0d0ff">';
		for (i = 0; i < 7; i++) {
			ddata += '<TH>\n';
			ddata += week[i];
			ddata += '</TH>\n';
		}
		ddata += '</TR>\n';

		// Date
		for (j = 0; j < 6; j++) {
			ddata += '<tr bgcolor="#e0e0e0">\n'
			for (i = 0; i < 7; i++) {
				nextday = startday.getTime() + (i * 1000*60*60*24);
				wrtday = new Date(nextday);
				wrtdate = wrtday.getDate();
				wrtmonth = wrtday.getMonth();
				wrtyear = wrtday.getYear();
				if (wrtyear < 1900) {
					wrtyear = 1900 + wrtyear;
				}
				wrtyyyymm = wrtyear * 100 + wrtmonth;
				wrtyyyymmdd = '' + wrtyear + '/' + (wrtmonth + 1) + '/' + wrtdate;
				getday = getWeek(wrtyyyymmdd);
				var outputdate = eval(getDateType(dateType));
				wrtdateA = '<a href="javascript:function v() {document.' + oj.form.name + '.' + oj.name + '.value=(\'' + outputdate + '\'); if (!(Mac&&document.layers)) calenderLay[\'calender\'].moveLAYOJ(getStyleOj(\'calender\'),' + gox + ',' + goy + '); stop_event__outCalender()}; v();"><font color="#000000">' + wrtdate + '</font>' + '</a>';

				if (wrtyyyymm != nowyyyymm) {
					ddata += '<TD align="right" BGCOLOR="#f0f0f0">' + wrtdateA;
				} else if (wrtdate == absnow.getDate() && wrtmonth == absnow.getMonth() && wrtday.getYear() == absnow.getYear()) {
					ddata += '<TD align="right" BGCOLOR="#f0e0f0"><FONT COLOR="#ffffff">' + wrtdateA + '</FONT>';
				} else {
					ddata += '<TD align="right">' + wrtdateA;
				}
				ddata += '</TD>\n';
			}
			ddata += '</TR>\n';

			startday = new Date(nextday);
			startday = startday.getTime() + (1000*60*60*24);
			startday = new Date(startday);
		}

		// ステータス行 日付タイプ
		//ddata += '<TR><TD COLSPAN=7 ALIGN="center" STYLE="font-size: 11px;">\n';
		//ddata += outCalender.dateType + '</TD></TR>';
		ddata += '</TABLE></td></tr></table></FORM></BODY></HTML>\n';

		calenderLay['calender'].outputLAYOJ(getLayOj('calender'), ddata);

		if (e != null) {
			if (navigator.userAgent.indexOf('Gecko') != -1) {
				//n6,m1用
				var left = e.currentTarget.offsetLeft + 50;
				var top = e.currentTarget.offsetTop  - 30;
			} else {
				var left = getMouseX(e) + 50;
				var top = getMouseY(e) - 30;
			}
			if (document.layers) {
				var left = n4_left;
				var top   = n4_top;
			}//n4修正
			calenderLay['calender'].moveLAYOJ(getStyleOj('calender'), left, top);
		}
	}

	// 曜日取得
	function getWeek(date) {
		if (arguments.length > 0) {
			date = date;
		} else {
			date = null;
		}
		var now = new Date(date);
		var week = new Array('日', '月', '火', '水', '木', '金', '土');
		return week[now.getDay()];
	}

	// 出力日付のデータタイプ
	function getDateType (dateType) {
		switch(dateType) {
		case 'yyyy':
			dtate = "'' + wrtyear";
			break;
		case 'yyyy/mm':
			dtate = "'' + wrtyear + '/' + (wrtmonth + 1)";
			break;
		case 'yyyy/mm/dd':
			dtate = "'' + wrtyear + '/' + (wrtmonth + 1) + '/' + wrtdate";
			break;
		case 'mm/dd':
			dtate = "'' + (wrtmonth + 1) + '/' + wrtdate";
			break;
		case 'mm':
			dtate = "'' + (wrtmonth + 1)";
			break;
		case 'dd':
			dtate = "'' + wrtdate";
			break;
		case 'yyyy/mm/dd[曜]':
			dtate = "'' + wrtyear + '/' + (wrtmonth + 1) + '/' + wrtdate + ' [' + getday + ']'";
			break;
		case 'yyyy/mm/dd(曜)':
			dtate = "'' + wrtyear + '/' + (wrtmonth + 1) + '/' + wrtdate + ' (' + getday + ')'  ";
			break;
		case 'yyyy年mm月dd日(曜)':
			dtate = "'' + wrtyear + '年' + (wrtmonth + 1) + '月' + wrtdate + '日(' + getday + ')'";
			break;
		case 'mm月dd日':
			dtate = "'' + (wrtmonth + 1) + '月' + wrtdate + '日'";
			break;
		case 'mm月dd日(曜)':
			dtate = "'' + (wrtmonth + 1) + '月' + wrtdate + '日(' + getday + ')'";
			break;
		default:
			dtate = "'' + wrtyear + '/' + (wrtmonth + 1) + '/' + wrtdate";
		}
		return dtate;
	}

	//--レイヤー生成
	function calenderLay (layName, x, y, dateType) {
		this.id = layName;				// ドラッグできるようにするレイヤー名
		this.x = x;								// 初期left位置
		this.y = y;								// 初期top位置
		this.dateType = dateType;	// YYYY/MM/DD
		this.day = new Array();

		if (document.layers) {
			//n4用
			this.div = '<layer name="' + layName + '" left="' + x + '" top="' + y + '" onfocus="clickElement=\'' + layName + '\'; mdown_outCalender(event); return false"><a href="javascript:void(0);" onmousedown="clickElement= \'' + layName + '\'; mdown_outCalender(event); return false"></a></layer>';
		} else {
			//n4以外用
			this.div = '<div id="' + layName + '" class="dragLays" onmousedown="clickElement=\'' + layName + '\'; mdown_outCalender(event); return false" style="position: absolute; left: ' + x + 'px; top: ' + y + 'px;"></div>';
		}
		document.write(this.div);
		return;
	}

	calenderLay.prototype.moveLAYOJ   = moveLAYOJ;   //メソッドを追加する
	calenderLay.prototype.outputLAYOJ = outputLAYOJ; //メソッドを追加する
	calenderLay.prototype.zindexLAYOJ = zindexLAYOJ; //メソッドを追加する

	//--レイヤー移動
	function moveLAYOJ(oj, x, y) {
		if (document.getElementById) {  //e5,e6,n6,m1,o6用
			oj.left = x;
			oj.top   = y;
		} else if (document.all) {      //e4用
			oj.pixelLeft = x;
			oj.pixelTop   = y;
		} else if (document.layers) {   //n4用
			oj.moveTo(x, y);
		}
	}

	//--HTML出力
	function outputLAYOJ(oj, html) {
		if (document.getElementById) {
			oj.innerHTML = html;  //n6,m1,e5,e6用
		} else if (document.all) {
			oj.parent.innerHTML = html; //e4用
		} else if (document.layers) {                      //n4用
			with(oj.document) {
				open();
				write(html);
				close();
			}
		}
	}

	//--奥行きZ座標set
	function zindexLAYOJ(oj, zindex) {
		if (document.getElementById) {
			oj.zIndex = zindex;  //n6,m1,e5,e6,o6用
		} else if (document.all) {
			oj.zIndex = zindex;  //e4用
		} else if (document.layers) {
			oj.zIndex = zindex;  //n4用
		}
	}

	//--layNameで指定したオブジェクトを返す(必ずonload後に実行すること)
	function getLayOj(layName) {
		if (document.getElementById) {
			//e5,e6,n6,m1,o6用
			return document.getElementById(layName);
		} else if (document.all) {
			//e4用
			return document.all(layName);
		} else if (document.layers) {
			//n4用
			return document.layers[layName];
		}
	}

	function getStyleOj(clickElement) {
		return (!!document.layers)?getLayOj(clickElement):getLayOj(clickElement).style;
	}

	//--マウスX座標get
	function getMouseX(e) {
		if (window.opera) {
			//o6用
			return e.clientX;
		} else if (document.all) {
			//e4,e5,e6用
			return document.body.scrollLeft+event.clientX;
		} else if (document.layers || document.getElementById) {
			//n4,n6,m1用
			return e.pageX;
		}
	}

	//--マウスY座標get
	function getMouseY(e) {
		if (window.opera) {
			//o6用
			return e.clientY;
		} else if (document.all) {
			//e4,e5,e6用
			return document.body.scrollTop+event.clientY;
		} else if (document.layers || document.getElementById) {
			//n4,n6,m1用
			return e.pageY;
		}
	}

	//--レイヤ−左辺X座標get
	function getLEFT(layName) {
		if (document.all) {
			//e4,e5,e6,o6用
			return document.all(layName).style.pixelLeft;
		} else if (document.getElementById) {
			//n6,m1用
			return (document.getElementById(layName).style.left != "")?parseInt(document.getElementById(layName).style.left):"";
		} else if (document.layers) {
			//n4用
			return document.layers[layName].left;
		}
	}

	//--レイヤ−上辺Y座標get
	function getTOP(layName) {
		if (document.all) {
			//e4,e5,e6,o6用
			return document.all(layName).style.pixelTop;
		} else if (document.getElementById) {
			//n6,m1用
			return (document.getElementById(layName).style.top != "")?parseInt(document.getElementById(layName).style.top):"";
		} else if (document.layers) {
			//n4用
			return document.layers[layName].top;
		}
	}

	//--マウスカーソルを動かした時レイヤーもmoveLAYOJで動かす
	function mmove_outCalender(e) {
		if (!window.clickElement) {
			return;
		}
		if (getLayOj(clickElement)) {
			movetoX = getMouseX(e) - offsetX;
			movetoY = getMouseY(e) - offsetY;
			var oj = getStyleOj(clickElement);
			calenderLay[clickElement].moveLAYOJ(oj, movetoX, movetoY);
			return false;
		}
	}

	//--マウスボタンを押し下げた時
	//  レイヤー内のカーソルoffset位置取得
	function mdown_outCalender(e) {
		if (navigator.userAgent.indexOf('Gecko') != -1) {
			//n6,m1用
			if (e.currentTarget.className != 'dragLays') {
				return;
			} else {
				clickElement = e.currentTarget.id;
			}
		}
		var selLay = getLayOj(clickElement);
		if (selLay) {
			offsetX = getMouseX(e) - getLEFT(selLay.id);
			offsetY = getMouseY(e) - getTOP(selLay.id);
			if (document.layers) {
				offsetX = getMouseX(e) + 10;
				offsetY = getMouseY(e) + 10;
			}
		}
		return false;
	}

	//--マウスボタンを上げた時ドラッグ解除
	var zcount = 0;
	function mup_outCalender(e) {
		if (!window.clickElement) {
			return;
		}
		if (getLayOj(clickElement)) {
			calenderLay[clickElement].zindexLAYOJ(getStyleOj(clickElement), zcount++);
			clickElement = null;
		}
	}

	//--イベントキャプチャー開始
	function set_event__outCalender() {
		//n4,m1,n6,e4,e5,e6,o6用
		document.onmousemove = mmove_outCalender;
		document.onmouseup = mup_outCalender;
		if (navigator.userAgent.indexOf('Gecko') != -1) {
			//m1,n6用
			document.onmousedown = mdown_outCalender;
		}
		if (document.layers) {
			//n4用
			document.captureEvents(Event.MOUSEMOVE);
			document.captureEvents(Event.MOUSEUP);
		}
	}

	//--イベントキャプチャー停止
	function stop_event__outCalender() {
		//n4,m1,n6,e4,e5,e6,o6用
		document.onmousemove = null;
		document.onmouseup = null;
		if (navigator.userAgent.indexOf('Gecko')!= -1) {
			//m1,n6用
			document.onmousedown = null;
		}
		if (document.layers) {
			//n4用
			document.releaseEvents(Event.MOUSEMOVE);
			document.releaseEvents(Event.MOUSEUP);
		}
	}


	//// Help ////

	function ShowHelp (NAME, X, Y) {
		var offX = 0, offY = 0;
		if (document.layers) {
			chipOBJ = document.layers[NAME];
		}
		if (document.all) {
			chipOBJ = document.all[NAME].style;
		}
		if (chipOBJ.visibility.charAt(0) == "v") {
			return;
		}
		if (document.all) {
			offX = document.body.scrollLeft;
			offY = document.body.scrollTop;
		}
		chipOBJ.visibility = "visible";
		chipOBJ.left = X + offX;
		chipOBJ.top  = Y + offY;
	}

	function HideHelp(NAME) {
		if (document.all) {
			document.all[NAME].style.visibility = "hidden";
		}
		if (document.layers) {
			document.layers[NAME].visibility = "hidden";
		}
	}


	//// Macromedia ////

	function MM_preloadImages() { //v3.0
		var d = document;
		if (d.images) {
			if(!d.MM_p) d.MM_p=new Array();
			var i , j = d.MM_p.length, a = MM_preloadImages.arguments;
			for (i = 0; i < a.length; i++) {
				if (a[i].indexOf("#") != 0) {
					d.MM_p[j] = new Image;
					d.MM_p[j++].src = a[i];
				}
			}
		}
	}

	function MM_swapImgRestore() { //v3.0
		var i, x , a = document.MM_sr;
		for (i = 0; a && i < a.length && (x = a[i]) && x.oSrc; i++) x.src = x.oSrc;
	}

	function MM_findObj(n, d) { //v4.01
		var p, i, x;
		if (!d) d = document;
		if ((p = n.indexOf("?")) > 0 && parent.frames.length) {
			d = parent.frames[n.substring(p+1)].document;
			n=n.substring(0,p);
		}
		if (!(x = d[n])&&d.all) x = d.all[n];
		for (i = 0; !x && i < d.forms.length; i++) x = d.forms[i][n];
		for (i = 0; !x && d.layers && i < d.layers.length; i++) x = MM_findObj(n, d.layers[i].document);
		if(!x && d.getElementById) x = d.getElementById(n);
		return x;
	}

	function MM_swapImage() { //v3.0
		var i, j = 0, x, a = MM_swapImage.arguments;
		document.MM_sr = new Array;
		for (i = 0; i < (a.length-2); i += 3) {
			if ((x = MM_findObj(a[i])) != null) {
				document.MM_sr[j++] = x;
				if(!x.oSrc) x.oSrc = x.src;
				x.src = a[i + 2];
			}
		}
	}
