/*
* jReject (jQuery Browser Rejection Plugin)
* Version 0.6-Beta
* URL: http://jreject.turnwheel.com/
* Description: jReject gives you a customizable and easy solution to reject/allowing specific browsers access to your pages
* Author: Steven Bower (TurnWheel Designs) http://turnwheel.com/
* Copyright: Copyright (c) 2009 Steven Bower under dual MIT/GPL license.
* Depends On: jQuery Browser Plugin (http://jquery.thewikies.com/browser)
*/
(function($) {
$.reject = function(opts) {
var opts = $.extend(true,{
reject : { // Rejection flags for specific browsers
all: false, // Covers Everything (Nothing blocked)
msie5: true,msie6: true // Covers MSIE 5-6 (Blocked by default)
/*
Possibilities are endless...
msie: false,msie5: true,msie6: true,msie7: false,msie8: false, // MSIE Flags (Global, 5-8)
firefox: false,firefox1: false,firefox2: false,firefox3: false, // Firefox Flags (Global, 1-3)
konqueror: false,konqueror1: false,konqueror2: false,konqueror3: false, // Konqueror Flags (Global, 1-3)
chrome: false,chrome1: false,chrome2: false,chrome3: false,chrome4: false, // Chrome Flags (Global, 1-4)
safari: false,safari2: false,safari3: false,safari4: false, // Safari Flags (Global, 1-4)
opera: false,opera7: false,opera8: false,opera9: false,opera10: false, // Opera Flags (Global, 7-10)
gecko: false,webkit: false,trident: false,khtml: false,presto: false, // Rendering Engines (Gecko, Webkit, Trident, KHTML, Presto)
win: false,mac: false,linux : false,solaris : false,iphone: false, // Operating Systems (Win, Mac, Linux, Solaris, iPhone)
unknown: false, // Unknown covers everything else
*/
},
display: [], // What browsers to display and their order
browserInfo: { // Settings for which browsers to display
firefox: {
text: 'Firefox 3.5+', // Text below the icon
url: 'http://www.mozilla.com/firefox/' // URL For icon/text link
},
safari: {
text: 'Safari 3+',
url: 'http://www.apple.com/safari/download/'
},
opera: {
text: 'Opera 9+',
url: 'http://www.opera.com/download/'
},
chrome: {
text: 'Chrome 2+',
url: 'http://www.google.com/chrome/'
},
msie: {
text: 'Internet Explorer 7+',
url: 'http://www.microsoft.com/windows/Internet-explorer/default.aspx'
},
gcf: {
text: 'Google Chrome Frame',
url: 'http://code.google.com/chrome/chromeframe/',
allow: { all: false, msie: true }
}
},
header: 'Did you know that your Internet Browser is out of date?', // Header of pop-up window
paragraph1: 'Your browser is out of date, and may not be compatible with our website. A list of the most popular web browsers can be found below.', // Paragraph 1
paragraph2: 'Just click on the icons to get to the download page', // Paragraph 2
close: true, // Allow closing of window
closeMessage: 'By closing this window you acknowledge that your experience on this website may be degraded', // Message displayed below closing link
closeLink: 'Close This Window', // Text for closing link
closeURL: '#', // Close URL (Defaults '#')
closeESC: true, // Allow closing of window with esc key
closeCookie: false, // If cookies should be used to remmember if the window was closed (applies to current session only)
imagePath: '/images/', // Path where images are located
overlayBgColor: '#000', // Background color for overlay
overlayOpacity: 0.8, // Background transparency (0-1)
fadeOutTime: 'fast' // Fade out time on close ('slow','medium','fast' or integer in ms)
},opts);
if ($.isFunction(opts.beforeReject)) opts.beforeReject(opts); // Customized Function
// This function parses the advanced browser options
var browserCheck = function(settings) {
// Check 1: Look for 'all' forced setting
// Check 2: Operating System (eg. 'win','mac','linux','solaris','iphone')
// Check 3: Rendering engine (eg. 'webkit', 'gecko', 'trident')
// Check 4: Browser name (eg. 'firefox','msie','chrome')
// Check 5: Browser+major version (eg. 'firefox3','msie7','chrome4')
return (settings['all'] ? true : false) ||
(settings[$.os.name] ? true : false) ||
(settings[$.layout.name] ? true : false) ||
(settings[$.browser.name] ? true : false) ||
(settings[$.browser.className] ? true : false);
};
// Determine if we need to display for this browser
if (browserCheck(opts.reject)) {
// If user can close and set to remmember close,
// Initiate cookie function
if (opts.close && opts.closeCookie) {
var COOKIE_NAME = 'jreject-close'; // Local global setting for the name of the cookie used
/*
* Cookies Function handles creating/retrieving/deleting cookies
* Cookies are only used for opts.closeCookie parameter functionality
*/
var _cookie = function(name, value) {
if (typeof value != 'undefined') document.cookie = name+'='+encodeURIComponent(value === null ? '' : value);
else { // Get cookie value
var cookie,val = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; ++i) {
cookie = $.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
val = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return val;
}
};
if (_cookie(COOKIE_NAME) != null) return false;
}
// Load background overlay + Main wrapper +
// Inner Wrapper w/ opts.header +
// opts.paragraph1/opts.paragraph2 if set
var html = '
'+
(opts.paragraph1 === '' ? '' : '
'+opts.paragraph1+'
')+(opts.paragraph2 === '' ? '' : '
'+opts.paragraph2+'
')+'
';
// Set default browsers to display
if (opts.display.length < 1) opts.display = ['firefox','chrome','msie','safari','opera','gcf'];
// Generate the browsers to display
var displayNum = 0;
for (var x in opts.display) {
var browser = opts.display[x]; // Current Browser
var info = opts.browserInfo[browser] || false; // Browser Information
// If no info exists for this browser
// or if this browser is not suppose to display to this user
if (!info || (info['allow'] != undefined && !browserCheck(info['allow']))) continue;
html += ' ';
++displayNum;
}
// Close list and #jr_list
html += '
'+ // Display close links/message if set
'
'; // Close #jr_inner and #jr_wrap
// This function handles closing this reject window
var _closeReject = function() { // When clicked, fadeOut and remove all elements
if (!opts.close) return false; // Make sure the ability to close is set
if ($.isFunction(opts.beforeClose)) opts.beforeClose(opts); // Customized Function
$('#jr_overlay,#jr_wrap').fadeOut(opts.fadeOutTime,function() {
$(this).remove();
if ($.isFunction(opts.afterClose)) opts.afterClose(opts); // Customized Function
});
$('embed, object, select, applet').show(); // Show elements that were hidden
if (opts.closeCookie) _cookie(COOKIE_NAME,'true');
if (opts.closeURL === '#') return false; // If plain anchor is set, return false so there is no page jump
};
var element = $(''+html+'
'); // Create element
var size = _pageSize(); // Get page size
var scroll = _scrollSize(); // Get page scroll
// Traverse through the DOM and
// Apply CSS Rules to elements
element.find('#jr_overlay').css({ // Creates 'background' (div)
width: size[0],
height: size[1],
position: 'absolute',
top: 0,
left: 0,
background: opts.overlayBgColor,
zIndex: 200,
opacity: opts.overlayOpacity,
padding: 0,
margin: 0
}).next('#jr_wrap').css({ // Wrapper for our pop-up (div)
position: 'absolute',
width: '100%',
top: scroll[1]+(size[3]/4),
left: scroll[0],
zIndex: 300,
textAlign: 'center',
padding: 0,
margin: 0
}).children('#jr_inner').css({ // Wrapper for inner centered content (div)
background: '#FFF',
border: '1px solid #CCC',
fontFamily: '"Lucida Grande","Lucida Sans Unicode",Arial,Verdana,sans-serif',
color: '#4F4F4F',
margin: '0 auto',
position: 'relative',
height: 'auto',
minWidth: displayNum*100,
maxWidth: displayNum*140,
width: $.layout.name == 'trident' ? displayNum*155 : 'auto', // min/maxWidth not supported by IE
padding: 20,
fontSize: 12
}).children('#jr_header').css({ // Header (h1)
display: 'block',
fontSize: '1.3em',
marginBottom: '0.5em',
color: '#333',
fontFamily: 'Helvetica,Arial,sans-serif',
fontWeight: 'bold',
textAlign: 'left',
padding: 5,
margin: 0
}).nextAll('p').css({ // Paragraphs (p)
textAlign: 'left',
padding: 5,
margin: 0
}).siblings('ul').css({ // Browser list (ul)
listStyleImage: 'none',
listStylePosition: 'outside',
listStyleType: 'none',
margin: 0,
padding: 0
}).children('li').css({ // Browser list items (li)
background: 'transparent url("'+opts.imagePath+'background_browser.gif") no-repeat scroll left top',
cusor: 'pointer',
float: 'left',
width: 120,
height: 122,
margin: '0 10px 10px 10px',
padding: 0,
textAlign: 'center'
}).children('div.jr_icon').css({ // Icons (div)
width: 100,
height: 100,
margin: '1px auto',
padding: 0,
background: 'transparent no-repeat scroll left top'
}).each(function() { // Dynamically sets the icon background image
var self = $(this);
self.css('background','transparent url("'+opts.imagePath+'browser_'+(self.parent('li').attr('id').replace(/jr_/,''))+'.gif") no-repeat scroll left top');
}).siblings('div').css({ // Text under the browser icon (div)
color: '#808080',
fontSize: '0.8em',
height: 18,
lineHeight: '17px',
margin: '1px auto',
padding: 0,
width: 118,
textAlign: 'center'
}).children('a').css({
color: '#333',
textDecoration: 'none',
padding: 0,
margin: 0
}).hover(function() { // Underline effect
$(this).css('textDecoration','underline');
},function() {
$(this).css('textDecoration','none');
}).click(function() { // Make links open in new window
window.open($(this).attr('href'),'_new');
return false;
}).parents('#jr_inner').children('#jr_close').css({ // Close window option (div)
margin: '0 0 0 50px',
clear: 'both',
textAlign: 'left',
padding: 0,
margin: 0
}).children('a').css({ // Close window link (a)
color: '#000',
display: 'block',
width: 'auto',
margin: 0,
padding: 0,
textDecoration: 'underline'
}).click(_closeReject).nextAll('p').css({
padding: '10px 0 0 0',
margin: 0
});
// Hide elements that won't display properly
$('embed, object, select, applet').hide();
// Append element to body of document to display
$('body').append(element);
// Handle window resize/scroll events and update overlay dimensions
$(window).bind('resize scroll',function() {
var size = _pageSize(); // Get size
// Update overlay dimensions based on page size
$('#jr_overlay').css({ width: size[0],height: size[1] });
var scroll = _scrollSize(); // Get page scroll
// Update modal position based on scroll
$('#jr_wrap').css({ top: scroll[1] + (size[3]/4),left: scroll[0] });
});
// Add optional ESC Key functionality
if (opts.close && opts.closeESC) {
$(document).keydown(function(event) { if (event.keyCode == 27) _closeReject(); });
}
if ($.isFunction(opts.afterReject)) opts.afterReject(opts); // Customized Function
return true;
}
else {
if ($.isFunction(opts.onFail)) opts.onFail(opts); // Customized Function
return false;
}
};
/*
Based on compatibility data from quirksmode.com
*/
var _pageSize = function() {
var xScroll = window.innerWidth && window.scrollMaxX ? window.innerWidth + window.scrollMaxX :
(document.body.scrollWidth > document.body.offsetWidth ?
document.body.scrollWidth : document.body.offsetWidth);
var yScroll = window.innerHeight && window.scrollMaxY ? window.innerHeight + window.scrollMaxY :
(document.body.scrollHeight > document.body.offsetHeight ?
document.body.scrollHeight : document.body.offsetHeight);
var windowWidth = window.innerWidth ? window.innerWidth :
(document.documentElement && document.documentElement.clientWidth ?
document.documentElement.clientWidth : document.body.clientWidth);
var windowHeight = window.innerHeight ? window.innerHeight :
(document.documentElement && document.documentElement.clientHeight ?
document.documentElement.clientHeight : document.body.clientHeight);
return [
xScroll < windowWidth ? xScroll : windowWidth, // Page Width
yScroll < windowHeight ? windowHeight : yScroll, // Page Height
windowWidth,windowHeight
];
};
/*
Based on compatibility data from quirksmode.com
*/
var _scrollSize = function() {
return [
// scrollSize X
window.pageXOffset ? window.pageXOffset : (document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollLeft : document.body.scrollLeft),
// scrollSize Y
window.pageYOffset ? window.pageYOffset : (document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop)
];
};
})(jQuery);
/*
* jQuery Browser Plugin
* Version 2.3
* 2008-09-17 19:27:05
* URL: http://jquery.thewikies.com/browser
* Description: jQuery Browser Plugin extends browser detection capabilities and can assign browser selectors to CSS classes.
* Author: Nate Cavanaugh, Minhchau Dang, & Jonathan Neal
* Copyright: Copyright (c) 2008 Jonathan Neal under dual MIT/GPL license.
*/
(function($){$.browserTest=function(a,z){var u='unknown',x='X',m=function(r,h){for(var i=0;i400){r.version='2.0';}if(r.name==='presto'){r.version=($.browser.version>9.27)?'futhark':'linear_b';}r.versionNumber=parseFloat(r.version,10)||0;r.versionX=(r.version!==x)?(r.version+'').substr(0,1):x;r.className=r.name+r.versionX;return r;};a=(a.match(/Opera|Navigator|Minefield|KHTML|Chrome/)?m(a,[[/(Firefox|MSIE|KHTML,\slike\sGecko|Konqueror)/,''],['Chrome Safari','Chrome'],['KHTML','Konqueror'],['Minefield','Firefox'],['Navigator','Netscape']]):a).toLowerCase();$.browser=$.extend((!z)?$.browser:{},c(a,/(camino|chrome|firefox|netscape|konqueror|lynx|msie|opera|safari)/,[],/(camino|chrome|firefox|netscape|netscape6|opera|version|konqueror|lynx|msie|safari)(\/|\s)([a-z0-9\.\+]*?)(\;|dev|rel|\s|$)/));$.layout=c(a,/(gecko|konqueror|msie|opera|webkit)/,[['konqueror','khtml'],['msie','trident'],['opera','presto']],/(applewebkit|rv|konqueror|msie)(\:|\/|\s)([a-z0-9\.]*?)(\;|\)|\s)/);$.os={name:(/(win|mac|linux|sunos|solaris|iphone)/.exec(navigator.platform.toLowerCase())||[u])[0].replace('sunos','solaris')};if(!z){$('html').addClass([$.os.name,$.browser.name,$.browser.className,$.layout.name,$.layout.className].join(' '));}};$.browserTest(navigator.userAgent);})(jQuery);