
var ADD_LINK_TO_RES = false;

function jump(num) 
{
	document.search.start.value = num;
	document.search.submit();
}

function doit(str)
{
	document.search.keyword.value = str;
	document.search.start.value = 0;
	document.search.submit();
}

function kwd(str)
{
	doit(str);
}

function dirkwd(dirname, keyword)
{
	var obj = document.search;

	obj.genres.value = "";
	obj.dir.disabled = false;/*important*/
	addOption(obj.dir, dirname, dirname);
	obj.dir.value = dirname;

	doit(keyword);
}

function addOption(obj, newOption, newValue)
{
	var found = false;
	var len = obj.options.length;
	for (i = 0; i < len; i ++)
	{
		if (obj.options[i].value == newOption)
		{
			found = true;
			break;
		}
	}
	if (!found)
	{
		obj.options[len] = new Option(newOption, newValue);
	}
	return true;
}

function setSort(val)
{
	document.search.sort.value = val;
	doit(document.search.keyword.value);
}

function fold(id)
{
	var num = document.getElementById("folder_" + id).length;

	if (num)
	{
		var fstatus = document.getElementById("folder_"+id)[1].style.display;
		var new_status = "";

		if (!fstatus) new_status = "none";

		for (i = 0; i < num; i ++)
		{
			document.getElementById("folder_" + id)[i].style.display = new_status;
		}
	}
	else
	{
		var fstatus = document.getElementById("folder_" + id).style.display;

		var new_status = "";
		if (!fstatus) new_status = "none";

		document.getElementById("folder_" + id).style.display = new_status;
	}
}

