1. Document Object Model Events

1.1. DOM Level 2 Event モデルの概要

DOM Level 2 Event Model は二つの目標を持って設計される。第一の目標は、ツリー構造を通したイベントフローを記述し、そして各イベントの為の基本的な文脈情報を供給するイベントハンドラの登録をを許可する一般的なイベントシステムの設計である。加えて仕様は、ユーザーインターフェイスコントロール及びそれらイベントモジュールそれぞれの為に定義された文脈情報を含めた文書修正通知の為のイベントの標準的モジュールを供給する。

イベントモデルの第2の目標は、DOM Level 0 ブラウザで使用されている現在のイベントシステム共通サブセットを供給である。これは存在するスクリプトとコンテントの内部操作性の促進を意図している。この目標は完全な後方互換性の充足は期待されない。しかしながら、この仕様は可能な限りその達成をを試みる。

イベントモデル仕様の以下の章では、 DOM イベントモデル仕様と、 モデル内で使用する為に設計された多くの適合イベントモジュールの両方を定義する。 イベントモデルはイベント伝達とイベントリスナー登録と Event インターフェイスの 2 章からなる。

DOM アプリケーションは、その実装による Event モジュールサポートの判定に、パラメータ値 "Events" と "2.0" (それぞれ)を持つ DOMImplementation インターフェイスの hasFeature(feature, version) メソッドを使用してよい。このモジュールの完全なサポートの為に、実装は DOM Level 2 Core 仕様 [DOM Level 2 Core] で定義された "Core" フィーチャーをサポートしなければならない。適合 についての詳細は DOM Level 2 Core 仕様 [DOM Level 2 Core] を参照のこと。

各イベントモジュールは、イベントモジュールリスト中において自分自身のフィーチャー文字列を記述する。

1.1.1. 用語

UI イベント (UI events)
ユーザーインターフェイスイベント. これらのイベントは外部デバイス (マウス、キーボード等) を通したユーザーの行動によって生成される。
UI 論理イベント (UI Logical events)
フォーカス変更メッセージや通知の誘発するエレメントのような、デバイス独立のユーザーインターフェイスイベント。
変異イベント (Mutation events)
文書構造の修正行動によって発生するイベント。
捕獲 (Capturing)
イベントがイベントターゲットによって制御される前にイベントターゲットの 祖先 によって制御されるような処理。
Bubbling
イベントがイベントターゲットによって制御された後にその 祖先 を通して上方に伝播するような処理。
Cancelable
イベントを扱う際、イベントと関連付けられた任意のデフォルトアクションの処理から DOM 実装をクライアントが回避してもよいことを示す、イベントの為のの指示。

1.2. イベントフローの詳細

イベントフローは、イベントが DOM 実装から発生し、文書オブジェクトモデルへと渡される処理である。様々なイベントリスナー登録技法に沿ったイベントキャプチャ及びイベントバブリングのメソッドは、多くの方法でイベント操作を許可する。それは、局所的には EventTarget レベルで、また中心的には文書ツリー内でより高位の EventTarget から操作されるうる。

1.2.1. 基本的なイベントフロー

各イベントは、DOM 実装によってそのイベントが向けられる EventTarget を持つ。この EventTargetEventtarget アトリビュートで特定される。イベントがターゲットに達する際、その EventTarget 上に登録されたイベントリスナーが発動する。EventTarget によって受け取られるすべてのイベントによって EventTarget 上のすべての EventListener が発動されることを保証されるが、それらが他の EventTarget 上の EventListener を考慮したイベントを受け取る順序に関する仕様は作られていない。イベントキャプチャもイベントバブリングも特にそのイベントに使用されない場合、リスナーがすべて発動した後にイベントフロー処理は完了する。イベントキャプチャまたはイベントバブリングが使用される場合、下のセクションに記述されるように、イベントフローが修正される。

EventListener の内部で投げられたいかなる例外も、イベントの伝播を停止しない。それは記述された方法で任意の付加的な EventListener の処理を継続する。

EventListener によって講じられた処置が、追加のイベントを誘発できることが期待される。追加のイベントは同時のやり方で扱われるべきであり、イベントモデルへ reentrancy(再入会?) してよい。

1.2.2. イベントキャプチャ

