
	//ローディング表示フラグ
	var g_loadingFlag = false;

	////
	// 動作可能なブラウザ判定
	//
	// @sample        if(chkAjaBrowser()){ location.href='nonajax.htm' }
	// @sample        oj = new chkAjaBrowser();if(oj.bw.safari){ /* Safari code */ }
	// @return        ライブラリが動作可能なブラウザだけtrue  true|false
	//
	//  Enable list (v038現在)
	//   WinIE 5.5+ 
	//   Konqueror 3.3+
	//   AppleWebKit系(Safari,OmniWeb,Shiira) 124+ 
	//   Mozilla系(Firefox,Netscape,Galeon,Epiphany,K-Meleon,Sylera) 20011128+ 
	//   Opera 8+ 
	//
	function chkAjaBrowser()
	{
		var a,ua = navigator.userAgent;
		this.bw= { 
		  safari    : ((a=ua.split('AppleWebKit/')[1])?a.split('(')[0]:0)>=124 ,
		  konqueror : ((a=ua.split('Konqueror/')[1])?a.split(';')[0]:0)>=3.3 ,
		  mozes     : ((a=ua.split('Gecko/')[1])?a.split(" ")[0]:0) >= 20011128 ,
		  opera     : (!!window.opera) && ((typeof XMLHttpRequest)=='function') ,
		  msie      : (!!window.ActiveXObject)?(!!createHttpRequest()):false 
		}
		return (this.bw.safari||this.bw.konqueror||this.bw.mozes||this.bw.opera||this.bw.msie)
	}

	////
	// XMLHttpRequestオブジェクト生成
	//
	// @sample        oj = createHttpRequest()
	// @return        XMLHttpRequestオブジェクト(インスタンス)
	//
	function createHttpRequest()
	{
		if(window.ActiveXObject){
			 //Win e4,e5,e6用
			try {
				return new ActiveXObject("Msxml2.XMLHTTP") ;
			} catch (e) {
				try {
					return new ActiveXObject("Microsoft.XMLHTTP") ;
				} catch (e2) {
					return null ;
	 			}
	 		}
		} else if(window.XMLHttpRequest){
			 //Win Mac Linux m1,f1,o8 Mac s1 Linux k3用
			return new XMLHttpRequest() ;
		} else {
			return null ;
		}
	}

	//
	function ajax_submit(obj_frm, obj_action, obj_method, obj_id, obj_befor_func, obj_after_func ) {
//		console.log('ajax_submit Start - ' + obj_action);
//		console.log('[Method] ' + obj_frm.Method.value);
//		console.log('[View]   ' + obj_frm.View.value);
//		console.log('[AjaxId] ' + obj_id);
//		console.time('ajax_submit End - ' + obj_action);
//		console.time('----> Pre');

		var xmlhttp = createHttpRequest();
		if (xmlhttp==null) {
			alert('Sorry, cannot use XMLHttpRequest');
			return;
		}

		//事前処理用ファンクションコール
		g_loadingFlag = false;
		
		// 事前処理ファンクション1つ目コール
		if( typeof(obj_befor_func) != "undefined" && obj_befor_func != '' ){
			obj_befor_func();
		}
		
		// 事前処理ファンクション2つ目コール
		ajax_submit_before(obj_frm, obj_action, obj_method, obj_id);

		//ブラウザ判定
		var bwoj = new chkAjaBrowser();
		var opera	  = bwoj.bw.opera;
		var safari	  = bwoj.bw.safari;
		var konqueror = bwoj.bw.konqueror;
		var mozes	  = bwoj.bw.mozes ;

		//受信処理
		//operaはonreadystatechangeに多重レスバグがあるのでonloadが安全
		//Moz,FireFoxはoj.readyState==3でも受信するので通常はonloadが安全
		//Win ieではonloadは動作しない
		//Konquerorはonloadが不安定
		//参考http://jsgt.org/ajax/ref/test/response/responsetext/try1.php
		if(opera || safari || mozes){
			xmlhttp.onload = function () {
				onloaded(xmlhttp, obj_id );
			};
		} else {
			xmlhttp.onreadystatechange =function () 
			{
				if ( xmlhttp.readyState == 4 ){
					onloaded(xmlhttp, obj_id );
				}
			};
		}
		xmlhttp.open("POST", obj_action, true);

		//ヘッダapplication/x-www-form-urlencodedセット
		setEncHeader(xmlhttp);

//		console.timeEnd('----> Pre');
//		console.time('----> Submit');

		var reverseConvert = false;
		if (bwoj.bw.mozes) {
			var ua = navigator.userAgent;
			var searchStr = 'Firefox/';
			var idx = ua.indexOf(searchStr);
			var verNum = ua.substr(idx + searchStr.length, 3);
			if (3.0 <= verNum) {
				reverseConvert = true;
			}
		}
		xmlhttp.send(postFormData(obj_frm, reverseConvert));

		//URIエンコードヘッダセット
		function setEncHeader(oj){
	
			//ヘッダapplication/x-www-form-urlencodedセット
			// @see  http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/interact/forms.html#h-17.13.3
			// @see  #h-17.3
			//   ( enctype のデフォルト値は "application/x-www-form-urlencoded")
			//   h-17.3により、POST/GET問わず設定
			//   POSTで"multipart/form-data"を指定する必要がある場合はカスタマイズしてください。
			//
			//  このメソッドがWin Opera8.0でエラーになったので分岐(8.01はOK)
			//var contentTypeUrlenc = 'application/x-www-form-urlencoded; charset=UTF-8';
			var contentTypeUrlenc = 'application/x-www-form-urlencoded';
			if(!window.opera){
				oj.setRequestHeader('Content-Type',contentTypeUrlenc);
			} else {
				if((typeof oj.setRequestHeader) == 'function')
					oj.setRequestHeader('Content-Type',contentTypeUrlenc);
			}	
			return oj
		}

		// onloaded
		function onloaded(xmlhttp, obj_id)
		{
//			console.timeEnd('----> Submit');
//			console.time('----> Draw');

			var obj = document.getElementById(obj_id);
			//obj.innerHTML = xmlhttp.responseText;
			var resText = get_response_text(xmlhttp);
			var status = xmlhttp.status;
			var errCode = 0;	//エラーにより画面の再描画を行わないとき1,全画面更新のとき2
			//セッションタイムアウト判定
			if(status == 290){
				location.href="/oadis/session_timeout.jsp";
			} 
			
			obj.innerHTML = resText;
//			console.timeEnd('----> Draw');
//			console.time('----> Later');
			
			//alert("submit " + obj_id + " end");

			//事後処理ファンクションコール
			ajax_submit_after(obj_frm, obj_action, obj_method, obj_id , status);
			
			// 事後処理ファンクション2つ目コール
			if( typeof(obj_after_func) != "undefined" && obj_after_func != '' ){
				obj_after_func(status);
			}

			//JSCommonTag.js 内のビジーフラグ解除
			g_onButton_flag = false;
			
//			console.timeEnd('----> Later');
//			console.timeEnd('ajax_submit End - ' + obj_action);
		}

	}

	//Safari の responseText で UTF-8 コード文字化け回避
	function get_response_text ( req ) {
		var text = req.responseText;
		if ( navigator.appVersion.indexOf( "KHTML" ) > -1 ) {
			var esc = escape( text );
			if ( esc.indexOf("%u") < 0 && esc.indexOf("%") > -1 ) {
				text = decodeURIComponent( esc );
			}
		}
		return text;
	}

	// reverseConvertParamのサブルーチン
	function utf8ByteToChar(head, val) {
		return String.fromCharCode(head + (val % 64));
	}

	// UTF8エンコーディングの文字列をISO-8859-1文字列と解釈する。
	// Java側でこの文字列が送られる事が想定されている実装にあわせるため。
	function reverseConvertParam(uri) {
		var hex = '';
		var len = uri.length;
		var output = '';
		for (var i = 0; i < len; i++) {
			var dec = uri.charCodeAt(i);
			var ch = uri.charAt(i);
			if (dec < (1 << 7)) {
				output += ch;
			} else if (dec < (1 << 11)) {
				output += utf8ByteToChar(192, dec >> 6);
				output += utf8ByteToChar(128, dec);
			} else if (
				(dec < (1 << 16)) && 
				// avoid surrogate pairs for security reasons
				(dec <= 0xD7FF || 0xE000 <= dec)
			) {
				output += utf8ByteToChar(224, dec >> 12);
				output += utf8ByteToChar(128, dec >>  6);
				output += utf8ByteToChar(128, dec);
			} else if (dec < (1 << 21)) {
				output += utf8ByteToChar(240, dec >> 18);
				output += utf8ByteToChar(128, dec >> 12);
				output += utf8ByteToChar(128, dec >>  6);
				output += utf8ByteToChar(128, dec);
			}
////////////////////////
//			} else if (dec < (1 << 26)) {
//				output += utf8ByteToChar(248, dec >> 24);
//				output += utf8ByteToChar(128, dec >> 18);
//				output += utf8ByteToChar(128, dec >> 12);
//				output += utf8ByteToChar(128, dec >>  6);
//				output += utf8ByteToChar(128, dec);
//			} else if (dec < (1 << 31)) {
//				output += utf8ByteToChar(252, dec >> 30);
//				output += utf8ByteToChar(128, dec >> 24);
//				output += utf8ByteToChar(128, dec >> 18);
//				output += utf8ByteToChar(128, dec >> 12);
//				output += utf8ByteToChar(128, dec >>  6);
//				output += utf8ByteToChar(128, dec);
//			}
		}
		return output;
	}

	function encodeValue2(val, reverseConvert) {
		if (reverseConvert) {
			val = reverseConvertParam(val);
		}
		val = encodeURI(val);
		val = val.replace(/&/g, "%26");
		val = val.replace(/=/g, "%3D");
		val = val.replace(/\+/g, "%2B");
		return val;
	}

	function postFormData(frm, reverseConvert) {	
		var postdata = new String();
		for( var i = 0 ; i < frm.elements.length ; i++ ){
			if( !frm.elements[i].disabled && frm.elements[i].type != undefined ){
				if (frm.elements[i].type == 'checkbox' || frm.elements[i].type == 'radio') {
					if (frm.elements[i].checked) {
						postdata += "&";
						postdata += frm.elements[i].name;
						postdata += "=";
						postdata += encodeValue2(frm.elements[i].value, reverseConvert);
					}
				} else {
					postdata += "&";
					postdata += frm.elements[i].name;
					postdata += "=";
					postdata += encodeValue2(frm.elements[i].value, reverseConvert);
				}
			}
		}
		postdata += "&ajax=true";
		postdata += "&formname=" + frm.name;
		if( postdata.length > 0 ){
			postdata = postdata.substring(1);
		}
		return postdata;
	}


	//JSPのみ再描画
	function ajax_redraw( obj_action, obj_id, async ) {
//		console.log('ajax_redraw Start - ' + obj_action);
//		console.time('ajax_redraw End - ' + obj_action);
//		console.time('----> Pre');
	
		var xmlhttp = createHttpRequest();
		if (xmlhttp==null) {
			alert('Sorry, cannot use XMLHttpRequest');
			return false;
		}

		//ブラウザ判定
		var bwoj = new chkAjaBrowser();
		var opera	  = bwoj.bw.opera;
		var safari	  = bwoj.bw.safari;
		var konqueror = bwoj.bw.konqueror;
		var mozes	  = bwoj.bw.mozes ;

		//受信処理
		//operaはonreadystatechangeに多重レスバグがあるのでonloadが安全
		//Moz,FireFoxはoj.readyState==3でも受信するので通常はonloadが安全
		//Win ieではonloadは動作しない
		//Konquerorはonloadが不安定
		//参考http://jsgt.org/ajax/ref/test/response/responsetext/try1.php
		if(opera || safari || mozes){
			xmlhttp.onload = function () {
				//callback(xmlhttp);
				onloaded(xmlhttp, obj_id );
			};
		} else {
			xmlhttp.onreadystatechange =function () 
			{
				if ( xmlhttp.readyState == 4 ){
					//callback(xmlhttp);
					onloaded(xmlhttp, obj_id );
				}
			};
		}

		// asyncが渡されてない場合(デフォルト)はtrue
		if(async == undefined){
			async = true;
		}
		xmlhttp.open("POST", obj_action, async);

		//ヘッダapplication/x-www-form-urlencodedセット
		setEncHeader(xmlhttp);

//		console.timeEnd('----> Pre');
//		console.time('----> Submit');

		xmlhttp.send( "" );

		//return true;

		//URIエンコードヘッダセット
		function setEncHeader(oj){
	
			//ヘッダapplication/x-www-form-urlencodedセット
			// @see  http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/interact/forms.html#h-17.13.3
			// @see  #h-17.3
			//   ( enctype のデフォルト値は "application/x-www-form-urlencoded")
			//   h-17.3により、POST/GET問わず設定
			//   POSTで"multipart/form-data"を指定する必要がある場合はカスタマイズしてください。
			//
			//  このメソッドがWin Opera8.0でエラーになったので分岐(8.01はOK)
			//var contentTypeUrlenc = 'application/x-www-form-urlencoded; charset=UTF-8';
			var contentTypeUrlenc = 'application/x-www-form-urlencoded';
			if(!window.opera){
				oj.setRequestHeader('Content-Type',contentTypeUrlenc);
			} else {
				if((typeof oj.setRequestHeader) == 'function')
					oj.setRequestHeader('Content-Type',contentTypeUrlenc);
			}	
			return oj
		}

		function onloaded(xmlhttp, obj_id)
		{
//			console.timeEnd('----> Submit');
//			console.time('----> Draw');				
			var obj = document.getElementById(obj_id);
			//obj.innerHTML = xmlhttp.responseText;
			var resText = get_response_text(xmlhttp);
			
			obj.innerHTML = resText;
//			console.timeEnd('----> Draw');
			
//			console.timeEnd('ajax_redraw End - ' + obj_action);
			
			//alert("redraw " + obj_id + " end");
		}

	}
	
	// エラーメッセージエリアを再描画し、エラーメッセージを取得する。
	// このメソッドを使用するには、以下の条件を満たす必要がある。
	//  ・エラーメッセージが無い場合、エラーメッセージ「NoError」をセットする
	//  ・コールするJSPファイル内に「webfw-message」のIDを持つエリアを定義する
	//  ・webfw-messageエリアでAjaxMessage.jspをインクルードする
	// 以上が満たせない場合、この関数は正しく機能しない為、注意すること。
	function ajax_showErrorMessage(){
		while(true){
			// メッセージエリア再描画
			ajax_redraw( "/oadis/web/rias/AjaxMessage.jsp", "rias-message", false);
			// メッセージ取得 空白削除
			var msg = document.getElementById("rias-message").innerHTML.replace(/\s/g, "");
			msg = msg.replace(/\\n/g, "");
			if(msg == "NoErrMessage."){		// セッションにエラー情報なし
				continue;
			}else if(msg == "NoError"){		// Beanからセットされたエラーなし
				break;
			}else if(msg != ""){			// エラーあり
				alert(msg);
				break;
			}
		}	
	}

	function ajax_showErrorMessage2(){
			
		// メッセージ取得 空白削除
		var msg = document.getElementById("rias-message").innerHTML.replace(/\s/g, "");
		msg = msg.replace(/\\n/g, "");
		if(msg == "NoErrMessage."){		// セッションにエラー情報なし
			//continue;
		}else if(msg == "NoError"){		// Beanからセットされたエラーなし
			//break;
		}else if(msg != ""){			// エラーあり
			alert(msg);
			document.getElementById("rias-message").innerHTML = "NoErrMessage.";
			//break;
		}
		
		
		
	}


