/**
 * UI系汎用関数オブジェクト
 */
(function($) {

    wp.ui.util = {

        transferHelper       : null,
        loadingHelper        : null,
        loadingHelperCenter  : null,
        loadingHash          : [],


        /***********************************************************************
         * エディタ系
         ***********************************************************************/
        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;
        },

        getEditorCssFiles : function(wp_prop, isWysiwygCss){
            var cssfiles = [];
            isWysiwygCss = isWysiwygCss || false;

            if(wp_prop.site_color_set &&
                wp_prop.site_design &&
                wp_prop.site_design.COLOR &&
                wp_prop.site_color_set[wp_prop.site_design.COLOR]  &&
                wp_prop.site_color_set[wp_prop.site_design.COLOR]["EDITOR.CSS"]){
                cssfiles = [wp_prop.site_color_set[wp_prop.site_design.COLOR]["EDITOR.CSS"]];
            } else {
                cssfiles = ['wikiplus/style.editor.css'];
            }
            cssfiles.push('wikiplus/script/jquery/elrte/css/elrte-inner.css');
            cssfiles.push('wikiplus/wikiplus_system_preset.css');
            if(isWysiwygCss){
                cssfiles.push('wikiplus/wikiplus_wysiwyg.css');
            }
            //エディタ上、PやDIVの枠線の出力指定
            if(wp.prop.default_config.EDITOR && wp.prop.default_config.EDITOR.OUTLINE){
                if(wp.prop.default_config.EDITOR.OUTLINE.P){
                    cssfiles.push('wikiplus/wikiplus_wysiwyg_p.css');
                }
                if(wp.prop.default_config.EDITOR.OUTLINE.DIV){
                    cssfiles.push('wikiplus/wikiplus_wysiwyg_div.css');
                }
            }
            return cssfiles;
        },

        getViewType : function(mode){
            var kv = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
            var kvc=kv.length;
            var ret = {'vt':'default'};
            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;
        },

        /***********************************************************************
         * ダイアログ系
         ***********************************************************************/
        getDialogHeight : function(dialog_height){
            if($(window).height() < dialog_height){
                dialog_height = $(window).height() - 20;
            }
            return dialog_height;
        },

        saveDialogProp : function(dialog, dialogprop){
            var self = this;
            var $dialog = $(dialog);
            dialogprop.top    = $dialog.offset().top;
            dialogprop.left   = $dialog.offset().left;
            dialogprop.width  = parseInt($dialog.css("width"));
            dialogprop.height = parseInt($dialog.css("height"));
        },

        openDialog : function(point, dialog, dialogprop){
            var self = this;
            self.toggleDialog("open", point, dialog, dialogprop);
        },

        closeDialog : function(point, dialog, dialogprop){
            var self = this;
            self.toggleDialog("close", point, dialog, dialogprop);
        },

        toggleDialog : function(action, point, dialog, dialogprop){
            var self = this;
            var duration = 400;
            var $point = $(point);
            var $dialog = $(dialog);
            var start_opt = {};
            var end_opt  = {};
            var point_opt = {
                "top" : $point.offset().top,
                "left" : $point.offset().left,
                "width" : $point.css("width"),
                "height" : $point.css("height"),
                "filter" : "alpha(opacity=0)",
                "-moz-opacity" : "0",
                "opacity" : "0"
            };
            var dialog_opt = {
                "top": dialogprop.top,
                "left": dialogprop.left,
                "width": dialogprop.width,
                "height": dialogprop.height,
                "filter" : "alpha(opacity=30)",
                "-moz-opacity" : "0.3",
                "opacity" : "0.3"
            };

            if(self.transferHelper == null)
            {
                //アニメーション用領域の初期化
                $('body').append('<div id="wp_transfer_helper"></div>');
                self.transferHelper = $('#wp_transfer_helper');
            }
            self.transferHelper.css('display', 'block').css('position', 'absolute');
            self.transferHelper.addClass('wp_transfer_helper');


            if(action == "close"){
                //close
                $.extend(start_opt, dialog_opt);
                $.extend(end_opt, point_opt);
                self.transferHelper
		.css('width', start_opt.width + 'px')
		.css('height', start_opt.height + 'px')
		.css('top', start_opt.top + 'px')
		.css('left', start_opt.left + 'px')
                .animate(end_opt, duration, function(){
                    self.transferHelper.css('display', 'none');
                    self.transferHelper.removeClass('wp_transfer_helper');
                });
            } else {
                //open
                $.extend(start_opt, point_opt);
                $.extend(end_opt, dialog_opt);
                self.transferHelper
		.css('width', start_opt.width + 'px')
		.css('height', start_opt.height + 'px')
		.css('top', start_opt.top + 'px')
		.css('left', start_opt.left + 'px')
                .animate(end_opt, duration, function(){
                    self.transferHelper.css('display', 'none');
                    self.transferHelper.removeClass('wp_transfer_helper');
                });
            }
        },


        /***********************************************************************
         * ローディング系
         ***********************************************************************/
         setLoading : function(hash){
            var self = this;

            //ローディング用領域の初期化
            if(self.loadingHelper == null)
            {
                $('body').append('<div id="wp_loading" />');
                $('body').append('<div id="wp_loading_center"><img style="top:16px" src="wikiplus/images/loader/ajax-loader-large.gif" /><div>');
                self.loadingHelper = $('#wp_loading, #wp_loading_center');
            }
            $('#wp_loading').css("height", $(document).height()).css("width", $(document).width());
            if(hash){
                self.loadingHash.push(hash);
            }
            setTimeout(function(){
                self.loadingHelper.show();
            }, 100);
         },

         removeLoading : function(hash){
            var self = this;
            if(hash){
                var len = self.loadingHash.length - 1;
                for(var i = len; i >= 0; i--){
                    if(self.loadingHash[i] == hash){
                        self.loadingHash.splice(i,1);
                    }
                }
            }
            if(self.loadingHelper != null){
                if(!hash || self.loadingHash.length == 0){
                    setTimeout(function(){
                        self.loadingHelper.hide();
                    }, 500);
                }
            }
         },


        /***********************************************************************
         * Ajax系
         ***********************************************************************/
         ajaxComplete : function(XMLHttpRequest, status){
            switch (status) {
                case "notmodified":
                    throw {"code":1001}
                    break;
                case "timeout":
                    throw {"code":1002}
                    break;
                case "parsererror":
                    throw {"code":1003}
                    break;
                default:
                    break;
            }
        }
    }
})(window.wpjQ);

