//- Hotel Calendar           -//
//- Make : Uta               -//
//- Last Modify : 2010-06-01 -//

//Server Time Set ToDay
var Today_Date = null;

//Block Day Array
var ArraDate = null;

Calendar = function (datestr, selectday, revdate, title, strlanguage)
{
	if (typeof selectday=="string")
	{
		if (selectday != "YYYY.MM.DD" && selectday.length>0)
		{
			selectday = selectday.split(".");
			selectday = new Date(selectday[0], selectday[1]-1, selectday[2]);
			if (selectday)
			{
				Calendar.SelectDate=selectday;
			}
		}
		else
		{
			selectday=null;
		}
	}
	if (window.CalendarCheck==0)
	{
		if (Calendar.SelectDate)
		{
			datestr = Calendar.SelectDate;
		}
	}

	this.datestr = datestr ? datestr : new Date();
	Calendar.title = title;
	Calendar.language = strlanguage;
	Calendar.datestr = this.datestr;
	Calendar.Today = Today_Date ? Today_Date : new Date();
	if (!Calendar.revdate)
	{
		Calendar.revdate = revdate;
	}
};

//Calendar Date
Calendar.datestr=null;

//Reserv Date
Calendar.revdate=null;

//Today
Calendar.Today=null;

//SelectDateData
Calendar.SelectDate=null;

//Start Date
Calendar.Sdate=null;

//End Date
Calendar.Edate=null;

//예약가능 시작일
Calendar.ASdate=null;

//예약가능 종료일
Calendar.AEdate=null;

//Result Object
Calendar.CCObj=null;

//Calendar title
Calendar.title=null;

//Calendar Language
Calendar.language=null;

//Calendar EndFunction
Calendar.EndFunction=null;

//IE Check
Calendar.is_ie = ( /msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent) );

//IE5 Check
Calendar.is_ie5 = ( Calendar.is_ie && /msie 5\.0/i.test(navigator.userAgent) );

//Opera Check
Calendar.is_opera = /opera/i.test(navigator.userAgent);

//Khtml Check
Calendar.is_khtml = /Konqueror|Safari|KHTML/i.test(navigator.userAgent);

//Calendar Layer
Calendar.Slayer = null;

//Calendar Popup Check
window.CalPopupCheck = null;
window.CalendarCheck = 0;

//Calendar EndFunction
Calendar.prototype.EndFunction = function(fnc)
{
	Calendar.EndFunction=fnc;
};

//Calendar Sdate
Calendar.prototype.Sdate = function(strdate)
{
	Calendar.Sdate=strdate;
};

//Calendar Edate
Calendar.prototype.Edate = function(strdate)
{
	Calendar.Edate=strdate;
};

//예약가능 시작일
Calendar.prototype.ASdate = function(strdate)
{
	Calendar.ASdate=strdate;
};

//예약가능 종료일
Calendar.prototype.AEdate = function(strdate)
{
	Calendar.AEdate=strdate;
};


