
var COOKIE_EXPIRE_DAYS = 30;
var COOKIE_PATH = "/";
var HISTORY_KEYWORD_MAX = 30;
var HISTORY_DIR_MAX = 30;
var HISTORY_THREAD_MAX = 10;

var REGEXP_PICKUP = new RegExp("[a-z]+([\\w\.,'\-]+)+|[ァ-ヴー〜]{2,}|[一-龠々〆ヵヶ]+","ig");//キーワード抽出対象の文字列
var REGEXP_IGNORE = new RegExp("part\\s?[0-9]+|vol\.?[0-9]+|ver\.?[0-9]+|スレ(ッド)?|w{3,}","ig");//キーワードから除外する文字列

function readCookie(name)
{
	name += "=";
	var cookie = document.cookie + ";";
	var start = cookie.indexOf(name);
	if (start != -1)
	{
		var end = cookie.indexOf(";", start);
		return unescape(cookie.substring(start + name.length, end));
	}
}

function writeCookie(name, value, day, path)
{
	if ((name != null) && (value != null))
	{
		if (day == null) day = 0;

		day = eval(day);
		var setDay = new Date();
		setDay.setTime(setDay.getTime() + (day * 1000 * 60 * 60 * 24));
		var cookie_expires = setDay.toGMTString();

		var cookie_value = name + "=" + escape(value);
		if (cookie_expires) cookie_value += ";expires=" + cookie_expires;
		if (path) 			cookie_value += ";path=" + path;


		document.cookie = cookie_value;
		return true;
	}
	return false;
}

function deleteCookie(name)
{
	document.cookie = name + "=;expires=Thu,01-Jan-70 00:00:01 GMT";
	return true;
}

function getQueries()
{
	var query = new Array();

	var s = location.search.split("?");
	if (s.length == 2)
	{
		var p, tmp;

		p = s[1].split("&");

		for (i = 0;i < p.length; i ++)
		{
			tmp = p[i].split("=");
			if (tmp.length == 2)
			{
				query[tmp[0]] = tmp[1];
			}
		}
	}
	return query;
}

function add2metadata(str, metadata, max_length)
{
	if (!metadata) return str;

	var array = metadata.split("\n");

	var tmp = new Array();
	tmp.push(str);
	for (i = 0;i < array.length; i ++)
	{
		if (array[i] != str) tmp.push(array[i]);
	}

	if (tmp.length > max_length)
	{
		tmp.length = max_length;
	}

	return tmp.join("\n");
}

function cookie2option(selector_object, cookie_name)
{
	var str = readCookie(cookie_name);

	selector_object.options.length = 1;

	if (str)
	{
		var array = str.split("\n");

		for (i = 0; i< array.length; i ++)
		{
			if (array[i])
			{
				var params = array[i].split("\t");
				var newValue = "";
				var newOption = "";

				switch (cookie_name)
				{
					case "history_thread":
						var tmp = params[1].split("/");
						newValue = "/go.php?dir=" + tmp[0] + "&id=" + tmp[1];
						newOption = params[0];
						break;

					case "history_dir":
						newOption = params[0];
						newValue  = params[1];
						break;

					case "history_keyword":
						newOption = params[0];
						newValue  = params[0];
						break;

					default:
				}

				if (newOption)
				{
					selector_object.options[i + 1] = new Option(newOption, newValue);
				}
			}
		}
	}
}

function drawHistoryOptions()
{
	cookie2option(document.history_keyword.keyword, "history_keyword");
	cookie2option(document.history_dir.dir        , "history_dir");
	cookie2option(document.history_thread.thread  , "history_thread");
}

function drawNewsTicker()
{
	var d  = new Array("newsplus","mnewsplus","bizplus","news5plus");
	var dn = new Array("ニュース速報＋","芸スポ速報＋","ビジネスnews＋","ニュース国際＋");
	var n = parseInt(Math.random() * d.length);
	new rss_ticker(d[n], "topnews", "news", 5000);

	var url = "/search/?dir=" + d[n] + "&sort=id";
	document.getElementById('topnews_link').href = url;
	document.getElementById('topnews_link').title = dn[n];
}

