
/*
	ポケモンだいすきパーク
		xhr.js - XHR処理
*/

/* -------------------------------------------------------------------------------- */

function xhr_open()
{
	if(window.XMLHttpRequest){return new XMLHttpRequest();}
	
	if(typeof window.ActiveXObject == "function"){
		try{
			return new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(e){
			try{
				return new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(e2){
				return null;
			}
		}
	}
	
	return null;
}

/* -------------------------------------------------------------------------------- */

function pdp_xhr_connect(http_method, http_addr, http_query, callback_function, callback_function_error)
{
	var xhr,now_time, query_str, xhr_query_get,xhr_query_post;
	
	xhr = xhr_open();
	if(!xhr){
		alert('Error: 通信に失敗しました。\nしばらくしてからやり直してみてください。');
		if(callback_function_error){callback_function_error();}
		return false;
	}
	
	now_time = get_now_time();
	query_str = 'xhr=' + now_time + '&';
	if(http_query && http_query.length > 0){query_str += http_query;}
	
	if(http_method == 'post' || http_method == 'POST'){
		http_method = 'POST';
		xhr_query_get = '';
		xhr_query_post = query_str;
	}
	else{
		http_method = 'GET';
		xhr_query_get = '?' + query_str;
		xhr_query_post = null;
	}
	
	var response, get_data;
	var line_end = String.fromCharCode(13) + String.fromCharCode(10);
	
	xhr.open(http_method, http_addr + xhr_query_get);
	xhr.onreadystatechange = function(){
		if(xhr.readyState == 4){
			response = (xhr.status == 200) ? xhr.responseText : '';
			
			if(response == ''){
				alert('Error: 通信に失敗しました。\nしばらくしてからやり直してみてください。');
				if(callback_function_error){callback_function_error();}
				return false;
			}
			
			get_data = response.split(line_end);
			
			if(callback_function){callback_function(get_data);}
			
			return true;
		}
		return true;
	}
	xhr.send(xhr_query_post);
	return true;
}

/*
	get_data
		0: OK or ERROR
		1: エラーメッセージ
		2: QUERY_STRING形式のデータ
		3: 画面表示のタイトル
		4: 画面表示の中身
		5: 自動的にページ移動する
*/

/* -------------------------------------------------------------------------------- */

var pdp_xhr_post_use_overlay = true;

function pdp_xhr_post(p_form, no_use_overlay, callback_func)
{
	var xhr = xhr_open();
	if(!xhr){return false;}
	if(!pdp_overlay || !pdp_overlay.enable){return false;}
	
	if(!p_form){return false;}
	if(p_form.enctype == 'multipart/form-data'){return false;}
	
	var p_result_msg = document.getElementById('pdp_xhr_post_result');
	p_result_msg.style.display = 'none';
	
	var query_str = '';
	for(i=0; i<p_form.elements.length; i++){
		p_form.elements[i].disabled = true;
		
		if(!p_form.elements[i].name){continue;}
		
		value = p_form.elements[i].value;
		
		if(p_form.elements[i].type == 'button' || p_form.elements[i].type == 'submit' || p_form.elements[i].type == 'reset'){continue;}
		else if(p_form.elements[i].type == 'checkbox' || p_form.elements[i].type == 'radio'){if(!p_form.elements[i].checked){continue;}}
		else if(p_form.elements[i].type.indexOf('select') == 0){
			value = '';
			
			for(j=0; j<p_form.elements[i].options.length; j++){
				if(p_form.elements[i].options[j].selected){value += p_form.elements[i].options[j].value;}
			}
		}
		
		query_str += '&' + rawurlencode(p_form.elements[i].name) + '=' + rawurlencode(value);
	}
	if(query_str.length > 0){query_str = query_str.substr(1);}
	
	var form_method = (p_form.method == 'post' || p_form.method == 'POST') ? 'POST' : 'GET';
	
	var xhr_connect_error_func = null;
	
	if(no_use_overlay){pdp_xhr_post_use_overlay = false;}
	else{
		pdp_xhr_post_use_overlay = true;
		xhr_connect_error_func = function(){ pdp_overlay.close(); };
		pdp_overlay.open('通信中です...', '<p>つうしん しています...</p><p class="pos_center"><img src="./img/plz_wait_l.gif" alt="wait..." title="通信中です..." width="75" height="75"></p>',true);
	}
	
	setTimeout( function(){
		pdp_xhr_connect(form_method, p_form.action, query_str, function(get_data){
			for(i=0; i<=5; i++){if(!get_data[i]){get_data[i] = '';}}
			var echo_buffer = '';
			
			var p_win_title,p_win_body,p_win_close_btn;
			
			if(get_data[0] != 'OK'){
				pdp_xhr_post_error(get_data);
				return false;
			}
			
			if(get_data[5].length > 0){
				var pos = get_data[5].indexOf(';url=');
				
				if(pos > -1){
					var refresh_sec = get_data[5].substr(0,pos);
					var refresh_url = get_data[5].substr(pos + 5);
					
					setTimeout( function(){ location.href = refresh_url; }, refresh_sec * 1000);
				}
			}
			
			if(pdp_xhr_post_use_overlay){
				pdp_overlay.param.win_title.innerHTML = get_data[3];
				pdp_overlay.param.win_body.innerHTML = get_data[4];
				pdp_overlay.param.win_close_btn.disabled = false;
			}
			
			if(callback_func){callback_func(get_data);}
			
			return true;
		}, xhr_connect_error_func );
	}, 500);
	
	setTimeout( function(){ enable_form_input(p_form); }, 1000);
	
	return true;
}

function pdp_xhr_post_error(get_data)
{
	var get_data_query = parse_query(get_data[2]);
	
	var echo_buffer = '';
	
	if(typeof(pdp_overlay) != 'undefined' && pdp_overlay.enable){
		echo_buffer = '<p><big><strong>Error: ' + get_data[1] + '</strong></big></p>';
		if(get_data_query['error_caption']){echo_buffer += '<p>' + get_data_query['error_caption'] + '</p>';}
		if(get_data_query['error_login_form']){echo_buffer += get_data_query['error_login_form'];}
		else{echo_buffer += '<p class="action_btn"><input type="button" value="入力画面にもどる" onClick="pdp_overlay.close();"></p>';}
		
		pdp_overlay.open('エラー！', echo_buffer, false);
	}
	else{
		echo_buffer = 'Error: ' + get_data[1];
		if(get_data_query['error_caption']){echo_buffer += '\n\n' + get_data_query['error_caption'];}
		if(get_data_query['error_login_form']){echo_buffer += '\n\n' + get_data_query['error_login_form'];}
		
		alert(echo_buffer);
	}
	
	echo_buffer = '<strong>Error: ' + get_data[1] + '</strong>';
	if(get_data_query['error_caption']){echo_buffer += '<br>' + get_data_query['error_caption'];}
	
	var p_result_msg = document.getElementById('pdp_xhr_post_result');
	
	setTimeout( function(){
		p_result_msg.innerHTML = '<p class="important">' + echo_buffer + '</p>';
		p_result_msg.style.display = 'block';
	}, 200);
	
	return false;
}

/* -------------------------------------------------------------------------------- */

if(document.getElementById){document.write('<div id="pdp_xhr_post_result" style="display:none;"></div>\n');}

//	var pdp_img_plz_wait = new Image(12,12);	pdp_img_plz_wait.src = './img/plz_wait.gif';
var pdp_img_plz_wait_s = new Image(12,12);	pdp_img_plz_wait_s.src = './img/plz_wait_s.gif';
var pdp_img_plz_wait_l = new Image(75,75);	pdp_img_plz_wait_l.src = './img/plz_wait_l.gif';
