
icon();
window.onload = init;


function icon() {
	if ( navigator.userAgent.match(/Mozilla\/5/) ) {
		var oHead = document.getElementsByTagName('head').item(0);
		var nLink = document.createElementNS('http://www.w3.org/1999/xhtml', 'link');
		nLink.rel = "icon";
		nLink.href = "/favicon.ico";
		oHead.appendChild(nLink);
	} else if (navigator.userAgent.match(/Opera/)) {
		document.write('<link rel="icon" href="/favicon.ico" />');
	}
}

function init(){
	if ( navigator.userAgent.match(/MSIE.*Win/) && !navigator.userAgent.match(/Opera/) ) {
		regenerateAbbr();
		quote();
		googleCacheClass();
	}
	isbn2bookstore();
}

/*  abbr要素を再生成する(for WinIE) */
function regenerateAbbr() {
	var abbrs = document.getElementsByTagName('abbr');
	for (var i = 0; i < abbrs.length; i++) {
		var oldAbbr = abbrs.item(i);
		var newAbbr = document.createElement('abbr');
		newAbbr.title = oldAbbr.title;
		oldAbbr.parentNode.insertBefore(newAbbr, oldAbbr);
		while (oldAbbr.nextSibling.nodeName != '/ABBR') {
			newAbbr.appendChild(oldAbbr.nextSibling);
		}
		oldAbbr.parentNode.removeChild(oldAbbr.nextSibling);
		oldAbbr.parentNode.removeChild(oldAbbr);
		/*alert(newAbbr.parentNode.innerHTML);*/
	}
}

/* q要素の前後に引用符を付加 */
function quote(){
	var qs = document.getElementsByTagName('q');
	for (var i = 0; i < qs.length; i++) {
		var qTop = document.createElement('span');
		qTop.className = 'qmark';
		qTop.appendChild(document.createTextNode('\u201c'));
		var qEnd = document.createElement('span');
		qEnd.className = 'qmark';
		qEnd.appendChild(document.createTextNode('\u201d'));
		qs.item(i).insertBefore(qTop, qs.item(i).firstChild);
		qs.item(i).appendChild(qEnd);
	}
}

/* urn:isbn:リンクの直後にオンライン書店へのリンクを追加する */
function isbn2bookstore() {
	var links = document.getElementsByTagName('a');
	isbnLinks = new Array();
	for (var i = 0; i < links.length; i++) {
		if ( links[i].href.match(/^urn:isbn:/i) ) {
			isbnLinks[isbnLinks.length] = links[i];
		}
	}
	if (isbnLinks.length == 0) {
		return;
	}
	for (var i = 0; i < isbnLinks.length; i++ ) {
		/* 各書店へのリンクを追加 */
		addLink2Amazon(isbnLinks[i]);
		/* もとのリンクは無効にする（href属性の削除）*/
		isbnLinks[i].removeAttribute('href');
	}
}

/* Googleのキャッシュで挿入されるtableにclass付けする */
function googleCacheClass() {
	if (!location.host.match(/(google|216\.239\.\d{2}\.100)/i)) return;
	gTable = document.getElementsByTagName('table').item(0);
	gTable.className = 'google-cache';
}


/* Amazon.co.jpへのリンクを追加 */
function addLink2Amazon(oLink) {
	var NS = 'http://www.w3.org/1999/xhtml';
	var url = 'http://www.amazon.co.jp/exec/obidos/ASIN/';
	var bookTitle = getInnerText(oLink);
	var isbn = oLink.href.replace(/^urn:isbn:/i, '');
	isbn = isbn.replace(/-/g, '');
	var aid = '/akatsukinishi-22/ref=nosim';
	var nImg, nA;
	if (document.createElementNS) {
		nImg = document.createElementNS(NS, 'img');
		nA = document.createElementNS(NS, 'a');
	} else {
		nImg = document.createElement('img');
		nA = document.createElement('a');
	}
	var nSpace = document.createTextNode(' ');
	nImg.src = '/style/amazon.png';
	nImg.alt = '[' + bookTitle + ' in Amazon.co.jp]';
	nImg.title = bookTitle + ' in Amazon.co.jp';
	nImg.width = 16;
	nImg.height = 16;
	nImg.className = 'booksotre';
	nA.appendChild(nImg);
	nA.href = url + isbn + aid;
	oLink.parentNode.insertBefore(nA, oLink.nextSibling);
	oLink.parentNode.insertBefore(nSpace, oLink.nextSibling);
}


function getInnerText(node) {
	/* http://white.sakura.ne.jp/~piro/xul/tips/x0013.html */
	var nodes = node.childNodes, ret = [];
	for (var i = 0; i < nodes.length; i++)
		if (nodes[i].hasChildNodes())
			ret.push(getInnerText(nodes[i]));
		else if (nodes[i].nodeType == 3)
			ret.push(nodes[i].nodeValue);
		else if (nodes[i].alt)
			ret.push(nodes[i].alt);
	return ret.join('');
}
