/* ============================================================================
 * 共通
 * ========================================================================= */

/**
 * このテーマで使用するアクション呼び出しです。
 *
 * @param  target フォーム。
 * @param  url    呼び出し先の URL。
 * @param  successFunc 成功したときに呼び出すコールバック関数。
 * @param  failureFunc 失敗したときに呼び出すコールバック関数。
 */
function psc_theme_action(target, url, successFunc, failureFunc) {
	if (target.jquery == void(0)) {
		target = $(target);
	}

	$.ajax({
		type:     'POST',
		url:      url,
		dataType: 'json',
		data:     target.serialize(),
		success: function(data, textStatus) {
			if (typeof(successFunc) == "function") {
				successFunc(target, data, textStatus);
			}
		},
		error: function(request, textStatus, errorThrown) {
			if (typeof(failureFunc) == "function") {
				failureFunc(target, request, textStatus, errorThrown);
			} else if (request.status != 401) {
				alert('処理の呼び出し中にエラーが発生しました。');
			}
		}
	});
}

/**
 * エラーオブジェクトをダンプします。
 *
 * @param  err エラーオブジェクト。
 */
function psc_theme_dump_error(err) {
	try {
		if (err.description) {
			if (err.name) {
				alert(err.name + ' : ' + err.description);
			} else {
				alert(err.description);
			}
		} else {
			alert(err);
		}
	} catch (e) {
		alert('内部エラーが発生しましたが、エラー情報が表示できません。');
	}
}


/* ============================================================================
 * ログイン処理
 * ========================================================================= */

/**
 * ログインボタンを押したときのイベントハンドラです。
 *
 * @param  target フォーム。
 * @param  event  イベント。
 */
function onSubmitLogin(target, event) {
	if (!jQuery) {
		return false;
	}

	try {
		if (target.jquery == void(0)) {
			target = $(target);
		}
		psc_theme_action(target, target[0].action, onSuccessLogin, onFailureLogin);
	} catch (e) {
		psc_theme_dump_error(e);
		return false;
	}
	return false;
}

/**
 * ログインが成功した場合に呼び出されるコールバック関数です。
 *
 * @param  target     フォーム。
 * @param  data       レスポンスデータ。
 * @param  textStatus レスポンスステータス。
 */
function onSuccessLogin(target, data, textStatus) {
	window.location.reload();
}

/**
 * ログインが失敗した場合に呼び出されるコールバック関数です。
 *
 * @param  target      フォーム。
 * @param  request     リクエストに使用した XMLHttpRequest オブジェクト。
 * @param  textStatus  レスポンスステータス。
 * @param  errorThrown 例外オブジェクト。
 */
function onFailureLogin(target, request, textStatus, errorThrown) {
	if (request.status != 401) {
		alert('ログイン処理の呼び出しに失敗しました。');
	}
}
