/***********************************************************************************************************/
/*                                      通信部                                      					   */
/*---------------------------------------------------------------------------------------------------------*/
/* httpXmlRequest関数                                                               					   */
/* 設定されたURLを元にデータを取得し、HTMLへ吐き出す                                					   */
/* 引数：(URL,HTTPﾒｿｯﾄﾞ,POST用ﾃﾞｰﾀ,HTTP通信完了時実行関数,HTTP通信失敗時実行関数,ローディング画面表示場所) */
/* 呼び出し例：httpXmlRequest(xml_url,'GET','',dispXmlElement,httpError);　         					   */
/***********************************************************************************************************/
var httpObj;            //HTTP通信用オブジェクト
var timerId;            //HTTP通信用タイマーオブジェクト
var timeout_sec = 10;   //HTTP通信タイムアウトオブジェクト
/*----------------------------------------------*/
/* 引数で与えられたURLにHTTPリクエストを発行	*/
/*----------------------------------------------*/
function httpXmlRequest(target_url,method,data,success_func,error_func,funcCaria){
    try{
        if(window.XMLHttpRequest){
            httpObj = new XMLHttpRequest();
						//httpObj.overrideMimeType("text/plain; charset=utf-8");
        }else if(window.ActiveXObject){
            httpObj = new ActiveXObject("Microsoft.XMLHTTP");
        }else{
            httpObj = false;
        }
    }catch(e){
        httpObj = false;
    }
    if(! httpObj){
        httpObjGenerateFail();
    }
    //タイマーをセット
    timerId = setInterval('timeoutCheck()',1000);
	$(funcCaria).innerHTML = '<div style="margin-top:80px; width:100%; text-align:center;"><img src="/images/keitai/hontai/loading_bar.gif"></div>';
		httpObj.open(method,target_url,true);
    httpObj.onreadystatechange = function(){
        if(httpObj.readyState == 4){
            clearInterval(timerId);
            if(httpObj.status == 200){
                if(target_url.substring(target_url.length - 3,target_url.length) == 'xml'){
                    success_func(httpObj.responseXML);      //XMLファイル表示
                }else{
					/*### 2006/06/12 NODA UPDATE Safari文字化け対応 START ###*/
						get_response_text(httpObj,success_func);
						//success_func(httpObj.responseText);     //XML以外ファイル表示
					/*### 2006/06/12 NODA UPDATE Safari文字化け対応 END ###*/
				        }
            }else{
                error_func(httpObj.status + ':' + httpObj.statusText);
                return false;
            }
        }
    }
    httpObj.send(data);
}
/*--------------------------------------*/
/* XMLHttpRequestオブジェクト生成失敗時 */
/*--------------------------------------*/
function httpObjGenerateFail(){
    alert('ご利用のブラウザーでは、当サイトをご利用頂けません。');
    return false;
}
/*--------------------------------*/
/* HTTPリクエスト、タイムアウト時 */
/*--------------------------------*/
function timeoutCheck(){
    timeout_sec --;
    if(timeout_sec <= 0){
        clearInterval(timerId); //タイマーのストップ
        httpObj.abort();        //HTTPリクエストの中断
        return false;
				alert('timeout');
    }
}
/*--------------*/
/* HTTPエラー時 */
/*--------------*/
function httpError(error){
    alert(error);
}
/*------------------------*/
/* Safari文字化け対応関数 */
/*------------------------*/
function get_response_text(req,success_func) {
	var resStr = req.responseText;
	if ( navigator.appVersion.indexOf( "KHTML" ) > -1 ) {
		var escStr = escape( resStr );
		if ( escStr.indexOf("%u") < 0 && escStr.indexOf("%") > -1 ) {
			resStr = decodeURIComponent( escStr );
		}
	}
	success_func(resStr);
}

/************************************************************************************/
/*                              　イベントリスナー                                  */
/*----------------------------------------------------------------------------------*/
/* addListener関数                                                                  */
/* イベントリスナーを登録し、各実行処理関数へ移動する                               */
/* 引数：(ID名,アクションイベント,実行処理呼出関数名,イベントキャプチャー)          */
/* 呼び出し例：Event.observe(menu1,'click',openWindow,false);                         */
/*----------------------------------------------------------------------------------*/
/* removeListener関数                                                               */
/* 登録されたイベントリスナーを解除する                                             */
/* 引数；同上                                                                       */
/* 呼び出し例：removeListener(bar,'mousemove',moveWindow,false);                    */
/************************************************************************************/


/*--------------------------*/
/* イベントリスナー解除     */
/*--------------------------*/
function removeListener(elem,eventType,func,cap){
    if(elem.removeEventListener){
        elem.removeEventListener(eventType,func,cap);
    }else if(elem.detachEvent){
        elem.detachEvent('on' + eventType,func);
    }
}

/************************************************************************************/
/*                              対象要素のIDを取得                                  */
/*----------------------------------------------------------------------------------*/
/* getTargetNode関数                                                                */
/* 対象要素の参照を取得する									                        */
/*----------------------------------------------------------------------------------*/
/* 呼び出し例：var target_node = getTargetNode(e);				                    */
/************************************************************************************/

/*--------------*/
/* ID属性の取得	*/
/*--------------*/
function getTargetNode(e){
	var target_node;
	if(e.target){
		//MOZIRA系用
		target_node = e.target;
	}else if(e.srcElement){
		//IE用 
		target_node = e.srcElement;
	}
	if(target_node.nodeType == 3){
		//safari用
		target_node = target_node.parentNode;
	}
	return target_node;
}

function stopDefaultAndPropagation(e){
	//バブリング停止
	if(e.stopPropagation){
		e.stopPropagation();
	}
	if(window.event){
		window.event.cancelBubble = true;
	}
	//デフォルトイベントアクション停止
	if(e.preventDefault){
		e.preventDefault();
	}
	if(window.event){
		window.event.returnValue = false;
	}
}