イベントキャプチャとは、イベントのターゲットの 祖先 に登録された EventListener が、与えられた型のイベントを、イベントのターゲットによって受け取られる前に割り込ませられる処理である。キャプチャは、ツリーの頂点、一般に Document から下方へと、以下に述べるバブリングの対称な反対になるように作用する。ツリーの頂点からイベントのターゲットへの EventTarget の連鎖は、イベントの初期送信の前に決定される。イベント処理中にツリーに修正が発生する場合、イベントフローはツリーの初期状態に基づいて進行する。

EventTarget 上に登録されている EventListener は、 addEventListener メソッドの useCapture パラメーターに true を指定することにより、その EventListener をキャプチャイベントに選択できる。その後、与えられた型のイベントがキャプチャするオブジェクトの 子孫 の方へ送信された場合、イベントは文書のトップとイベントのターゲットの間の直系に存在する、適切な型のあらゆるキャプチャするイベントリスナーを発動する。イベントのターゲットに到達するまで、この下方への伝播は継続する。キャプチャする EventListener は、それが登録される EventTarget に直接送信されたイベントによっては発動されない。

キャプチャする EventListener が発生からイベントのこれ以上の送信の遮断を望む場合、 Event インターフェイスの stopProgagation メソッドを呼んでよい。これはイベントのこれ以上の送信を遮断する。しかし同じ階層レベルに登録されている追加の EventListener はまだイベントを受け取る。一度イベントの stopPropagation メソッドが呼ばれたら、その先へのそのメソッドの呼び出しは追加効果を持たない。追加キャプチャが存在せず stopPropagation も呼ばれない場合は、イベントはターゲット自身の適切な EventListener を発動する。

イベントキャプチャは、それらが通知を受け取りたいターゲット上で全当事者がそのリスナーを直接登録する delegation (代表団?) ベースのイベントモデルに似ているが、重要な 2 つの観点において異なる。 最初に、イベントキャプチャは、キャプチャする EventTarget子孫 をターゲットにするイベントの遮断を許可するのみである。 それは、キャプチャする物の 先祖、その兄弟あるいはその兄弟の子孫に目標とされたイベントの遮断は許可しない。 第二に、イベントキャプチャは単一の EventTarget のため指定ではなく、特定の型のイベントのための指定である。一度指定すればイベントキャプチャは、キャプチャする物のあらゆる 子孫 を目標とした、指定されたタイプのイベントをすべて遮る。

1.2.3. イベントバブリング

バブリングと特定されるイベントは、最初に、バブリングしないイベントと同じイベントフローを処理する。 イベントはその目標 EventTarget に送信され、そこに見つかる任意のイベントリスナーが発動される。その後、バブリングイベントは、EventTarget の親連鎖を上方へたどり、各 EventTarget の上に登録されるあらゆるイベントリスナーをチェックして見つかる、あらゆる追加イベントリスナーを発動する。この上向きの伝播は Document まで続く。 キャプチャする物として登録された EventListener は、このフェイズでは発動しない。 イベントターゲットからツリーのトップへの EventTarget の連鎖は、イベントの初期送信前に決定される。イベント処理中にツリー修正が発生する場合も、イベントフローはツリーの初期状態に基づいて進行する。

イベントハンドラは、Event インターフェイスの stopPropagation メソッドによって、その先へのイベント伝播を防いでよい。EventListener がこのメソッドを呼ぶ場合、 現在の EventTarget の上の追加 EventListener はすべて発動される。 しかし、バブリングはそのレベルで中止される。stopPropagation への 1 呼び出しだけが、さらなるバブリングを防ぐために要求される。

1.2.4. イベント取消し

取消し可能なものと特定されるイベントもある。これらのイベントについては、 DOM 実装が一般にイベントに関連したデフォルトの動作を持っている。 例として、ウェブブラウザ中のハイパーリンクが挙げられる。 ユーザがハイパーリンクをクリックした場合のデフォルト動作は、一般に、ハイパーリンクをアクティブにすることである。 これらのイベントを処理する前に、実装は、イベントを受け取るために登録されたイベントリスナーをチェックし、 そしてそれらのリスナーにイベントを送信しなければならない。 これらのリスナーは、実装のデフォルト動作の取消し、あるいはその進行の許可の選択肢を持つ。 ブラウザ中のハイパーリンクの場合には、 動作取消しは、ハイパーリンクをアクティブにしない結果となる。

