
/**
 * jquery用
 * 電話番号表示のためのプロトタイプ
 * @author 阿波根
 */

var ID_LND_AREA = "lnd_area";

var ID_LND_DISPLAY = "lnd_display";

var ID_TRIGGER_BUTTON = "trigger_button";


if (typeof LND == "undefined" || !LND) {
    var LND = {
        main : []
    };
}


/**
 * DocumentWriter
 * コンストラクタに渡された引数をHTMLドキュメントに書き込みます。
 */
var DocumentWriter = function(content) {
    this.construct(content);
};
DocumentWriter.prototype = {

    /**
     * 初期化子
     */
    construct : function(content) {
        document.open();
        document.write(content);
        document.close();

    }
};

/**
 * NumberDisplayJSONP
 * この電話番号表示処理のリクエストロジック部。
 */
var NumberDisplayJSONP = function(url, params, index) {

    /**
     * リクエストURL
     */
    this.url = url + "?" + params;

    this.index = index;

    /**
     * responseProcessorプロトタイプ
     */
    this.responseProcessor = function(){};

    this.construct();
};
NumberDisplayJSONP.prototype = {

    /**
     * 初期化子
     */
    construct : function() {
        try {
            //Util.YUILoad(['utilities', 'container', 'resize']);
            var scriptElement = document.createElement("script");
            scriptElement.setAttribute("src", this.url);
            scriptElement.setAttribute("type", "text/javascript");
            scriptElement.setAttribute("charset", "UTF-8");
            document.getElementById(ID_LND_AREA + '_' + this.index).appendChild(scriptElement);
            /*
            var body = document.getElementsByTagName("body")[0];
            testDialog = new YAHOO.widget.SimpleDialog("testDialog", {
                width : "300px",
                fixedcenter : true,
                visible:true,
                draggable:true,
                close: true,
                text : "yahoo uiのSimpleDialogのてすとだよ",
                icon : YAHOO.widget.SimpleDialog.ICON_HELP,
                constraintoviewport : true,
                buttons : [
                    {text : "おk"},
                    {text : "ノー！"}
                ]
            });
            testDialog.setHeader("テスト");
            testDialog.render(body);
            //*/
        } catch (e) {
            alert("JSONP.request error");
            console.log(e);
        }
    },


    responseProcessor : function(response) {
        var status = response.response.status;
        var disp;
        if (!status.result) {
            disp = new ErrorDisplayHtml();
        } else {
            var shop = response.response.shop;
            switch (status.site) {
                case "kyujin":
                case "uchina":
                case "cross":
                case "recicle":
                    disp = new DialogDisplayHtml(shop);
                    break;
                default:
                    disp = new ErrorDisplayHtml();
                    break;
            }
        }
        
        var g = disp.render();
        var dialogOption = {
            width : 450,
            height : 300,
            title : "お問い合わせ先",
            modal : true,
            open : function(e) {
                jQuery("div.ui-widget-overlay").click(function(ev){
                    Util.closeDialog();
                }).css("opacity", "0");
            }
        };
        Util.openDialog(g, dialogOption);
    }

    /**
     * Ajax.Requestのリクエスト完了時にコールされるメソッドです。
     */
    /*
    responseProcessor : function(response) {
        alert("NumberDisplay.responseProcessor");
        var responseJson = eval("(" + response + ")");
        var resp = responseJson.response;
        if (resp.status.result) {
            var site = resp.status.site;
            if (site == "kyujin") {
                var kd = new KyujinDisplay();
                kd.display(resp);
            } else if (site == "uchina") {
                var sd = new SuccessDisplay();
                sd.display(resp);
            } else if (site == "cross") {
                var sd = new SuccessDisplay();
                sd.display(resp);
            } else if (site == "recicle") {
                var sd = new SuccessDisplay();
                sd.display(resp);
            }
        }else {
            var fd = new FailedDisplay();
            fd.display(resp);
        }
    }
    //*/
};

var ErrorDisplayHtml = function() {

}

