/**
  * 動作環境
  * @example development, testing, staging, production
  */
var APPLICATION_ENV = 'production';

// エラーハンドラ設定
window.onerror = function(message, url, line){

    if(typeof Nutex.sendCount !== 'undefined' && Nutex.sendCount === true) {
        // すでに送信済みの場合は終了
        return;
    }

    if(APPLICATION_ENV === 'development') {
    
        if(typeof console != 'undefined') {
    
            console.log('■エラー内容を表示■■■■■■■■');
            console.log('message : ' + message);
            console.log('url : ' + url);
            console.log('line : ' + line);
            console.log('■■■■■■■■■■■■■■■■■');
    
        }else {
    
            alert(
            'message : ' + message + "\n" +
            'url : ' + url + "\n" +
            'line : ' + line
            );
    
        }
    
    }

    if(typeof $ != 'undefined') {
        // エラーメッセージを送信
        Nutex.sendErrorMessage(message, url, line);
    }
    return true;
};

/**
* Nutex共通スクリプト
*
* @see 開発環境に関して.xls [JavaScriptに関して]
* @namespace Nutex
* @copyright Copyright (c) 2009
*/
var Nutex = {


    /**
    * Ajaxで通信失敗した場合のアラートを表示する
    *
    * @param {Object} e
    */
    alertAjaxErrorMessage : function(e) {

        var ajaxErrorMessage = this._getAjaxErrorMessage(e);
        alert(ajaxErrorMessage);

    },

    /**
    * Ajaxでエラーが起きた場合のメッセージをアラートする
    *
    * @private
    * @param {Object} e (jQueryの失敗時のオブジェクト)
    * @returns {String}
    */
    _getAjaxErrorMessage : function(e) {
        return e + 'エラーメッセージを記述';
    },

    /**
    * エラーが起きた場合のメッセージをサーバーに通知する。
    * スクリプト暴走対策として、エラーを投げるのは1回までとする。
    *
    * @param {String} エラー内容
    * @param {String} エラーが発生したファイル名
    * @param {String} エラーが発生したファイルの行番号
    */
    sendErrorMessage : function(message, url, line) {

        if(typeof this.sendCount == 'undefined') {
            this.sendCount = true;
        }
        
        var logData = this._getMakeSendContents([message, url, line]);

        $.ajax({
            type: 'POST',
            url: '/default/error/save-js-msg/',
            data: {obj : logData},
            success: function(msg){
                $.debug('ajax.success = ', arguments);
            },
            error: function(msg){
                $.debug('ajax.error = ', arguments);
            }
        });

    },

    /**
    * 送信する内容を作成し、取得する
    *
    *@param {Array} [message, url, line]
    *@return {String}
    */
    _getMakeSendContents : function(er) {

        var json = {};

        // エラー内容
        json.msg = er.join(', ');
        
        // トレース
        json.trace = Nutex.Log.get().join(', ');
        
        // ユーザー情報を取得する
        json = this.getCurrentUserInfo(json);
        
        return json;

    },
    
    /**
    * ユーザー情報を取得する
    * 
    * 1 ユーザーエージェント
    * 2 ウインド横縦
    * 3 ブラウザ横縦
    * 4 言語
    * 5 URL
    * 6 リファラー
    * 
    * param {Object} (option) base
    * @return {Object} 
    */
    getCurrentUserInfo : function(base) {
     
        var json = base || {};

        // *1
        json.usrAg = (typeof navigator.userAgent != 'undefined') ? navigator.userAgent : 'navigator.userAgentが取得できませんでした';

        // *2
        json.windowWidth = $(window).width();
        json.windowHeight = $(window).height();
        
        // *3
        json.documentWidth = $(document).width();
        json.documentHeight = $(document).height();

        // *4
        json.lang = navigator.language || navigator.browserLanguage;

        // *5
        json.href = document.location.href
        
        // *6
        json.referrer = document.referrer;
        
        return json;
           
    },

    /**
    * deleteConfirmAndRedirect - 確認後リダイレクト
    */
    deleteConfirmAndRedirect: function(url, mes) {

        if(typeof mes === 'undefined') {
            mes = '削除してもよろしいですか?';
        }

        if(window.confirm(mes)) {
            location.href=url;
        }
    }
};


(function(Nutex) {

    var log = [];

    /**
    * ログ処理
    *
    * @see 開発環境に関して.xls [JavaScriptに関して]
    * @namespace Nutex
    * @copyright Copyright (c) 2009
    */
    Nutex.Log = {

        /** ログデータを保存 */
        save : function(args) {
            log.push(args.join(' '));
        },

        /** ログデータを取得 */
        get : function() {
            return log;
        }

    };

})(Nutex);


/**
* Adcms共通クラス
* 本当にここに置きたくない
*
* @class Adcms
* @category Adcms
*/
if (typeof Adcms == 'undefined') {
    var Adcms = {};
}