取消しは EventpreventDefault メソッドを呼ぶことで遂行される。1 つ以上の EventListener がイベントフローの任意のフェイズで preventDefault を呼ぶ場合、デフォルトの動作が取消される。

各イベントに関連して、もしあれば、種々の実装は自らのデフォルト動作を特定する。 DOMは、これらのアクションを指定することを試みない。

1.3. イベントリスナー登録

1.3.1. イベント登録インターフェイス

1.3.2. HTML 4.0 イベントリスナーとの相互作用

HTML4.0 では、イベントリスナーはエレメントの属性として指定されていた。そのようなものとして、同じタイプのイベントリスナー登録は、最初の登録を置換する。DOM2 Event Model では、単一のイベントターゲットへの複数のイベントリスナー登録を許可する。この達成の為に、イベントリスナーはもはや属性値として蓄積されない。

HTML 4.0との互換性を達成するために、実装者は、EventTarget 上で EventListener の生成および登録としてイベントハンドラを表わす属性の設定を見てよい。 useCapture のデフォルト値は false。この EventListener は、EventTarget の上に登録されるかもしれない他の EventListener と同じ方法で作用する。イベントリスナーを表わす属性が変更される場合、これは、前もって登録済みの EventListener の除去、および新しいものの登録として見られるかもしれない。 HTML 4.0 のイベントリスナーに、各イベントに定義される文脈情報へのアクセスを与えるために提供される技術はない。

1.4. Event インターフェイス

1.5. DocumentEvent インターフェイス

1.6. Event モジュールの定義

DOM Level 2 Event Model は、DOM 実装がイベントのの複数モジュールのサポートを可能にする。モデルは、要求されるように、新しいイベントモジュールの追加を許可するように設計された。DOM は、可能なイベントをすべて定義することを試みない。相互運用の目的のために、DOM は、より低いレベルのデバイスに依存するイベントを含むユーザインターフェースイベントのモジュール、UI 論理イベントのモジュール、および文書変更イベントのモジュールを定義する。 サードパーティに定義される任意の新しいイベント型は、大文字、小文字、混在のいずれにおいても、文字列 "DOM" で始まることはできない。この接頭辞は将来の DOM イベントモジュールのために予約される。独自イベントを追加するサードパーティには、混乱を避け他の新しいイベントとの干渉の可能性を小さくするために独自の接頭辞を使用することを強く勧める。

1.6.1. ユーザーインターフェイスイベント型

ユーザーインターフェイスイベントモジュールは、HTML 4.0 で挙げられるイベントと DOM Level 0 ブラウザでサポートされる追加イベントによって構成される。

DOM アプリケーションは、実装によってユーザーインターフェイスイベントモジュールがサポートされているかどうかを判定するのに、値 "UIEvents" と "2.0" をそれぞれ引数にもつ DOMImplementationhasFeature(feature, version) メソッドを使用できる。このモジュールの完全なサポートのために、この仕様で定義される "Events" の特徴と DOM Level 2 Views [DOM Level 2 Views] で定義される "Views" の特徴を、実装はサポートしなければならない。DOM Level 2 Core 仕様 [DOM Level 2 Core] における 適合 については追加情報を参照されたし。

Note: UIEvent インターフェイスのインスタンス作成には、DocumentEvent インターフェイスの createEvent メソッドに使用される入力パラメータの値としてフィーチャー文字列 "UIEvents" を使用する。

起こりうるイベントのさまざまな型は:

DOMFocusIn
DOMFocusIn イベントは、例えばエレメント上に動かされたポインティングデバイスやエレメントへのタブナビゲーションを経由して EventTarget がフォーカスを得たときに発生。HTML イベントフォーカスとは異なり、DOMFocusIn はフォームコントロールだけでなく、任意のフォーカスを受け取れる EventTarget に適用できる。
  • Bubbles: Yes
  • Cancelable: No
  • Context Info: None
DOMFocusOut
DOMFocusOut イベントは、例えばエレメント外に動かされたポインティングデバイスやエレメントからのタブナビゲーションを経由して EventTarget がフォーカスを失ったときに発生。HTML イベントフォーカスとは異なり、DOMFocusOut はフォームコントロールだけでなく、任意のフォーカスを受け取れる EventTarget に適用できる。
  • Bubbles: Yes
  • Cancelable: No
  • Context Info: None
