var AjaxRequestWrapper = Class.create({
    /**
     * コンストラクタ
     * @param url        - 送信先URL
     * @param options    - 送信時のオプション
     * @param sendFlag   - インスタンス生成後、直ちに送信するかどうか true:自動 false: 手動
     * @param failureUrl - Ajax送信エラー時のエラーページURL
     */
    initialize: function(url, options, sendFlag, failureUrl) {
dbg('AjaxRequestWrapper init');

        if(url == '' || Object.isUndefined(url)){
            this.ajaxFailure();
        } else {
            this.url = url;
        }
dbg('AjaxRequestWrapper url = ' + this.url);
        if(failureUrl != '' && !Object.isUndefined(failureUrl)){
            this.failureUrl = failureUrl;
        }

        // 明示的にオプションのデフォルトを指定
        this.options = {
                method         : 'post',
                asynchronous   : true,
                parameters     : '',
                onLoading      : this.ajaxLoading,
                onComplete     : this.ajaxComplete,
                onSuccess      : this.ajaxSuccess,
                onFailure      : this.ajaxFailure
        };

        // 上記で指定したデフォルトのoptionsを引数のoptionsでオーバーライド
        Object.extend(this.options, options);

        // sendFlagが指定してない場合はただちに送信
        if(sendFlag || Object.isUndefined(sendFlag)){
            this.send();
        }
    },
    send: function(){
dbg('AjaxRequestWrapper :start send');
        new Ajax.Request(this.url, this.options);
dbg('AjaxRequestWrapper :end send');
    },
    ajaxLoading: function(){
dbg('AjaxRequestWrapper :start ajaxLoading');
    },
    ajaxComplete: function(){
dbg('AjaxRequestWrapper :start ajaxComplete');
    },
    ajaxSuccess: function(res, json){
dbg('AjaxRequestWrapper :start ajaxSuccess');
    },
    ajaxFailure: function(res){
dbg('AjaxRequestWrapper :start ajaxFailure');
//location.replace(ajaxRequestWrapper_failureUrl);
    },
    failureUrl:'?method=goAjaxSystemError' // 暫定パラメータ
});