
/*------------------*/

function datReader(dir, id, output_id)
{
	this.dir = dir;
	this.id = id;
	this.output_id = output_id;//結果出力先のID

	this.ajaxobj = createAjaxObj();
	this.getAjaxcontent();
}

datReader.prototype.getAjaxcontent = function()
{
	if (this.ajaxobj)
	{
		var instance = this;
		var parameters = "dir=" + this.dir + "&id=" + this.id;
		this.ajaxobj.onreadystatechange = function(){instance.initialize()}
		var url = "/xml/res.php?" + parameters;
		this.ajaxobj.open('GET', url, true);
		this.ajaxobj.send(null);
	}
}

datReader.prototype.initialize = function()
{
	if (this.ajaxobj.readyState == 4)
	{
		if (this.ajaxobj.status == 200)
		{
			var xmldata = this.ajaxobj.responseXML;

			var dat = xmldata.getElementsByTagName("dat");

			var	res = "<font color=red><b>スレッドが見つかりません</b></font>";
			var date = "";

			if (dat.length)
			{
				res  = dat[0].getElementsByTagName("res")[0].firstChild.nodeValue;
				date = dat[0].getElementsByTagName("date")[0].firstChild.nodeValue;
			}

			document.getElementById(this.output_id.date).innerHTML = date;
			document.getElementById(this.output_id.response).innerHTML = res;

			url2Link(this.output_id.response);
		}
	}
}

/*------------------*/

function categoryDataReader(dir)
{
	this.url = "/xml/category/" + dir + ".xml";
	this.output_id = "insert_category";

	this.ajaxobj = createAjaxObj();
	this.getAjaxcontent();
}

categoryDataReader.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);
	}
}

categoryDataReader.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 = "";
				return;
			}

			this.dir = xmldata.getElementsByTagName("dir")[0].firstChild.nodeValue;
			this.feeditems = xmldata.getElementsByTagName("item");

			var tag = "";

			tag += '<table cellpadding="0" cellspacing="0">';
			tag += '<tr>';

			for (var i = 0; i < this.feeditems.length; i ++)
			{
				var keyword = this.feeditems[i].getElementsByTagName("keyword")[0].firstChild.nodeValue;

				tag += '<td class="tab">';
				tag += '<ul style="display:none" id="folder_' + i + '">';

				for (var k = 0; k < this.feeditems[i].getElementsByTagName("sub").length; k ++)
				{
					var _name = this.feeditems[i].getElementsByTagName("sub")[k].getElementsByTagName("name")[0].firstChild.nodeValue;
					var _dir  = this.feeditems[i].getElementsByTagName("sub")[k].getElementsByTagName("dir")[0].firstChild.nodeValue;

					var url = "javascript:setDir('" + _dir + "')";

					if (this.dir != _dir) tag += '<li><a href="' + url + '">' + _name + '</a>';
					else tag += '<li><img src="/img/triangle_right.gif">' + _name;

				}
				tag += "</ul>";
				tag += '<div class="tab_top"><a href="javascript:void(0)" onClick="fold(' + i + ')">' + keyword + '</a></div>';
				tag += "</td>";
				tag += "<td>&nbsp;</td>";
			}
			tag += "</tr>";
			tag += "</table>";

			document.getElementById(this.output_id).innerHTML = tag;
		}
	}
}

/*------------------*/

function threadDataReader(dir, sort, max)
{
	this.output_id = "contents";
	this.url = "/xml/top/" + sort + "/" + dir + ".xml";
	this.max = max;
	this.num = 0;
	this.keywords = new Array;
	this.sort = sort;

	this.ajaxobj = createAjaxObj();
	this.getAjaxcontent();
}

threadDataReader.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);
	}
}

threadDataReader.prototype.initialize = function()
{
	if (this.ajaxobj.readyState == 4)
	{
		if (this.ajaxobj.status == 200)
		{
			var xmldata = this.ajaxobj.responseXML;

			this.dir = xmldata.getElementsByTagName("dir")[0].firstChild.nodeValue;
			this.dir_name = xmldata.getElementsByTagName("dir_name")[0].firstChild.nodeValue;

			if (xmldata.getElementsByTagName("item").length)
			{
				this.feeditems = xmldata.getElementsByTagName("item");

				for (var i = 0; i < this.feeditems.length; i ++)
				{
					this.feeditems[i].setAttribute("ctitle", this.feeditems[i].getElementsByTagName("ti")[0].firstChild.nodeValue);
					this.feeditems[i].setAttribute("cid"   , this.feeditems[i].getElementsByTagName("id")[0].firstChild.nodeValue);
					this.feeditems[i].setAttribute("cdiff" , this.feeditems[i].getElementsByTagName("d")[0].firstChild.nodeValue);
					this.feeditems[i].setAttribute("cres"  , this.feeditems[i].getElementsByTagName("r")[0].firstChild.nodeValue);
				}
			}
			this.draw();
		}
	}
}

