var xNavi, xNaviBtn = null, xHtml = null, xBody = null;
var imgs, strImgBase;
var docImgs = new Array();
var isMiniImg = new Array();
var bNaviVisible = true;

window.onload = windowOnLoad

if (document.styleSheets && navigator.cookieEnabled && (document.getElementById || document.all))
{
	docCss = document.styleSheets;
	bNaviVisible = GetCookie("isNaviVisible");
	if (null == bNaviVisible || "true" == bNaviVisible.toLowerCase()) bNaviVisible = true;
	else bNaviVisible = false;
	ApplyNaviBar();
}


function addCssRule(selector, declarations)
{
	if (docCss)
	{
		if (docCss[0].addRule)
		{
			docCss[0].addRule(selector, declarations);
		}
		else if (docCss[0].insertRule)
		{
			docCss[0].insertRule(selector + "{" + declarations + "}", docCss[0].cssRules.length);
		}
	}
}


function ApplyNaviBar()
{
	if (docCss)
	{
		if (bNaviVisible)
		{
			addCssRule("#NAVI", "display: block !important");
			addCssRule("#BODY", "margin-left: 6.66em !important");
		}
		else
		{
			addCssRule("#NAVI", "display: none !important");
			addCssRule("#BODY", "margin-left: 0 !important");
		}
	}
}


function toggleNaviBar()
{
	if (docCss)
	{
		bNaviVisible = !bNaviVisible;
		ApplyNaviBar();

		var date = new Date();
		date.setTime(date.getTime() + 24 * 60 * 60 * 1000 * 365 * 10);	// 10 years
		SetCookie("isNaviVisible", bNaviVisible, date);
	}
}


function windowOnLoad()
{
	initAbbrs();
	initHotImage();
	initNavi();
	url_breaker_plus_NS();
}


function SetCookie(sName, sValue, date)
{
	document.cookie = sName + "=" + escape(sValue) + "; expires=" + date.toGMTString();
}


function GetCookie(sName)
{
	var ck = document.cookie + ";";
	var s0 = sName + "=";
	var st0 = ck.indexOf(s0);
	var st1 = ck.indexOf(sName + ";");

	if (-1 != st0 || -1 != st1)
	{
		if (-1 == st1 || st1 >= st0)
		{
			return unescape(ck.substring(st0 + s0.length, ck.indexOf(";", st0)));
		}
		else return "";
	}
	return null;
}


function initAbbrs()
{
	// rebuild abbr elements if required
	if (document.all && window.showModalDialog)
	{
		// IE 4 or more
		var badAbbrs = document.all.tags("/abbr");

		if (document.namespaces && document.getElementsByTagName)
		{
			// IE 5.5 or more
			if (badAbbrs.length >= 1)
			{
				// operate DOM tree and rebuild abbr elements
				var i, Abbrs = document.getElementsByTagName("abbr");
				var oldAbbr, newAbbr, curElm;

				for (i = 0; i < Abbrs.length; i++)
				{
					newAbbr = document.createElement("abbr");
					with (oldAbbr = Abbrs.item(i))
					{
						newAbbr.mergeAttributes(oldAbbr);
						parentNode.insertBefore(newAbbr, oldAbbr);
						while (nextSibling.nodeName != "/ABBR")
						{
							newAbbr.appendChild(nextSibling);
						}
						parentNode.removeChild(nextSibling);
						parentNode.removeChild(oldAbbr);
					}
				}
			}
		}
		else if (document.body.filters)
		{
			// from IE 4.0x to IE 5.0x (Win32 or Unix)
			var docStyle = document.styleSheets[0];

			if (badAbbrs.length >= 1)
			{
				// replace abbr elements by span elements
				var r1 = new RegExp("<abbr", "ig");
				var r2 = new RegExp("abbr>", "ig");

				with (document.body)
				{
					innerHTML = innerHTML.replace(r1, "<span class=\"AbbrOldIE\"").replace(r2, "span>");
				}
				docStyle.addRule(".AbbrOldIE", "text-decoration: underline");
			}
			docStyle.addRule("acronym", "text-decoration: underline");
		}
	}
}


function initHotImage()
{
	if ((document.getElementsByTagName || document.all) && (imgs = document.images))
	{
		var i, p, m = 0, st,  pElm;

		for (i = 0; i < imgs.length; i++)
		{
			// get parent anchor element
			pElm = imgs[i].parentNode;
			if (!pElm) pElm = imgs[i].parentElement;	// for IE 4
			if (!pElm) break;

			p = imgs[i].src.indexOf("images/s_");
			if (-1 != p)
			{
				// preload image
				isMiniImg[m] = (-1 != (imgs[i].src.indexOf("_i.gif")));
				if (0 == m) strImgBase = imgs[i].src.substring(0, p + 7);
				docImgs[m] = (isMiniImg[m] ? new Image(19, 19) : new Image(46, 46));
				docImgs[m].src = strImgBase + "h" + imgs[i].src.substring(p + 8, imgs[i].src.length);

				// naming
				pElm.name = m;

				// set event handlers
				pElm.onfocus = pElm.onmouseover = setHotImage;
				pElm.onblur = pElm.onmouseout = setOrgImage;

				m++;
			}
		}
	}
}


function getFileTitle(str)
{
	var s = str.lastIndexOf("/");
	var p = str.lastIndexOf(".");

	if (-1 != s && s != str.length - 1 && -1 != p && s + 1 < p)
	{
		return str.substring(s + 1, p);
	}
	else if ("http://tete009.seesaa.net/" == str)
	{
		return "murmur";
	}
	else
	{
		return "index";
	}
}