/*
 ======================================================================
 RSS JavaScript Ticker object
 Author: George at JavaScriptKit.com/ DynamicDrive.com
 Created: Feb 5th, 2006. Updated: Feb 5th, 2006
 URL: http://www.javascriptkit.com/dhtmltutors/ajaxticker/ajaxticker4.shtml

 Modified By: Chiqlo
 ======================================================================
*/

function createAjaxObj()
{
	var httprequest = false;
	if (window.XMLHttpRequest)
	{
		httprequest = new XMLHttpRequest();
		if (httprequest.overrideMimeType) httprequest.overrideMimeType('text/xml');
	}
	else if (window.ActiveXObject)
	{
		try
		{
			httprequest = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				httprequest = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e){}
		}
	}
	return httprequest;
}

function rss_ticker(dir, divId, divClass, delay, optionalswitch)
{
	this.dir = dir;
	this.tickerid = divId; //ID of ticker div to display information
	this.delay = delay; //Delay between msg change, in miliseconds.
	this.logicswitch = (typeof optionalswitch != "undefined") ? optionalswitch : -1;
	this.mouseoverBol = 0; //Boolean to indicate whether mouse is currently over ticker (and pause it if it is)
	this.pointer = 0;
	this.ajaxobj = createAjaxObj();
	this.getAjaxcontent();
}

rss_ticker.prototype.getAjaxcontent = function()
{
	if (this.ajaxobj)
	{
		var instanceOfTicker = this;
		var parameters = "dir=" + this.dir + "&sort=id";
		this.ajaxobj.onreadystatechange = function(){instanceOfTicker.initialize()}
		var url = "/rss/?" + parameters;
		this.ajaxobj.open('GET', url, true);
		this.ajaxobj.send(null);
	}
}

rss_ticker.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.tickerid).innerHTML = "";
				return;
			}
			var instanceOfTicker = 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.feeditems[i].setAttribute("cdescription", this.feeditems[i].getElementsByTagName("description")[0].firstChild.nodeValue);
			}
			document.getElementById(this.tickerid).onmouseover = function(){instanceOfTicker.mouseoverBol = 1}
			document.getElementById(this.tickerid).onmouseout  = function(){instanceOfTicker.mouseoverBol = 0}
			this.rotatemsg();
		}
	}
}

rss_ticker.prototype.rotatemsg = function()
{
	var instanceOfTicker = this;
	if (this.mouseoverBol == 1)
	{
		setTimeout(function(){instanceOfTicker.rotatemsg()}, 100);
	}
	else
	{
		var tickerDiv = document.getElementById(this.tickerid);
		var tickercontent = '<a href="' + this.feeditems[this.pointer].getAttribute("clink") + '" target="_blank">' + this.feeditems[this.pointer].getAttribute("ctitle") + '</a>'
		if (this.logicswitch == "showdescription") tickercontent += "<br />" + this.feeditems[this.pointer].getAttribute("cdescription");
		tickerDiv.innerHTML = tickercontent;
		this.pointer = (this.pointer < this.feeditems.length - 1) ? this.pointer + 1 : 0;
		setTimeout(function(){instanceOfTicker.rotatemsg()}, this.delay);
	}
}

/*------------------*/

function boardFinder(str)
{
	this.str = str;
	this.id = "boardfinder_result";
	this.ajaxobj = createAjaxObj();
	this.getAjaxcontent();
}

boardFinder.prototype.getAjaxcontent = function()
{
	if (this.ajaxobj)
	{
		var instanceOfboardFinder = this;
		var parameters = "keyword=" + encodeURIComponent(this.str + "\n京");
		this.ajaxobj.onreadystatechange = function(){instanceOfboardFinder.initialize()}
		var url = "/search/board_finder.php?" + parameters;
		this.ajaxobj.open('GET', url, true);
		this.ajaxobj.send(null);
	}
}

