//######
//## This work is licensed under the Creative Commons Attribution-Share Alike 3.0
//## United States License. To view a copy of this license,
//## visit http://creativecommons.org/licenses/by-sa/3.0/us/ or send a letter
//## to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
//######

(function($) {
    $.fn.idleTimeout = function(options) {
        var defaults = {
            inactivity: 60000, //20 Minutes
            noconfirm: 10000, //10 Seconds
            sessionAlive: 30000, //10 Minutes
            redirect_url: '/js_sandbox/',
            click_reset: true,
            alive_url: '/js_sandbox/',
            logout_url: 'http://www.ringio.com'
        };

        //##############################
        //## Private Variables
        //##############################
        var opts = $.extend(defaults, options);
        var liveTimeout, confTimeout, sessionTimeout;
        var modal = "<div class='modalHeader hidden'><h2>Auto Logout</h2></div><div class='content'><p>Sorry for the inconvenience, your session has timed out.</p><p> Please sign in again.</p>" +
                "<div class='actionPanel floatRight'><a href='javascript:$.modal.close();' class='button'><span>Sign in again</span></a></div></div>";

        //##############################
        //## Private Functions
        //##############################
        var start_liveTimeout = function() {
            clearTimeout(liveTimeout);
            clearTimeout(confTimeout);
            liveTimeout = setTimeout(logout, opts.inactivity);

            //      if(opts.sessionAlive)
            //      {
            //        clearTimeout(sessionTimeout);
            //        sessionTimeout = setTimeout(keep_session, opts.sessionAlive);
            //      }
        };

        var logout = function() {
            $(modal).modal({
                minWidth: 350,
                minHeight:130,
                onClose: function() {
                    $.modal.close();
                    redirect();
                }
            });
        };

        var redirect = function() {
            if (opts.logout_url) {
                $.get(opts.logout_url);
            }
            window.location.href = opts.redirect_url;
        };

        var stay_logged_in = function(el) {
            start_liveTimeout();
            if (opts.alive_url) {
                $.get(opts.alive_url);
            }
        };

        //###############################
        //Build & Return the instance of the item as a plugin
        // This is basically your construct.
        //###############################
        return this.each(function() {
            obj = $(this);
            start_liveTimeout();
            if (opts.click_reset) {
                $(document).bind('click', start_liveTimeout);
            }
            //      if(opts.sessionAlive)
            //      {
            //        keep_session();
            //      }
        });

    };
})(jQuery);