//Calendar Create
Calendar.prototype.create = function()
{
	function CharNumber2(strnum)
	{
		var checkRep=/[0-9]{2}/;

		if (!checkRep.test(strnum))
			strnum = "0"+strnum;
		return (strnum);
	}
	var datestr = Calendar.datestr;
	var Today = Calendar.Today;
	var revdate = Calendar.revdate;
	var Sdate = Calendar.Sdate;
	var ASdate = Calendar.ASdate;
	var AEdate = Calendar.AEdate;

	var yearSelected = datestr.getFullYear();
	var monthSelected = datestr.getMonth();
	var dateSelected = datestr.getDate();

	var aNumDays = Array (31,0,31,30,31,30,31,31,30,31,30,31);
	var monthNameArr =	new	Array("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12");
	var strTitle_Korean = new Array("체크인", "체크아웃");
	var strTitle_English = new Array("CHECK-IN", "CHECK-OUT");

	var strComment_Korean = new Array("예약가능기간", "예약불가기간");
	var strComment_English = new Array("Available", "Unavailable");

	var numDaysInMonth;
	var columnCnt=0;
	var intWeekCount = 1;
	var titlenum=0;

	var dateState = new Date(yearSelected, monthSelected, 1);
	var dayPointer = dateState.getDay();
	var parent = document.getElementsByTagName("body")[0];

	var TitelStr="";
	var sHTML="";
	var linkstr="";
	var linkstr2="";
	var CommentStr1 = "";
	var CommentStr2 = "";

	//Language Default Value Set
	if (!Calendar.language)
	{
		Calendar.language="english";
	}

	//Calendar Type Set
	if (Calendar.title=="checkout")
		titlenum=1;

	//Calendar Language Set
	if (Calendar.language=="korean")
	{
		TitelStr = strTitle_Korean[titlenum];
		CommentStr1 = strComment_Korean[0];
		CommentStr2 =  strComment_Korean[1];
	}
	else
	{
		TitelStr = strTitle_English[titlenum];
		CommentStr1 = strComment_English[0];
		CommentStr2 =  strComment_English[1];
	}

	//Leap Month Set
	if(datestr.getMonth()==1) {
		inidate	= new Date (yearSelected, monthSelected+1, 1);
		inidate	= new Date (inidate	- (24*60*60*1000));
		numDaysInMonth = inidate.getDate();
	} else {
		numDaysInMonth = aNumDays[datestr.getMonth()];
	}

	//Print Set
	sHTML+='<div id="calender" class="fixwidth calender">';
	sHTML+='<h3>'+TitelStr+'</h3>';
	sHTML+='<p><a href="javascript:Calendar.destroy();"><img src="/images/common/bt.gif" alt="close" class="calclose" /></a></p><br />';
	sHTML+='<div class="title"><a href="javascript:Calendar.prevMonth();"><img src="/images/popup/btn_calprev.gif" alt="prev" /></a>';
	sHTML+='<strong>'+yearSelected+'-'+monthNameArr[monthSelected]+'</strong>';
	sHTML+='<a href="javascript:Calendar.nextMonth();"><img src="/images/popup/btn_calnext.gif" alt="next" /></a></div>';
	sHTML+='<table summary="체크인 날짜 선택을 위한 달력" cellpading="0" cellspacing="0">';
	sHTML+='<colgroup>';
	sHTML+='<col width="22px" />';
	sHTML+='<col width="22px" />';
	sHTML+='<col width="22px" />';
	sHTML+='<col width="22px" />';
	sHTML+='<col width="22px" />';
	sHTML+='<col width="22px" />';
	sHTML+='<col width="22px" />';
	sHTML+='</colgroup>';
	sHTML+='<thead>';
	sHTML+='<tr>';
	sHTML+='<th scope="col"><img src="/images/common/txt_calender01.gif" alt="sunday" /></th>';
	sHTML+='<th scope="col"><img src="/images/common/txt_calender02.gif" alt="monday" /></th>';
	sHTML+='<th scope="col"><img src="/images/common/txt_calender03.gif" alt="tuesday" /></th>';
	sHTML+='<th scope="col"><img src="/images/common/txt_calender04.gif" alt="wednesday" /></th>';
	sHTML+='<th scope="col"><img src="/images/common/txt_calender05.gif" alt="thursday" /></th>';
	sHTML+='<th scope="col"><img src="/images/common/txt_calender06.gif" alt="friday" /></th>';
	sHTML+='<th scope="col"><img src="/images/common/txt_calender07.gif" alt="saturday" /></th>';
	sHTML+='</tr>';
	sHTML+='</thead>';
	sHTML+='<tbody id="checkin_cal_body">';

	sHTML+='<tr>';
	for(var i=1; i<=dayPointer;i++)	{ // blank
		sHTML += "<td> </td>";
		columnCnt = columnCnt + 1;
	}

	var td_template = new Template('<td class="@VbCols@">@VbCols@@VbCols@@VbCols@</td>');
	var td_class = '';
	var revcheck = 0;

	for(var datePointer=1;datePointer<=numDaysInMonth;datePointer++)
	{
		dayPointer++;

		if ((yearSelected==Today.getFullYear() && monthSelected==Today.getMonth() && datePointer>=Today.getDate()) || (yearSelected==Today.getFullYear() && monthSelected>Today.getMonth()) || (yearSelected>Today.getFullYear()))
		{
			//block check
			if (revdate)
			{
				if (revdate.length>0)
				{
					for (i=0;i<revdate.length;i++)
					{
						//check-in block check
						if (Calendar.title=="checkin")
						{
							if (yearSelected+"."+CharNumber2(monthSelected+1)+"."+CharNumber2(datePointer)==revdate[i])
							{
								revcheck=1;
								break;
							}
						}
						//check-out block check
						else
						{
							if (yearSelected+"."+CharNumber2(monthSelected+1)+"."+CharNumber2(datePointer)<=Sdate)
							{
								revcheck=1;
								break;
							}
							else
							{
								if ((Sdate<revdate[i]) && (yearSelected+"."+CharNumber2(monthSelected+1)+"."+CharNumber2(datePointer)>revdate[i]))
								{
									revcheck=1;
									break;
								}
							}
						}
					}
				}
			}
			//check-in block check
			if (Calendar.title=="checkout")
			{
				if (Sdate>=yearSelected+"."+CharNumber2(monthSelected+1)+"."+CharNumber2(datePointer))
				{
					revcheck=1;
				}
			}
			//block check

			//Reserv Start Date, End Date
			if (ASdate)
			{
				if (yearSelected+"."+CharNumber2(monthSelected+1)+"."+CharNumber2(datePointer)<ASdate)
				{
					revcheck=1;
				}
			}
			if (AEdate)
			{
				if (yearSelected+"."+CharNumber2(monthSelected+1)+"."+CharNumber2(datePointer)>AEdate)
				{
					revcheck=1;
				}
			}
			//Reserv Start Date, End Date
		}
		else
		{
			revcheck=1;
		}

		//Calendar Day Set
		if(dayPointer % 7 == 0) 
			td_class = "sat";
		else if(dayPointer % 7 == 1)
			td_class = "sun";
		else
			td_class = "";

		//Calendar Select Set
		if (revcheck==0)
		{
			td_class = td_class + "on";
		}

		//First-Select Check
		if (Calendar.SelectDate)
		{
			if (yearSelected==Calendar.SelectDate.getFullYear() && monthSelected==Calendar.SelectDate.getMonth() && datePointer==Calendar.SelectDate.getDate())
			{
				td_class = td_class +" select";
			}
		}

		//Today Check
		var tochk=0;
		if (yearSelected==Today.getFullYear() && monthSelected==Today.getMonth() && datePointer==Today.getDate())
		{
			tochk=1;
			td_class = td_class +" today ";
		}

		//Link Check
		if (revcheck==0)
		{
			linkstr = '<a href=javascript:Calendar.checkdate('+yearSelected+','+monthNameArr[monthSelected]+','+datePointer+');'
			if (tochk==1)
				linkstr = linkstr +' title="Today" ';
			linkstr = linkstr +'>';
			linkstr2 = '</a>';
		}
		else
		{
			linkstr = '<span';
			if (tochk==1)
				linkstr = linkstr +' title="Today" ';
			linkstr = linkstr +'>';
			linkstr2 = '</span>';
		}

		var evalu_str = new Array(td_class, linkstr, datePointer, linkstr2);

		sHTML += td_template.evaluate(evalu_str);
		if(dayPointer % 7 == 0) {
			sHTML += "</tr><tr>";
			intWeekCount ++;
		}
		columnCnt = columnCnt + 1;

		revcheck=0;
	}
	for(var kk=columnCnt+1; kk<=42;kk++)	{  // blank
		var mHTML="";
		sHTML += "<td>&nbsp</td>";
		if( kk % 7 == 0) {
			if(kk!=42){
				sHTML += "</tr><tr>";
			}
		}
	}
	sHTML+='</tr>';

	sHTML+='</tbody>';
	sHTML+='</table>';
	sHTML+='<div class="calcomment">';
	sHTML+='<div>';
	sHTML+='<img src="../images/common/ico_resimpossible.gif" alt="Unavailable Dates" /> '+CommentStr2+'&nbsp;&nbsp;';
	sHTML+='<img src="../images/common/ico_respossible.gif" alt="Available Dates" /> '+CommentStr1+'</div>';
	sHTML+='</div>';
	sHTML+='</div>';

	Calendar.Slayer.innerHTML = sHTML;
};
//Calendar Create
//Button Event
Calendar.prevMonth=function()
{
	if (!Calendar.datestr)
	{
		return;
	}
	var yearSelected = Calendar.datestr.getFullYear();
	var monthSelected = Calendar.datestr.getMonth()-1;
	var dateSelected = 1;
	var datestr = new Date(yearSelected, monthSelected, dateSelected);

	window.CalendarCheck = 1;
	cal = new Calendar(datestr, Calendar.selectday, null, Calendar.title, Calendar.language);
	cal.create();
};
Calendar.nextMonth=function()
{
	if (!Calendar.datestr)
	{
		return;
	}
	var yearSelected = Calendar.datestr.getFullYear();
	var monthSelected = Calendar.datestr.getMonth()+1;
	var dateSelected = 1;
	var datestr = new Date(yearSelected, monthSelected, dateSelected);
	var language = Calendar.language;

	window.CalendarCheck = 1;
	cal = new Calendar(datestr, Calendar.selectday, null, Calendar.title, Calendar.language);
	cal.create();
};
//Button Event

