/* 
 * Original Copyright
 * 
 * Pushup
 * Copyright (c) 2008 Nick Stakenburg (www.nickstakenburg.com)
 *
 * License: MIT-style license.
 * Website: http://www.pushuptheweb.com
 *
 */

/* 
 * Modified for mooTools by Tim van den Eijnden (moopushup.timwebdesign.nl / www.kinkyconcepts.nl)
*/

var pushup = new Class({
	
	Implements: [Options],
	
	
	Version: '1.0.2',
	options: {
		appearDelay: 0.5,
		fadeDelay: 10,	
		images: '/image/pushup/',
		stylesheet: 'css/pushup.css',
		message: 'U maakt gebruik van een verouderde versie van uw browser',
		reminder: {
			hours: 2,
			message: 'Herinner mij nogmaals over #{hours}'
		},
		skip: false
	},
	updateLinks: {
		IE: 'http://www.microsoft.com/windows/internet-explorer/',
		Firefox: 'http://www.getfirefox.com',
		Safari: 'http://www.apple.com/safari/download/',
		Opera: 'http://www.opera.com/download/'
	},

	Browser: {
	  IE: !!(window.attachEvent &&
	    navigator.userAgent.indexOf('Opera') === -1),
	  Firefox: navigator.userAgent.indexOf('Firefox') > -1,
	  Safari: navigator.userAgent.indexOf('AppleWebKit/') > -1 &&
	    /Apple/.test(navigator.vendor),
	  Opera: navigator.userAgent.indexOf('Opera') > -1
	},
		

	


	initialize: function(options) {
	
		
		this.CSS = new Element('link',{'href': this.options.stylesheet,'rel' : 'stylesheet', 'type' : 'text/css', 'media' : 'screen'}).inject($(document.head));
		
		
		
		this.conditions = {
		  IE: (function(agent) {
		    var version = /MSIE ([\d.]+)/.exec(agent);
		    return version && parseFloat(version[1]) < 8;
		  })(navigator.userAgent),
		  Firefox: this.Browser.Firefox &&
		    parseFloat(navigator.userAgent.match(/Firefox[\/\s](\d+)/)[1]) < 3,
		  Safari: this.Browser.Safari &&
		    parseFloat(navigator.userAgent.match(/AppleWebKit\/(\d+)/)[1]) < 500,
		  Opera: this.Browser.Opera && (!window.opera.version ||
		    parseFloat(window.opera.version()) < 9.5)
		}
		
		
		for (var browser in this.Browser)		
			if (this.Browser[browser]){
				this._browserUsed = browser;
				this._updateBrowser = this.conditions[this._browserUsed] && this._browserUsed;
			}
			 
		if (this._updateBrowser && !this.options.skip && Cookie.get('_pushupBlocked') != 'blocked') this.show(this._browserUsed);		
	
	},
	
	show: function() {		
		if($('pushup')) $('pushup').destroy();
		this.browser = typeof arguments[0] == 'string' ? arguments[0] : this.browserUsed || this._browserUsed;
		elm = $(document.createElement('div'));		
		elm.set('id','pushup');
		elm.inject($(document.body));
		$('pushup').fade('hide')
		icon = $(document.createElement('div')).addClass('pushup_icon');
		message = $(document.createElement('span')).addClass('pushup_message');
		this.messageLink = $(document.createElement('a')).addClass('pushup_messageLink').set('target', '_blank');
		this.messageLink.inject($('pushup'))
		icon.inject(this.messageLink);
		message.inject(this.messageLink);
		$$('.pushup_message').set('html',this.options.message);				
		var hours = this.options.reminder.hours;
		if (hours && this.cookiesEnabled) {
			var H = hours + ' hour' + (hours > 1 ? 's' : '');
			message = this.options.reminder.message.replace('#{hours}', H);
			hourelem = $(document.createElement('a')).set('href', '#').addClass('pushup_reminder').set('html',message);			
			hourelem.inject($('pushup'))
			
			$$('.pushup_reminder').addEvent('click',function() {
				this.setReminder(this.options.reminder.hours);
				this.hide();
				return false;
			}.bind(this))
		}
		this.setPngBackground(this.icon, this.images + this.browser.toLowerCase() + '.png');
		this.messageLink.href = this.updateLinks[this.browser];
		$('pushup').fade('in');;
		if(this.options.fadeDelay != undefined) {
			time = this.options.fadeDelay * 1000;
			this.hide.delay(time);
		}
	},
	
	setPngBackground: function()
	{
		if(/^http\:\/\//.test(this.options.images) || /^\//.test(this.options.images)) {
			this.images = this.options.images;
		} else {			
			var srcMatch = /pushup(?:-[\w\d.]+)?\.js(.*)/;
			scripts = document.getElementsByTagName('script');
			for (var i = 0, l = scripts.length; i < l; i++) {
				var s = scripts[i];
				if (s.src && s.src.match(srcMatch)){
					this.images = s.src.replace(srcMatch, '') + this.options.images;						
				}				
			}
		}
		styles = (this.Browser.IE && parseFloat(/MSIE ([\d.]+)/.exec(navigator.userAgent)[1]) < 7) ? {
			filter: 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' +
		      this.images+this.browser.toLowerCase()  + '.png\'\', sizingMethod=\'crop\')'
		} : {
			background: 'url('+this.images+this.browser.toLowerCase()+'.png) no-repeat top left'
		}
		$$('.pushup_icon').setStyles(styles);
	},
	
	hide: function() { $('pushup').fade('out'); },
	setReminder: function(hours) {
		Cookie.set('_pushupBlocked', 'blocked', { duration: 1 / 24 * hours })
	},
	resetReminder: function() { Cookie.remove('_pushupBlocked') },
	
	cookiesEnabled: function(test) {
	  if (Cookie.get(test)) return true;
	  Cookie.set(test, 'test', { duration: 15 });
	  return Cookie.get(test);
	}
	
})




// 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 mooPushup;

window.addEvent('domready',function(){
	mooPushup = new pushup();
})
