var CalConteiner;
function AtamiCalendar()
{
	var CalObj = {};
	var objToday = new Date();
	var todayYear = objToday.getFullYear();
	var todayMonth = objToday.getMonth()+1;
	var todayDay = objToday.getDate();

	this.CalSet = function (nYear,nMonth)
	{
		CalObj.year = nYear;
		CalObj.month = nMonth;
	};

	this.initialize = function()
	{
		if(typeof(CalObj.year) == 'undefined')
		{
			CalObj.year = todayYear;
			CalObj.month = todayMonth;
		}
		var nYear = CalObj.year;
		var nMonth = CalObj.month;
		var objLastDate = new Date(nYear,nMonth,0);
		var nLastDay = objLastDate.getDate();
		var sNaviNext = '';
		var sNaviPrev = '';

		if(nMonth == 12)
		{
			var nNextYear = nYear + 1;
			var nNextMonth = 1;
			var nPrevYear = nYear;
			var nPrevMonth = parseInt(nMonth) - 1;
		}
		else if(nMonth == 1)
		{
			var nNextYear = nYear;
			var nNextMonth = parseInt(nMonth) + 1;
			var nPrevYear = nYear - 1;
			var nPrevMonth = 12;
		}
		else
		{
			var nNextYear = nYear;
			var nNextMonth = parseInt(nMonth) + 1;
			var nPrevYear = nYear;
			var nPrevMonth = parseInt(nMonth) - 1;
		}

		if((todayYear == nNextYear) ||
				((todayYear+1 == nNextYear) && (todayMonth >= nNextMonth)))
		{
			sNaviNext = '<a href="javascript:void(0);" class="navi" onclick="Calinit('+nNextYear+','+nNextMonth+')">次の月へ</a>';
		}
		else
		{
			sNaviNext = '<div class="cal_head">次の月へ</div>';
		}

		if((todayYear < nPrevYear) ||
				((todayYear == nPrevYear) && (todayMonth <= nPrevMonth)))
		{
			sNaviPrev = '<a href="javascript:void(0);" class="navi" onclick="Calinit('+nPrevYear+','+nPrevMonth+')">前の月へ</a>';
		}
		else
		{
			sNaviPrev = '<div class="cal_head">前の月へ</div>';
		}

		CalObj.Calendar = '<div class="cal_conteiner">';
		CalObj.Calendar += '<table class="calendar">';
		CalObj.Calendar += '<tr>';
		CalObj.Calendar += '<td colspan="7">'+sNaviPrev+'<div class="cal_head">'+nYear+'年'+nMonth+'月</div>'+sNaviNext+'</td>';
		CalObj.Calendar += '</tr>';
		CalObj.Calendar += '<tr>';
		CalObj.Calendar += '<td class="sun">日</td>';
		CalObj.Calendar += '<td class="weekday">月</td>';
		CalObj.Calendar += '<td class="weekday">火</td>';
		CalObj.Calendar += '<td class="weekday">水</td>';
		CalObj.Calendar += '<td class="weekday">木</td>';
		CalObj.Calendar += '<td class="weekday">金</td>';
		CalObj.Calendar += '<td class="sat">土</td>';
		CalObj.Calendar += '</tr>';
		for(nCnt=1; nCnt<=nLastDay; nCnt++)
		{
			var CalDate = new Date(nYear,nMonth-1,nCnt);
			var sDayWeek = CalDate.getDay();
			var sClass = chkWeekClass(sDayWeek);
			var sAddColection = nYear+','+nMonth+','+nCnt;
			if((todayYear > nYear) || ((nYear == todayYear) && (nMonth < todayMonth)) ||
					((nYear == todayYear) && (nMonth == todayMonth) && (nCnt < todayDay)))
			{
				sClass = "old";
			}
			if(todayYear == nYear && nMonth == todayMonth && nCnt == todayDay)
			{
				sClass = "today";
			}
			if(nCnt == 1)
			{
				CalObj.Calendar += '<tr>';
				// 初日の位置を設定
				for(nWeekCnt=0; nWeekCnt<sDayWeek; nWeekCnt++)
				{
					CalObj.Calendar += '<td class="weekday">&nbsp;</td>';
					if(nWeekCnt == 6)
					{
						CalObj.Calendar += '</tr>';
					}
				}
				if(sClass != "old")
				{
					CalObj.Calendar += '<td class="'+sClass+'"><a href="javascript:void(0)" onclick="addSelecter('+sAddColection+');">'+nCnt+'</a></td>';
				}
				else
				{
					CalObj.Calendar += '<td class="'+sClass+'">'+nCnt+'</td>';
				}
				if(sDayWeek == 6)
				{
					CalObj.Calendar += '</tr>';
				}
			}
			else
			{
				if(sDayWeek == 0)
				{
					CalObj.Calendar += '<tr>';
				}
				if(sClass != "old")
				{
					CalObj.Calendar += '<td class="'+sClass+'"><a href="javascript:void(0)" onclick="addSelecter('+sAddColection+');">'+nCnt+'</a></td>';
				}
				else
				{
					CalObj.Calendar += '<td class="'+sClass+'">'+nCnt+'</td>';
				}
				if(sDayWeek == 6)
				{
					CalObj.Calendar += '</tr>';
				}
			}
		}
		if(sDayWeek < 6)
		{
			for(nCnt=sDayWeek; nCnt<6; nCnt++)
			{
				CalObj.Calendar += '<td>&nbsp;</td>';
			}
		}
		CalObj.Calendar += '</table>';
		CalObj.Calendar += '<a href="javascript:void(0);" onclick="closeCal()">×閉じる</a>';
		if(document.forms[0].no_date.checked==true)
		{
			sChk = 'checked="checked"';
		}
		else
		{
			sChk = '';
		}
		CalObj.Calendar += '<form name="cal_no_date"><input type="checkbox" name="no_date_chk" onclick="calNoDate();" '+sChk+' />日付未定</form>'
		CalObj.Calendar += '</div>';
	};

	this.show = function ()
	{
		this.initialize();
		var sel = document.form1.getElementsByTagName('select');
		for(var nCnt=0; nCnt<sel.length; nCnt++)
		{
			if(nCnt>2)
			{
				sel[nCnt].style.visibility = 'hidden';
			}
		}
		if(typeof CalConteiner == 'undefined' || CalConteiner == 'undefined')
		{
			CalConteiner = document.createElement('div');
			CalConteiner.innerHTML = CalObj.Calendar;
			document.body.appendChild(CalConteiner);
		}
		else
		{
			CalConteiner.innerHTML = CalObj.Calendar;
		}
		document.onmousedown = function(eventObj)
		{
			var eventObj = (eventObj) ? eventObj : ((window.event)? event :null);
			var target = (eventObj.target) ? eventObj.target : eventObj.srcElement;
			if(!checkPalNode(target, "cal_conteiner", 0)){
				closeCal();
			}
		};
	};

	function chkWeekClass(nWeek)
	{
		var sClassName;
		if(nWeek == 0)
		{
			sClassName = "sun";
		}
		else if(nWeek == 6)
		{
			sClassName = "sat";
		}
		else
		{
			sClassName = "weekday";
		}
		return sClassName;
	}

	function checkPalNode(pObj, pClass, pNum){
		if(pNum>9){
			return false;
		}else{
			if(pObj.className==pClass){
				return true;
			}else{
				if(pObj.parentNode){
					return checkPalNode(pObj.parentNode, pClass, pNum+1);
				}else{
					return false;
				}
			}
		}
	}

}

