//クロスブラウザを考慮したイベントリスナー登録
function addListener(elem, eventType, func, cap)
{
	if(elem.addEventListener)
	{
		elem.addEventListener(eventType, func, cap);
	}
	else if(elem.attachEvent)
	{
		elem.attachEvent('on'+eventType, func);
	}
	else
	{
//		alert('ご利用のブラウザーはサポートされていません。');
		return false;
	}
}

//マウスホィール専用イベントリスナー登録
function addMouseWheelListener(elem, func, cap)
{
	if(elem.addEventListener)
	{
		elem.addEventListener('DOMMouseScroll', func, cap);
		elem.addEventListener('mousewheel', func, cap);
	}
	else if(elem.attachEvent)
	{
		elem.attachEvent('onmousewheel', func);
	}
	else
	{
//		alert('ご利用のブラウザーはサポートされていません。');
		return false;
	}
}

//イベントリスナー解除
function removeListener(elem, eventType, func, cap)
{
	if(elem.removeEventListener)
	{
		elem.removeEventListener(eventType, func, cap);
	}
	else if(elem.detachEvent)
	{
		elem.detachEvent('on' + eventType, func);
	}
}

//バブリングとデフォルトイベントアクションの停止
//１．バブリング(DOMの深い階層の要素から上に伝わるイベント）を停止
//     伝わるイベントの方向はaddEventListener()の第三引数
//２．ブラウザのデフォルトイベントを停止
function stopDefaultAndPropagation(e) {
	// バブリング停止
	if(e && e.stopPropagation) {
		e.stopPropagation();
	}
	if(window.event) {
		window.event.cancelBubble = true;
	}
	// デフォルトイベントアクションを停止する
	if(e && e.preventDefault) {
		e.preventDefault();
	}
	if(window.event) {
		window.event.returnValue = false;
	}
}

//対象要素の参照を取得
function getTargetNode(e) {
    var target_node;
    if(e.target) {
      target_node = e.target;
    } else {
      target_node = e.srcElement;
    }
    // Safari対策
    if (target_node.nodeType == 3) {
        target_node = target_node.parentNode;
    }
    return target_node;
}

