// JavaScript Document

//曜日などの形式
var jCal_const = {
	calendars : [0,31,28,31,30,31,30,31,31,30,31,30,31],
	weeks : ["日","月","火","水","木","金","土"],
	monthName : ['','1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
}
var jCal = function(cal_id,holydays){
	if(window["jCal"][cal_id]){
		return window["jCal"][cal_id];
	}
	//Xヵ月後のカレンダーを表示する場合 :: 1は当月
	var cal_display_month = 1;
	
	var cal_Id = cal_id;
	var self = {
		cal_Id : cal_id
	};
	
	
	//定休日などはここで設定します。
	var holydayClassName = "holyday";
	//第3月曜日のお休み入力
	var holydayList = holydays;
	//self.text[ここに日にちを半角で] = クラス名;
	var holydayLabelList = [
	];
	
	self.day = (function(){
		var o = {}
		var len = holydayList.length;
		for(var i=0;i<len;i++){
			o[holydayList[i]] = holydayClassName;
		}
		return  o
	})();
	
	self.text = (function(){
		var o = {}
		var len = holydayList.length;
		for(var i=0;i<len;i++){
			o[holydayList[i]] = holydayLabelList[i]?holydayLabelList[i]:"";
		}
		return  o
	})();
	
	//○日後
	self.after = [];
	//self.after[3] = "deli";
	
	//毎週○曜日の場合
	self.week ={
		"Sun"	: "",
		"Mon"	: "",
		"Tue"	: "",
		//"Tue"	: "Sun",
		"Wed"	: "",
		"Thu"	: "",
		"Fri"		: "",
		"Sat"	: ""};
	self.week["flag"] = 1;
	
	//毎月○日の場合
	self.month = {};
	//self.month[1] = "openingsale";
	
	//カレンダーをクリックできるようにする場合
	self.click = {};
	////パラメータを送るURL
	self.click["url"];
	////クリック可能にするクラス名(クラス指定なしの場合は指定せず)
	self.click["day"];
	
	self.today = new Date();
	self.cal_year = self.today.getYear();
	self.cal_month = self.today.getMonth() + cal_display_month;
	self.cal_day = self.today.getDate();
	if(self.cal_year < 1900) self.cal_year += 1900;
	if(self.cal_month < 1){
		self.cal_month += 12;
		self.cal_year -= 1;
	}
	else if(self.cal_month > 12){
		self.cal_month -= 12;
		self.cal_year = self.cal_year + 1;
	}
	
	if(cal_display_month == 1){
		self.text[self.cal_year+"/"+self.cal_month+"/"+self.cal_day] = "Today";
		for(i=0;i<self.after.length;i++){
			if(self.after[i] != undefined){
				nmsec = i * 1000 * 60 * 60 * 24;
				msec  = (new Date()).getTime();
				dt    = new Date(nmsec+msec);
				month = dt.getMonth() + 1;
				date  = dt.getDate();
				year = dt.getYear();
				if(year < 1900) year += 1900;
				self.day[year+"/"+month+"/"+date] = self.after[i];
			}
		}
	}
	
	self.to_year = self.cal_year;
	self.to_month = self.cal_month;
	self.to_day = self.cal_day;
	
	
	self.currentCal = function(){
		self.cal_year = self.to_year;
		self.cal_month = self.to_month;
		self.cal_day = self.to_day;
		self.writeCal(self.cal_year,self.cal_month,self.cal_day);
	}
	self.prevCal = function(){
		self.cal_month -= 1;
		if(self.cal_month < 1){
			self.cal_month = 12;
			self.cal_year -= 1;
		}
		self.writeCal(self.cal_year,self.cal_month,0);
	}
	self.nextCal = function(){
		self.cal_month += 1;
		if(self.cal_month > 12){
			self.cal_month = 1;
			self.cal_year += 1;
		}
		self.writeCal(self.cal_year,self.cal_month,0);
	}
	self.getWeek = function(year,month,day){
		if (month == 1 || month == 2) {
			year--;
			month += 12;
		}
		var week = Math.floor(year + Math.floor(year/4) - Math.floor(year/100) + Math.floor(year/400) + Math.floor((13 * month + 8) / 5) + day) % 7;
		return week;
	}
	
	self.writeCal = function(year,month,day){
		var cal_flag = 0;
		if(year % 100 == 0 || year % 4 != 0){
			if(year % 400 != 0){
				cal_flag = 0;
			}else{
				cal_flag = 1;
			}
		}else if(year % 4 == 0){
			cal_flag = 1;
		}else{
			cal_flag = 0;
		}
		jCal_const.calendars[2] += cal_flag;
		
		var cal_start_day = self.getWeek(year,month,1);
		var cal_tags = "<p>" + year + "年" + jCal_const.monthName[month] + "</p>";
		cal_tags += "<ul class='cal_main'>";
		for(var i=0;i<jCal_const.weeks.length;i++){
			cal_tags += "<li class='cal_headline'><span>" + jCal_const.weeks[i] + "</span></li>";
		}
		for(var i=0;i < cal_start_day;i++){
			cal_tags += "<li><span>&nbsp;</span></li>";
		}
		
		//main
		var first_thu_flag = 1;
		var day_after = null;
		for(var cal_day_cnt = 1;cal_day_cnt <= jCal_const.calendars[month];cal_day_cnt++){
			var cal_day_match = year + "/" + month + "/" + cal_day_cnt;
			var dayClass = "";
			if(self.day[cal_day_match]){
				dayClass = ' class="'+self.day[cal_day_match]+'"';
			}
			else if(self.month[cal_day_cnt] != undefined){
				dayClass = ' class="'+self.month[cal_day_cnt]+'"';
			}
			else if(self.week["flag"] != undefined){
				if(cal_start_day == 0 && self.week["Sun"] != undefined){
					dayClass = ' class="'+self.week["Sun"]+'"';
				}
				else if(cal_start_day == 1 && self.week["Mon"] != undefined){
					dayClass = ' class="'+self.week["Mon"]+'"';
				}
				else if(cal_start_day == 2 && self.week["Tue"] != undefined){
					dayClass = ' class="'+self.week["Tue"]+'"';
				}
				else if(cal_start_day == 3 && self.week["Wed"] != undefined){
					dayClass = ' class="'+self.week["Wed"]+'"';
				}
				else if(cal_start_day == 4 && self.week["Thu"] != undefined){
					dayClass = ' class="'+self.week["Thu"]+'"';
				}
				else if(cal_start_day == 5 && self.week["Fri"] != undefined){
					dayClass = ' class="'+self.week["Fri"]+'"';
				}
				else if(cal_start_day == 6 && self.week["Sat"] != undefined){
					dayClass = ' class="'+self.week["Sat"]+'"';
				}
				else {
					dayClass = ' class="undefined"';
				}
			}
			else {
				dayClass = ' class="undefined"';
			}
			var text_f,text_b
			if(self.text[cal_day_match]){
				text_f = "<span class=\""+self.text[cal_day_match]+"\">";
				text_b = "</span>";
			}
			else {
				text_f = "<span>";
				text_b = "</span>";
			}
			
			//Click to Action
			var clickActions = "";
			if(self.click["day"] == self.day[cal_day_match] && self.click["url"] != undefined)
				clickActions = " onclick=\"location.href='"+self.click["url"]+cal_day_match+"'\"";
			
			cal_tags += "<li"+dayClass+clickActions+">" + text_f + cal_day_cnt + text_b + "</li>";
			if(cal_start_day == 6){
				cal_start_day = 0;
			}
			else{
				cal_start_day++;
			}
		}
		while(cal_start_day <= 6 && cal_start_day != 0){
			cal_tags += "<li><span>&nbsp;</span></li>";
			cal_start_day++;
		}
		cal_tags += "</ul>";
		document.getElementById(self.cal_Id).innerHTML = cal_tags;
	}
	
	self.write = function(add_to_id){
		var elem = document.getElementById(add_to_id);
		var tags = "<div class='cal_wrapper'>";
		tags += "<ul class='cal_ui'>";
		tags += '<li class="cal_prev"><a href="javascript:jCal(\''+cal_Id+'\').prevCal()">&lt;&lt;</a></li>';
		//tags += '<li class="cal_to"><a href="javascript:jCal(\''+cal_Id+'\').currentCal()">■</a></li>';
		tags += '<li class="cal_next"><a href="javascript:jCal(\''+cal_Id+'\').nextCal()">&gt;&gt;</a></li>';
		tags += "</ul>";
		tags += '<div id="'+cal_Id+'" class="cal_base"></div></div>'
		elem.innerHTML = tags;
		self.writeCal(self.cal_year,self.cal_month,self.cal_day);
	}
	
	return window["jCal"][cal_Id] = self;
}
/*
window.onload = function(){
	jCal("cal_0").write("field");
}
*/