var DialogDisplayHtml = function(shop) {
    this.shop = shop;
}
DialogDisplayHtml.prototype = {
    render : function() {
        var dispHtml = "";
        var telNumber = this.shop.telNumber;
        var faxNumber = this.shop.faxNumber;
        var shopName = this.shop.shopName;
        var thText = shopName + "のお問い合わせ先";
        var capTel = "電話番号";
        var capFax = "FAX番号";
        var tableStyle = "border-collapse: collapse;border:solid 1px #cccccc;width: 100%;";
        var thStyle = "background-color: #cccccc;padding: 3px;"
        var tdHeadStyle = "background-color: #eeeeee;border-top:solid 1px #cccccc;padding: 3px;";
        var tdContentStyle = "border-top:solid 1px #cccccc;padding: 3px;";
        var colspan = 0;
        
        var hour = (new Date()).getHours();
        var isSystemRunning = hour >= 10 && hour <= 19;
        
        if (this.shop.accessCode && isSystemRunning) {
            dispHtml += "<table style=\"" + tableStyle + "\">";
            dispHtml += "<tr><th colspan=\"2\" style=\"" + thStyle + "\" >" + thText + "</th></tr>";
            dispHtml += "<tr><td style=\"" + tdHeadStyle + "\" >電話転送サービス</td><td style=\""+ tdContentStyle + "\"><strong>098-911-6639</strong></td>";
            dispHtml += "<tr><td colspan=\"2\" style=\""+ tdContentStyle + "\">";
            dispHtml += "<div>"
            dispHtml += "自動音声案内が応答しますので、案内に従い<strong>[" + this.shop.accessCode + "]</strong>を入力してください。<br />";
            //dispHtml += "ユーザー様の電話番号は" + shopName + "には通知されません。";
            dispHtml += "</div>"
            dispHtml += "</td></tr>";
            if (faxNumber) {
                dispHtml += "<tr><td style=\"" + tdHeadStyle + "\">" + capFax + "</td><td style=\""+ tdContentStyle + "\">" + faxNumber + "</td></tr>";
            }
            dispHtml += "</table>";
        } else {
            if (telNumber) {
                colspan += 2;
            }
            if (faxNumber) {
                colspan += 2;
            }
            dispHtml += "<table style=\"" + tableStyle + "\">";
            dispHtml += "<tr><th colspan=\"" + colspan + "\" style=\"" + thStyle + "\" >" + thText + "</th></tr>";
            dispHtml += "<tr>";
            if (telNumber) {
                dispHtml += "<td style=\"" + tdHeadStyle + "\" >" + capTel + "</td><td style=\""+ tdContentStyle + "\">" + telNumber + "</td>";
            }
            if (faxNumber) {
                dispHtml += "<td style=\"" + tdHeadStyle + "\">" + capFax + "</td><td style=\""+ tdContentStyle + "\">" + faxNumber + "</td>";
        	  }
            dispHtml += "</tr>";
            dispHtml += "</table>";
        }
        return dispHtml;
    }
    /*
    render : function() {
        var dispHtml = "";
        var telNumber = this.shop.telNumber;
        var faxNumber = this.shop.faxNumber;
        var shopName = this.shop.shopName;
        var thText = shopName + "のお問い合わせ先";
        var capTel = "電話番号";
        var capFax = "FAX番号";
        var tableStyle = "border-collapse: collapse;border:solid 1px #cccccc;width: 100%;";
        var thStyle = "background-color: #cccccc;padding: 3px;"
        var tdHeadStyle = "background-color: #eeeeee;border-top:solid 1px #cccccc;padding: 3px;";
        var tdContentStyle = "border-top:solid 1px #cccccc;padding: 3px;";
        dispHtml += "<table style=\"" + tableStyle + "\">";
        dispHtml += "<tr><th colspan=\"2\" style=\"" + thStyle + "\" >" + thText + "</th></tr>";
        if (telNumber) {
            dispHtml += "<tr><td style=\"" + tdHeadStyle + "\" >" + capTel + "</td><td style=\""+ tdContentStyle + "\">" + telNumber + "</td>";
        }
        if (faxNumber) {
            dispHtml += "<tr><td style=\"" + tdHeadStyle + "\">" + capFax + "</td><td style=\""+ tdContentStyle + "\">" + faxNumber + "</td>";
        }
        dispHtml += "</table>";
        return dispHtml;
    }
    //*/
}

/**
 * 琉求人用表示
 */
