
/**
 * 各種ビーコン用共通モジュール
 *
 * @charset utf-8
 * @author ishii <ishii[at]s-cubism[dot]jp>
 */
//---------------------------------------------
// Global object setting.
//---------------------------------------------
var $c = ("console" in window && "log" in console)? console.log: function(v){alert(v);};
var $app = (function(){

    //----------------------------------
    // Environments and configs setting.
    //

    var BPLA_AFFY_KEY = "baid";
    var ORDER_ID_KEY = "o";
    var LANDING_API_URL = "http://af.bbplanet.jp/t/l";
    var CONVERSION_API_URL = "http://af.bbplanet.jp/t/c";

    //
    //----------------------------------


    //----------------------------------
    // Main global object setting.
    //

    var app = {

        /** URLを解析してGET値のハッシュを返す */
        parseUrlToParameters: function(url){
            var params = {};
            if (/^.+?\?./.test(url)) {
                var pairs = url.replace(/^.+?\?/, '').split('&');
                for (var i = 0; i < pairs.length; i++) {
                    var pair = pairs[i].split('=');
                    params[pair[0]] = ((pair[1] !== undefined)? pair[1]: "");
                };
            };
            return params;
        },

        /** 自scriptタグのURLを返す */
        getSelfUrl: function(){
            var scriptTags = document.getElementsByTagName("script");
            try {
                var src = scriptTags[scriptTags.length - 1].src;
                return src;
            } catch (error) {
                this.raiseError("Can't get own script-tag.");
            };
        },

        /** エラーを原因とする例外を上げる */
        raiseError: function(message, opts){
            opts = opts || {};
            throw new Error(message);
        },

        /** 関数のスコープを束縛する、@see prototype.js */
        bind: function(binded, scope){
            return function() {
                    return binded.apply(scope, arguments);
            };
        },

        /** HTML特殊文字をエスケープする、@see prototype.js */
        escapeHTML: function(str){
            var div = document.createElement('div');
            var text = document.createTextNode(str);
            div.appendChild(text);
            return div.innerHTML;
        }
    };

    // Paths setting.
    app.BPLA_AFFY_KEY = BPLA_AFFY_KEY;
    app.ORDER_ID_KEY = ORDER_ID_KEY;
    app.LANDING_API_URL = LANDING_API_URL;
    app.CONVERSION_API_URL = CONVERSION_API_URL;

    return app;

    //
    //----------------------------------
})();


/** ランディング用ビーコン処理 */
(function(){

    var params = $app.parseUrlToParameters(document.URL);
    var baid = ($app.BPLA_AFFY_KEY in params)? params[$app.BPLA_AFFY_KEY]: null;
    if (baid === null) return;
    var r = encodeURIComponent(document.referrer);
    var url = $app.LANDING_API_URL + "/" + baid + "/?nocache=" + Math.random();
    if (r !== "") url += "&r=" + r;

    document.write('<script type="text/javascript" src="' + url + '" charset="utf-8"></script>');

})();

