//
// 20061211
// BlogStyleCalendar for BlogStyleTopics
//

// define layer object
function BlogStyleCalendar(targetDomID,calendarUrl,yyyy,mm,dd){
	this.targetDomID   = targetDomID;   // component id
	this.calendarUrl   = calendarUrl;   // generator base url
	this.yyyy          = yyyy;          // caledar's year
	this.mm            = mm;            // caledar's month
	this.dd            = dd;            // caledar's day (dummy)
	this.progressImg   = new Image();   // clock preload space
	this.calendar      = '';            // generated calendar
	// preload progress clock image
//	this.progressImg.src = 'clock_ani_sss_g.gif';
	return this;
}
BlogStyleCalendar.prototype.invokeUpdateCalendar = invokeUpdateCalendar;
BlogStyleCalendar.prototype.calendarResponse     = calendarResponse;
BlogStyleCalendar.prototype.showCalendar         = showCalendar;
BlogStyleCalendar.prototype.getHtml              = makeCalendar;
BlogStyleCalendar.prototype.makeCalendar         = makeCalendar;

// seach
function invokeUpdateCalendar(){
	var calendarUrl = this.calendarUrl + '&yyyy=' + this.yyyy + '&mm=' + this.mm + '&dd=' + this.dd;
	xml = new JKL.ParseXML( calendarUrl );
	xml.async( calendarResponse, this );
	xml.parse();
	this.inProgress  = 1;
}

// async callback
function calendarResponse(xml,caller){
	var data = '<table class="calendar" width="150">';
	try {
		if( xml.calendar.weeks.week.length ){
			// header
			data += '<tr><td colspan="2" align="left" style="padding-left:3px">';
			data += '<a href="javascript:updateCalendar(' + xml.calendar.lastMonthYear + ',' +  xml.calendar.lastMonth + ',' + xml.calendar.lastMonthDay + ')" title="前の月へ">&lt;&lt;</a>';
			data += '</td>';
			data += '<th colspan="3"><a href="/blog/monthly/' + xml.calendar.targetMonthYear + ',' + xml.calendar.targetMonth + '.html" title="' + xml.calendar.targetMonth + '月の記事一覧">' + xml.calendar.targetMonthYear + '/' + xml.calendar.targetMonth + '</a></th>';
			data += '<td colspan="2" align="right" style="padding-right:3px">';
			data += '<a href="javascript:updateCalendar(' + xml.calendar.nextMonthYear + ',' + xml.calendar.nextMonth + ',' + xml.calendar.nextMonthDay + ')" title="次の月へ">&gt;&gt;</a>';
			data += '</td></tr>';
			data += '<tr><td class="sunday">日</td><td>月</td><td>火</td><td>水</td><td>木</td><td>金</td><td class="saturday">土</td></tr>';
			// weeks
			for( i in xml.calendar.weeks.week ){
				data += '<tr>';
				for( j in xml.calendar.weeks.week[i].day ){
					var today    = 0;
					var sunday   = 0;
					var saturday = 0;
					var faded    = 0;
					var holiday  = 0;
					if( xml.calendar.weeks.week[i].day[j].today ){ today  = 1; }
					if( xml.calendar.weeks.week[i].day[j].sunday ){ sunday = 1; }
					if( xml.calendar.weeks.week[i].day[j].saturday ){ saturday = 1; }
					if( xml.calendar.weeks.week[i].day[j].faded ){ faded = 1; }
					if( xml.calendar.weeks.week[i].day[j].holiday ){ holiday = 1;}
					if( today ){ data += '<td class="today">'; }else{ data += '<td>'; }
					if( faded ){
						data += '<span class="faded">';
					}else{
						if( sunday ){
							data += '<span class="sunday">';
						}else{
							if( saturday ){
								if( holiday ){ data += '<span class="holiday">' }else{ data += '<span class="saturday">'; }
							}else{
								if( holiday ){ data += '<span class="holiday">' }else{ data += '<span>'; }
							}
						}
					}
					if( xml.calendar.weeks.week[i].day[j].count ){
						data += '<a href="/blog/';
						if( xml.calendar.weeks.week[i].day[j].digest.length ){
							for( k in xml.calendar.weeks.week[i].day[j].digest ){
								if( k == 0 ){
									data += xml.calendar.weeks.week[i].day[j].digest[k].topicsID;
								}else{
									data += ',' + xml.calendar.weeks.week[i].day[j].digest[k].topicsID;
								}
							}
						}else{
							data += xml.calendar.weeks.week[i].day[j].digest.topicsID;
						}
						data += '.html" title="';
						if( xml.calendar.weeks.week[i].day[j].digest.length ){
							var len = xml.calendar.weeks.week[i].day[j].digest.length - 1;
							for( k in xml.calendar.weeks.week[i].day[j].digest ){
								data += xml.calendar.weeks.week[i].day[j].digest[k].topicsTitle;
								if( len != k ){ data += ', '; }
							}
						}else{
							data += xml.calendar.weeks.week[i].day[j].digest.topicsTitle;
						}
						data += '"><span style=\"text-decoration:underline;\">';
						data += xml.calendar.weeks.week[i].day[j].dd;
						data += '</span></a>';
					}else{
						data += xml.calendar.weeks.week[i].day[j].dd;
					}
					data += '</span></span>';
					data += '</td>';
				}
			}
			data += '</tr>';
			data += '<tr><td colspan="7" align="right" style="padding-left:3px"><a href="javascript:updateCalendar(' + xml.calendar.nowMonthYear + ',' + xml.calendar.nowMonth + ',' + xml.calendar.nowMonthDay + ')" style="font-size:10px;" title="' + xml.calendar.nowMonthYear + '年' + xml.calendar.nowMonth + '月に戻る">戻る</a></td></tr>';
		}
	} catch(e) {
		data += '<tr><td><p style="padding:5px 5px 5px 5px;;">error</p></td></tr>';
		data += e;
	}
	data += '</table>';
	caller.inProgress = 0;
	caller.calendar = data;
	caller.showCalendar(data,caller);
}

// show calendar
function showCalendar(data,caller){
	document.getElementById(caller.targetDomID).innerHTML = data;
}

// make view
function makeCalendar(){
	html = '';
	html += this.calendar;
	return html;
}



