/***********************************************************
 *                                                         *
 *        DOM 操作を行う基本関数                           *
 *                                                         *
 *             2006-06-01 Synergy Incubate Inc.            *
 *                                                         *
 ***********************************************************/

/*---------------------------------------------------------*
 *      右クリックイベント処理
 *---------------------------------------------------------*/
function noContextMenu(){
  if(document.all){
    addListener(document, 'contextmenu', isRightClick, true);
  } else if(document.layers){
    addListener(document, 'mousedown', isRightClick, true);
  }
}
function isRightClick(e){
   if (e.button >=2){
      stopDefaultAndPropagation(e);
      return true;
   } else {
      return false;
   }
}

/*---------------------------------------------------------*
 *      マウスポインタの位置 (x) を求める
 *
 *     x      : ブラウザの表示領域内の相対位置
 *     return : スクロール分を考慮したの相対位置
 *---------------------------------------------------------*/
function cliX(x){
   return document.body.scrollLeft + x;   // only for IE 
}

/*---------------------------------------------------------*
 *      マウスポインタの位置 (y) を求める
 *
 *     y      : ブラウザの表示領域内の相対位置
 *     return : スクロール分を考慮したの相対位置
 *---------------------------------------------------------*/
function cliY(y){
   return document.body.scrollTop + y;    // only for IE
}

/*---------------------------------------------------------*
 *      イベントの伝播を止める
 *
 *     e      : イベント
 *---------------------------------------------------------*/
function stopDefaultAndPropagation(e){
    if (e.stopProragation){
        e.stopPropagation();
    }
    if (window.event){
        window.event.cancelBubble = true;
    }
    if (e.preventDefault){
        e.preventDefault();
    }
    if (window.event){
        //alert('AA');
        window.event.returnValue = false;
    }
}

/*---------------------------------------------------------*
 *      エレメントの位置を求める
 *
 *     elem   : エレメント
 *---------------------------------------------------------*/
function getElemPos(elem){
    var obj = new Object();
    obj.x = elem.offsetLeft;
    obj.y = elem.offsetTop;
    while (elem.offsetParent){
        elem = elem.offsetParent;
        obj.x += elem.offsetLeft;
        obj.y += elem.offsetTop;
    }
    return obj;
}

/*---------------------------------------------------------*
 *      イベントの発生元エレメントを求める
 *
 *     elem   : エレメント
 *---------------------------------------------------------*/
function getTargetNode(e){
    var target_node;
    if (e.target) {
        target_node = e.target;
    } else {
        target_node = e.srcElement;
    }

    // for Safari
    if (target_node.nodeType == 3){
        target_node = target_node.parentNode;
    }
    return target_node;
}

/*---------------------------------------------------------*
 *      リスナのセットを解除する
 *
 *     elem       : エレメント
 *     evnetType  : イベント名称
 *     func       : 関数名
 *     cap        : (true)capture, (false)bubbling
 *---------------------------------------------------------*/
function removeListener(elem, eventType, func, cap){
    if (elem.removeEventListner){
        elem.removeEventListner(eventType, func, cap);
    } else if (elem.detachEvent) {
        elem.detachEvent('on' + eventType, func);
    }
}

/*---------------------------------------------------------*
 *      マウスホイールイベントのリスナをセットする
 *
 *     elem       : エレメント
 *     func       : 関数名
 *     cap        : (true)capture, (false)bubbling
 *---------------------------------------------------------*/
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);
    }
}

/*---------------------------------------------------------*
 *      イベントリスナをセットする
 *
 *     elem       : エレメント
 *     evnetType  : イベント名称
 *     func       : 関数名
 *     cap        : (true)capture, (false)bubbling
 *---------------------------------------------------------*/
function addListener(elem, eventType, func, cap){
    if (elem.addEventListner){
        elem.addEventListner(eventType, func, cap);
    } else if (elem.attachEvent) {
        elem.attachEvent('on' + eventType, func);
    } else {
        alert('your browser is not supported');
        return false;
    }
}

/*---------------------------------------------------------*
 *      iframeのdocument長を求める
 *
 *     iframe     : ID属性
 *---------------------------------------------------------*/
function getIframeDoc(iframe){
   var iframeDocument;
   if (iframe.contentDocument) { // For NS6
      iframeDocument = iframe.contentDocument; 
   } else if (iframe.contentWindow) { // For IE5.5 and IE6
      iframeDocument = iframe.contentWindow.document;
   } else if (iframe.document) { // For IE5
      iframeDocument = iframe.document;
   }
   return iframeDocument;
}

