// swfobject.js include
// document.write(unescape("%3Cscript src='http://draw.teacup.com/js/api/swfobject.js' type='text/javascript'%3E%3C/script%3E"));
document.write(unescape("%3Cscript src='http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js' type='text/javascript'%3E%3C/script%3E"));

/**
 * お絵かき画像作成jsクラス
 * 
 * @ver
 * 1.00 20100531 新規作成
 * 1.01 20100610 debugPrint追加
 * 1.02 20100622 greyboxが開かなかった時、正常にお絵かきタグが発行されない不具合修正
 * 1.03 20100631 タグ設定FORM名を引数で指定可能なように修正
 * 1.04 20100818 お絵かきエディタ起動メソッド追加
 * 1.05 20100915 お絵かきタグを指定したファンクションの引数で渡せるように修正
 * 1.06 20101027 flex4.0化に伴いFPを10.0.0へ
 * 1.07 20101207 siteNameを追加
 * 1.08 20110221 flex4.1化に伴いFPを10.1.0へ
 *
 * 必須ライブラリ
 * GreyBox
 * swfobject
 */
/**
 * constructor
 */
var DrawEditerClass = function() {
}
DrawEditerClass.prototype = {
    /**#@+
     * @access public
     */
    /**
     * お絵かきエディタ起動
     *
     * @param hash params  以下詳細
     *                +    drawFqdn          お絵かき側フルドメイン
     *                +    connectCode       持回りコード
     *                +    serviceCode       サービスコード
     *                +    siteCode          サイトコード
     *                +    siteName          サイト名
     *                +    siteUrl           サイトURL
     *                +    userCode          ユーザコード
     *                +    userUrl           ユーザURL
     *                +    fromFqdn          FQDN
     *                +    tagSetFormName    お絵かきタグを格納するFORM名
     *                +    tagSetFunctionNameお絵かきタグを格納するFUNCTION名
     *                +    freeData          自由データ
     *                +    freeData2         自由データ2
     *                +    freeData3         自由データ3
     *                +    selfSwfDir        DrawLocalConnection.swfを格納しているディレクトリ
     * @return void
     */
    openEditer : function(params) {
        if (this._checkMaintenance() && params.serviceCode == 'abbs') {
            if (this._execMaintenance() == false) {
                return false;
            }
        }
        // tagSetFormNameとtagSetFunctionNameがどちらも未設定
        if (params.tagSetFormName == undefined && params.tagSetFunctionName == undefined) {
            alert(this._getErrorMessage(9001));
            return;
        }
        // swfSelfDirが未設定
        if (params.selfSwfDir == undefined) {
            alert(this._getErrorMessage(9002));
            return;
        }
        // DrawLocalConnection.swfを格納しているディレクトリを設定
        var swfDir = params.selfSwfDir;
        
        // パラメータをURLへ変換
        var apiUrl = 'http://' + params.drawFqdn + '/api/make?connectCode=' + encodeURIComponent(params.connectCode);
        for (var key in params) {
            if (key == 'connectCode' || key == 'swfSelfDir') continue;
            if (params[key] != undefined) apiUrl += '&amp;' + encodeURIComponent(key) + '=' + encodeURIComponent(params[key]);
        }
        // お絵かきツールOpen 縦,横
        GB_showCenter('お絵かきエディタ', apiUrl, 640, 970);
        
        // DrawLocalConnectionSwfタグ各種設定(htmlがキャッシュされてconnectCodeが被る恐れがあるため動的に埋め込んでいる)
        var flashvars = {
            connectCode: encodeURIComponent(params.connectCode)
        };
        var params = {
            menu:"false",
            scale:"noScale",
            allowFullscreen:"false",
            allowScriptAccess:"sameDomain",
            bgcolor:"#FFFFFF"
        };
        var attributes = {
            id:"DrawLocalConnection"
        };
        // DrawLocalConnectionSwfタグ埋込
        swfobject.embedSWF(swfDir + "/DrawLocalConnection.swf?rand=" + Math.random(), "DrawLocalConnectionSwfContent", "1", "1", "10.1.0", swfDir + "/expressInstall.swf", flashvars, params, attributes);
    },
    /**
     * 作成後イベント処理
     *
     * @param string jsonData
     * @return void
     */
    onMake : function(jsonData) {
        // json解析
        var data = eval('(' + jsonData + ')');
        
        // タグ設定フォーム名がある時
        if (typeof(data.tagSetFormName) != 'undefined') {
            // タグ設定フォーム名パラメータで指定した箇所へ設定
            this._setTagFormNameParam(data.contentTag, data.tagSetFormName);
        }
        // タグ設定ファンクション名がある時
        if (typeof(data.tagSetFunctionName) != 'undefined') {
            // タグ設定ファンクション名パラメータで指定した箇所へ設定
            this._setTagFunctionNameParam(data.contentTag, data.tagSetFunctionName);
        }
        // tagSetFormNameとtagSetFunctionNameがどちらも未設定
        if (typeof(data.tagSetFormName) == 'undefined' && typeof(data.tagSetFunctionName) == 'undefined') {
            alert(this._getErrorMessage(9001));
            return;
        }
        // greyboxを閉じる
        this._closeGreybox();
    },
    /**
     * 接続不可イベント処理
     *
     * @param string value
     * @return void
     */
    onNotConnect : function(value) {
        alert(value);
    },
    /**
     *  許可しないドメインイベント処理
     *
     * @param string value
     * @return void
     */
    onDenyDomain : function(value) {
        alert(value);
    },
    /**
     *  許可ドメインイベント処理
     *
     * @param string value
     * @return void
     */
    onAllowDomain : function(value) {
        // alert(value);
    },
    /**
     * debugPrint
     *
     * @param string value
     * @return void
     */
    onDebugPrint : function(value) {
        alert(value);
    },
    /**#@-*/
    
    /**#@+
     * @access private
     */
    /**
     * greyboxを閉じる
     *
     * @return void
     */
    _closeGreybox : function() {
        // greyboxが開いている時
        if (parent.parent.GB_CURRENT) {
            parent.parent.GB_hide();
        }
    },
    /**
     * タグ設定フォーム名パラメータで指定した箇所へお絵かきタグを設定
     *
     * @param string tag
     * @param string formName
     * @return void
     */
    _setTagFormNameParam : function(tag, formName) {
        // 不正データ(英数字アンスコドット以外)block
        if (formName.search(/^[\w.]*$/i) != -1) {
            // 文字列を評価をしてタグを設定
            eval('parent.parent.' + formName + '+= tag');
        } else {
            alert(this._getErrorMessage(9011));
            return;
        }
    },
    /**
     * タグ設定ファンクション名パラメータで指定したファンクションへ引数を渡す
     *
     * @param string tag
     * @param string functionName
     * @return void
     */
    _setTagFunctionNameParam : function(tag, functionName) {
        // 不正データ(英数字アンスコドット以外)block
        if (functionName.search(/^[\w]*$/i) != -1) {
            // 文字列を評価をしてタグを設定
            eval('parent.parent.' + functionName + '(tag)');
        } else {
            alert(this._getErrorMessage(9012));
            return;
        }
    },
    /**
     * メンテナンスチェック
     *
     * @return boolean true;メンテ中, false:稼働中
     */
    _checkMaintenance : function() {
        // year, month, day, hour, min, sec
        // 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
        if (parseInt((new Date)/1000) > parseInt((new Date("Oct 6, 2011 10:00:00")/1000))
            && parseInt((new Date)/1000) < parseInt((new Date("Oct 6, 2011 16:00:00")/1000))
            ) {
            return true;
        }
        return false;
    },
    /**
     * メンテナンス実行
     */
    _execMaintenance : function() {
        // var msg = "現在メンテナンス中につきお絵かきを作成できません。しばらくお待ちください。\nなお、メンテナンスによる投稿エラー防止のためメンテナンス3時間前からお絵かき作成を停止しております。\n\nメンテナンス期間\n2010/12/11 00:00 ~ 2010/12/11 23:59";
        // return msg;
        return confirm("2011/10/06 14:00からメンテだからそれまでに投稿終わらせてね。\n\nメンテナンス期間\n2011/10/06 14:00 ~ 2011/10/06 16:00");
    },
    /**
     * エラーメッセージ取得
     *
     * @param int errorCode
     * @return void
     */
    _getErrorMessage : function(errorCode) {
        var msg;
        switch (errorCode) {
        case 9001:
            msg = "tagSetFormNameかtagSetFunctionNameが未設定です。";
            break;
        case 9002:
            msg = "selfSwfDirが未設定です。";
            break;
        case 9011:
            msg = "tagSetFormNameに不正な文字列が混入しています。タグ設定に失敗しました。";
            break;
        case 9012:
            msg = "tagSetFunctionNameに不正な文字列が混入しています。タグ設定に失敗しました。";
            break;
        }
        var ret = "Error:" + errorCode + " " + msg;
        return ret;
    }
    /**#@-*/
}


