/**
 * @author trtik
 */

(function($) {
    
    /**
     * Shows advertisment layer
     * 
     * options:
     *   width   - Width of the layer.
     *   height  - Height of the layer.
     *   timeout - Layer destroys itself after timeout miliseconds.
     * 
     * @param {Object} options
     */
    $.layer = function(element, options) {
        
        element = $(element);

        var defaultOptions = {
          width: $(element).width()+'px',
          height: 'auto',
          timeout: 0,
          top: 0
        };
        
        // Recalculate layer position
        var onResize = function() {
            var left = parseInt(($(window).width() - layer.width())/2) + 'px';
            var top = options.top || parseInt(($(window).height() - layer.height())/2.3) + 'px';
            layer.css({
                left: left,
                top: top
            });
        }

        options = $.extend(defaultOptions, options);
        
        $(document.body).css({
           position: 'relative'
        });
        
        
        var layer = $('<div id="layer" style="display: none"/>').appendTo(document.body);
        var layerCss = {
            width: options.width,
            height: options.height,
            position: 'absolute'
        };
        element.show().appendTo(layer);
        layer.css(layerCss);
        onResize();
        
        // Close button and timeout (if set) trigger layer.close event
        var closeButton = $('<a id="layer-close-button" href="#" />').appendTo(layer).click(function() {
            layer.trigger('layer.close', [layer]);
        });
        if (options.timeout) {
            setTimeout(function() {
                layer.trigger('layer.close', [layer]);
            }, options.timeout);
        }
        
        // Default layer.close event handler
        layer.bind('layer.close', function(event, layer) {
            layer.fadeOut(300); 
        });
        
        $(window).resize(function(){
            onResize();
        });
        
        layer.show();
        
        return layer;

    }
    
})(jQuery);
