/* 
 * 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)
*/

(function($) {
  // Cookie plugin based on the work of Peter-Paul Koch - http://www.quirksmode.org
  var Cookie = {
    set: function(name, value) {
      var expires = '', options = arguments[2] || {}, date;
      if (options.duration) {
        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 + "=", i, l, c;
      for (i = 0, l = cookies.length; i < l; i++) {
        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;
    }
  };

  $.pushup = {
    Version: '1.0.3',
    options: {
      appearDelay: 0.5,
      fadeDelay: 20,
      images: '/images/pushup/',
      header: 'Outdated browser version detected.',
      message: 'This browser version is not supported.<br />You might experience problems when viewing this site.',
      linkText: 'Please click here to upgrade to the latest version.',
      reminder: {
        hours: 1,
        message: 'Remind me again in #{hours}'
      }
    },
    activeBrowser: null,
    updateLinks: {
      IE: 'http://www.microsoft.com/windows/downloads/ie/',
      Firefox: 'http://www.getfirefox.com',
      Safari: 'http://www.apple.com/safari/download/',
      Opera: 'http://www.opera.com/download/'
    },
    browsVer: {
      Firefox: (navigator.userAgent.indexOf('Firefox') > -1) ? parseFloat(navigator.userAgent.match(/Firefox[\/\s](\d+)/)[1]) : false,
      IE: ($.browser.msie) ? parseFloat($.browser.version) : false,
      Safari: ($.browser.safari) ? parseFloat($.browser.version) : false,
      Opera: ($.browser.opera) ? parseFloat($.browser.version) : false
    },
    browsers: {
      Firefox: 3,
      IE: 7,
      Opera: 9.5,
      Safari: 3
    },
    init: function() {
      $.each($.pushup.browsVer, function(i, browserVersion) {
        if (browserVersion && browserVersion < $.pushup.browsers[i]) {
          $.pushup.activeBrowser = i;
          if (!$.pushup.options.ignoreReminder && $.pushup.cookiesEnabled && Cookie.get('_pushupBlocked')) {
            return;
          } else {
            var time = ($.pushup.options.appearDelay !== undefined) ? $.pushup.options.appearDelay * 1000 : 0;
            setTimeout($.pushup.show, time);
          }
        }
      });
    },
    show: function() {
      var $elm, $icon, $header, $message, $textLink, $messageLink, hours, H, messageText, $hourElem, imgSrc, srcFol, image, styles, time;
      $elm = $(document.createElement('div'))
		        .attr('id', 'pushup')
		        .hide()
		        .appendTo('body');
      $messageLink = $(document.createElement('a'))
		        .addClass('pushup_messageLink')
		        .attr('target', '_blank')
		        .attr("href", $.pushup.updateLinks[$.pushup.activeBrowser])
		        .appendTo($elm);
      $icon = $(document.createElement('span'))
		        .addClass('pushup_icon')
		        .appendTo($messageLink);
      $message = $(document.createElement('span'))
		        .addClass('pushup_header')
		        .html($.pushup.options.header)
		        .appendTo($messageLink);
      $(document.createElement('br')).appendTo($messageLink);
      $message = $(document.createElement('span'))
		        .addClass('pushup_message')
		        .html($.pushup.options.message)
		        .appendTo($messageLink);
      $(document.createElement('br')).appendTo($messageLink);
      $textLink = $(document.createElement('span'))
		        .addClass('pushup_linkText')
		        .html($.pushup.options.linkText)
		        .appendTo($messageLink);
      $(document.createElement('br')).appendTo($messageLink);

      hours = $.pushup.options.reminder.hours;
      if (hours && $.pushup.cookiesEnabled) {
        H = hours + ' hour' + (hours > 1 ? 's' : '');
        messageText = $.pushup.options.reminder.message.replace('#{hours}', H);
        $hourElem = $(document.createElement('a'))
			        .attr('href', '#')
			        .addClass('pushup_reminder')
			        .html(messageText);
        $elm.append($hourElem);
        $hourElem.click(function(event) {
          $.pushup.setReminder($.pushup.options.reminder.hours);
          $.pushup.hide();

          event.preventDefault();
        });
      }
      if (/^(https?:\/\/|\/)/.test($.pushup.options.images)) {
        imgSrc = $.pushup.options.images;
      } else {
        $('script[src]').each(function(i, elem) {
          var $elem = $(elem);
          if (/jquery\.pushup/.test($elem.attr('src'))) {
            srcFol = $elem.attr('src').replace('jquery.pushup.js', '');
            imgSrc = srcFol + $.pushup.options.images;
          }
        });
      }
      image = imgSrc + $.pushup.activeBrowser.toLowerCase();
      styles = ($.pushup.browsVer.IE < 7 && $.pushup.browsVer.IE) ? {
        filter: 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + image + '.png\'\', sizingMethod=\'crop\')'
} : {
  background: 'url(' + image + '.png) no-repeat top left'
};

        $icon.css(styles);
        $elm.fadeIn('slow');

        if ($.pushup.options.fadeDelay !== undefined) {
          time = $.pushup.options.fadeDelay * 1000;
          setTimeout($.pushup.hide, time);
        }
      },
      hide: function() {
        $('#pushup').fadeOut('slow');
      },
      setReminder: function(hours) {
        Cookie.set('_pushupBlocked', 'blocked', { duration: 1 / 24 * hours });
      },
      resetReminder: function() {
        Cookie.remove('_pushupBlocked');
      }
    };

    $.pushup.cookiesEnabled = (function(test) {
      if (Cookie.get(test)) {
        return true;
      }
      Cookie.set(test, 'test', { duration: 15 });
      return Cookie.get(test);
    } ('_pushupCookiesEnabled'));
    $(function() {
      $.pushup.init();
    });
  } (jQuery));