var KyujinDisplayHtml = function(shop) {
    this.shop = shop;
}
KyujinDisplayHtml.prototype = {
    render : function() {
        var dispHtml = "";
        var telNumber = this.shop.telNumber;
        var faxNumber = this.shop.faxNumber;
        if (telNumber) {
            dispHtml += "&nbsp;" + telNumber + "&nbsp;";
        }
        if (faxNumber) {
            dispHtml += "&nbsp;(FAX)&nbsp;" + faxNumber;
        }
        if (telNumber || faxNumber) {
            dispHtml += "<br /><span style='color:darkred; font-size:11px;'>※お問い合わせの際は「琉求人を見た」とお伝えいただければスムーズです。</span>";
        }
        return dispHtml;
        //document.getElementById(ID_LND_AREA).innerHTML = dispHtml;



        /*
        var body = document.getElementById(ID_LND_AREA);
        testDialog = new YAHOO.widget.SimpleDialog("testDialog", {
            width : "300px",
            fixedcenter : true,
            visible:true,
            draggable:true,
            close: true,
            text : "yahoo uiのSimpleDialogのてすとだよ",
            icon : YAHOO.widget.SimpleDialog.ICON_HELP,
            constraintoviewport : true,
            buttons : [
                {text : "おk"},
                {text : "ノー！"}
            ]
        });
        testDialog.setHeader("テスト");
        testDialog.render(body);
        //*/
    }
}

/**
 * うちなーらいふ用表示
 */
var UchinaDisplayHtml = function(shop) {
    this.shop = shop;
}
UchinaDisplayHtml.prototype = {
    render : function() {

    }
}

/**
 * Util
 * ちょっと便利なメソッド群です。
 */
var Util = {

    /**
     * オブジェクトbindに関数funcをバインドします。
     */
    bindFunc : function(bind, func) {
        return function() {
            return func.apply(bind, arguments);
        }
    },

    inherit : function(obj) {
        var F = function() {};
        F.prototype = obj;
        return new F();
    },

    /**
     * イベントリスナを追加します。
     * @param elem Element リスナを追加するElementオブジェクト
     * @param type String イベントタイプを表す文字。click, mousedownなど。
     * @param func Function リスナ
     */
    addEventListener : function(elem, type, func) {
        if (elem.addEventListener) {
            elem.addEventListener(type, func, false);
        } else {
            elem.attachEvent("on" + type, func);
        }
    },

    /**
     * 指定したノードにタグを挿入します。
     * @param name String タグ名
     * @param attributes Array 属性を列挙したオブジェクト
     * @param targetNode Node このタグを挿入する親ノード
     * @return Element 挿入されたタグ
     */
    appendElement : function(name, attributes, targetNode) {
        elem = document.createElement(name);
        for (var attr in attributes) {
            elem.setAttribute(attr, attributes[attr]);
        }
        targetNode.appendChild(elem);
        return elem;
    },

    /**
     * ダイアログ表示用の静的なElementオブジェクト
     */
    dialogElem : null,

    /**
     * ダイアログ表示用のメソッドです。
     * @param g String ダイアログに表示するHTML
     * @param dialogOption Object ダイアログ表示オプション
     * @dependson jquery > ver.1.3.2
     * @dependson jquery-ui
     */
    openDialog : function(g, dialogOption) {
        var body = document.getElementsByTagName("body").item(0);

        Util.dialogElem = Util.appendElement("div", {id: "const_dialog"}, body);
        jQuery.ui.dialog.defaults.bgiframe = true;
        jQuery(Util.dialogElem).html(g).dialog(dialogOption);

    },

    closeDialog : function() {
        jQuery(Util.dialogElem).dialog("close");
    },

    YUILoad : function(requireArray) {
        var loader = new YAHOO.util.YUILoader({
            require : requireArray,
            loadOptional : true,
            onSuccess : function() {},
            timeout : 5000,
            combine : true
        });
        loader.insert();
    }
}

function loadYUI() {
    Util.YUILoad(['utilities', 'container', 'resize']);
}


/**
 * Main
 * この電話番号表示処理のためのMainクラスです。
 * revision 15
 */