function closeCal()
{
	var sel = document.form1.getElementsByTagName('select');
	for(var nCnt=0; nCnt<sel.length; nCnt++)
	{
		if(nCnt>2)
		{
			sel[nCnt].style.visibility = 'visible';
		}
	}

	document.body.removeChild(CalConteiner);
	CalConteiner = 'undefined';
}

function addSelecter(nYear,nMonth,nDay)
{
	var Form = document.forms[0];
	var yearOps = Form.year.options.length;
	var MonthOps = Form.month.options.length;
	var DayOps = Form.day.options.length;
	for(nCnt=0; nCnt<yearOps; nCnt++)
	{
		if(Form.year.options[nCnt].value == nYear)
		{
			Form.year.options[nCnt].selected = true;
		}
	}
	for(nCnt=0; nCnt<MonthOps; nCnt++)
	{
		if(Form.month.options[nCnt].value == nMonth)
		{
			Form.month.options[nCnt].selected = true;
		}
	}
	for(nCnt=0; nCnt<DayOps; nCnt++)
	{
		if(Form.day.options[nCnt].value == nDay)
		{
			Form.day.options[nCnt].selected = true;
		}
	}
	//--- 日付選択フォームの無効を有効にする ---
	var sForm = document.forms[0];
	var nElementsNum = sForm.elements.length;
	var nCnt;
	if(sForm.no_date.checked == true)
	{
		sForm.no_date.checked = false;
		sForm.year.disabled = false;
		sForm.month.disabled = false;
		sForm.day.disabled = false;
		sForm.room_num.disabled = false;
		sForm.haku_num.disabled = false;
	}
	closeCal();
}

function Calinit(nYear,nMonth)
{
	if(typeof Calendar != 'undefined')
	{
		Calendar.CalSet(nYear,nMonth);
		Calendar.initialize();
		Calendar.show();
	}
}

function calNoDate()
{
	var chkElem = document.forms["cal_no_date"].no_date_chk;
	var sForm = document.forms[0];
	var nElementsNum = sForm.elements.length;
	var nCnt;
	sForm.no_date.checked = chkElem.checked;
	sForm.year.disabled = chkElem.checked;
	sForm.month.disabled = chkElem.checked;
	sForm.day.disabled = chkElem.checked;
	sForm.room_num.disabled = chkElem.checked;
	sForm.haku_num.disabled = chkElem.checked;
	closeCal();
}