﻿/*
Date : 2005.02.17
*/

// 発動制御 ------------------------------------------------
if(Boolean(document.getElementById)){
	
	function gete(arg) { return document.getElementsByTagName(arg); }
	function crte(arg) { return document.createElement(arg); }
	
	view_citation_origin();
	view_accesskey();
	unknown2known_MSIE('ABBR', 'ACRONYM', document.body);
	make_clickable_link('h2', 'heading-link');
	make_clickable_link('h3', 'heading-link');
	make_clickable_link('caption', 'caption-link');
	make_quotation('q', '“', '”');
	make_quotation('dfn', '<<', '>>');
}

// 引用元の明示 --------------------------------------------
// >>Takashi HIRANO (http://purl.oclc.org/net/quia/)
// URN (http://www.kanzaki.com/docs/html/urn.html)
function view_citation_origin(){
	var
		bq = gete('blockquote'),
		cite_prg = new Array(bq.length),
		cite_cit = new Array(bq.length),
		cite_anc = new Array(bq.length),
		cite_txt = new Array(bq.length),
		urn	= /urn\:ISBN\:/i,
//		bkst = 'http://www.amazon.co.jp/exec/obidos/ASIN/';
		bkst = 'http://www.bk1.co.jp/cgi-bin/srch/srch_select_result_book.cgi?aid=p-ayahiro52166&isbn=';

	for(var i=0; i<bq.length; i++){
		cite_prg[i] = crte('p');
		cite_cit[i] = crte('cite');
		cite_anc[i] = crte('a');
		cite_txt[i] = document.createTextNode('');
		cite_header = new String('cite : ');
		cite_prg[i].className = 'citation-origin';

		if(bq[i].cite && bq[i].title){//cite,title属性が両方ともある場合
			cite_txt[i].data = cite_header + bq[i].title;
			if(bq[i].cite.search(urn)>=0)
				cite_anc[i].href = bq[i].cite.replace(urn, bkst).replace(/\-/g, '-');
			else
				cite_anc[i].href = bq[i].cite;
			cite_anc[i].appendChild(cite_txt[i]);
			cite_cit[i].appendChild(cite_anc[i]);
			cite_prg[i].appendChild(cite_cit[i]);
			bq[i].appendChild(cite_prg[i]);
		}
		else if(bq[i].title){//title属性だけの場合
			cite_txt[i].data = cite_header + bq[i].title;
			cite_cit[i].appendChild(cite_txt[i]);
			cite_prg[i].appendChild(cite_cit[i]);
			bq[i].appendChild(cite_prg[i]);
		}
		else if(bq[i].cite){//cite属性だけの場合
			cite_txt[i].data = cite_header + bq[i].cite;
			if(bq[i].cite.search(urn)>=0)
				cite_anc[i].href = bq[i].cite.replace(urn, bkst).replace(/\-/g, '-');
			else
				cite_anc[i].href = bq[i].cite;
			cite_anc[i].appendChild(cite_txt[i]);
			cite_cit[i].appendChild(cite_anc[i]);
			cite_prg[i].appendChild(cite_cit[i]);
			bq[i].appendChild(cite_prg[i]);
		}
	}
}

// Accesskey -----------------------------------------------
// >>Takashi HIRANO (http://purl.oclc.org/net/quia/)
function view_accesskey(){
	var
	a = gete('a'),
	a_kbd = new Array(a.length),
	a_txt = new Array(a.length);

	for(var i=0; i<a.length; i++){
		a_kbd[i] = crte('kbd');
		a_kbd[i].className = 'accesskey';
		a_txt[i] = document.createTextNode('');

		if(a[i].accessKey){
			a_txt[i].data = '[' + a[i].accessKey + ']';
			a_kbd[i].appendChild(a_txt[i]);
			a[i].appendChild(a_kbd[i]);
		}
	}
}

// リンク生成 ----------------------------------------------
function make_clickable_link(obj, cls) {
	var
		h = gete(obj),
		w = new String();
	for(var i=0; i<h.length; i++){
		obj_text = h[i].innerHTML.replace(/(<[^>]+>)/g, '');
		w = '<a href="#' + h[i].id + '" class="' + cls + '" title="' + obj_text + ' #' + h[i].id +'">';
		if(h[i].id && h[i].innerHTML)
			h[i].innerHTML = w + h[i].innerHTML + '<\/a>';
	}
}

// カギ括弧生成 --------------------------------------------
function make_quotation(obj, str1, str2){
	var
		obj = gete(obj);
	for(var i=0; i<obj.length; i++){
		obj[i] = str1 + abj[i] + str2;
//		obj[i].innerHTML = str1 + obj[i].innerHTML + str2;
		obj[i].setAttribute('style', 'quotes: "" "" "" ""');
	}
}

// abbr を acronym に書き換える ----------------------------
function unknown2known_MSIE($unknown, $known, $section){
	var
		$u=$unknown.toUpperCase(),
		$e='\/'+$u;

	if(gete($e).length==0)
		return;

	var
		$k=$known.toUpperCase(),
		$_0=new RegExp($u),
		unknowns=$section?
			$section.getElementsByTagName($u):
			gete($u);

	function replaceUnknown(){
		var
			_0=unknowns[0],
			known=crte(_0.outerHTML.replace($_0, $k)),
			p=_0.parentNode;

		p.replaceChild(known, _0);

		while(known.nextSibling.nodeName!=$e){
			known.nextSibling.nodeName==$u&&replaceUnknown();
			known.appendChild(p.replaceChild(known, known.nextSibling));
		}

	p.removeChild(known.nextSibling);

	}

	while(unknowns.length)
		replaceUnknown();

}
/*
if(typeof document.getElementsByTagName!='undefined')
	unknown2known_MSIE('ABBR', 'ACRONYM', document.body);
*/