boardFinder.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.id).innerHTML = "掲示板が見つかりません";
				return;
			}

			var instanceOfboardFinder = this;
			this.feeditems = xmldata.getElementsByTagName("item");

			for (var i = 0; i < this.feeditems.length; i ++)
			{
				this.feeditems[i].setAttribute("cname", this.feeditems[i].getElementsByTagName("name")[0].firstChild.nodeValue);
				this.feeditems[i].setAttribute("cdir" , this.feeditems[i].getElementsByTagName("dir")[0].firstChild.nodeValue);
				this.feeditems[i].setAttribute("chit" , this.feeditems[i].getElementsByTagName("hit")[0].firstChild.nodeValue);
			}
			this.updateForm();
		}
	}
}

boardFinder.prototype.updateForm = function()
{
	var content = "";
	var url, hit, keyword;
	var isTitle1Shown = false;
	var isTitle2Shown = false;
	for (i = 0; i < this.feeditems.length; i ++)
	{
		name = this.feeditems[i].getAttribute("cname");

		hit = parseInt(this.feeditems[i].getAttribute("chit"));
		dir = this.feeditems[i].getAttribute("cdir");

		if (hit)
		{
			if (!isTitle1Shown)
			{
				content += "<p>スレッド名にマッチ</p>";
				isTitle1Shown = true;
			}

			keyword = this.str.replace(/'/,"\\'")
			url = "javascript:dirkwd('" + dir + "','" + keyword +"')";
			name += " (" + hit + ")";
		}
		else
		{
			if (!isTitle2Shown)
			{
				content += "<p>掲示板名にマッチ</p>";
				isTitle2Shown = true;
			}

			url = "javascript:dirkwd('" + dir + "','')";
		}

		content += "<li><a href=\"" + url + "\">" + name + "</a></li>";
	}
	var div = document.getElementById(this.id);
	div.innerHTML = content;
}

/*------------------*/

function datReader(dir, id, output_id, bool_addlink)
{
	this.dir = dir;
	this.id = id;

	this.output_id = output_id;//結果出力先のID
	this.addlink = (bool_addlink) ? true : false;

	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 = "/fetch_dat.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;

			if (!xmldata.getElementsByTagName("dat")[0].firstChild.nodeValue)
			{
				document.getElementById(this.output_id).innerHTML = "スレッドが見つかりません";
				return;
			}

			document.getElementById(this.output_id).innerHTML = xmldata.getElementsByTagName("dat")[0].firstChild.nodeValue;

			//if (this.addlink) addLink2Keyword(this.output_id);
			//else url2Link(this.output_id);

			url2Link(this.output_id);
		}
	}
}

/*
function addLink2Keyword(id)
{
	var html = document.getElementById(id).innerHTML;

	html = html.replace(/<br>/g,"\n");
	html = html.replace(/(h?(ttp:\/\/[a-z0-9\.\/\-_~,;\?=&#\+%]+))/gi,'\t');

	html = html.replace(/&amp;/g,"&");
	html = html.replace(/&gt;/g,">");

	var re = new RegExp("([a-z][\\w\.,\-]+|[ァ-ヴー〜]{2,}|[一-龠々〆ヵヶ]{2,})", 'ig');
	html = html.replace(re, "<a href=\"javascript:kwd('$1')\">$1</a>");


	html = html.replace(/\n/g,"<br>");
	html = html.replace(/\t/g,"(URL)");

	document.getElementById(id).innerHTML = html;

	return true;
}
*/

function url2Link(id)
{
	var html = document.getElementById(id).innerHTML;

	html = html.replace(/(https?:\/\/[a-z0-9\.\/\-_~,;:\?=&#\+%]+)/gi,'<a href="$1" target="_blank">$1</a>');
	document.getElementById(id).innerHTML = html;

	return true;
}

/*------------------*/

function str2Keywords(target)
{
	target = target.replace(/&(gt|lt|#[0-9]+);/g," ");
	target = target.replace(/&amp;/g,"&");
	target = target.replace(REGEXP_IGNORE, " ");
	var array = target.match(REGEXP_PICKUP);

	return array;
}

