// ver 1.0 - HTMLからURLを取得して表示。WebOS Goodiesのサンプルを参考に。感謝。
// ver 1.1 - urlの&amp;を&に、url先頭の2文字でfeedの表示長を設定,該当するデータがないときの表示
// ver 1.2 - capture/capture-rightを追加 -->廃止
// ver 1.3 - captureに幅設定機能を追加
// ver 2.0 - インクリメンタルサーチ機能を統合
// var 2.1 - インクリメンタルサーチの表示件数上限を追加
// ver 2.3 - インクリメンタルサーチ中の表示位置機能を追加・改良
// ver 2.4 - インクリメンタルサーチをタグにも有効に
// ver 2.5 - Lightbox-light追加
// ver 2.6 - divのsrc属性に対応
// ver 2.7 - widthの計算結果を四捨五入
// ver 3.0 - インクリメンタルサーチ機能を作り直し
// ver 3.1 - capture旧機能を廃止
// by jniino 2009/9/20


//インクリメンタルサーチ--------------------

var LoadFlag = 0; //0→1→2
var WaitTime = 5;
var jsonDataLength = 0;
var MaxResult = 25;
var SearchResult;

function incremantalsearch() {
	document.sForm.search.style.color="#888";
	document.sForm.search.value="インクリメンタルサーチ";
	document.sForm.x.style.cursor="pointer";
}

function isearch() {

	var pattern = document.sForm.search.value;

	var i;
	var c = 0;
	var s = "";
	
	if (LoadFlag == 0) {
		SearchResult = document.getElementById("searchresult");
		loadjsonfile();
		LoadFlag = 1;
	}
	
	if (LoadFlag == 1) {
		waitForLoadToComplete();
	}
	
	if (LoadFlag == 2) {

		for (i = 0; i < jsonDataLength; i++) {
			if (jsonData.articles[i].t.toLowerCase()
				.indexOf(pattern.toLowerCase())>-1){
				if (pattern.length == 0) {
					SearchResult.innerHTML = "";
					break;
				}
				if (c > MaxResult) break;
				c = c + 1;
				s = s + "<li><a href="
					+jsonData.articles[i].u
					+">"
					+jsonData.articles[i].t
					+"</a></li>";
			}
		}
		SearchResult.innerHTML = "<ul>"+s+"</ul>";
	}
}

function waitForLoadToComplete() {
	
	try {
		//エラーだったらCatchへ。成功したら次の行へ
		jsonDataLength = jsonData.articles.length; 
		LoadFlag = 2;
		isearch();
	}
	
	catch(e) {
		if (WaitTime < 3000) {
			WaitTime = WaitTime +50 ;
			setTimeout("waitForLoadToComplete()",WaitTime);
			var s = "";
			for (var i = 0; i < (WaitTime/150); i++) {
				s = s + ".";
			}
			SearchResult.innerHTML = "loading" + s;
		} else {
			SearchResult.innerHTML = "timeout.";
		}
	}
}

function loadjsonfile() {
		var e     = document.createElement('SCRIPT');
		e.type    = 'text/javascript';
		e.src     = "http://www.publickey.jp/articledata.json";
		e.charset = 'UTF-8';
		document.body.appendChild(e);
}

function on_focus() {
	if (document.sForm.search.value=="インクリメンタルサーチ") {
	document.sForm.search.value="";
	}
	document.sForm.search.style.color="#000";
}

function clearinput() {
	document.sForm.search.value="";
	document.sForm.search.style.color="#000";
	document.sForm.search.focus();
	SearchResult.innerHTML = "";
}

//フィードとサムネイルの表示-------------------

function feedandcapture()
{
	var i;
	var s;

	divs = document.getElementsByTagName("div");

	for (i in divs) {
			s = divs[i].className;
			if (s){ // nullやundefinedでなければ
				if (s == 'feed') {
					fetch_feed(i); } else {
				if (s.indexOf('capture') != -1) {
					capture(i); }
				}
			}
		}
}

function capture(i) {
var src;
var width;
var widthxheight;
var cap;
var s;

src = divs[i].getAttribute("src")

	//src属性が設定されている？
	if (src) {
		width = parseInt(divs[i].getAttribute("width"));
		cap = divs[i].getAttribute("caption");
		
		//数字じゃないか、widthそのものが設定されていなければデフォルト160px
		if (isNaN(width)||(!width)) { width = 160; } 
		widthxheight = width+"x"+Math.round(width*0.75);
		s = '<a href="'+src+'"><img src="http://capture.heartrails.com/'+widthxheight+'/shorten?'+src+'" /></a><span class="caption">'+cap+'</caption>';
		
		divs[i].innerHTML = s;
		divs[i].style.width = (width+2)+"px";
	}
}

function fetch_feed(i) {
	var url;
	var num;

	url = divs[i].innerHTML;
	url = url.replace(/&amp;/g, '&');

	//URLの最初の2文字をnumに代入
	num = parseFloat(url.substr(0,2));

	if (isNaN(num)) { 
		// 数字じゃなかったら、デフォルト10項目
		num = 10; } 
	else {
		// 数字だったらそれを項目数に。URLの最初の2文字を削る
		url = url.substr(2,url.length -2 );
	}

	//URL作成 Developer Keyが含まれているので、コピーして使わないでください。
	var requestURL = 'http://ajax.googleapis.com/ajax/services/feed/load?' + [
	'key=ABQIAAAAscd9zO_q5p96xPhxcyF7rBQ7MeuBe2eXD1bU-I2kF3HYkwEWHhT3MvOezuEwifHQQsUBzq_To_2njg',
	'q='+encodeURIComponent(url),
	'v=1.0',							// APIバージョン
	'output=json',				// データ形式
	'callback=disp_feed',	// コールバック関数
	'context=' + i,				// コールバック関数に渡すパラメータ。
	'num=' + num					// 取得するエントリの最大数
	].join('&');

	// SCRIPTタグを作成し、bodyに追加
	var e     = document.createElement('SCRIPT');
	e.type    = 'text/javascript';
	e.src     = requestURL;
	e.charset = 'UTF-8';
	document.body.appendChild(e);
}

// レスポンスを受け取った際のコールバック
function disp_feed(context, data, status, error) {
var result = [];

	if(status == 200) {
		// フィードの取得に成功したので、エントリを表示
		result.push('<ul>');
		var entries = data['feed']['entries'];
		for(var i = 0 ; i < entries.length ; ++i) {
			var entry = entries[i];
			result.push(
				'<li><a href="' + htmlEscape(entry.link) + '">' +
				htmlEscape(entry.title) + '</a></li>');
		}
		if (entries.length == 0) {result.push('<li>該当するデータはありませんでした</li>');}
		result.push('</ul>');
	} else {
		// エラーメッセージを表示
		result = [error];
	}
	divs[context].innerHTML = result.join('');
}

function htmlEscape(a) {
	a = a.replace(/&/g, '&amp;');
	a = a.replace(/</g, '&lt;').replace(/>/g, '&gt;');
	a = a.replace(/\"/g, '&quot;').replace(/\'/g, '&#39;');
	return a;
}

// lightbox-light
var st=0;
function lbonoff(p) {
	if (document.getElementById(p).style.display=="block") {
		document.getElementById(p).style.display="none";
		scroll(0,st);
	} else {
		st  = document.body.scrollTop  || document.documentElement.scrollTop;
		scroll(0,0);
		document.getElementById(p).style.display="block";
	}
}