threadDataReader.prototype.draw = function()
{
	var obj = document.getElementById('btitle');
	var tag = '<a href="/search/?dir=%dir%&sort=%sort%">%dir_name%＠2ch</a> トップ100'
			+ '<div align=right><img src="/img/star.gif"> <a href="./?dir=%dir%&sort=%sort%" style="font-weight:normal">このページのリンク</a></div>';
	tag = tag.replace(/%dir_name%/, this.dir_name);
	tag = tag.replace(/%dir%/g, this.dir);
	tag = tag.replace(/%sort%/g, this.sort);
	obj.innerHTML = tag;

	var insert_point = document.getElementById(this.output_id);
	insert_point.innerHTML = "";
	insert_point.insertBefore(document.createElement('SPAN'), insert_point.firstChild);//DIVエレメントを正しく配置するために必要

	for (var pointer = 0; pointer < this.max; pointer ++)
	{
		if (!this.feeditems[pointer]) break;

		var link    = "/go.php?dir=" + this.dir + "&id=" + this.feeditems[pointer].getAttribute("cid");
		var datlink = "readDat('" + this.dir + "','" + this.feeditems[pointer].getAttribute("cid") + "')";

		var title = this.feeditems[pointer].getAttribute("ctitle");
		title = title.replace(/</g,'&lt;');
		if (!title) title = "(空白)";

		var new_node = document.createElement('DIV');
		new_node.id = "b_" + pointer;

		new_node.onclick = function(){highlightThread(this.id)}
		new_node.ondblclick = function(){readDat(this.childNodes[1])}

		var diff = parseInt(this.feeditems[pointer].getAttribute("cdiff"));
		var res  = parseInt(this.feeditems[pointer].getAttribute("cres"));

		var c = "null";
		if (res >= RESPONSE_MAX)
		{
			c = "closed";
		}
		else
		{
			if      (diff > 500) c = "veryhigh";
			else if (diff > 200) c = "high";
			else if (diff > 100) c = "middle";
			else if (diff >  10) c = "low";
			else if (diff >   0) c = "verylow";
			else                 c = "null";
		}
		new_node.className = c;
		//new_node.title = res;

		var a_id = "t_" + pointer;
		//var graph = getResponseGraph(this.feeditems[pointer].getAttribute("cres"), this.feeditems[pointer].getAttribute("cdiff"));
		var graph = getResponseGraph(res, diff);

		new_node.innerHTML = '<span class=g>' + graph + '</span><span><a id="' + a_id + '" href="' + link + '" target="_blank">' + title + ' (' + res + ')</a></span>';

		insert_point.insertBefore(new_node, insert_point.lastChild);

		this.num ++;

		/*--------------------*/
		if (true)
		{
			var array = str2Keywords(this.feeditems[pointer].getAttribute("ctitle"));
			if (array)
			{
				var checked = new Array;

				for (var i = 0; i < array.length; i ++)
				{
					var key = array[i];

					if (!checked[key])
					{
						if (typeof(this.keywords[key]) != "object") this.keywords[key] = new Array;
						this.keywords[key].push(pointer);

						checked[key] = true;
					}
				}
			}
		}
		/*--------------------*/

	}
	changeOpac(100, this.output_id);

	setDirHistory(this.dir, this.dir_name);
}

function getResponseGraph(response, diff)
{
	var graph = "";

	if (response >= RESPONSE_MAX)
	{
		graph = "<img src=\"/img/b_darkgray.gif\" width=\"" + RESPONSE_GRAPH_WIDTH + "\" class=closed>";
	}
	else
	{
		if (diff > RESPONSE_MAX) diff = RESPONSE_MAX;

		var a = parseInt((response - diff) / RESPONSE_GRAPH_UNIT);
		if (!a) a = 1;
		var b = parseInt(diff / RESPONSE_GRAPH_UNIT);
		var c = RESPONSE_GRAPH_WIDTH - a - b;

		if (a) graph += "<img src=\"/img/b_blue.gif\" width=\""  + a + "\" class=blue>";
		if (b) graph += "<img src=\"/img/b_red.gif\" width=\""   + b + "\" class=red>";
		if (c) graph += "<img src=\"/img/b_white.gif\" width=\"" + c + "\" class=white>";
	}

	return graph;
}

function genresDataReader()
{
	this.url = "/xml/genres.php";
	this.select_element = document.ajax_search.genres;

	this.ajaxobj = createAjaxObj();
	this.getAjaxcontent();

}

genresDataReader.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);
	}
}

