/*
 * Wikiplus
 */

(function(window, $) {

    var wikiplus = {
        ajax    : {},
        ui      : {},
        editor  : {},
        dialog  : {},
        plugin  : {},
        toolbar : {},
        plugins : {},
        lib     : {},
        code    : {
            NOTICE   : 1,
            WARNING  : 2,
            ERROR    : 3
        },

        //toolbarから、wp.init()で呼び出される
        // ※ window.wpjQ(document).ready(function() {…内で実行されるため、HTML構築は保証される
        init : function(){
            var self = this;

            wp.state.init();                //wp.state値への代入
            wp.editor.elrte.init();         //elRTEエレメントの宣言
            $('#wp_elrte_wysiwyg_dialog').wpWidgetEditor();
            $("#wp_editor_contents_right").wpWidgetEditorPropaty();


            wp.ajax.init();                     //$.ajaxSetup、Ajax用ローダー設定
            var success_callback = function(){  //Pane
                var self = this;
                var panes = wp.state.getPanes(),
                    selector_ary = [];

                //paneのUIを初期化
                $.each(panes, function(idx, pane){
                    selector_ary.push('#wp_paneno_' + pane.paneno);
                });
                $(selector_ary.join(', ')).wpPane();

                //ツールバーのメニューUIを初期化
                $('#wp_main_menu_page').wpToolbarMenu({id: 'page', components: wp.state.getToolbarMenu('page')});
                $('#wp_main_menu_edit').wpToolbarMenu({id: 'edit', components: wp.state.getToolbarMenu('edit')});
                $('#wp_main_menu_new' ).wpToolbarMenu({id: 'new' , components: wp.state.getToolbarMenu('new')});
                $('#wp_main_menu_func').wpToolbarMenu({id: 'func', components: wp.state.getToolbarMenu('func')});
                wp.toolbar.menu.init();

                wp.cookie.init();               //クッキー
                wp.ui.tooltip.init();           //ツールチップの設定
                wp.lib.dialog.init();           //ダイアログライブラリの設定
                wp.toolbar.logo.init();
                wp.toolbar.nav_search.init();
            };
            wp.ui.refreshUI($.proxy(success_callback, self));



            /* 編集側のグローバルなイベントの設定 */
            $('body').on("click", "[data-wp_call_editor='true']", function(e){
                //data-wp_call_editor属性を持つ編集アイコンに、
                //「新規ページ作成」エディタ呼び出しのクリックハンドラを実装
                e.preventDefault();
                wp.editor.createNewPageFromDataElement($(this));
            });

            /* クリック処理で別ページ移動を誤検知するIEバグの対処 */
            $('#wp_editor').on('click', 'button, a[href=#], a[href="javascript:void(0)"]', function(e){
                e.returnValue = false;
                e.cancelBubble = true;
                e.preventDefault();
            });
            $('body').on('click', '.wp_dialog a[href=#], .wp_dialog a[href="javascript:void(0)"]', function(e){
                e.returnValue = false;
                e.cancelBubble = true;
                e.preventDefault();
            });

            //windowイベント
            var windowResizeDebounced = _.debounce(function(){
                $(':ui-wpPane').wpPane('refreshUIPosition');
            }, 1000);
            $(window).resize(windowResizeDebounced);
        },

        log : function(msg){
            this.logger(msg);
        },
        logger : function(msg){
            try {
                console.log(msg);
            } catch(e) {
            };
        },
        addHtmlHeader : function(data, cssfiles){
            var csshtml = "";
            cssfiles = cssfiles || [];
            $.each(cssfiles, function() {
                    csshtml += '<link rel="stylesheet" type="text/css" href="'+this+'" />';
            });
            var header_s = '<?xml version="1.0" encoding="UTF-8"?>\n\
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">\n\
<head><meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />' + csshtml + '</head><body>';
            var header_e = '</body></html>';
            return header_s + data + header_e;
        },
        getViewType : function(mode){
            var kv = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
            var kvc=kv.length;
            var ret = {'vt':''};
            for(var i = 0; i <kvc; i++){
                var kvs = kv[i].split('=',2);
                if('vt' == kvs[0]){
                    if('' != kvs[1]){
                        ret = {'vt':kvs[1]};
                    }
                    break;
                }
            }
            return (0 == mode)? ret['vt'] : ret;
        }
    };


    //グローバル空間に定義
    window.wp = wikiplus;


    /***********************
     * image preload
     ***********************/
    var cache = [];
    var images = [
          'wikiplus/images/sub_menu_bg.png'
        , 'wikiplus/images/sub_menu_bg_l.png'
        , 'wikiplus/images/sub_menu_foot_bg.png'
        , 'wikiplus/images/sub_menu_foot_bg_l.png'
        , 'wikiplus/images/sub_menu_head_bg.png'
        , 'wikiplus/images/sub_menu_head_bg_l.png'
        , 'wikiplus/images/sub_menu_right_bg.png'
        , "wikiplus/images/loader/ajax-loader-large.gif"
        , "wikiplus/images/loader/ajax-loader-large_bg.png"
        , "wikiplus/images/loader/ajax-loader.gif"
    ];
    for (var i = images.length; i--;) {
        cache[i] = new Image();
        cache[i].src = images[i];
    }

})(window, wpjQ);



window.wpjQ(document).ready(function() {
    //公開側・編集側のグローバルな共通イベント
    wpjQ(document.body).on('click', 'a.fancybox:has(img)', function(e){
        e.preventDefault();
        wpjQ.fancybox({
            'href': this.href
        });
    });
});