function appendMultilineText(oParent, sText){
	if(!oParent){return;}
	var aText = sText.split('\n');
	if(aText.length > 0){
		oParent.appendChild(document.createTextNode(aText.shift()));
		while(aText.length > 0){
			oParent.appendChild(document.createElement('br'));
			oParent.appendChild(document.createTextNode(aText.shift()));
		}
	}
}

function insert(){
	// リクエスト
	new Ajax.Request(
		'/archives/onair/onair.xml',
		{
			method: 'get',
			onSuccess: function(oRequest){
				// XMLを取得
				var oXML = oRequest.responseXML;
				
				// 曜日を取得
				var aWeekdays = oXML.getElementsByTagName('weekday');
				if(aWeekdays && aWeekdays.length > 0){
					// 現在日時を取得
					var oNow = new Date();
					var nNow = oNow.getTime();
					var nNowYear = oNow.getYear();
					if(nNowYear < 1900){nNowYear += 1900;}
					var nNowMon  = oNow.getMonth() + 1;
					var nNowMday = oNow.getDate();
					var nNowWday = oNow.getDay();
					
					// １日のミリ秒を取得
					var nOneMday = 24*3600*1000;
					
					// bodyを取得
					var oBody = document.body;
					// bodyの子要素をクリア
					var oBodyChildren = oBody.childNodes;
					while(oBodyChildren.length > 0){
						oBody.removeChild(oBodyChildren[0]);
					}
					// bodyのスタイルを設定
					oBody.style.fontSize   = '11px';
					oBody.style.color      = '#333333';
					oBody.style.lineHeight = '16px';
					oBody.style.backgroundColor = '#ffffff';
					oBody.style.margin = 0;
					
					// tableの雛形を作成
					var oSourceTable = document.createElement('table');
					oSourceTable.setAttribute('border', 0, false);
					oSourceTable.setAttribute('cellspacing', 0, false);
					oSourceTable.setAttribute('cellpadding', 0, false);
					var oSourceTbody = document.createElement('tbody');
					oSourceTable.appendChild(oSourceTbody);
					
					// thの雛形を作成
					var oSourceTh = document.createElement('th');
					oSourceTh.style.fontSize   = '11px';
					oSourceTh.style.lineHeight = '16px';
					oSourceTh.style.color = '#333333';
					
					// tdの雛形を作成
					var oSourceTd = document.createElement('td');
					oSourceTd.style.fontSize   = '11px';
					oSourceTd.style.lineHeight = '16px';
					oSourceTd.style.color = '#333333';
					
					// 曜日ヘッダtrの雛形を作成
					var oSourceWdayHeadTr = document.createElement('tr');
					var oSourceWdayHeadTd = oSourceTd.cloneNode(true);
					oSourceWdayHeadTr.appendChild(oSourceWdayHeadTd);
					oSourceWdayHeadTd.setAttribute('width', 221, false);
					oSourceWdayHeadTd.setAttribute('align', 'left', false);
					oSourceWdayHeadTd.setAttribute('valign', 'top', false);
					
					// 曜日ヘッダimgの雛形を作成
					var oSourceWdayHeadImg = document.createElement('img');
					oSourceWdayHeadImg.setAttribute('width', 200, false);
					oSourceWdayHeadImg.setAttribute('height', 16, false);
					
					// 番組trの雛形を作成
					var oSourceProgramTr = document.createElement('tr');
					var oSourceProgramTd = oSourceTd.cloneNode(true);
					oSourceProgramTr.appendChild(oSourceProgramTd);
					oSourceProgramTd.setAttribute('align', 'left', false);
					oSourceProgramTd.setAttribute('valign', 'top', false);
					var oSourceProgramTable = oSourceTable.cloneNode(true);
					oSourceProgramTd.appendChild(oSourceProgramTable);
					oSourceProgramTable.setAttribute('width', 200, false);
					oSourceProgramTable.setAttribute('cellspacing', 2, false);
					var oSourceProgramTbody = document.createElement('tbody');
					oSourceProgramTable.appendChild(oSourceProgramTbody);
					
					// 番組詳細trの雛形を作成
					var oSourceProgramDetailTr = document.createElement('tr');
					oSourceProgramDetailTr.setAttribute('align', 'left', false);
					oSourceProgramDetailTr.setAttribute('valign', 'top', false);
					
					// 週tableを設定
					var oWeekTable = oSourceTable.cloneNode(true);
					oBody.appendChild(oWeekTable);
					oWeekTable.setAttribute('width', 200, false);
					oWeekTable.setAttribute('align', 'center', false);
					var oWeekTbody = oWeekTable.firstChild;
					
					// 各曜日DOM格納ハッシュ
					var hMon = $H({head: null, content: null});
					var hTue = $H({head: null, content: null});
					var hWed = $H({head: null, content: null});
					var hThu = $H({head: null, content: null});
					var hFri = $H({head: null, content: null});
					var hSat = $H({head: null, content: null});
					var hSun = $H({head: null, content: null});
					
					// 番組情報格納配列
					var aProgramInfo = new Array();
					
					// 曜日ごとに処理する
					aWeekdays.length.times(function(nWeekdayIndex){
						// 曜日を取得
						var oWeekday = aWeekdays[nWeekdayIndex];
						var sWeekday = oWeekday.getAttribute('id');
						
						// 番組情報を取得
						var aPrograms = oWeekday.getElementsByTagName('program');
						if(aPrograms && aPrograms.length > 0){
							// 曜日によって設定する値を切替
							var hImageInfo = $H({src: 'img/onair/', alt: ''});
							var nWday = 0;
							var hWday = null;
							switch(sWeekday){
								// 月曜日
								case 'mon':
									hImageInfo.src += 'OA_mon.gif';
									hImageInfo.alt = '月曜日';
									nWday = 1;
									hWday = hMon;
								break;
								// 火曜日
								case 'tue':
									hImageInfo.src += 'OA_tue.gif';
									hImageInfo.alt = '火曜日';
									nWday = 2;
									hWday = hTue;
								break;
								// 水曜日
								case 'wed':
									hImageInfo.src += 'OA_wed.gif';
									hImageInfo.alt = '水曜日';
									nWday = 3;
									hWday = hWed;
								break;
								// 木曜日
								case 'thu':
									hImageInfo.src += 'OA_thu.gif';
									hImageInfo.alt = '木曜日';
									nWday = 4;
									hWday = hThu;
								break;
								// 金曜日
								case 'fri':
									hImageInfo.src += 'OA_fri.gif';
									hImageInfo.alt = '金曜日';
									nWday = 5;
									hWday = hFri;
								break;
								// 土曜日
								case 'sat':
									hImageInfo.src += 'OA_sat.gif';
									hImageInfo.alt = '土曜日';
									nWday = 6;
									hWday = hSat;
								break;
								// 日曜日
								case 'sun':
									hImageInfo.src += 'OA_sun.gif';
									hImageInfo.alt = '日曜日';
									nWday = 0;
									hWday = hSun;
								break;
							}
							
							// 曜日ヘッダを設定
							var oWdayHeadTr = oSourceWdayHeadTr.cloneNode(true);
							hWday.head = oWdayHeadTr;
							var oWdayHeadImg = oSourceWdayHeadImg.cloneNode(true);
							oWdayHeadTr.firstChild.appendChild(oWdayHeadImg);
							oWdayHeadImg.setAttribute('src', hImageInfo.src, false);
							oWdayHeadImg.setAttribute('alt', hImageInfo.alt, false);
							
							// 番組trを設定
							var oProgramTr = oSourceProgramTr.cloneNode(true);
							hWday.content = oProgramTr;
							var oProgramTbody = oProgramTr.firstChild.firstChild.firstChild;
							
							// 現在の曜日と番組情報の曜日の差を設定
							var nDiffMday = (nWday - nNowWday);
							if(nDiffMday < -3){
								nDiffMday = 3 - ((nDiffMday * -1) % 4);
							}
							else if(nDiffMday > 3){
								nDiffMday = -3 + (nDiffMday % 4);
							}
							nDiffMday *= nOneMday;
							
							// 番組ごとに処理する
							aPrograms.length.times(function(nProgramIndex){
								var oProgram = aPrograms[nProgramIndex];
								
								// 番組詳細trを設定
								var oProgramDetailTr = oSourceProgramDetailTr.cloneNode(true);
								oProgramTbody.appendChild(oProgramDetailTr);
								
								// 番組の開始時間を取得
								var oStartTime = oProgram.getElementsByTagName('start_time')[0];
								var sStartTime = oStartTime.firstChild.nodeValue;
								var aStartTime = sStartTime.split(':');
								var sStartHour = aStartTime[0];
								var sStartMin  = aStartTime[1];
								sStartTime = sStartHour+'：'+sStartMin;
								var nStartHour = new Number(sStartHour);
								var nStartMin  = new Number(sStartMin);
								var nStartAddMsec = parseInt(nStartHour / 24) * nOneMday + nDiffMday;
								nStartHour = nStartHour % 24;
								var oStartDatetime = new Date(nNowYear, nNowMon - 1, nNowMday, nStartHour, nStartMin, 0);
								oStartDatetime.setTime(oStartDatetime.getTime() + nStartAddMsec);
								var nStartDatetime = oStartDatetime.getTime();
								
								// 番組の終了時間を取得
								var oEndTime = oProgram.getElementsByTagName('end_time')[0];
								var sEndTime = '';
								var nEndDatetime = 0;
								if(oEndTime && oEndTime.childNodes.length > 0){
									sEndTime = oEndTime.firstChild.nodeValue;
									var aEndTime = sEndTime.split(':');
									var sEndHour = aEndTime[0];
									var sEndMin  = aEndTime[1];
									sEndTime = sEndHour+'：'+sEndMin;
									var nEndHour = new Number(sEndHour);
									var nEndMin  = new Number(sEndMin);
									var nEndAddMsec = parseInt(nEndHour / 24) * 24 * 3600 * 1000 + nDiffMday;
									nEndHour = nEndHour % 24;
									var oEndDatetime = new Date(nNowYear, nNowMon - 1, nNowMday, nEndHour, nEndMin, 0);
									oEndDatetime.setTime(oEndDatetime.getTime() + nEndAddMsec);
									nEndDatetime = oEndDatetime.getTime();
									if(nEndDatetime <= nStartDatetime){
										sEndTime = '';
										nEndDatetime = 0;
									}
								}
								
								// 番組の時間を設定
								var sTime = sStartTime+'～';
								var oProgramDetailTimeTd = oSourceTd.cloneNode(true);
								oProgramDetailTr.appendChild(oProgramDetailTimeTd);
								oProgramDetailTimeTd.setAttribute('nowrap', 'yes', false);
								var oProgramDetailTimeNode = document.createTextNode(sTime);
								oProgramDetailTimeTd.appendChild(oProgramDetailTimeNode);
								
								// 番組タイトルを取得
								var oTitle = oProgram.getElementsByTagName('title')[0];
								var sTitle = oTitle.firstChild.nodeValue;
								var sTitleUrl = oTitle.getAttribute('url');
								
								// チャンネル（放送局）を取得
								var oChannel = oProgram.getElementsByTagName('channel')[0];
								var sChannel = oChannel.firstChild.nodeValue;
								
								// 番組の内容を設定
								var oProgramDetailContentTd = oSourceTd.cloneNode(true);
								oProgramDetailTr.appendChild(oProgramDetailContentTd);
								var oProgramDetailContentSpan = document.createElement('span');
								oProgramDetailContentTd.appendChild(oProgramDetailContentSpan);
								var oProgramDetailContentTitleNode = document.createTextNode('「'+sTitle+'」');
								// タイトルにURLが設定されていた場合
								if(sTitleUrl && sTitleUrl != ''){
									// タイトルにアンカーを張って設定
									var oProgramDetailContentTitleA = document.createElement('a');
									oProgramDetailContentSpan.appendChild(oProgramDetailContentTitleA);
									oProgramDetailContentTitleA.setAttribute('href', sTitleUrl, false);
									oProgramDetailContentTitleA.setAttribute('target', '_blank', false);
									oProgramDetailContentTitleA.appendChild(oProgramDetailContentTitleNode);
								}
								else{
									// タイトルを設定
									oProgramDetailContentSpan.appendChild(oProgramDetailContentTitleNode);
								}
								oProgramDetailContentSpan.appendChild(document.createElement('br'));
								// チャンネル（放送局）を設定
								appendMultilineText(oProgramDetailContentSpan, sChannel);
								
								// 番組情報を格納
								aProgramInfo.push($H({head: oWdayHeadTr, content: oProgramDetailTr, start_datetime: nStartDatetime, end_datetime: nEndDatetime}));
							});
						}
					});
					
					// 各曜日DOMをtableに追加
					if(hMon.head && hMon.content){
						oWeekTbody.appendChild(hMon.head);
						oWeekTbody.appendChild(hMon.content);
					}
					if(hTue.head && hTue.content){
						oWeekTbody.appendChild(hTue.head);
						oWeekTbody.appendChild(hTue.content);
					}
					if(hWed.head && hWed.content){
						oWeekTbody.appendChild(hWed.head);
						oWeekTbody.appendChild(hWed.content);
					}
					if(hThu.head && hThu.content){
						oWeekTbody.appendChild(hThu.head);
						oWeekTbody.appendChild(hThu.content);
					}
					if(hFri.head && hFri.content){
						oWeekTbody.appendChild(hFri.head);
						oWeekTbody.appendChild(hFri.content);
					}
					if(hSat.head && hSat.content){
						oWeekTbody.appendChild(hSat.head);
						oWeekTbody.appendChild(hSat.content);
					}
					if(hSun.head && hSun.content){
						oWeekTbody.appendChild(hSun.head);
						oWeekTbody.appendChild(hSun.content);
					}
					
					// 番組情報を開始日時でソート
					aProgramInfo.sort(function(oA, oB){
						return(oA.start_datetime - oB.start_datetime);
					});
					
					// 現在放送中番組を特定
					var hActiveProgram = $H({wday: null, program: null});
					var hPrevious = null;
					set_active_program: for(var nProgramIndex = 0; nProgramIndex < aProgramInfo.length; nProgramIndex++){
						var hProgram = aProgramInfo[nProgramIndex];
						if(hProgram.start_datetime <= nNow){
							if(hProgram.end_datetime > 0){
								if(nNow < hProgram.end_datetime){
									hActiveProgram.wday = hProgram.head;
									hActiveProgram.program = hProgram.content;
									break set_active_program;
								}
							}
							else{
								hActiveProgram.wday = hProgram.head;
								hActiveProgram.program = hProgram.content;
							}
						}
						else{
							if(hPrevious){
								if(hPrevious.end_datetime > 0){
									hActiveProgram.wday = hProgram.head;
									hActiveProgram.program = hProgram.content;
								}
							}
							break set_active_program;
						}
						hPrevious = hProgram;
					}
					
					// scroll処理
					if(hActiveProgram.wday){
						Element.scrollTo(hActiveProgram.wday);
					}
					
					// 背景色変更処理
					if(hActiveProgram.program){
						hActiveProgram.program.lastChild.firstChild.style.backgroundColor = '#ffe2b5';
					}
				}
				else{
					// 親ウィンドウのオンエア情報テーブルを非表示
					Element.hide(window.parent.document.getElementById('onair_table'));
				}
			},
			onFailure: function(oRequest){
				// 親ウィンドウのオンエア情報テーブルを非表示
				Element.hide(window.parent.document.getElementById('onair_table'));
			}
		}
	);
}
