(function( $ ){
    var settings = {};

    var popup = {
        settings: {
            overlay: true,
            overlayColor: '#333',
            overlayOpacity: '0.3',
            overlayClickClose: true,
            
            position: false,        //(top,left,right,bottom)(Left,Right,Center)
            attach: false,
            side: 'outside',
            top: 0,
            left: 0,
            width: 0,
            height: 0,
            autoDim: true,
            padding:0,

            posX: false,
            posY: false,

            theme: false,
            closeButton: true,
            closeOnMouseLeave: false,
            closeOnTimeout: false,
            timeout: 500

        },
        inited: false,
        init: function(options) {
            var settings = $.extend({}, popup.settings);

            if (popup.timer) clearTimeout(popup.timer);
            popup.destroy();

            var id = 'popup' + new Date();
            
            if (options.position) {
                //settings.overlay = false;
            }

            $.extend(settings, options);

            if (options.width || options.height) {
                settings.autoDim = false;
            }

            $('#jq-popup-wrapper, #jq-popup-overlay').remove();

            if (settings.overlay)
            {
                $(popup.tpl.overlay).css({backgroundColor: settings.overlayColor, opacity: settings.overlayOpacity}).appendTo($('body')).click(function(){
                    if (settings.overlayClickClose) {
                        popup.close();
                    }
                });
            }


            popup.position = false;
            var position = settings.position ? popup.checkPosition(settings) : false;
            if (position.length > 1) {
                position = popup.buildPosition(settings);
            }
            else if(settings.posX && settings.posY)
            {
                position = popup.buildCursorPosition(settings);
            }

            $('body').append(settings.theme ? popup.tpl.theme : popup.tpl.box).find('#jq-popup-content').html($(this));

            var box = $('#jq-popup-wrapper');
            var css = {};
            if (settings.autoDim) {
                $.extend(css, {width:$(this).outerWidth(), height:$(this).outerHeight()});
            } else {
                if (settings.width) $.extend(css, {width:settings.width});
                if (settings.height) $.extend(css, {height:settings.height});
            }

            if (position) {
                $.extend(css, position);
            } else {
                if (!css.width) css.width = $(this).outerWidth();
                if (!css.height) css.height = $(this).outerHeight();
                //if (settings.theme) css.height+=38;
                $.extend(css, {marginLeft: -Math.round(css.width/2), top: Math.round(($(window).height()-css.height)/2), position: 'fixed'});
                //$('#jp-popup-content').html(popup.tpl.theme.replace('${content}', $('#jp-popup-content').html()));
            }


            $.extend(css, {padding: settings.padding}); 

            $('#jq-popup-wrapper').css(css).data('id', id);

            if (settings.closeButton){
                if (!settings.theme) {
                    var _q = $('#jq-popup');
                    _q.html(popup.tpl.close + _q.html());
                } else {
                    $('#jq-popup-content').append(popup.tpl.themeClose);
                }
            }

            $('#jq-popup-close').click(function(){
               popup.close();
            });

            if (settings.closeOnMouseLeave) {
                var timeout = $.type(settings.closeOnMouseLeave, 'number') ? settings.closeOnMouseLeave : settings.timeout;
                $(this).mouseleave(function(){
                    popup.timer = setTimeout(function(){popup.destroy()}, timeout);
                });
            }

            if (settings.closeOnTimeout) {
                var timeout = $.type(settings.closeOnTimeout, 'number') ? settings.closeOnTimeout : settings.timeout;
                popup.timer = setTimeout(function(){popup.destroy()}, timeout);
            }

            //$(this).show();
            popup.inited = true;

            if ($.isFunction(settings.onComplete)) {
                settings.onComplete();
            }
        },
        position: false,
        checkPosition: function(settings) {
            if (popup.position) return popup.position;
            var position = settings.position, attach = settings.attach;
            var r = /(top|left|right|bottom){1}(Left|Right|Center)?/.exec(position);
            if (r.length > 1 && $(attach).length) {
                popup.position = r.slice(1, 3);
                return popup.position;
            }
            
            return false;
        },
        buildPosition: function(settings) {
            var r = popup.checkPosition(settings);
            var offset = $(settings.attach).offset();
            var style = { position:'absolute', top:settings.top+offset.top, left:settings.left+offset.left, width: 100, height: 50 };

            switch(r[0].toString().toLowerCase()){
                case 'bottom': style.top+=$(settings.attach).outerHeight(true); break;
                case 'right': style.left+=$(settings.attach).outerWidth(true); break;
            }
            r[1] = r[1].toString().toLowerCase();
            if (r[1] == 'right'){
                style.left+=$(settings.attach).outerWidth(true);
            } else if (r[1] == 'center'){
                if (r[0] == 'top' || r[0] == 'bottom'){
                    style.left+=Math.round($(settings.attach).outerWidth(true)/2);
                } else {
                    style.top+=Math.round($(settings.attach).outerHeight(true)/2);
                }
            }

            return style;
        },
        buildCursorPosition: function(settings) {
            var style = { position:'absolute', top:settings.top+settings.posY, left:settings.left+settings.posX, width: 100, height: 50 };

            return style;
        },
        show: function() {
            if (popup.inited)
            {
                $('#jq-popup-wrapper, #jq-popup-overlay').show();
            }
        },
        hide: function() {
            popup.close();
        },
        close: function(id) {
            if (popup.inited)
            {
                if (!id || id && $('#jq-popup-wrapper').data('id') == id) {
                    $('#jq-popup-wrapper, #jq-popup-overlay').hide();
                }
            }
        },
        timer: {},
        destroy: function(id) {
            if (popup.inited)
            {
                if (!id || id && $('#jq-popup-wrapper').data('id') == id) {
                    $('#jq-popup-wrapper, #jq-popup-overlay').remove();
                    popup.inited = false;
                }
            }
        },
        tpl: {
            close: '<a href="javascript:;" class="jq-popup-close" id="jq-popup-close">x</a>',
            box: '<div class="jq-popup-wrapper" id="jq-popup-wrapper"><div class="jq-popup" id="jq-popup"><div class="jq-popup-content" id="jq-popup-content"></div></div></div>',
            overlay: '<div class="jq-popup-overlay" id="jq-popup-overlay"></div>',
            theme: '<div class="jq-popup-wrapper" id="jq-popup-wrapper"><div class="jq-popup" id="jq-popup"><div class="upbox"><div class="top"><div class="right"></div></div><div class="center"><div class="text jq-popup-content" id="jq-popup-content"></div></div><div class="bot"><div class="right"></div></div></div></div></div>',
            themeClose: '<a href="javascript:;" id="jq-popup-close" class="small_bttn_pink"><span>OK</span></a>'//,
            //confirm: '<div class="title"><img src="/web/images/icons/notice_icon.png" alt=""/> <span>'+__('global.confirm.title')+'</span></div>${text}<div><a href="javascript:;" id="jq-popup-ok" class="small_bttn_pink"><span>'+__('global.confirm.yes')+'</span></a><a href="javascript:;" id="jq-popup-cancel" class="small_bttn_blue"><span>'+__('global.confirm.no')+'</span></a></div>',
            //alert: '<div class="title"><img src="/web/images/icons/notice_icon.png" alt=""/> <span>'+__('global.alert.title')+'</span></div>${text}<a href="javascript:;" id="jq-popup-close" class="small_bttn_blue"><span>'+__('global.alert.ok')+'</span></a>'
        }/*,
        /*confirm: function(options){
            $( $T(popup.tpl.confirm, {text: options.text}) ).popup({
                theme:true, closeButton:false, width: 326, onComplete: function(){
                    if ($.isFunction(options.onOk))
                        $('#jq-popup-ok').click(function(){
                            options.onOk();
                            $.popup('close');
                        });
                    
                    if ($.isFunction(options.onCancel)) {
                        var fclose = function(){ options.onCancel(); $.popup('close'); $.keyboard('esc,enter', function(){ $.popup('close') });  };
                        $.keyboard('esc', fclose);
                    } else {
                        var fclose = function(){ $.popup('close'); }
                    }

                    $('#jq-popup-cancel').click(fclose);
                }
            });
        },
        alert: function(options){
            $( $T(popup.tpl.alert, {text: options.text}) ).popup({theme:true, closeButton:false, width: 326});
        }*/
    };

    $.fn.popup = function ( method ) {
        if ( popup[method] ) {
            return popup[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
        } else if ( typeof method === 'object' || ! method ) {
            return popup.init.apply( this, arguments );
        }
    };

    $.extend({
        popup: $.fn.popup
    });

    //$.keyboard('esc,enter', function(){ $.popup('close') });

})( jQuery );