DOMActivate
activate イベントは、例えばマウスクリックやキープレスを通して、エレメントが活性化しているときに発生。実数の引数は、発生する activation の型をあらわす: 単純な activation (普通のクリックや Enter) には 1, heyperactivation (例えば ダブルクリックや Shift+Enter など) には 2。
  • Bubbles: Yes
  • Cancelable: Yes
  • Context Info: detail (the numerical value)

1.6.2. マウスイベント型

マウスイベントモジュールは、HTML 4.0 で挙げられるイベントと DOM Level 0 ブラウザでサポートされる追加イベントによって構成される。このイベントモジュールは、マウス入力デバイスでの使用のために特別に設計されている。

DOM アプリケーションは、実装によって Mutation イベントモジュールがサポートされているかどうかを判定するのに、値 "MouseEvents" と "2.0" をそれぞれ引数にもつ DOMImplementationhasFeature(feature, version) メソッドを使用できる。このモジュールの完全なサポートのために、この仕様で定義される "UIEvents" の特徴を、実装はサポートしなければならない。DOM Level 2 Core 仕様 [DOM Level 2 Core] における 適合 については追加情報を参照されたし。

Note: MouseEvent インターフェイスのインスタンス作成には、DocumentEvent インターフェイスの createEvent メソッドに使用される入力パラメータの値としてフィーチャー文字列 "MouseEvents" を使用する。

起こりうるマウスイベントのさまざまな型は:

click
click イベントは、ポインティングデバイスのボタンがエレメント上でクリックされたときに発生する。クリックは同じスクリーン位置での mousedown と mouseup として定義される。これらのイベントの発生順は:
    mousedown
    mouseup
    click
同じスクリーン位置で複数のクリックが発生した場合、各繰り返しをインクリメントする detail アトリビュートを伴ってシーケンスが繰り返される。このイベントはほとんどのエレメントで有効である。
  • Bubbles: Yes
  • Cancelable: Yes
  • Context Info: screenX, screenY, clientX, clientY, altKey, ctrlKey, shiftKey, metaKey, button, detail
mousedown
mousedown イベントは、ポインティングデバイスのボタンがエレメント上で押されたときに発生する。このイベントはほとんどのエレメントで有効である。
  • Bubbles: Yes
  • Cancelable: Yes
  • Context Info: screenX, screenY, clientX, clientY, altKey, ctrlKey, shiftKey, metaKey, button, detail
mouseup
mouseup イベントは、ポインティングデバイスのボタンがエレメント上で離されたときに発生する。このイベントはほとんどのエレメントで有効である。
  • Bubbles: Yes
  • Cancelable: Yes
  • Context Info: screenX, screenY, clientX, clientY, altKey, ctrlKey, shiftKey, metaKey, button, detail
mouseover
mouseover イベントは、ポインティングデバイスがエレメント上に動かされたときに発生する。このイベントはほとんどのエレメントで有効である。
  • Bubbles: Yes
  • Cancelable: Yes
  • Context Info: screenX, screenY, clientX, clientY, altKey, ctrlKey, shiftKey, metaKey, relatedTarget indicates the EventTarget the pointing device is exiting.
mousemove
mousemove イベントは、ポインティングデバイスがエレメント上にある間に動かされたときに発生する。このイベントはほとんどのエレメントで有効である。
  • Bubbles: Yes
  • Cancelable: No
  • Context Info: screenX, screenY, clientX, clientY, altKey, ctrlKey, shiftKey, metaKey
mouseout
mouseout イベントは、ポインティングデバイスがエレメントから離れたときに発生する。このイベントはほとんどのエレメントで有効である。
  • Bubbles: Yes
  • Cancelable: Yes
  • Context Info: screenX, screenY, clientX, clientY, altKey, ctrlKey, shiftKey, metaKey, relatedTarget indicates the EventTarget the pointing device is entering.

1.6.3. キーイベント

DOM Level 2 Event 仕様はキーイベントモジュールを提供しない。キーボード入力デバイスのために設計されるイベントモジュールは、DOM 仕様の今後のバージョンに含まれるであろう。

1.6.4. Mutation イベント型