var BukkenLogMain = function() {

    this.index = LND.main.length;

    this.idLndArea = ID_LND_AREA + '_' + this.index;

    this.idTriggerButton = ID_TRIGGER_BUTTON + '_' + this.index;

    /**
     * このスクリプトが書き出すHTML
     */
    /*
    this.trigger = "\
        <div id=\"" + this.idLndArea + "\">\n\
            <a href=\"javascript:void(0);\" id=\"" + this.idTriggerButton + "\" title=\"お問い合わせ先の電話番号を表示します\" name=\"lnd\">電話をかける</a>\n\
        </div>\n\
    ";
    //*/
    this.trigger = "\
        <div id=\"" + this.idLndArea + "\">\n\
            <input id=\"" + this.idTriggerButton + "\" type=\"button\" value=\"お電話はこちら\" style=\"" + this.getButtonStyle() + "\" />\n\
        </div>\n\
    ";


    /**
     * サーバ名
     */
    this.serverName = "http://www.ryukyujima.net/";

    /**
     * プロジェクトの位置
     */
    this.projectLocation = this.serverName + "LND";

    /**
     * javascript
     */
    this.jsLib = this.projectLocation + "/js";

    /**
     * YUIライブラリ
     */
    this.yuiLib = this.jsLib + "/yui/build";

    /**
     * リクエストエントリポイント
     */
    this.entryUrl = this.projectLocation + "/index.php";

    /**
     * リクエストコントローラ名
     */
    this.controller = "kyujin";

    /**
     * リクエストアクション名
     */
    this.action = "pc";

    /**
     * 物件ID
     */
    this.bid = "200802050003";

    /**
     * リクエストパラメータ
     */
    this.params = "ctrl=" + this.controller + "&act=" + this.action + "&bid=" + this.bid + "&index=" + this.index;

    /*
    this.params = {
        ctrl : "kyujin",
        act : "pc",
        bid : "200802050003"
    };
    //*/
    this.construct();
}
BukkenLogMain.prototype = {

    buttonStyle : {
        "font-size" : "13px",
        "font-weight" : "bold",
        "color" : "#FFFFFF",
        "background-color" : "#0033FF",
        "border-top-style" : "double",
        "border-top-color" : "#CCCCCC",
        "border-bottom-style" : "double",
        "border-bottom-color" : "#666666",
        "border-left-style" : "double",
        "border-left-color" : "#CCCCCC",
        "border-right-style" : "double",
        "border-right-color" : "#666666",
        "cursor" : "pointer"
    },

    getButtonStyle : function() {
        var style = "";
        for (key in this.buttonStyle) {
            style += key + ":" + this.buttonStyle[key] + ";";
        }
        return style;
    },

    /**
     * 初期化子
     */
    construct : function() {
        new DocumentWriter(this.trigger);
        var tb = document.getElementById(this.idTriggerButton);
        Util.addEventListener(tb, "mouseover", Util.bindFunc(this, function(e) {
            document.getElementById(this.idTriggerButton).style.backgroundColor = "#3366FF";
        }));
        Util.addEventListener(tb, "mouseout", Util.bindFunc(this, function(e) {
            var tb = document.getElementById(this.idTriggerButton);
            tb.style.backgroundColor = "#0033FF";
            tb.style.borderTopColor = "#CCCCCC";
            tb.style.borderBottomColor = "#666666";
            tb.style.borderRigthColor = "#666666";
            tb.style.borderLeftColor = "#CCCCCC";
        }));
        Util.addEventListener(tb, "mousedown", Util.bindFunc(this, function(e) {
            var tb = document.getElementById(this.idTriggerButton);
            tb.style.borderTopColor = "#666666";
            tb.style.borderBottomColor = "#CCCCCC";
            tb.style.borderRigthColor = "#CCCCCC";
            tb.style.borderLeftColor = "#666666";
        }));
        Util.addEventListener(tb, "mouseup", Util.bindFunc(this, function(e) {
            var tb = document.getElementById(this.idTriggerButton);
            tb.style.borderTopColor = "#CCCCCC";
            tb.style.borderBottomColor = "#666666";
            tb.style.borderRigthColor = "#666666";
            tb.style.borderLeftColor = "#CCCCCC";
        }));
        //new DocumentWriter('<script type="text/javascript" charset="UTF-8" src="http://www.ryukyujima.net/LND/js/yui/build/yuiloader/yuiloader.js"></script>');
        //new DocumentWriter('<img src="http://www.ryukyujima.net/LND/js/yui/build/assets/skins/sam/sprite.png" style="visibility:hidden;" />');
        //new DocumentWriter('<img src="http://www.ryukyujima.net/LND/js/yui/build/resize/assets/skins/sam/layout_sprite.png" style="visibility:hidden;" />');
        //var headElem = document.getElementsByTagName("head")[0];
        //Util.appendElement("script", {type : "text/javascript", charset : "UTF-8", src : this.yuiLib + "/yuiloader/yuiloader.js"}, headElem);
        //this.addYuiTags();
        //var body = document.getElementsByTagName("body")[0];
        //body.setAttribute("class", "yui-skin-sam");
        Util.addEventListener(document.getElementById(this.idTriggerButton), "click", Util.bindFunc(this, function(e) {
            new NumberDisplayJSONP(this.entryUrl, this.params, this.index);
            return false;
        }));
        //setTimeout(loadYUI, 1000);
    },

    /**
     * Yahoo UIのjavascriptライブラリを動的にロードするメソッドです。
     */
    addYuiTags : function() {
        //console.log(YAHOO);
        //*
        var headElem = document.getElementsByTagName("head")[0];
        Util.appendElement("link", {rel : "stylesheet", type : "text/css", href : this.yuiLib + "/fonts/fonts.css"}, headElem);
        Util.appendElement("link", {rel : "stylesheet", type : "text/css", href : this.yuiLib + "/container/assets/skins/sam/container.css"}, headElem);
        Util.appendElement("link", {rel : "stylesheet", type : "text/css", href : this.yuiLib + "/resize/assets/skins/sam/resize.css"}, headElem);
        Util.appendElement("script", {type : "text/javascript", charset : "UTF-8", src : this.yuiLib + "/yahoo/yahoo-min.js"}, headElem);
        Util.appendElement("script", {type : "text/javascript", charset : "UTF-8", src : this.yuiLib + "/utilities/utilities.js"}, headElem);
        Util.appendElement("script", {type : "text/javascript", charset : "UTF-8", src : this.yuiLib + "/container/container.js"}, headElem);
        Util.appendElement("script", {type : "text/javascript", charset : "UTF-8", src : this.yuiLib + "/resize/resize.js"}, headElem);
        //*/
        //*
        new DocumentWriter('<link rel="stylesheet" type="text/css" href="http://www.ryukyujima.net/LND/js/yui/build/fonts/fonts-min.css" />');
        new DocumentWriter('<link rel="stylesheet" type="text/css" href="http://www.ryukyujima.net/LND/js/yui/build/container/assets/skins/sam/container.css" />');
        new DocumentWriter('<link rel="stylesheet" type="text/css" href="http://www.ryukyujima.net/LND/js/yui/build/resize/assets/skins/sam/resize.css" />');
        new DocumentWriter('<script type="text/javascript" charset="UTF-8" src="http://www.ryukyujima.net/LND/js/yui/build/yahoo/yahoo-min.js"></script>');
        new DocumentWriter('<script type="text/javascript" charset="UTF-8" src="http://www.ryukyujima.net/LND/js/yui/build/utilities/utilities.js"></script>');
        new DocumentWriter('<script type="text/javascript" charset="UTF-8" src="http://www.ryukyujima.net/LND/js/yui/build/container/container.js"></script>');
        new DocumentWriter('<script type="text/javascript" charset="UTF-8" src="http://www.ryukyujima.net/LND/js/yui/build/resize/resize.js"></script>');
        //*/
        /*
        Util.appendElement("script", {type : "text/javascript", charset : "UTF-8", src : this.yuiLib + "yahoo-dom-event/yahoo-dom-event.js"}, headElem);
        Util.appendElement("script", {type : "text/javascript", charset : "UTF-8", src : this.yuiLib + "element/element-min.js"}, headElem);
        Util.appendElement("script", {type : "text/javascript", charset : "UTF-8", src : this.yuiLib + "button/button-min.js"}, headElem);
        //*/
    }
}

LND.main[LND.main.length] = new BukkenLogMain();