function setImageSrc(a, bHot)
{
	var s = getFileTitle(a.href);

	if (s)
	{
		s = strImgBase + (bHot ? "h_" : "s_") + s + (isMiniImg[parseInt(a.name)] ? "_i" : "") + ".gif";
		if (a.firstChild)
		{
			// UA which have supported DOM
			a.firstChild.src = s;
		}
		else if (a.children)
		{
			// Opera 6 or IE 4
			a.children[0].src = s;
		}
	}
}


function setHotImage()
{
	setImageSrc(this, true);
}


function setOrgImage()
{
	setImageSrc(this, false);
}


function getElement(id)
{
	if (document.getElementById)
	{
		return document.getElementById(id);
	}
	else if (document.all)
	{
		return document.all(id);
	}
	return null;
}


function initNavi()
{
	if (document.all && window.showModalDialog && document.getElementsByTagName)
	{
		// IE 5 or more
		xNavi = getElement("NAVI");
		if (xNavi && xNavi.currentStyle && "absolute" == xNavi.currentStyle.position.toLowerCase() && "fixed" != document.body.currentStyle.backgroundAttachment.toLowerCase())
		{
			xNaviBtn = getElement("NAVIBTN");
			xHtml = document.body.parentNode;
			window.onresize = window.onscroll = setNaviPos;
			setNaviPos();
		}
	}
}


function setNaviPos()
{
	if (!xBody)
	{
		if (0 != document.body.scrollTop && 0 == xHtml.scrollTop) xBody = document.body;
		else if (0 != xHtml.scrollTop && 0 == document.body.scrollTop) xBody = xHtml;
	}
	if (xBody && xNavi.style.top != xBody.scrollTop)
	{
		xNaviBtn.style.top = xNavi.style.top = xBody.scrollTop;
	}
}


function shuffleArray(_ar)
{
	var i, t, r;

	_ar.sort(sft);
	for (i = 0; i < _ar.length; i++)
	{
		r = Math.ceil(Math.random() * _ar.length) - 1;
		t = _ar[i];
		_ar[i] = _ar[r];
		_ar[r] = t;
	}
}

function sft()
{
	return Math.random() - 0.5;
}

function processLangCode(_s)
{
	var p = _s.indexOf("-");

	if (p >= 1)
	{
		_s = _s.substring(0, p);
	}
	return _s;
}

function checkUAlang()
{
	if (document.getElementsByTagName && window.navigator)
	{
		var strUILang = "";
		if (navigator.language)
		{
			strUILang = navigator.language;
		}
		else if (navigator.browserLanguage)
		{
			strUILang = navigator.browserLanguage;
		}
		strUILang = processLangCode(strUILang).toLowerCase();

		var strHTMLLang = processLangCode(document.getElementsByTagName("html")[0].getAttribute("lang")).toLowerCase();

		if (("ja" == strUILang || "jpn" == strUILang) && "ja" != strHTMLLang)
		{
			document.write('<div class="column" lang="ja"><p>当掲示板を日本語で利用したい場合は、ブラウザのオプションを開き、日本語の優先順位を上げてください。</p></div>');
		}
	}
}


// ==UserScript==
// @name            url_breaker+
// @namespace       http://piro.sakura.ne.jp/
// @description     URL Breaker Modified Version
// @include         *
// ==/UserScript==
/*
	Original Script:
		url_breaker (made by asukaze)
		http://www.asukaze.net/soft/url_breaker/url_breaker.user.js
*/
function url_breaker_plus_NS()
{
	if (document.createNSResolver && document.execCommandShowHelp)
	{
		var resolver = document.createNSResolver(document.documentElement);
		var nodes = document.evaluate(
//				'/descendant::*[not(contains(" TITLE STYLE SCRIPT TEXTAREA XMP ", concat(" ", local-name(), " ")))]/child::text()',
				'/descendant::*[local-name() = "A" or local-name() = "DEL" or @class = "bbody"]/child::text()',
				document.documentElement,
				resolver,
				XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
				null
			);
		var regexp = new RegExp("([-;/:])");	// "([!-%'-/:=\\?@\\[-`\\{-~]|&amp;)"
		var range  = document.createRange();
		var wbr    = document.createElement('wbr');
		var lastIndex;
		var node;
		for (var i = 0; i < nodes.snapshotLength; i++)
		{
			node = nodes.snapshotItem(i);
			range.selectNode(node);
			while (node && (lastIndex = range.toString().search(regexp)) > -1)
			{
				range.setStart(node, lastIndex+RegExp.$1.length);
				range.setEnd(node, lastIndex+RegExp.$1.length);
				range.insertNode(wbr.cloneNode(true));
				node = node.nextSibling.nextSibling;
				range.selectNode(node);
			}
		}
		range.detach();
	}
}

function getTableRowValues(tbl, cell, rowStart, rowEnd)
{
	var ar = null;

	if (tbl && tbl.rows &&
		rowStart >= 0 && rowEnd < tbl.rows.length && rowStart <= rowEnd &&
		cell >= 0 && cell < tbl.rows[rowStart].cells.length)
	{
		ar = new Array();
		for (var i = rowStart; i <= rowEnd; i++)
		{
			var c = tbl.rows[i].cells[cell];
			var v = (c.textContent || c.innerText);

			if (v) ar[ar.length] = v;
		}
	}
	return ar;
}

function writeNicoThumb(thumbUrl, movieUrl, title)
{
	document.write('<iframe src="' + thumbUrl + '" width="312" height="200" scrolling="no" style="border:solid 1px #CCC;" frameborder="0"><a href="' + movieUrl + '">' + title + '</a></iframe>');
}

