/*----------------------------------------------
  
  mooTopics.js ver0.7
  copyright 2008 Tenderfeel.
 
Usage:
▼ヘッダに入れる
<script type="text/javascript" src="mootools.js"></script>
<script type="text/javascript" src="mootopics.js"></script>

表示するブロック要素（divとかtdとか）にIDを適当につけて下記で設定。
デフォルトは#info

現段階では指定したIDのブロック要素内にulやtableを作成し指定件数分表示する。
リンク先があれば本文にリンクする。

■文字コードUTF-8。
■表示側とエンコードが違う場合は変更すること。

var0.7 ティッカー表示
var0.6 NEWマーク出るようにしてみた
------------------------------------------------*/

//表示するDivのIDを設定
var ListArea = 'info';

//表示件数
var Max = '5';

//表示方法
//List→リスト
//Table→テーブル
//Ticker→ティッカー
var ViewMode = 'List';

//ティッカー表示の間隔（ミリ秒）
var interval = 6000;

//表示要素につけるクラス名（ul class="○○"　←これ）
var ClassName ='';

//日付を入れるタグ（使わないなら''）
//Tableの場合はthのクラス名になる
var datetag = '';

//本文を入れるタグ（使わないなら''）
//Tableの場合はtdのクラス名になる
var txttag = 'em';

//表示ページからのログファイルパス
var url = "./log.dat";

//NEWをつける日数
var Limit ="4";

//Newマークのアイコンパス。マーク出さないなら空に
var NewIco= "new.gif";
//アイコンサイズ
var IconW = "20"; //width
var IconH = "9"; //height

/*-----------------------------------------------*/
/* 　core                                        */
/*-----------------------------------------------*/

var a = new Date();