Calendar.destroy = function () {
	Calendar.Slayer.style.display = 'none';
	Calendar.CCObj = null;
	Calendar.FirstDate = null;
	Calendar.Slayer = null;
	Calendar.datestr = null;
	window.CalPopupCheck = null;
	window.CalendarCheck = 0;
	Calendar.SelectDate = null;
	Calendar.Sdate=null;
	Calendar.Edate=null;
	Calendar.ASdate=null;
	Calendar.AEdate=null;
	Calendar.EndFunction=null;
};

Calendar.getAbsolutePos = function(el) {
	var SL = 0, ST = 0;
	var is_div = /^div$/i.test(el.tagName);
	if (is_div && el.scrollLeft)
		SL = el.scrollLeft;
	if (is_div && el.scrollTop)
		ST = el.scrollTop;
	var r = {x:el.offsetLeft - SL, y:el.offsetTop - ST };
	if (el.offsetParent) {
		var tmp = this.getAbsolutePos(el.offsetParent);
		r.x += tmp.x;
		r.y += tmp.y;
	}
	return r;
};

Calendar.prototype.hide = function () {
	var cp = Calendar.Slayer;

	cp.style.display = 'none';
	Calendar.destroy();
};

Calendar.prototype.show = function (el) {
	var cp = document.createElement("div");
	var cps = cp.style;
	var elpos = Calendar.getAbsolutePos(el);
	var elh = el.style.height ? el.style.height : 19;
	
	Calendar.CCObj = el;
	Calendar.Slayer = cp;
	cps.position = "absolute";
	cp.id = "caldiv";

	document.body.appendChild(cp);

	if (elpos.x < 0)
		elpos.x = 0;
	if (elpos.y < 0)
		elpos.y = 0;

	if (Calendar.is_ie){
		//elpos.x += document.documentElement.scrollLeft;
		//elpos.y += document.documentElement.scrollTop;
		//elpos.x += 3;
	}else{
		//br.x += window.scrollX;
		//br.y += window.scrollY;
	}

	cps.top = cps.left = cps.right = cps.bottom = cps.height = 0 +'px';

	//Calendar CSS
	if (ReservLayerName == "Convention")
	{
		cps.left = (elpos.x + 6) +'px';
		cps.top = (elpos.y + elh + 3) +'px';
	}
	else
	{
		cps.left = elpos.x +'px';
		cps.top = (elpos.y + elh - 1) +'px';
	}
	cps.display = 'block';
};

//Check Date
Calendar.checkdate = function(yyyy, mm, dd)
{
	function CharNumber2(strnum)
	{
		var checkRep=/[0-9]{2}/;

		if (!checkRep.test(strnum))
			strnum = "0"+strnum;
		return (strnum);
	}

	Calendar.CCObj.value = yyyy +"."+ CharNumber2(mm) +"."+  CharNumber2(dd);

	if (Calendar.EndFunction)
	{
		Calendar.EndFunction=eval(Calendar.EndFunction);
		Calendar.EndFunction();
	}
	if (window.CalPopupCheck)
	{
		Calendar.destroy();
	}
};
//Check Date