genresDataReader.prototype.initialize = function()
{
	if (this.ajaxobj.readyState == 4)
	{
		if (this.ajaxobj.status == 200)
		{
			this.select_element.options.length = 0;

			var xmldata = this.ajaxobj.responseXML;
			if (xmldata.getElementsByTagName("item").length == 0)
			{
				var new_option = new Option("読み込みエラー", "");
				this.select_element.options[0] = new_option;
				this.select_element.disabled = true;

				return;
			}

			this.feeditems = xmldata.getElementsByTagName("item");

			var tag = "";
			var genres, sum, classname;

			for (var i = 0; i < this.feeditems.length; i ++)
			{
				genres = this.feeditems[i].getElementsByTagName("genres")[0].firstChild.nodeValue;
				sum    = this.feeditems[i].getElementsByTagName("sum")[0].firstChild.nodeValue;

				if      (sum > 5000)	classname = "red";
				else if (sum > 1000)	classname = "pink";
				else if (sum > 500)		classname = "yellow";
				else if (sum > 0)		classname = "green";
				else             	 	classname = "gray";

				var new_option = new Option(genres, genres);
				new_option.className = classname;

				this.select_element.options[i] = new_option;

			}
			//this.select_element.size = this.select_element.length;
		}
	}
}

function boardsDataReader(genres)
{
	this.url = "/xml/boards.php?genres=" + encodeURI(genres);
	this.select_element = document.ajax_search.dir_dummy;

	this.ajaxobj = createAjaxObj();
	this.getAjaxcontent();

}

boardsDataReader.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);
	}
}

boardsDataReader.prototype.initialize = function()
{
	if (this.ajaxobj.readyState == 4)
	{
		if (this.ajaxobj.status == 200)
		{
			this.select_element.options.length = 0;

			var xmldata = this.ajaxobj.responseXML;
			if (xmldata.getElementsByTagName("item").length == 0)
			{
				var new_option = new Option("読み込みエラー", "");
				this.select_element.options[0] = new_option;
				this.select_element.disabled = true;

				return;
			}

			this.feeditems = xmldata.getElementsByTagName("item");

			var tag = "";
			var genres, sum, classname;

			for (var i = 0; i < this.feeditems.length; i ++)
			{
				dir  = this.feeditems[i].getElementsByTagName("dir")[0].firstChild.nodeValue;
				name = this.feeditems[i].getElementsByTagName("name")[0].firstChild.nodeValue;
				sum  = this.feeditems[i].getElementsByTagName("sum")[0].firstChild.nodeValue;

				if      (sum > 1000)	classname = "red";
				else if (sum > 500)		classname = "pink";
				else if (sum > 100)		classname = "yellow";
				else if (sum > 0)		classname = "green";
				else             	 	classname = "gray";

				var new_option = new Option(name, dir);
				new_option.className = classname;

				this.select_element.options[i] = new_option;
			}

			var n = (i < 20) ? i : 20;
			this.select_element.size = n;
		}

		this.select_element.size = this.select_element.length;

	}
}

/*------------------*/

function searchResultReader(dir, keyword, sort, output_id)
{
	this.dir = dir;
	this.keyword = keyword;
	this.sort = sort;
	this.output_id = output_id;//結果出力先のID

	this.ajaxobj = createAjaxObj();
	this.getAjaxcontent();
}

searchResultReader.prototype.getAjaxcontent = function()
{
	if (this.ajaxobj)
	{
		var parameters = "dir=" + encodeURIComponent(this.dir) + "&keyword=" + encodeURIComponent(this.keyword + "\n京") + "&sort=" + encodeURIComponent(this.sort);

		var instance = this;
		this.ajaxobj.onreadystatechange = function(){instance.draw()}
		var url = "/xml/search/?" + parameters;

		this.ajaxobj.open('GET', url, true);
		this.ajaxobj.send(null);
	}
}

searchResultReader.prototype.draw = function()
{
	if (this.ajaxobj.readyState == 4)
	{
		if (this.ajaxobj.status == 200)
		{
			var xmldata = this.ajaxobj.responseXML;

			var tag = "<ul>";

			if (xmldata.getElementsByTagName("item").length)
			{
				this.feeditems = xmldata.getElementsByTagName("item");

				for (var i = 0; i < this.feeditems.length; i ++)
				{
					var title = this.feeditems[i].getElementsByTagName("ti")[0].firstChild.nodeValue;
					var dir   = this.feeditems[i].getElementsByTagName("dir")[0].firstChild.nodeValue;
					var id    = this.feeditems[i].getElementsByTagName("id")[0].firstChild.nodeValue;
					var res   = this.feeditems[i].getElementsByTagName("r")[0].firstChild.nodeValue;
					var diff  = this.feeditems[i].getElementsByTagName("d")[0].firstChild.nodeValue;

					diff = (diff > 0) ? "+" + diff : "";
					var url = "/go.php?dir=" + dir + "&id=" + id;

					var markuped_title = markupKeyword(title, this.keyword);

					tag += '<li>';
					tag += '<a href="javascript:void(\'' + dir + '/' + id + '\')" onClick="readDatByID(\'' + dir + "'," + id + ',this)">' + markuped_title + ' (' + res + ')</a> <font color=red><b>' + diff + '</b></font>';
					tag += '</li>';
				}
			}
			tag += "</ul>";
			document.getElementById(this.output_id).innerHTML = tag;
		}
	}
}


