﻿(function ($) {
    $.fn.modal = function (options) {
        var settings = $.extend({
            opacity: 0.75,
            duration: 300,
            cache: true
        }, options || {}),
                     overlayDuration = (function () {
                         return settings.duration / 5;
                     } ()),
                     overlay$,
                     box$,
                     loadUrl = function (url) {
                         if (settings.cache === true && box$.children().length) {
                             activate();
                         } else {
                             box$.load(url, function () {
                                 activate();
                             });
                         }
                     },
                     activate = function () {
                         overlay$.fadeIn(overlayDuration, function () {
                             box$.fadeIn(settings.duration);
                         });
                         $(document).bind('keyup', keyHandler);
                     },
                     deactivate = function () {
                         box$.fadeOut(settings.duration, function () {
                             overlay$.fadeOut(overlayDuration);
                             box$.empty();
                         });
                         $(document).unbind('keyup', keyHandler);
                     },
                     attachHandlers = function () {

                         $('#modal-overlay', $('body')).live('click', function (e) {
                             e.preventDefault();

                             deactivate();
                         });

                         $('a.close', box$).live('click', function (e) {
                             e.preventDefault();
                             deactivate();
                         });
                     },
                     keyHandler = function (e) {
                         if (e.keyCode === 27) { // ESC
                             deactivate();
                         }
                     },
                     init = (function () {
                         var markup = '<div id="modal-overlay"></div><div id="modal-box"></div>';
                         $('body').append(markup);
                         overlay$ = $('#modal-overlay').css({
                             opacity: settings.opacity,
                             height: $('body').height()
                         });
                         box$ = $('#modal-box');
                         attachHandlers();
                     } ());

        return this.each(function () {
            $(this).click(function (e) {
                e.preventDefault();
                loadUrl($(this).attr('href'));
            });
        });
    };
    $.fn.popup = function (options) {
        var settings = $.extend({
            status: 0,
            toolbar: 0,
            location: 0,
            menubar: 0,
            resizable: 0,
            scrollbars: "yes",
            height: 500,
            width: 500
        }, options || {});

        return this.each(function () {
            $(this).click(function (e) {
                var options = (function () {
                    var options = '';
                    options += 'status=' + settings.status + ',';
                    options += 'toolbar=' + settings.toolbar + ',';
                    options += 'location=' + settings.location + ',';
                    options += 'menubar=' + settings.menubar + ',';
                    options += 'resizable=' + settings.resizable + ',';
                    options += 'scrollbars=' + settings.scrollbars + ',';
                    options += 'height=' + settings.height + ',';
                    options += 'width=' + settings.width;
                    return options;
                } ()),
                                  popup = window.open($(this).attr('href'), "popup", options);
                e.preventDefault();
                return false;
            });
        });
    };
} (jQuery));