ミューテーションイベントモジュールは、属性およびテキストの修正を含む文書構造の任意の変更の通知を許可するために設計される。canselable として設計されるミューテーションイベントは存在しない。これは、関連するイベントの取り消しによって、文書への任意の変更が起こるかもしれず、また起こらないかもしれない場合、文書の修正を引き起こす既存の DOM インターフェイスの利用が、非常に困難であるという事実に由来する。まだ希望の将来性だが、それが DOM へのトランザクション追加まで一層よく残されることが決定された。Although this is still a desired capability, it was decided that it would be better left until the addition of transactions into the DOM.

多くの単一のツリーの修正は、複合的なミューテーションイベントを誘発させられる。ツリーのすべての可能な修正によるミューテーションイベントオーダーの指定の試みよりむしろ、これらのイベントオーダーが実装に残される。

DOM アプリケーションは、実装によって Mutation イベントモジュールがサポートされているかどうかを判定するのに、値 "MutationEvents" と "2.0" をそれぞれ引数にもつ DOMImplementationhasFeature(feature, version) メソッドを使用できる。このモジュールの完全なサポートのために、この仕様で定義される "Events" の特徴を、実装はサポートしなければならない。DOM Level 2 Core 仕様 [DOM Level 2 Core] における 適合 については追加情報を参照されたし。

Note: MutationEvent インターフェイスのインスタンス作成には、DocumentEvent インターフェイスの createEvent メソッドに使用される入力パラメータの値としてフィーチャー文字列 "MutationEvents" を使用する。

発生しうる Mutation イベントのさまざまな型は:

DOMSubtreeModified
文書へのすべての変更の通知のための一般的なイベント。以降に挙げる特別なイベントの代わりに使用することもできる。これは文書への単一の修正後に発生し、また実装の裁量で、複数の変更の発生後に発生してもよい。後者の用法は一般に、一斉に発生、また連発する複数の変更の適応に対して使われるべきである。このイベントのターゲットは、起こった変更の最小の共通の親である。このイベントは、ミューテーションによって発生する他のイベントの発生後に送信される。
  • Bubbles: Yes
  • Cancelable: No
  • Context Info: None
DOMNodeInserted
ノードが 他ノードの child として付加されたときに発生。このイベントは挿入が起こった後に発生する。このイベントのターゲットは挿入されたノードである。
  • Bubbles: Yes
  • Cancelable: No
  • Context Info: relatedNode holds the parent node
DOMNodeRemoved
ノードが、その親ノードから取り除かれたときに発生。このイベントは、ノードがツリーから取り除かれる前に送信される。このイベントのターゲットは取り除かれるノードである。
  • Bubbles: Yes
  • Cancelable: No
  • Context Info: relatedNode holds the parent node
DOMNodeRemovedFromDocument
ノードの直接削除、またノードの含まれるサブツリーの削除を通して、ノードが文書から取り除かれるときに発生。このイベントは削除が起こる前に送信される。このイベントのターゲットは削除されるノードである。ノードが直接(直ちに?)削除されている場合は DOMNodeRemovedFromDocument イベントの前に DOMNodeRemoved イベントが発生する。
  • Bubbles: No
  • Cancelable: No
  • Context Info: None
DOMNodeInsertedIntoDocument
ノードの直接挿入、またノードの含まれるサブツリーの挿入を通して、ノードが文書に挿入されるときに発生。このイベントは挿入が起こった後に送信される。このイベントのターゲットは挿入されるノードである。ノードが直接(直ちに?)挿入されている場合は DOMNodeInsertedIntoDocument イベントの前に DOMNodeInserted イベントが発生する。
  • Bubbles: No
  • Cancelable: No
  • Context Info: None
DOMAttrModified
ノード上で Attr が修正されるときに発生。このイベントのターゲットは変更される Attr を持つ Node である。attrChange の値が Attr が修正されたか、追加されたか、削除されたかを表す。relatedNode の値が影響を受けた Attr ノードをあらわす。その独自性を変更しないで、Attr の値の交換に基づく文字列が Attr の修正として表示されることが期待される。その後、異なる Attr ノードとの Attr ノードの交換は、最初の Attr ノードの削除と次のノードの追加として表示される。
  • Bubbles: Yes
  • Cancelable: No
  • Context Info: attrName, attrChange, prevValue, newValue, relatedNode
