/*
 * Original Copyright
 *
 * Pushup
 * Copyright (c) 2008 Nick Stakenburg (www.nickstakenburg.com)
 *
 * License: MIT-style license.
 * Website: http://www.pushuptheweb.com
 *
 */

/*
 * Modified for jQuery by Stuart Loxton (www.stuartloxton.com)
 * Version: 1.0.1
 *
 * Heavily refactored  by Thomas Reynolds
*/
(function($) {
  var browsers = {
    ie: {
      link: 'http://www.microsoft.com/windows/downloads/ie/',
      version: {
        active:  $.browser.msie ? parseFloat($.browser.version) : false,
        minimum: 7
      }
    },
    firefox: {
      link: 'http://www.getfirefox.com',
      version: {
        active:  (navigator.userAgent.indexOf('Firefox') > -1) ? parseFloat(navigator.userAgent.match(/Firefox[\/\s](\d+)/)[1]) : false,
        minimum: 2
      }
    },
    safari: {
      link: 'http://www.apple.com/safari/download/',
      version: {
        active:  $.browser.safari ? parseFloat($.browser.version) : false,
        minimum: 3
      }
    },
    opera: {
      link: 'http://www.opera.com/download/',
      version: {
        active:  $.browser.opera ? parseFloat($.browser.version) : false,
        minimum: 9
      }
    }
  };

  // Determine the current browser and version
  var browserUsed;
  $.each(browsers, function(name, info) {
    if (info.version.active !== false)
      browserUsed = $.extend({ name: name }, info);
  });

  $.pushup = {
    options: {
      appearDelay: 500,  // milliseconds
      fadeDelay:   6000, // milliseconds
      images:      'javascripts/pushup/',
      message:     'Important browser update available',
      reminder: {
        hours:   6,
        message: 'Remind me again in 6 hours'
      }
    },

    show: function() {
      if (!pushup_elem)
        setup();

      pushup_elem.fadeIn('slow');
      
      if ($.pushup.options.fadeDelay > 0)
        setTimeout($.pushup.hide, $.pushup.options.fadeDelay);
    },

    hide: function() {
      pushup_elem.fadeOut('slow');
    },
    
    resetReminder: function() {
      Cookie.remove('_pushupBlocked');
    }
  }

  var pushup_elem;
  function setup() {
    var messagelink = $('<a class="pushup_messageLink" target="_blank" />')
      .append($('<div class="pushup_icon"/>'))
      .append($('<span class="pushup_message" />').html($.pushup.options.message));
    
    $('body').prepend($('<div id="pushup" />').hide());
    pushup_elem = $('#pushup').append(messagelink);
    
    if ($.browser.msie && parseInt($.browser.version) < 7)
      $('.pushup_icon').css({ filter: 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + $.pushup.options.images + browserUsed.name  + '.png\'\', sizingMethod=\'crop\')' });
    else
      $('.pushup_icon').css({ background: 'url(' + $.pushup.options.images + browserUsed.name + '.png) no-repeat top left' });

    if (!cookiesEnabled)
      return;
      
    // Setup reminder
    var plural   = $.pushup.options.reminder.hours + ' hour' + ($.pushup.options.reminder.hours > 1 ? 's' : ''),
        message  = $.pushup.options.reminder.message.replace('#{hours}', plural);
    pushup_elem.append($('<a href="#" class="pushup_reminder" />').html(message));

    $('.pushup_reminder').click(function() {
      Cookie.set('_pushupBlocked', 'blocked', { duration: 1 / 24 * $.pushup.options.reminder.hours });
      $.pushup.hide();
      return false;
    });
  }

  // Based on the work of Peter-Paul Koch - http://www.quirksmode.org
  var Cookie = {
    set: function(name, value) {
      var expires = '', options = arguments[2] || {};
      if (options.duration) {
        var date = new Date();
        date.setTime(date.getTime() + options.duration * 1000 * 60 * 60 * 24);
        value += '; expires=' + date.toGMTString();
      }
      document.cookie = name + "=" + value + expires + "; path=/";
    },

    remove: function(name) { this.set(name, '', -1) },

    get: function(name) {
      var cookies = document.cookie.split(';'), nameEQ = name + "=";
      for (var i = 0, l = cookies.length; i < l; i++) {
        var c = cookies[i];
        while (c.charAt(0) == ' ')
          c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0)
          return c.substring(nameEQ.length, c.length);
      }
      return null;
    }
  };

  var cookiesEnabled = (function(test) {
    if (Cookie.get(test)) return true;
    Cookie.set(test, 'test', { duration: 15 });
    return Cookie.get(test);
  })('_pushupCookiesEnabled');

  $(document).ready(function() {
    if ((browserUsed.version.active >= browserUsed.version.minimum) ||
        (!$.pushup.options.ignoreReminder && cookiesEnabled && Cookie.get('_pushupBlocked')))
      return;
    
    setTimeout($.pushup.show, $.pushup.options.appearDelay);
  });
})(jQuery);