/*

引用元表示スクリプト "cite.js"
制作：平野 敬 (http://purl.oclc.org/net/quia/)

1. 説明

HTML文書内に記述されたblockquote要素から
cite属性とtitle属性を抽出します。
抽出された属性は以下のように変換され
当該blockquoteの末尾に追加されます。

<blockquote cite="(引用元URL)" title="(説明)">
  <p>(quoted texts)</p>
</blockquote>

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

<blockquote cite="(引用元URL)" title="(説明)">
  <p>(quoted texts)</p>
  <p class="citation-origin">
    <cite>
      <a href="(引用元URL)">(説明)</a>
    </cite>
  </p>
</blockquote>

blockquqoteにcite/title属性の
どちらか一方のみが記されている場合にも
それなりに処理します。

2. 使い方

HTML文書のbody終了タグ直前に
以下のように記述して埋め込んでください。
特別な設定は必要ありません。

<script type="text/javascript" src="(cite.jsの場所)" charset="Shift_JIS"></script>

3. 使用上の注意

使用は自己責任で。
使用・改造・再配布自由。

*/

if(document.getElementsByTagName){
  view_citation_origin();
}

function view_citation_origin(){

  var
    bq = document.getElementsByTagName('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);

  // ISBNにマッチする正規表現のオブジェクト生成: かなり適当
  isbn = new RegExp(/^urn:isbn:([\dX-]{10,13})$/);

  for(var i=0; i<bq.length; i++){

    cite_prg[i] = document.createElement('p');
    cite_cit[i] = document.createElement('cite');
    cite_anc[i] = document.createElement('a');
    cite_txt[i] = document.createTextNode('');
    cite_prg[i].className = 'citation-origin';

    // ISBNらしきURIはアマゾン逝きにする。
    // つーか、こんな面倒な書き方しないといけないものなの？
    if (bq[i].cite.match(isbn)) {
        bq[i].cite = "http://www.amazon.co.jp/exec/obidos/ASIN/" + RegExp.$1.replace(/-/g, "");
    }

    if(bq[i].cite && bq[i].title){//cite,title属性が両方ともある場合
      cite_txt[i].data = bq[i].title;
      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 = 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 = bq[i].cite;
      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]);
    }
  }

}