var DOC = document;

var UA = navigator.userAgent.toLowerCase();
var B = {
//	version: (UA.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1],
//	safari: /webkit/.test(UA),
//	opera: /opera/.test(UA),
	msie: /msie/.test(UA) && !/opera/.test(UA),
	mozilla: /mozilla/.test(UA) && !/(compatible|webkit)/.test(UA)
};

var DECFIRST = new Date(2007, 12-1, 1);
var DECLAST = new Date(2007, 12-1, 26);
/*
var ROLLOVER = false;
if (getURLParam("rollover"))
	ROLLOVER = true;
*/

var NOW = new Date();
NOW = new Date(NOW.getFullYear(), NOW.getMonth(), NOW.getDate());
var nowparam = getURLParam("now");
if (nowparam != null) {
	var rer = new RegExp("(\\d{1,4})-(\\d{1,2})-(\\d{1,2})").exec(nowparam);
	if (rer != null)
		NOW = new Date(parseInt(rer[1], 10), parseInt(rer[2], 10) - 1, parseInt(rer[3], 10));
}
var FIRST = new Date(2007, 12-1, 1);
var LAST = new Date(2007, 12-1, 26);
if (NOW.getTime() >= LAST.getTime()) {
	FIRST = null;
	LAST = null;
}
else if (NOW.getTime() > FIRST.getTime()) {
	FIRST = new Date(NOW.getTime());
	while(FIRST.getDate() != 1 && FIRST.getDay() != 1)
		FIRST.setTime(FIRST.getTime() - (24 * 60 * 60 * 1000));
}

var lastlog = null;
function log(s) {
	if (B.mozilla) {
		console.log(s);
	}
	else {
		var p = DOC.createElement("p");
		p.appendChild(DOC.createTextNode(s != null ? s : "{null}"));
		var body = DOC.getElementsByTagName("body").item(0);
		if (lastlog == null)
			body.insertBefore(p, body.firstChild);
		else
			body.insertBefore(p, lastlog.nextSibling);
		lastlog = p;
	}
}

function getURLParam(s) {
	if (location.search == null || location.search.length <= 0)
		return null;
	var a1 = location.search.substr(1).split("&");
	for(var i=0; i<a1.length; i++) {
		var a2 = a1[i].split("=");
		if (a2[0] == s)
			return a2[1] != null ? a2[1] : "";
	}
	return null;
}


function jsonp(url) {
	var script = DOC.createElement("script");
	script.setAttribute("type", "text/javascript");
	script.setAttribute("src", url);
	script.setAttribute("charset", "utf-8");
	DOC.getElementsByTagName("head").item(0).appendChild(script);
}

function requestEvents(start, end) {
	var url = "http://api.c2talk.net/event/rest?method=event.list&un=at-pia&type=jsonp&etype=owner&page=endless&kv=ZB06xUYq";
	if (typeof start != "undefined")
		url += ("&startdate=" + start.getFullYear() + "-" + (start.getMonth() + 1) + "-" + start.getDate());
	if (typeof end != "undefined")
		url += ("&enddate=" + end.getFullYear() + "-" + (end.getMonth() + 1) + "-" + end.getDate());
	jsonp(url);
}

function parseEventDate(s, allday) {
	if (!s)
		return null;
	var format;
	if (allday)
		format = "(\\d{1,4})-(\\d{1,2})-(\\d{1,2})";
	else
		format = "(\\d{1,4})-(\\d{1,2})-(\\d{1,2}) (\\d{1,2}):(\\d{1,2}):(\\d{1,2})";
	var reg = new RegExp(format);
	var r = reg.exec(s);
	if (!r)
		return null;
	if (allday) {
		return new Date(parseInt(r[1], 10),
						parseInt(r[2], 10) - 1,
						parseInt(r[3], 10),
						0, 0, 0, 0);
	}
	else {
		return new Date(parseInt(r[1], 10),
						parseInt(r[2], 10) - 1,
						parseInt(r[3], 10),
						parseInt(r[4], 10),
						parseInt(r[5], 10),
						parseInt(r[6], 10),
						0);
	}
}

