
/*
 * SocialBar
 * Version: 1.0 2011-12-15
 */

jQuery.SocialBar = function(sites, settings) {
	var bar = ($('#social-bar').size()===0)?$('<div id="social-bar"><div class="content"></div><div class="tabs"></div></div>').appendTo('body'):$('#social-bar'),
		tabs = bar.find('div.tabs'),
		content = bar.find('div.content'),
		timer,

		getFrame = function(key, url) {
			switch(key) {
				case 'facebook':
					return '<iframe src="http://www.facebook.com/plugins/likebox.php?href='+url+'&amp;width=240&amp;height=270&amp;colorscheme=light&amp;show_faces=true&amp;border_color=white&amp;stream=false&amp;header=false" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:240px; height:270px; background: #FFF" allowTransparency="true"></iframe>';
				break;
				default:
					return url;
				break;
			}
		},
		defaultSettings = {
			animateDuration: 800,
			animateEasing: ['easeInOutQuint', 'easeOutBounce'],
			width: 260
		},
		settings = $.extend({}, defaultSettings, settings);

	$.each(sites, function(key, value) {
		$('<div/>').addClass(key).appendTo(tabs);
		$('<div/>').addClass(key).html(getFrame(key, value)).appendTo(content);
	});

	content.find('div:not(:first)').hide();

	tabs.find('div').on('mouseenter click', function() {
		content.find('.'+$(this).attr('class')).show().siblings().hide();
	});

	bar.on('mouseenter mouseleave click', function(e) {
		if(e.type === 'mouseenter' || e.type === 'click') {
			clearTimeout(timer);
			bar.stop().animate({
				left: 0
			}, {
				duration: settings.animateDuration,
				queue: false,
				easing: settings.animateEasing[0]
			});
		} else {
			clearTimeout(timer);
			timer = setTimeout(function() {
				bar.stop().animate({
					left: -settings.width
				}, {
					duration: settings.animateDuration,
					queue: false,
					easing: settings.animateEasing[1]
				});
			}, 500);
			
		}
	});	
};


/*
 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
 * Uses the built in easing capabilities added In jQuery 1.1
 * to offer multiple easing options
 * TERMS OF USE - jQuery Easing
 * Open source under the BSD License. 
 * Copyright © 2008 George McGinley Smith
 * All rights reserved.
 *
*/
jQuery.easing['jswing'] = jQuery.easing['swing'];

jQuery.extend( jQuery.easing,
{
	def: 'easeOutQuad',
	swing:            function (x, t, b, c, d) {return jQuery.easing[jQuery.easing.def](x, t, b, c, d); },
	easeInQuad:       function (x, t, b, c, d) {return c*(t/=d)*t + b; },
	easeOutQuad:      function (x, t, b, c, d) {return -c *(t/=d)*(t-2) + b; },
	easeInOutQuad:    function (x, t, b, c, d) {if ((t/=d/2) < 1) return c/2*t*t + b; return -c/2 * ((--t)*(t-2) - 1) + b; },
	easeInCubic:      function (x, t, b, c, d) {return c*(t/=d)*t*t + b; },
	easeOutCubic:     function (x, t, b, c, d) {return c*((t=t/d-1)*t*t + 1) + b; },
	easeInOutCubic:   function (x, t, b, c, d) {if ((t/=d/2) < 1) return c/2*t*t*t + b; return c/2*((t-=2)*t*t + 2) + b; },
	easeInQuart:      function (x, t, b, c, d) {return c*(t/=d)*t*t*t + b; },
	easeOutQuart:     function (x, t, b, c, d) {return -c * ((t=t/d-1)*t*t*t - 1) + b; },
	easeInOutQuart:   function (x, t, b, c, d) {if ((t/=d/2) < 1) return c/2*t*t*t*t + b; return -c/2 * ((t-=2)*t*t*t - 2) + b; },
	easeInQuint:      function (x, t, b, c, d) {return c*(t/=d)*t*t*t*t + b; },
	easeOutQuint:     function (x, t, b, c, d) {return c*((t=t/d-1)*t*t*t*t + 1) + b; },
	easeInOutQuint:   function (x, t, b, c, d) {if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; return c/2*((t-=2)*t*t*t*t + 2) + b; },
	easeInSine:       function (x, t, b, c, d) {return -c * Math.cos(t/d * (Math.PI/2)) + c + b; },
	easeOutSine:      function (x, t, b, c, d) {return c * Math.sin(t/d * (Math.PI/2)) + b; },
	easeInOutSine:    function (x, t, b, c, d) {return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; },
	easeInExpo:       function (x, t, b, c, d) {return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; },
	easeOutExpo:      function (x, t, b, c, d) {return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; },
	easeInOutExpo:    function (x, t, b, c, d) {if (t==0) return b; if (t==d) return b+c; if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; },
	easeInCirc:       function (x, t, b, c, d) {return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; },
	easeOutCirc:      function (x, t, b, c, d) {return c * Math.sqrt(1 - (t=t/d-1)*t) + b; },
	easeInOutCirc:    function (x, t, b, c, d) {if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; },
	easeInElastic:    function (x, t, b, c, d) {var s=1.70158;var p=0;var a=c; if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3; if (a < Math.abs(c)) { a=c; var s=p/4; } else var s = p/(2*Math.PI) * Math.asin (c/a); return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; },
	easeOutElastic:   function (x, t, b, c, d) {var s=1.70158;var p=0;var a=c; if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3; if (a < Math.abs(c)) { a=c; var s=p/4; } else var s = p/(2*Math.PI) * Math.asin (c/a); return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; },
	easeInOutElastic: function (x, t, b, c, d) {var s=1.70158;var p=0;var a=c; if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5); if (a < Math.abs(c)) { a=c; var s=p/4; } else var s = p/(2*Math.PI) * Math.asin (c/a); if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; },
	easeInBack:       function (x, t, b, c, d, s) {if (s == undefined) s = 1.70158; return c*(t/=d)*t*((s+1)*t - s) + b; },
	easeOutBack:      function (x, t, b, c, d, s) {if (s == undefined) s = 1.70158; return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; },
	easeInOutBack:    function (x, t, b, c, d, s) {if (s == undefined) s = 1.70158; if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; },
	easeInBounce:     function (x, t, b, c, d) {return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b; },
	easeOutBounce:    function (x, t, b, c, d) {if ((t/=d) < (1/2.75)) {return c*(7.5625*t*t) + b; } else if (t < (2/2.75)) {return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; } else if (t < (2.5/2.75)) {return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; } else {return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; } },
	easeInOutBounce:  function (x, t, b, c, d) {if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; }
});
