//グローバル変数の定義
var wpob_bataid = false;
var wpob_fromid = false;
var wpob_toid = false;

var httpObj;               // HTTP通信用オブジェクト
var timerId;               // HTTP通信用タイマーオブジェクト
var timeout_sec = 10;      // HTTP通信タイムアウト秒数

// 「コメント」リンクをクリックしたので
// 私書箱メッセージ入力ポップアップ
function writePob(ev,bataid, fromid, toid){
	// 引数を保存
	wpob_bataid = bataid;
	wpob_fromid = fromid;
	wpob_toid = toid;
	
	// ポップアップ位置をマウス位置に
	// 右にはみ出す調整は、ポップアップの幅を300と仮定（幅が取れないので暫定）
	var board = document.getElementById("wpob");
	var pageX = getEventPageX(ev);
	if( pageX + 300 > getBrowserWidth() )
		pageX = getBrowserWidth() - 300;
	board.style.left = pageX + 'px';
	board.style.top = getEventPageY(ev) + 'px';
	
	// 文字列ボックスを空にする
	var pobmsg = document.getElementById("pobmsg");
	pobmsg.value = "";
	
	// 表示する
	board.style.visibility = 'visible';
	pobmsg.focus();
	return false;
}

// 私書箱メッセージ入力ポップアップを閉じる
function closeWPob() {
	wpob_bataid = false;
	wpob_fromid = false;
	wpob_toid = false;
	var board = document.getElementById("wpob");
	board.style.visibility = 'hidden';
	return false;
}

// 「私書箱に送る」ボタンが押された
function sendWPob() {
	var pobmsg = document.getElementById("pobmsg");
	if( pobmsg.value.length == 0 ){
		alert("メッセージが空です。何か書いてください");
		pobmsg.focus();
		return false;
	}
	
	// POSTデータに変換
	var post_data = 'bataid=' + encodeURIComponent(wpob_bataid) +
		'&fromid=' + encodeURIComponent(wpob_fromid) +
		'&toid=' + encodeURIComponent(wpob_toid) +
		'&pobmsg=' + encodeURIComponent(pobmsg.value);
	var target_url = 'addpob.php';
	
	// HTTPリクエスト
	httpXmlRequest(target_url, "POST", post_data, resWPob, httpError );
	
	closeWPob();
	return false;
}

function resWPob(xml){
	var errmsg = xml.getElementsByTagName( 'errmsg' );
	if( errmsg && errmsg[0] && errmsg[0].firstChild ) {
		alert(errmsg[0].firstChild.nodeValue);
		return;
	}
	
	alert("私書箱に送信しました。");
}

function httpError(error) {
    alert(error);
}

// 引数に与えられたURLにHTTPリクエストを行ない、指定された関数を実行
function httpXmlRequest(target_url, method, data, success_func, error_func) {
    try {
        if(window.XMLHttpRequest) {
            httpObj = new XMLHttpRequest();
        } else if(window.ActiveXObject) {
            httpObj = new ActiveXObject("Microsoft.XMLHTTP");
        } else {
            httpObj = false;
        }
    } catch(e) {
        httpObj = false;
    }
    if(! httpObj) {
        httpObjGenerateFail();
    }
    timeout_sec = 10;
    timerId = setInterval('timeoutCheck()', 1000);
    httpObj.open(method, target_url, true);
    httpObj.onreadystatechange = function() {
        if (httpObj.readyState == 4) {
            clearInterval(timerId);
            if (httpObj.status == 200) {
				// alert(httpObj.responseText);	DEBUG
                success_func(httpObj.responseXML);
            } else {
                error_func(httpObj.status + ' : ' + httpObj.statusText);
                return false;
            }
        }
    }
    if( method == "POST" ) {
	    httpObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    }
    httpObj.send(data);
}

// HTTPタイムアウト処理
function timeoutCheck() {
    timeout_sec --;
    if(timeout_sec <= 0) {
        // タイマーをストップする
        clearInterval(timerId);
        // HTTPリクエストを中断する
        httpObj.abort();
        // エラーダイアログを表示
        alert('タイムアウトです。サーバに問題がある可能性があります。少し待って試してください');
        return false;
    }
}

// ページスクロール量を考慮したイベント発生時のドキュメント上の座標（X座標）
function getEventPageX(e){
  if(!e) var e = window.event;
  if(window.opera){ // Opera
   return (document.documentElement?window.pageXOffset:0)+e.clientX;
  } 
  else if(e.pageX) return e.pageX; // Mozilla, NN4, Safari
  else if(e.clientX){ // IE, others
   var sl=0;
   if(document.documentElement && document.documentElement.scrollLeft)
    sl=document.documentElement.scrollLeft;
   else if(document.body && document.body.scrollLeft)
    sl=document.body.scrollLeft;
   else if(window.scrollX||window.pageXOffset) 
    sl=(window.scrollX||window.pageXOffset);
   return sl+e.clientX;         
  }
  return 0;
}

function getEventPageY(e){
  if(!e) var e = window.event;
  if(window.opera){ // Opera
   return (document.documentElement?window.pageYOffset:0)+e.clientY;
  } 
  else if(e.pageY) return e.pageY; // Mozilla, NN4, Safari
  else if(e.clientY){ // IE, others
   var st=0;
   if(document.documentElement && document.documentElement.scrollTop)
    st=document.documentElement.scrollTop;
   else if(document.body && document.body.scrollTop)
    st=document.body.scrollTop;
   else if(window.scrollY||window.pageYOffset)
    st=(window.scrollY||window.pageYOffset);
   return st+e.clientY;         
  }
  return 0;
}

// 表示しているウィンドウの幅を得る
function getBrowserWidth () {
	if ( window.innerWidth ) { return window.innerWidth; }
	else if ( document.documentElement && document.documentElement.clientWidth != 0 ) { return document.documentElement.clientWidth; }
	else if ( document.body ) { return document.body.clientWidth; }
	return 0;
}