function prepare()
{
	var obj    = document.search;//メイン検索フォーム
	var params = document.params;//検索パラメータ保持用フォーム

	document.search.start.value 	= document.params.start.value;
	document.search.genres.value 	= document.params.genres.value;
	document.search.sort.value 		= document.params.sort.value;
	document.search.keyword.value 	= document.params.keyword.value;

	var total 	= parseInt(params.total.value);
	var start 	= parseInt(params.start.value);
	var unit  	= parseInt(params.unit.value);

	if (params.keyword.value)
	{
		if (document.subform)
		{
			document.subform.keyword.value = params.keyword.value;
		}
		document.msearch.p.value = params.keyword.value;
	}

	//ソート用ボタンのスタイルを変更
	if (params.sort.value == "id")
	{
		if (document.getElementById('sort_1')) document.getElementById('sort_1').className = "pushed";
	}
	else
	{
		if (document.getElementById('sort_0')) document.getElementById('sort_0').className = "pushed";
	}

	//掲示板選択フォームを有効化
	if (params.genres.value)
	{
		document.search.dir.disabled = false;
		document.search.dir.value = params.dir.value;
	}

	//検索数表示
	if (document.getElementById('stats'))
	{
		var stats = "";
		var sqltime = params.sqltime.value;

		if (total > 0)
		{
			var from = start + 1;
			var to   = from + unit - 1;
			if (to > total) to = total;

			stats = "検索結果：" + total + "件（最大100件） " + from + "〜" + to + "件" + " 検索時間：" + sqltime + "秒";
		}
		else
		{
			stats = "検索結果：0件 検索時間：" + sqltime + "秒";

			if (params.keyword.value)
			{
				document.subform.keyword.style.backgroundColor = "red";
				document.subform.keyword.style.color = "white";
			}
			document.getElementById('notfound').style.display = "";
		}
		document.getElementById('stats').childNodes[0].nodeValue = stats;

		if (total > 10) document.getElementById('selector').style.display = "";
	}

	//履歴のキーワード欄
	if (document.params.dir.value) document.history_keyword.keyword.disabled = false;

	//熊
	if (total)
	{
		//var unit = 20;
		var unit = parseInt(document.params.unit.value);

		var s = parseInt(document.params.start.value / unit);
		var tag = "<a href=\"javascript:jump(%num%)\" title=\"%title%\"><img src=%img%></a> ";
		var html = "";

		if (total > 0)
		{
			var n = parseInt((total - 1) / unit);
			if (n > unit -1) n = unit -1;
			for (i = 0; i <= n; i ++)
			{
				var img = "/img/kuma.gif";
				var title = (i + 1) + "ｸﾏｰ!";
				if (i == s)
				{
					img = "/img/kuma_koko.gif";
					title = "ｲﾏｺｺ";
				}
				var t = tag;
				t = t.replace(/%num%/g, i * unit);
				t = t.replace(/%title%/g, title);
				t = t.replace(/%img%/g, img);

				html += t;
			}
			document.getElementById("kuma").innerHTML = html;
		}
	}

	//スレッド毎のキーワード表示
	var id = 1;
	while (document.getElementById("title_" + id))
	{
		drawKeywords(id);
		id ++;
	}

	//スレッドタイトルのキーワードをハイライト
	markupKeyword();

	/*------------------*/

	//検索履歴のクッキー登録と履歴フォーム表示
	var dir      = document.params.dir.value;
	var dir_name = document.params.dir_name.value;
	var keyword  = document.params.keyword.value;

	var cookie_name, cookie_data, str;

	if (dir && dir_name)
	{
		str = dir_name + "\t" + dir;
		cookie_name = "history_dir";
		cookie_data = add2metadata(str, readCookie(cookie_name), HISTORY_DIR_MAX);

		writeCookie(cookie_name, cookie_data, COOKIE_EXPIRE_DAYS, COOKIE_PATH);
	}

	if (keyword	&& keyword.split(' ').length == 1)
	{
		str = keyword;
		cookie_name = "history_keyword";
		cookie_data = add2metadata(str, readCookie(cookie_name), HISTORY_KEYWORD_MAX);

		writeCookie(cookie_name, cookie_data, COOKIE_EXPIRE_DAYS, COOKIE_PATH);

	}
	drawHistoryOptions();

	/*------------------*/

	if (dir)     document.history_dir.dir.value = dir;
	if (keyword) document.history_keyword.keyword.value = keyword;

	/*------------------*/

	//ニュースティッカー表示
	drawNewsTicker();

	//レス用リンク作成
	if (ADD_LINK_TO_RES) addLink2Res();

	//ニュース一覧表示
	if (!location.search)
	{
		drawNewsList();//トップページのみに表示
		document.getElementById('ad').style.display = "none";
	}
	else
	{
		var q = getQueries();
		if (q['genres'] && !q['dir'])
		{
			drawGenresRSS(q['genres']);
			document.getElementById('ad').style.display = "none";
		}
	}

}

function drawGenresRSS(genres_escaped)
{
	var rss_url 	= "/rss/genres/?genres=" + genres_escaped;
	var output_id 	= "rss_0";
	var title 		= "人気スレッド TOP50";
	new rssReader(rss_url, 50, output_id, title, "");

	document.getElementById('news').style.display = "";
}

