var AJAX_ERROR = -1;
var AJAX_DRIVE_FORWARD = "ajax_drive";

function createXMLHttpRequest(resFnc)
{
	var xmlHttpObj = null;
	
	// create XMLHttpRequest Object
	if (window.XMLHttpRequest)
	{
		// for Safari, Firefox, IE7
		xmlHttpObj = new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		try
		{
			// for IE6
			xmlHttpObj = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				// for IE5
				xmlHttpObj = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{
				xmlHttpObj = null;
			}
		}
	}
	
	if (xmlHttpObj)
	{
		xmlHttpObj.onreadystatechange = resFnc;
	}
	
	return xmlHttpObj;
}

function getData(xmlHttpObj, uri)
{
	xmlHttpObj.open("GET", uri, true);
	xmlHttpObj.send(null);
}

function postData(xmlHttpObj, uri, sendData)
{
	xmlHttpObj.open("POST", uri, true);
	xmlHttpObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xmlHttpObj.send(sendData);
}

function getJSON(xmlHttpObj)
{
	return eval("(" + xmlHttpObj.responseText + ")");
}

function getResponseText(xmlHttpObj)
{
	return xmlHttpObj.responseText;
}

function isComplete(xmlHttpObj)
{
	return ((xmlHttpObj.readyState == 4) && (xmlHttpObj.status == 200))
}

function abortHttp(xmlHttpObj)
{
	xmlHttpObj.abort();
}

// CMS-extensions
var _cmsAjaxTimeout = 30000;
var _cmsHttpObj = null;
var _cmsTimerId = null;
var _cmsAjaxResFnc = null;
var _cmsHttpObj2 = null;
var _cmsTimerId2 = null;
var _cmsAjaxResFnc2 = null;
var AJAX_RES_OK = 0;
var AJAX_RES_ERROR = 1;
var AJAX_RES_TIMEOUT = 2;
function cms_Ajax(forwardName, sendData, callBackFnc)
{
	_cmsAjaxResFnc = callBackFnc;
	_cmsHttpObj = createXMLHttpRequest(cms_AjaxResponse);
	sendData = cms_createAjaxSendData(forwardName, sendData);
	postData(_cmsHttpObj, __cmsController, sendData);
	_cmsTimerId = setTimeout("cms_AjaxTimeout()", _cmsAjaxTimeout);
}

function cms_AjaxResponse()
{
	if (isComplete(_cmsHttpObj))
	{
		clearTimeout(_cmsTimerId);
		
		var tmpFnc = _cmsAjaxResFnc;
		_cmsAjaxResFnc = null;
		
		//var errFlg = cms_isResponseError(_cmsHttpObj.responseText);
		var resCode = cms_getResponseCode(_cmsHttpObj.responseText);
		if ((resCode != AJAX_RES_TIMEOUT) && (tmpFnc != null)) tmpFnc(_cmsHttpObj.responseText, (resCode == AJAX_RES_ERROR));
	}
}

function cms_AjaxTimeout()
{
	abortHttp(_cmsHttpObj);
	
	var tmpFnc = _cmsAjaxResFnc;
	_cmsAjaxResFnc = null;
	if (tmpFnc != null) tmpFnc(AJAX_ERROR, true);
}

function cms_Ajax2(forwardName, sendData, callBackFnc)
{
	_cmsAjaxResFnc2 = callBackFnc;
	_cmsHttpObj2 = createXMLHttpRequest(cms_AjaxResponse2);
	sendData = cms_createAjaxSendData(forwardName, sendData);
	postData(_cmsHttpObj2, __cmsController, sendData);
	_cmsTimerId2 = setTimeout("cms_AjaxTimeout2()", _cmsAjaxTimeout);
}

function cms_AjaxResponse2()
{
	if (isComplete(_cmsHttpObj2))
	{
		clearTimeout(_cmsTimerId2);
		
		var tmpFnc = _cmsAjaxResFnc2;
		_cmsAjaxResFnc2 = null;
		
		//var errFlg = cms_isResponseError(_cmsHttpObj2.responseText);
		//if (tmpFnc != null) tmpFnc(_cmsHttpObj2.responseText, errFlg);
		var resCode = cms_getResponseCode(_cmsHttpObj2.responseText);
		if ((resCode != AJAX_RES_TIMEOUT) && (tmpFnc != null)) tmpFnc(_cmsHttpObj2.responseText, (resCode == AJAX_RES_ERROR));
	}
}

function cms_AjaxTimeout2()
{
	abortHttp(_cmsHttpObj2);
	
	var tmpFnc = _cmsAjaxResFnc2;
	_cmsAjaxResFnc2 = null;
	if (tmpFnc != null) tmpFnc(AJAX_ERROR, true);
}

function cms_createAjaxSendData(forwardName, sendData)
{
	var delimita = (sendData == "") ? "" : "&";
	return __cmsForward + "=" + forwardName + delimita + sendData;
}

function cms_convertJSON(responseText)
{
	return eval("(" + responseText + ")");
}

function cms_getResponseCode(responseText)
{
	if (responseText == AJAX_ERROR) return AJAX_RES_ERROR;
	if ((responseText.length > 2) && (responseText.substr(0, 2) == "<!"))
	{
		cms_timeoutProc();
		return AJAX_RES_TIMEOUT;
	}
	return AJAX_RES_OK;
}

/*
function cms_isResponseError(responseText)
{
	return (responseText == AJAX_ERROR);
}
*/

function cms_timeoutProc()
{
	// CT-timeout
	if ((window.opener) && (typeof(window.opener.cms_closeAllWindow) == _TYPE_OF_FUNCTION))
	{
		window.opener.cms_closeAllWindow();
		return;
	}
	
	cms_closeAllWindow();
	window.location.href = window.location.pathname;
}

function cms_ajaxErrorMsg()
{
	alert("処理中にエラーが発生しました。");
}

function cms_ajaxDrive(sendData, mod1, mod2, mod3, callBackFnc)
{
	var delimita = (sendData == "") ? "" : "&";
	var modParam1 = "ajaxMod1=" + mod1;
	var modParam2 = (mod2 == null) ? "" : "&ajaxMod2=" + mod2;
	var modParam3 = (mod3 == null) ? "" : "&ajaxMod3=" + mod3;
	var param = sendData + delimita + modParam1 + modParam2 + modParam3;
	cms_Ajax(AJAX_DRIVE_FORWARD, param, callBackFnc);
}