DOMCharacterDataModified
ノード内の CharacterData の修正後に発生するが、ノード自身は挿入されたり削除されたりしない。このイベントは PI エレメノへの修正によっても発生する。このイベントのターゲットは CharacterNode ノードである。
  • Bubbles: Yes
  • Cancelable: No
  • Context Info: prevValue, newValue

1.6.5. HTML イベント型

HTML イベントモジュールは、HTML 4.0 中でリストされるイベント、そして DOM Level 0 のブラウザによってサポートされる追加イベントによって構成される。

DOM アプリケーションは、実装によって HTML イベントモジュールがサポートされているかどうかを判定するのに、値 "HTMLEvents" と "2.0" をそれぞれ引数にもつ DOMImplementationhasFeature(feature, version) メソッドを使用できる。このモジュールの完全なサポートのために、この仕様で定義される "Events" の特徴を、実装はサポートしなければならない。DOM Level 2 Core 仕様 [DOM Level 2 Core] における 適合 については追加情報を参照されたし。

Note: HTML イベントモジュールための Event インターフェイスのインスタンス作成には、DocumentEvent インターフェイスの createEvent メソッドに使用される入力パラメータの値としてフィーチャー文字列 "HTMLEvents" を使用する。

HTML イベントは文脈情報を渡すために基本 DOM Event インターフェイスを使用する。

発生しうるイベントのさまざまな型は:

load
load イベントは DOM 実装が文書内の全内容、FRAMESET 内の全フレーム、或いは OBJECT エレメントを読み込み終えたときに発生する。
  • Bubbles: No
  • Cancelable: No
  • Context Info: None
unload
unload イベントは DOM 実装がウィンドウまたはフレームから文書を取り除くときに発生する。このイベントは BODY および FRAMESET エレメントで有効である。
  • Bubbles: No
  • Cancelable: No
  • Context Info: None
abort
abort イベントは、画像が完全な読み込まれる前にページの読み込みが停止されたときに発生する。このイベントは OBJECT エレメントに適用される。
  • Bubbles: Yes
  • Cancelable: No
  • Context Info: None
error
error イベントは画像が正しく読み込めなかったとき、またスクリプト実行時に発生するエラーによって発生する。このイベントは OBJECT, BODY, FRAMESET エレメントで有効である。
  • Bubbles: Yes
  • Cancelable: No
  • Context Info: None
select
select イベントはユーザがテキストフィールド内で任意のテキストを選択したときに発生する。このイベントは INPUT および TEXTAREA エレメントにで有効である。 The select event occurs when a user selects some text in a text field. This event is valid for INPUT and TEXTAREA elements.
  • Bubbles: Yes
  • Cancelable: No
  • Context Info: None
change
change イベントは、コントロールが入力フォーカスを失い、かつその値がフォーカスを得た後に更新されているときに発生する。このイベントは INPUT, SELECT, TEXTAREA エレメントにのみ有効である。
  • Bubbles: Yes
  • Cancelable: No
  • Context Info: None
submit
submit イベントはフォームが送信されたときに発生する。このイベントは FORM エレメントにのみ適用される。
  • Bubbles: Yes
  • Cancelable: Yes
  • Context Info: None
reset
reset イベントはフォームがリセットされたときに発生する。このイベントは FORM エレメントにのみ適用される。
  • Bubbles: Yes
  • Cancelable: No
  • Context Info: None
focus
focus イベントは、ポインティングデバイス経由またはタブナビゲーションによって、エレメントがフォーカスを得た時に発生する。このイベントは以下のエレメントにおいて有効である: LABEL, INPUT, SELECT, TEXTAREA, BUTTON.
  • Bubbles: No
  • Cancelable: No
  • Context Info: None
blur
blur イベントは、ポインティングデバイス経由またはタブナビゲーションによって、エレメントがフォーカスを失った時に発生する。このイベントは以下のエレメントにおいて有効である: LABEL, INPUT, SELECT, TEXTAREA, BUTTON.
  • Bubbles: No
  • Cancelable: No
  • Context Info: None
resize
The resize イベントは文書表示がリサイズされたときに発生する。
  • Bubbles: Yes
  • Cancelable: No
  • Context Info: None
scroll
scroll イベントは文書表示がスクロールされたときに発生する。
  • Bubbles: Yes
  • Cancelable: No
  • Context Info: None

Issued: / Revised: / All rights reserved. © 2002-2016 TAKI