﻿/* February 20, 2012
socialBar v1.1 - a jQuery plugin by Website Setup dot net
no CSS sheet required - configure using plugin parameters
____________________________________________________________*/
(function ($) {
	$.fn.socialbar = function (options) {
		var settings = {
			icons:			['Facebook', 'Twitter', 'Google+', 'LinkedIn', 'Myspace', 'Digg', 'StumbleUpon', 'Delicious', 'email'],
			icon_path:		'/ajax/jquery/plugins/socialbar/social_icons/',
			icon_size:		32,
			icon_margin:	2,
			edge:			'left',
			fixed:			true,
			flip:			false,
			offset:			50,
			hide:			0.55,
			delay_close:	500,
			opacity_open:	1,
			opacity_closed:	0.65,
			speed_open:		250,
			speed_closed:	500,
			easing_open:	'linear',
			easing_closed:	'linear',
			padding:		4,
			corners:		6,
			background:		'#ccc',
			border:			true,
			border_width:	1,
			border_color:	'#666',
			qtip:			true,
			qtip_tip:		12,
			qtip_classes:	'ui-tooltip-dark ui-tooltip-rounded ui-tooltip-shadow'
		};
		if (options) {
			settings = $.extend(settings, options);
		};
		var url			= window.location.href,
			host		= window.location.hostname,
			docTitle	= escape(document.title);
		var elements = {};
		elements['Facebook']	= ['http://www.facebook.com/sharer.php?u=' + url, 'facebook.png'];
		elements['Myspace']		= ['http://www.myspace.com/Modules/PostTo/Pages/?t=' + docTitle + '&amp;c=&amp;u=' + url + '&amp;l=', 'myspace.png'];
		elements['Twitter']		= ['http://twitter.com/home?status=' + docTitle + '%20' + url, 'twitter.png'];
		elements['Digg']		= ['http://digg.com/submit?phase=2&url=' + url + '&amp;title=' + docTitle, 'digg.png'];
		elements['StumbleUpon']	= ['http://stumbleupon.com/submit?url=' + url + '&amp;title=' + docTitle, 'stumbleupon.png'];
		elements['Google Buzz']	= ['http://www.google.com/reader/link?url=' + url + '&amp;title=' + docTitle + '&amp;srcURL=' + host, 'buzz.png'];
		elements['Delicious']	= ['http://del.icio.us/post?url=' + url + '&amp;title=' + docTitle, 'delicious.png'];
		elements['LinkedIn']	= ['http://www.linkedin.com/shareArticle?mini=true&url=' + url + '&amp;title=' + docTitle + '&amp;source=' + host, 'linkedin.png'];
		elements['Myspace']		= ['http://www.myspace.com/Modules/PostTo/Pages/?t=' + docTitle + '&amp;c=&amp;u=' + url + '&amp;l=', 'myspace.png'];
		elements['email']		= ['mailto:?subject=' + docTitle + '&amp;body=' + docTitle + '%0d%0d' + url, 'email.png'];
		elements['Reddit']		= ['http://reddit.com/submit?url=' + url + '&amp;title=' + docTitle, 'reddit.png'];
		elements['Google+']		= ['https://m.google.com/app/plus/x/?v=compose&content=' + url, 'google.png'];
	    this.append('<div id="socialbar" style="display:none"></div>');
		$.each(settings.icons, function (i) {
			$('#socialbar').append(
				'<div><a href="' + elements[settings.icons[i]][0] + '" target="_share">'
					+ '<img src="' + settings.icon_path + elements[settings.icons[i]][1] + '" title="Share this page via ' + settings.icons[i] + '" alt="" border="0" />'
					+ '</a></div>'
			);
		});
		settings.fixed	= (settings.fixed) ? 'fixed' : 'absolute';
		settings.border = (settings.border) ? 'solid' : 'none';
		var w			= settings.border_width + 'px',
			breadth		= settings.icon_size + (settings.icon_margin * 2),
			p_breadth	= breadth + (settings.padding * 2) + settings.border_width,
			swing		= '-' + (p_breadth * settings.hide) + 'px',
			orientation = {};
		orientation['left'] = [{
			'left':									swing,
			'border-top-right-radius':				settings.corners + 'px',
			'border-bottom-right-radius':			settings.corners + 'px',
			'-webkit-border-top-right-radius':		settings.corners + 'px',
			'-webkit-border-bottom-right-radius':	settings.corners + 'px',
			'-moz-border-radius-topright':			settings.corners + 'px',
			'-moz-border-radius-bottomright':		settings.corners + 'px',
			'border-width':							w + '  ' + w + ' ' + w + ' 0',
			'width':								breadth + 'px'
		}, {
			'top':									settings.offset + 'px'
		}, {
			'bottom':								settings.offset + 'px'
		}];
		orientation['right'] = [{
			'right':								swing,
			'border-top-left-radius':				settings.corners + 'px',
			'border-bottom-left-radius':			settings.corners + 'px',
			'-webkit-border-top-left-radius':		settings.corners + 'px',
			'-webkit-border-bottom-left-radius':	settings.corners + 'px',
			'-moz-border-radius-topleft':			settings.corners + 'px',
			'-moz-border-radius-bottomleft':		settings.corners + 'px',
			'border-width':							w + ' 0 ' + w + ' ' + w,
			'width':								breadth + 'px'
		},
			orientation['left'][1],
			orientation['left'][2]
		];
		orientation['bottom'] = [{
			'bottom':								swing,
			'border-top-left-radius':				settings.corners + 'px',
			'border-top-right-radius':				settings.corners + 'px',
			'-webkit-border-top-left-radius':		settings.corners + 'px',
			'-webkit-border-top-right-radius':		settings.corners + 'px',
			'-moz-border-radius-topleft':			settings.corners + 'px',
			'-moz-border-radius-topright':			settings.corners + 'px',
			'border-width':							w  + ' ' + w + ' 0',
			'height':								breadth + 'px'
		}, {
			'left':									settings.offset + 'px'
		}, {
			'right':								settings.offset + 'px'
		}];
		orientation['top'] = [{
			'top':									swing,
			'border-bottom-left-radius':			settings.corners + 'px',
			'border-bottom-right-radius':			settings.corners + 'px',
			'-webkit-border-bottom-left-radius':	settings.corners + 'px',
			'-webkit-border-bottom-right-radius':	settings.corners + 'px',
			'-moz-border-radius-bottomleft':		settings.corners + 'px',
			'-moz-border-radius-bottomright':		settings.corners + 'px',
			'border-width':							'0 ' + w + ' ' + w,
			'height':								breadth + 'px'
		},
			orientation['bottom'][1],
			orientation['bottom'][2]
		];
		var animation = {};
		animation['left'] = [
			{left: '0', opacity: settings.opacity_open},
			{left: swing, opacity: settings.opacity_closed}
		];
		animation['right'] = [
			{right: '0', opacity: settings.opacity_open},
			{right: swing, opacity: settings.opacity_closed}
		];
		animation['bottom'] = [
			{bottom: '0', opacity: settings.opacity_open},
			{bottom: swing, opacity: settings.opacity_closed}
		];
		animation['top'] = [
			{top: '0', opacity: settings.opacity_open},
			{top: swing, opacity: settings.opacity_closed}
		];
		$('#socialbar').css(orientation[settings.edge][0]);
		settings.flip = (settings.flip) ? orientation[settings.edge][2] : orientation[settings.edge][1];
		$('#socialbar').css(settings.flip);
		$('#socialbar').hover(
			function () {
				$(this).stop(true,false).animate(animation[settings.edge][0], settings.speed_open, settings.easing_open);
			},
			function () {
				$(this).delay(settings.delay_close).animate(animation[settings.edge][1], settings.speed_closed, settings.easing_closed);
			}
		);
		$('#socialbar').css({
			'overflow':			'hidden',
			'margin':			0,
			'padding':			settings.padding + 'px',
			'z-index':			14999,
			'background-color':	settings.background,
			'border-color':		settings.border_color,
			'border-style':		settings.border,
			'position':			settings.fixed
		});
		$('#socialbar div').css({
			'float':			'left',
			'width':			settings.icon_size + 'px',
			'height':			settings.icon_size + 'px',
			'margin':			settings.icon_margin + 'px',
			'padding':			0
		});
		$('#socialbar a').css({
			'width':			settings.icon_size + 'px',
			'height':			settings.icon_size + 'px',
			'margin':			0,
			'padding':			0
		});
		$('img').load(function () {
			$('#socialbar').css({'display': 'block', 'opacity': settings.opacity_closed});
		});
		if (jQuery().qtip && (settings.qtip)) {
			var qtipPos = {};
			qtipPos['left']		= ['right', 'left'];
			qtipPos['right']	= ['left', 'right'];
			qtipPos['top']		= ['bottom', 'top'];
			qtipPos['bottom']	= ['top', 'bottom'];
			$('#socialbar img[title]').qtip({
				position: {
					at: qtipPos[settings.edge][0] + ' center',
					my: qtipPos[settings.edge][1] + ' center',
					viewport: $(window)
				},
				show: {
					delay: settings.speed_open + 150
				},
				style: {
					tip:   {
						width:	settings.qtip_tip,
						height:	settings.qtip_tip
					},
					classes: settings.qtip_classes
				}
			});
		};
	};
})(jQuery);
