//##########################################################################
// Ajax通信に関する関数群
// Created by Takeshi Yamanaka // 2007/06/27
// Modified by Yuya Amanp //2007/06/27
//##########################################################################

//=========================================
// ajaxでJSON型の結果を返す
//=========================================
function ajax_request_json(url, parameter, method, func){

	if(func == "" || func == null || func == false){
		asynchronous = false;
	}
	else{
		asynchronous = true;
	}

	var obj_JSON;
	var aReq = new Ajax.Request(url,{
		"method": method, 
		"parameters": parameter,  
		"asynchronous" : asynchronous,
		"requestHeaders": ['If-Modified-Since','Wed, 15 Nov 1995 00:00:00 GMT'],
		onComplete: function(request) {
			var text = request.responseText;
			if(navigator.appVersion.indexOf("KHTML") > -1){
				var esc = escape(text);
				if(esc.indexOf("%u") < 0 && esc.indexOf("%") > -1){
					text = decodeURIComponent(esc);
				}
			}

			//得られたJSON型の結果を"obj_JSON"という変数に格納
			//(エラーナンバーのチェックも行う)
			eval("obj_JSON = " + text);

			//非同期通信の場合に指定関数を実行
			if(asynchronous){
				eval(func + "(obj_JSON);");
			}
			
		},
		onFailure: function(request) {
			alert('予期せぬ例外が発生しました。もうしばらくたってからアクセスしてください。');
		},
		onException: function (request) {
			alert('予期せぬ例外が発生しました。もうしばらくたってからアクセスしてください。');
			}
	});

	if(!asynchronous){
		return obj_JSON;
	}
}
//=========================================
// ajaxで文字列の結果を返す
//=========================================
function ajax_request_string(url, parameter, method, func){

	if(func == "" || func == null || func == false){
		asynchronous = false;
	}
	else{
		asynchronous = true;
	}
	
	var str;
	var aReq = new Ajax.Request(url,{
		"method": method, 
		"parameters": parameter,  
		"asynchronous" : asynchronous,
		"requestHeaders": ['If-Modified-Since','Wed, 15 Nov 1995 00:00:00 GMT'],
		onComplete: function(request) {
			str = request.responseText;
				if(navigator.appVersion.indexOf("KHTML") > -1){
				var esc = escape(str);
					if(esc.indexOf("%u") < 0 && esc.indexOf("%") > -1){
					str = decodeURIComponent(esc);
					}
				}
				
				//非同期通信の場合に指定関数を実行
				if(asynchronous){
					eval(func + "(str);");
				}
			},
		onFailure: function(request) {
			alert('予期せぬエラーが発生しました。もうしばらくたってからアクセスしてください。');
			},
		onException: function (request) {
			alert('予期せぬエラーが発生しました。もうしばらくたってからアクセスしてください。');
			}
		});

	if(!asynchronous){
		return str;
	}

}

//=========================================
// 文字列の置換
//=========================================
function replace_strings(str, reg, target){
	
	if(target == undefined || target == null){
		target = "&nbsp;";
	}
	
	result = str.replace(eval("/" + reg.replace(/\$/g, "\\$") + "/g"), target);

	return result;
}


//=========================================
// 再帰的エンコード
// （今はとりあえず再帰せずに、1階層のみ）
//=========================================
function recursive_encoding(obj){
	
	for(i=0 ; i<obj.length ; i++){
		obj[i] = encodeURI(obj[i]);
	}
	
	return obj;
	
}

//=========================================
// パラメータ作成
//=========================================
function param_maker(field){

	//recursive_encoding(field);
  return field.join("&");

}

function createXmlHttp(){
   if(window.XMLHttpRequest) {             // Mozilla, Firefox, Safari, IE7
     return new XMLHttpRequest();
    } 
    else if(window.ActiveXObject) {       // IE5, IE6
      try{
        return new ActiveXObject("Msxml2.XMLHTTP");    // MSXML3
      }catch(e){
        return new ActiveXObject("Microsoft.XMLHTTP"); // MSXML2まで
      }
    } 
    else{
      return null;
    }
}


//*********************************************************
//　不透明度を設定
//*********************************************************
function setOpacity(target_id,arg) { //arg は 0 ～ 100、0は透明、100は不透明。

    //Win版e5,e6
    if(browser_type == "WIN_IE"){
      document.getElementById(target_id).filters.alpha.opacity = arg;
     	
    }
    //FIREFOX版
    else if(browser_type == "FIREFOX" || browser_type == "NN7"){
    	document.getElementById(target_id).style.MozOpacity = arg/100;
    }
    //n4とMac版e4,e5
    else if( document.layers ) {   
      if(arg > 0){
        document.layers[layName].visibility='visible';
      }
      else{
      	document.layers[layName].visibility='hidden';
     	}
    }
    else{
    	if(arg > 0){
	    	document.getElementById(target_id).style.visibility = 0;
	    }
	    else{
	    	document.getElementById(target_id).style.visibility = 1;
	    }
    }
}


//*********************************************************
//　キーコードを取得する関数
//*********************************************************
function getKeyCode(e){

  var ua = navigator.userAgent;

	//s1,o6不可
  if(ua.indexOf("Safari")!=-1 || ua.search('opera(\ |\/)6')!=-1){
	  return null;
	}
	//n4用
  else if(document.layers){
    return e.which;
  }
  //e4,e5,e6,o7用
  else if(document.all){               
    return event.keyCode;
  }
  //n6,n7,moz用
  else if(document.getElementById){
    return ((e.keyCode!=0)?e.keyCode:e.charCode);
  }
  //上記以外
  else{
  	return null;
  }
}


//*********************************************************
// SELECTボックスのオプションを全部削除
//*********************************************************
function ClearOptions(oSel) {
  while( oSel.options.length > 0) {
    oSel.options[ oSel.options.length - 1] = null;
  }
}