function drawKeywords(id)
{
	var target = document.getElementById("title_" + id).innerHTML;

	var array = str2Keywords(target);

	if (!array) return false;

	var tag = "", tags = "", key_all = "";
	var lasttxt = new Array();
	for (i = 0;i < array.length; i ++)
	{
		var txt = array[i];
		if (lasttxt[txt]) continue;

		txt = txt.replace(/'/g, "\'");
		var url  = "kwd('" + txt.replace(/'/, "\\'") + "')";
		tag = "<a href=javascript:" + url + ">" + txt + "</a> ";
		tags += tag;

		lasttxt[txt] = true;
	}

	var key_all = array.join(" ");
	key_all = key_all.replace(/'/g, "\\'");

	tags = "<a href=\"javascript:kwd('" + key_all + "')\"><img src=\"/img/inspect.gif\" title=\"類似スレッド検索\"></a> " + tags;

	document.getElementById("kw_" + id).innerHTML = tags;

	return true;
}

function markupKeyword()
{
	var keyword = document.params.keyword.value;
	if (!keyword || keyword == '&') return false;

	var str = keyword.split(' ');
	var sep = "";
	var words = "";

	for (i = 0;i < str.length; i ++)
	{
		if (str[i])
		{
			words += sep + str[i];
			sep = "|";
		}
	}
	var regex = new RegExp("(" + words + ")", "gi");

	for(i = 0;i < document.links.length; i ++)
	{
		if (document.links[i].className == "title")
		{
			var target = document.links[i];
			target.innerHTML = target.innerHTML.replace(regex, '<b>$1</b>');
		}
	}
}

function flipGenresMenu(min)
{
	var size = min;
	var len  = document.search.genres.length;
	if (document.search.genres.size != len) size = len;
	document.search.genres.size = size;
}

/*----------------------------*/

function addLink2Res()
{
	var i = 1, obj;
	while (document.getElementById("res_" + i))
	{
		url2Link("res_" + i)
		i ++;
	}
}

/*------------------*/

function rssReader(url, max, output_id, title, title_url)
{
	this.url = url;
	this.max = max;
	this.title = title;
	this.title_url = title_url;
	this.output_id = output_id;

	this.ajaxobj = createAjaxObj();
	this.getAjaxcontent();
}

rssReader.prototype.getAjaxcontent = function()
{
	if (this.ajaxobj)
	{
		var instance = this;
		this.ajaxobj.onreadystatechange = function(){instance.initialize()}
		this.ajaxobj.open('GET', this.url, true);
		this.ajaxobj.send(null);
	}
}

rssReader.prototype.initialize = function()
{
	if (this.ajaxobj.readyState == 4)
	{
		if (this.ajaxobj.status == 200)
		{
			var xmldata = this.ajaxobj.responseXML;
			if (xmldata.getElementsByTagName("item").length == 0)
			{
				//document.getElementById(this.output_id).innerHTML = "<b>Error</b>";
				return;
			}

			var instance = this;
			this.feeditems = xmldata.getElementsByTagName("item");

			for (var i = 0; i < this.feeditems.length; i ++)
			{
				this.feeditems[i].setAttribute("ctitle", this.feeditems[i].getElementsByTagName("title")[0].firstChild.nodeValue);
				this.feeditems[i].setAttribute("clink" , this.feeditems[i].getElementsByTagName("link")[0].firstChild.nodeValue);
			}
			this.draw();
		}
	}
}

rssReader.prototype.draw = function()
{
	var tag = "<table width=100%>";

	if (this.title_url)
	{
		tag += "<tr><th><a href=" + this.title_url + ">" + this.title + "</a></th></tr>";
	}
	else
	{
		tag += "<tr><th>" + this.title + "</th></tr>";
	}


	for (var pointer = 0; pointer < this.max; pointer ++)
	{
		if (!this.feeditems[pointer]) break;

		tag += '<tr><td><a href="' + this.feeditems[pointer].getAttribute("clink") + '" target="_blank">'
			 + this.feeditems[pointer].getAttribute("ctitle") + '</a></td></tr>';
	}

	tag += "</table>";

	document.getElementById(this.output_id).innerHTML = tag;
}

function drawNewsList()
{
	var d  = new Array("newsplus", "mnewsplus", "bizplus", "news5plus", "scienceplus", "dqnplus");
	var dn = new Array("ニュース速報＋", "芸スポ速報＋", "ビジネスnews＋", "ニュース国際＋", "科学ニュース＋", "痛いニュース＋");

	for (i = 0; i < d.length; i ++)
	{
		var rss_url 	= "/rss/?dir=" + d[i] + "&keyword=&sort=id";
		var title_url 	= "/search/?dir=" + d[i] + "&sort=id";
		var output_id 	= "rss_" + i;
		new rssReader(rss_url, 5, output_id, dn[i], title_url);
	}
	document.getElementById('news').style.display = "";
}