//NEW!!
var NewMark = function(date,el){
	b = Date.parse(date)+ (parseInt(Limit) * 24 * 3600 * 1000);//期限
	c = a.getTime();//現在時刻
	if(b>=c){
		var New = new Element('img',{'src':NewIco,'width':IconW,'height':IconH,'alt':'NEW!'}).injectInside(el);
		return New;
	}else{
		return null;
	}
}
var addlists = function(logs) {

	var data = $(ListArea);
	var CR = String.fromCharCode(10);
	var LogData = logs.split(CR);
	
	var n = LogData.pop();//最後尾の空白行削除
	var lineData =LogData.remove(n);
	
	var list =function() {
	if(ClassName !=''){
		var ul = new Element('ul', {'class':ClassName}).injectInside(data);
	}else{
		var ul = new Element('ul').injectInside(data);
	}
	
	for(i=0;i<lineData.length && i < Max;i++){
		
		var dat = lineData[i].split(',');
		
		
		var li = new Element('li');
	
		if(txttag != ''){//本文を入れるタグあれば～
			if(datetag != ''){//日付を入れるタグあれば～
				var date = new Element(datetag).setText(dat[1]).injectInside(li);
				
				if(dat[3].match(/[a-z]/)){
					var txt = new Element(txttag);
					new Element('a',{'href':dat[3],'title':'更新ページへ'}).setHTML(dat[2]).injectInside(txt);
					txt.injectAfter(date);
				}else{
					new Element(txttag).setHTML(dat[2]).injectAfter(date);
					
				}
				if(NewIco!="") NewMark(dat[1],li);
			}else{
				var date = li.setText(dat[1]);
				if(dat[3].match(/[a-z]/)){
					var txt = new Element(txttag);
					new Element('a',{'href':dat[3],'title':'更新ページへ'}).setHTML(dat[2]).injectInside(txt);
					txt.injectInside(li);
				}else{
					new Element(txttag).setHTML(dat[2]).injectInside(li);
				}
				if(NewIco!="") NewMark(dat[1],li);
			}
		}else{//本文タグなし
			if(datetag != ''){//日付タグあれば
				var date = new Element(datetag).setText(dat[1]).injectInside(li);
				
				if(dat[3].match(/[a-z]/)){
					var uri = new Element('a',{'href':dat[3],'title':'更新ページへ'}).setHTML(dat[2]).injectInside(li);
				}else{
					li.appendText(dat[2]);
				}
				if(NewIco!="") NewMark(dat[1],li);
				
			}else{//日付タグなし
				
				if(dat[3].match(/[a-z]/)){//リンクあり
					
					var date = dat[1];
					var uri = new Element('a',{'href':dat[3],'title':'更新ページへ'}).setHTML(dat[2]);
					li.setHTML(date);
					uri.injectInside(li);
					
				}else{
					var date = dat[1]+dat[2];
					li.setHTML(date);
				}
				if(NewIco!="") NewMark(dat[1],li);
			}
		}
		li.inject(ul);
		if(lineData.length < Max && i == lineData.length) break;
	}
	}
	switch(ViewMode){
		
		case 'List'://リスト表示モード

		if(lineData[0].contains('2') == true){
				list();
			}else{
				var p = new Element('p',{'class':ClassName });
				var txt = p.setText('情報はありません');
				p.injectInside(data);
			}
		break;
		
		case 'Table': //テーブル表示モード
			
			if(lineData[0].contains('2') == true){

				if(ClassName !=''){
					var ul = new Element('table', {'class':ClassName}).injectInside(data);
				}else{
					var ul = new Element('table').injectInside(data);
				}
				
				var tbody = new Element('tbody').injectInside(ul);
				
				for(i=0;i<lineData.length && i < Max;i++){
					
					var dat = lineData[i].split(',');
					var li = new Element('tr');

					if(txttag != ''){//本文のクラス名あれば
						if(datetag != ''){//日付のクラス名あれば
							var date = new Element('th',{'class':datetag}).setText(dat[1]).injectInside(li);
							
							if(dat[3].match(/[a-z]/)){//リンクがあれば
								var txt = new Element('td',{'class':txttag});
								var uri = new Element('a',{'href':dat[3],'title':'更新ページへ'}).setHTML(dat[2]).injectInside(txt);
								txt.injectInside(li);
								
								if(NewIco!="") NewMark(dat[1],txt);
							}else{//リンクないぜ
								var txt = new Element('td',{'class':txttag}).setHTML(dat[2]).injectAfter(date);
								if(NewIco!="") NewMark(dat[1],txt);
							}
							
						}else{//日付ないぜ
							var date = new Element('th').setText(dat[1]).injectInside(li);
							if(dat[3].match(/[a-z]/)){
								var txt = new Element('td',{'class':txttag});
								var uri = new Element('a',{'href':dat[3],'title':'更新ページへ'}).setHTML(dat[2]).injectInside(txt);
								txt.injectAfter(date);
								if(NewIco!="") NewMark(dat[1],txt);
							}else{var txt = new Element('td',{'class':txttag}).setHTML(dat[2]).injectAfter(date);
								if(NewIco!="") NewMark(dat[1],txt);
							}
						}
					}else{//本文クラスない
						if(datetag != ''){//日付クラスある
							var date = new Element('th',{'class':datetag}).setText(dat[1]).injectInside(li);
							if(dat[3].match(/[a-z]/)){//リンクある
								var txt = new Element('td');
								var uri = new Element('a',{'href':dat[3],'title':'更新ページへ'}).setHTML(dat[2]).injectInside(txt);
								txt.injectAfter(date);
								if(NewIco!="") NewMark(dat[1],txt);
							}else{//リンクない
								var txt = new Element('td').setHTML(dat[2]).injectAfter(date);
								if(NewIco!="") NewMark(dat[1],txt);
							}
						}else{//日付クラスない
							var date = new Element('th').setText(dat[1]).injectInside(li);
							if(dat[3].match(/[a-z]/)){//リンクある
								var txt = new Element('td');
								var uri = new Element('a',{'href':dat[3],'title':'更新ページへ'}).setHTML(dat[2]).injectInside(txt);
								txt.injectAfter(date);
								if(NewIco!="") NewMark(dat[1],txt);
								
							}else{//リンクない
								var txt = new Element('td').setHTML(dat[2]).injectAfter(date);
								if(NewIco!="") NewMark(dat[1],txt);
							}
						}
					}
					li.inject(tbody);
					if(lineData.length < Max && i == lineData.length) break;
				}
			}else{
				var p = new Element('p',{'class':ClassName });
				var txt = p.setText('情報はありません');
				p.injectInside(data);
			}
		break;
		
		case 'Ticker'://ティッカー
			if(lineData[0].contains('2') == true){
				
				list();
				
			}else{
				var p = new Element('p',{'class':ClassName });
				var txt = p.setText('情報はありません');
				p.injectInside(data);
			}
			//エフェクト
			var messages =$(ListArea).getFirst('ul').getChildren('li');
			var count = 0;
			var flag=0;
			var toggleButton = $('toggleticker');
			var container =$(ListArea).getFirst('ul');
			var fade_delay;
	
			function hide(){
				messages.each(function(message) { 
					  message.setStyles({
						'display': 'none',
						'opacity': 0
						});
				});
			}
			function fade() {
				new Fx.Style(messages[count],'opacity',{
					onComplete:function(item) {
					item.setStyle('display','none');
					if(count < Max-1) {
						 count++;
					}else {
						 count  = 0;
					}
				}}).start(1,0);
				
				
			}
			
			function show() {
				 new Fx.Style(messages[count],'opacity',{ duration:500,
					onStart:function(item){item.setStyle('display','block');}
					}).start(0,1);
				  fade_delay = fade.delay(interval);
		 	 }
			hide();
			show();
			
			var periodical = show.periodical(interval+1000);
			
		 //表示ボタン
		if (toggleButton == false){
			toggleButton = new Element('a').setProperties({
				'href': '#',
				'id': 'toggleticker'
			 }).setHTML('Stop').injectInside(ListArea);
		}
		toggleButton.addEvent('click',function(){
			if(flag==0){
				messages.each(function(message) { 
					  message.setStyles({
						'display': 'block',
						'opacity': 1
						});
					  
					flag=1;	
				toggleButton.setHTML('Start');
				
				});
				$clear(periodical);
				$clear(fade_delay);
			}else{
				flag=0;
				hide();
				show();
				periodical = show.periodical(interval+2000);
				toggleButton.setHTML('Stop');
			}});
		
		break;
	}
};

var mooHistry = {
	start: function() {
		var data = $(ListArea);
		data.empty();
		new Ajax(url, {method: 'get',onComplete:function(Obj) {addlists(Obj);}}).request();
	}
}
window.addEvent('domready',mooHistry.start);