function jsonp_callback(events) {
	if (events != null && events.length > 0) {
		for(var i=0; i<events.length; i++) {
			events[i].startdate = parseEventDate(events[i].startdate, events[i].allday);
			events[i].enddate = parseEventDate(events[i].enddate, events[i].allday);
		}

		var year = FIRST.getFullYear();
		var month = FIRST.getMonth() + 1;
		for(var day=FIRST.getDate(); day<LAST.getDate(); day++) {
//			log("" + month + "/" + day);
			var date = new Date(2007, 12-1, day);
			var week = date.getDay();

			var dayevents = [];
			for(var i=0; i<events.length; i++) {
				var event = events[i];
				var startdate = event.startdate;
				if (startdate.getFullYear() == year &&
					startdate.getMonth() == (month - 1) &&
					startdate.getDate() == day) {

					var priority = 0;
//					var re = new RegExp('^ジャンル[　 ]+(音楽|映画)(★*)$', "m");
//					var re = new RegExp('^ジャンル[　 ]+(.*?)(★*)$', "m");
					var re = new RegExp('^ジャンル[　 ]+(.*)$', "m");
					var rer = re.exec(event.description);
					if (rer != null) {
						var genre = rer[1];
						for(var j=0; j<genre.length; j++) {
							if (genre.charAt(j) == ".")
								priority++;
						}
					}
//					if (rer != null && rer[2] != null)
//						priority = rer[2].length;

					event.monthpriority = priority;
					dayevents.push(event);

//					log("　　" + event.monthpriority + ": " + event.summary);
				}
			}

			if (dayevents.length > 1) {
				dayevents.sort(function(d1, d2) {
					if (d1.monthpriority > d2.monthpriority)
						return -1;
					else if (d1.monthpriority < d2.monthpriority)
						return 1;
					else
						return 0;
				});
			}

//			for(var i=0; i<dayevents.length; i++) {
//				log("   " + dayevents[i].summary + ": " + dayevents[i].monthpriority + ": " + dayevents[i].startdate + " ～ " + dayevents[i].enddate);
//			}

//			var daymax = 2;
//			if (dayevents.length < daymax)
//				daymax = dayevents.length;
			var el = DOC.getElementById("d" + day + "r");
			if (el != null) {
				if (B.msie) {
					var el2 = DOC.getElementById("d" + day + "t");
					if (el2 != null)
						el2.style.tableLayout = "fixed";
				}
				for(var i=0; i<2; i++) {
					var ev = i < dayevents.length ? dayevents[i] : null;
					var tr = DOC.createElement("tr");
					var td = DOC.createElement("td");
					td.setAttribute("width", "15");
					td.setAttribute("height", "35");
					td.setAttribute("vAlign", "top");
					td.setAttribute("align", "center");
					if (ev != null) {
						var img = DOC.createElement("img");
						if (week == 0 || week == 6 || day == 24)
							img.setAttribute("src", "images/star-pink.gif");
						else
							img.setAttribute("src", "images/star-green.gif");
						img.setAttribute("width", "15");
						img.setAttribute("height", "15");
//						img.style.margin = "0";
						td.appendChild(img);
					}
					tr.appendChild(td);
					if (!B.msie)
						td.style.paddingRight = "0";
					td = DOC.createElement("td");
//					td.setAttribute("width", "111");
					td.setAttribute("vAlign", "top");
//					td.style.textAlign = "left";
					if (ev != null) {
						var atag = DOC.createElement("a");
//						atag.setAttribute("href", ev.comments);
						atag.setAttribute("href", "event.html?eid=" + ev.id + "&date=" + day);
						atag.setAttribute("target", "_day");
						atag.appendChild(DOC.createTextNode(adjust_summary(ev.summary)));
						td.appendChild(atag);
					}
					tr.appendChild(td);
					if (!B.msie)
						td.style.paddingLeft = "0";
					el.parentNode.insertBefore(tr, el);
//					log(ev);
				}
			}
		}
	}
}


function adjust_summary(s) {
	if (s == null || s.length <= 0)
		return "";
	var len = 0;
	for(var i=0; i<s.length; i++) {
		if (len > 36)
			return s.slice(0, i - 1) + "･･･";
		if (s.charCodeAt(i) < 256)
			len++;
		else
			len += 2;
		
	}
	return s;
}

function month_onload() {
	if (FIRST != null && LAST != null) {
		requestEvents(FIRST, LAST);
		var d1 = DECFIRST.getTime();
		var d2 = DECLAST.getTime();
		var t = NOW.getTime();
		if (t >= d1 && t < d2)
			var el = DOC.getElementById("d" + NOW.getDate()).setAttribute("bgColor", "#FFFF93");

/*
		if (ROLLOVER) {
			for(var day=1; day<26; day++)
				add_day_event(day);
		}
*/
	}
}

/*
function add_day_event(day) {
	var date = new Date(2007, 12-1, day);
	var week = date.getDay();
	var elem = DOC.getElementById("d" + day);

	add_listener(elem, "click", function() {
		log(day);
	});
	add_listener(elem, "mouseover", function() {
		elem.setAttribute("bgColor", "#808080");
	});
	add_listener(elem, "mouseout", function() {
		var d1 = DECFIRST.getTime();
		var d2 = DECLAST.getTime();
		var t = NOW.getTime();
		if (t >= d1 && t < d2 &&
			NOW.getFullYear() == date.getFullYear() &&
			NOW.getMonth() == date.getMonth() &&
			NOW.getDate() == date.getDate())
			elem.setAttribute("bgColor", "#FFFF93");
		else if (week == 0 || week == 6)
			elem.setAttribute("bgColor", "#FFF4FA");
		else
			elem.setAttribute("bgColor", "#F4F7E8");
	});
}

function add_listener(elem, type, func) {
	if (elem.addEventListener)
		elem.addEventListener(type, func, false);
	else
		elem.attachEvent("on" + type, func);
}
*/

