/* ------------------------------------------------------------------------
	prettySociable plugin.
	Version: 1.0.1
	Description: Include this plugin in your webpage and let people
	share your content like never before.
	Website: http://no-margin-for-errors.com/projects/prettySociable/
	
	Thank You: 
	Chris Wallace, for the nice icons
	http://www.chris-wallace.com/2009/05/28/free-social-media-icons-socialize/
------------------------------------------------------------------------- */

(function($) {
    $.prettySociable = { version: 1.0 }; $.prettySociable = function(settings) {
        $.prettySociable.settings = jQuery.extend({ animationSpeed: 'fast', opacity: 0.90, share_label: 'Drag to share', share_on_label: 'Share on ', hideflash: false, hover_padding: 0, bitly_api: '', bitly_user: '', websites: { facebook: { 'active': true, 'encode': true, 'title': 'Facebook', 'url': 'http://www.facebook.com/share.php?u=', 'icon': '/images/prettySociable/large_icons/facebook.png', 'sizes': { 'width': 70, 'height': 70} }, twitter: { 'active': true, 'encode': true, 'title': 'Twitter', 'url': 'http://twitter.com/home?status=', 'icon': '/images/prettySociable/large_icons/twitter.png', 'sizes': { 'width': 70, 'height': 70} }, delicious: { 'active': true, 'encode': true, 'title': 'Delicious', 'url': 'http://del.icio.us/post?url=', 'icon': '/images/prettySociable/large_icons/delicious.png', 'sizes': { 'width': 70, 'height': 70} }, digg: { 'active': true, 'encode': true, 'title': 'Digg', 'url': 'http://digg.com/submit?phase=2&url=', 'icon': '/images/prettySociable/large_icons/digg.png', 'sizes': { 'width': 70, 'height': 70} }, linkedin: { 'active': true, 'encode': true, 'title': 'LinkedIn', 'url': 'http://www.linkedin.com/shareArticle?mini=true&ro=true&url=', 'icon': '/images/prettySociable/large_icons/linkedin.png', 'sizes': { 'width': 70, 'height': 70} }, reddit: { 'active': true, 'encode': true, 'title': 'Reddit', 'url': 'http://reddit.com/submit?url=', 'icon': '/images/prettySociable/large_icons/reddit.png', 'sizes': { 'width': 70, 'height': 70} }, stumbleupon: { 'active': true, 'encode': false, 'title': 'StumbleUpon', 'url': 'http://stumbleupon.com/submit?url=', 'icon': '/images/prettySociable/large_icons/stumbleupon.png', 'sizes': { 'width': 70, 'height': 70} }, tumblr: { 'active': true, 'encode': true, 'title': 'tumblr', 'url': 'http://www.tumblr.com/share?v=3&u=', 'icon': '/images/prettySociable/large_icons/tumblr.png', 'sizes': { 'width': 70, 'height': 70}} }, tooltip: { offsetTop: 0, offsetLeft: 15 }, popup: { width: 900, height: 500 }, callback: function() { } }, settings); var websites, settings = $.prettySociable.settings, show_timer, ps_hover; $.each(settings.websites, function(i) { var preload = new Image(); preload.src = this.icon; }); $('a[rel^=prettySociable]').hover(function() {
            _self = this; $(this).css({ 'cursor': 'move', 'position': 'relative', 'z-index': 1005 }); ps_hover = $('<div id="ps_hover"> \
        <div class="ps_hd"> \
         <div class="ps_c"></div> \
        </div> \
        <div class="ps_bd"> \
         <div class="ps_c"> \
          <div class="ps_s"> \
          </div> \
         </div> \
        </div> \
        <div class="ps_ft"> \
         <div class="ps_c"></div> \
        </div> \
        <div id="ps_title"> \
         <div class="ps_tt_l"> \
          ' + settings.share_label + ' \
         </div> \
        </div> \
       </div>').css({ 'width': $(this).width() + (settings.hover_padding + 8) * 2, 'top': $(this).position().top - settings.hover_padding - 8 + parseFloat($(this).css('marginTop')), 'left': $(this).position().left - settings.hover_padding - 8 + parseFloat($(this).css('marginLeft')) }).hide().insertAfter(_self).fadeIn(settings.animationSpeed); $(ps_hover).find('>.ps_bd .ps_s').height($(_self).height() + settings.hover_padding * 2); fixCrappyBrowser('ps_hover', this); DragHandler.attach($(this)[0]); $(this)[0].dragBegin = function(e) { _self = this; show_timer = window.setTimeout(function() { $(_self).animate({ 'opacity': 0 }, settings.animationSpeed); $(ps_hover).remove(); overlay.show(); tooltip.show(_self); tooltip.follow(e.mouseX, e.mouseY); sharing.show(); }, 200); }; $(this)[0].drag = function(e) { tooltip.follow(e.mouseX, e.mouseY); }; $(this)[0].dragEnd = function(element, x, y) { $(this).attr('style', 0); overlay.hide(); tooltip.checkCollision(element.mouseX, element.mouseY); };
        }, function() { $(ps_hover).fadeOut(settings.animationSpeed, function() { $(this).remove() }); }).click(function() { clearTimeout(show_timer); }); var tooltip = { show: function(caller) {
            tooltip.link_to_share = ($(caller).attr('href') != "#") ? $(caller).attr('href') : location.href; attributes = $(caller).attr('rel').split(';'); for (var i = 1; i < attributes.length; i++) { attributes[i] = attributes[i].split(':'); }; description = ($('meta[name=Description]').attr('content')) ? $('meta[name=Description]').attr('content') : ""; if (attributes.length == 1) { attributes[1] = ['title', document.title]; attributes[2] = ['excerpt', description]; } ps_tooltip = $('<div id="ps_tooltip"> \
         <div class="ps_hd"> \
          <div class="ps_c"></div> \
         </div> \
         <div class="ps_bd"> \
          <div class="ps_c"> \
           <div class="ps_s"> \
           </div> \
          </div> \
         </div> \
         <div class="ps_ft"> \
          <div class="ps_c"></div> \
         </div> \
            </div>').appendTo('body'); $(ps_tooltip).find('.ps_s').html("<p><strong>" + attributes[1][1] + "</strong><br />" + attributes[2][1] + "</p>"); fixCrappyBrowser('ps_tooltip');
        }, checkCollision: function(x, y) { collision = ""; scrollPos = _getScroll(); $.each(websites, function(i) { if ((x + scrollPos.scrollLeft > $(this).offset().left && x + scrollPos.scrollLeft < $(this).offset().left + $(this).width()) && (y + scrollPos.scrollTop > $(this).offset().top && y + scrollPos.scrollTop < $(this).offset().top + $(this).height())) { collision = $(this).find('a'); } }); if (collision != "") { $(collision).click(); } sharing.hide(); $('#ps_tooltip').remove(); }, follow: function(x, y) { scrollPos = _getScroll(); settings.tooltip.offsetTop = (settings.tooltip.offsetTop) ? settings.tooltip.offsetTop : 0; settings.tooltip.offsetLeft = (settings.tooltip.offsetLeft) ? settings.tooltip.offsetLeft : 0; $('#ps_tooltip').css({ 'top': y + settings.tooltip.offsetTop + scrollPos.scrollTop, 'left': x + settings.tooltip.offsetLeft + scrollPos.scrollLeft }); } 
        }; var sharing = { show: function() {
            websites_container = $('<ul />'); $.each(settings.websites, function(i) {
                var _self = this; if (_self.active) {
                    link = $('<a />').attr({ 'href': '#' }).html('<img src="' + _self.icon + '" alt="' + _self.title + '" width="' + _self.sizes.width + '" height="' + _self.sizes.height + '" />').hover(function() { sharing.showTitle(_self.title, $(this).width(), $(this).position().left, $(this).height(), $(this).position().top); }, function() { sharing.hideTitle(); }).click(function() {
                        shareURL = (_self.encode) ? encodeURIComponent(tooltip.link_to_share) : tooltip.link_to_share; if (settings.bitly_api != '' && settings.bitly_user != '') {
                            var defaults = { version: '2.0.1', login: settings.bitly_user, apiKey: settings.bitly_api, history: '0', longUrl: shareURL }; var daurl = "http://api.bit.ly/shorten?" + "version=" + defaults.version
+ "&longUrl=" + defaults.longUrl
+ "&login=" + defaults.login
+ "&apiKey=" + defaults.apiKey
+ "&history=" + defaults.history
+ "&format=json&callback=?"; var url = unescape(defaults.longUrl); $.getJSON(daurl, function(d) { console.log((url)); var bitly = d.results[url].shortUrl; popup = window.open(_self.url + bitly, "prettySociable", "location=0,status=0,scrollbars=1,width=" + settings.popup.width + ",height=" + settings.popup.height); });
                        } else { popup = window.open(_self.url + shareURL, "prettySociable", "location=0,status=0,scrollbars=1,width=" + settings.popup.width + ",height=" + settings.popup.height); } 
                    }); $('<li>').append(link).appendTo(websites_container);
                };
            }); $('<div id="ps_websites"><p class="ps_label"></p></div>').append(websites_container).appendTo('body'); fixCrappyBrowser('ps_websites'); scrollPos = _getScroll(); $('#ps_websites').css({ 'top': $(window).height() / 2 - $('#ps_websites').height() / 2 + scrollPos.scrollTop, 'left': $(window).width() / 2 - $('#ps_websites').width() / 2 + scrollPos.scrollLeft }); websites = $.makeArray($('#ps_websites li'));
        }, hide: function() { $('#ps_websites').fadeOut(settings.animationSpeed, function() { $(this).remove() }); }, showTitle: function(title, width, left, height, top) { $label = $('#ps_websites .ps_label'); $label.text(settings.share_on_label + title); $label.css({ 'left': left - $label.width() / 2 + width / 2, 'opacity': 0, 'display': 'block' }).stop().animate({ 'opacity': 1, 'top': top - height + 45 }, settings.animationSpeed); }, hideTitle: function() { $('#ps_websites .ps_label').stop().animate({ 'opacity': 0, 'top': 10 }, settings.animationSpeed); } 
        }; var overlay = { show: function() { $('<div id="ps_overlay" />').css('opacity', 0).appendTo('body').height($(document).height()).fadeTo(settings.animationSpeed, settings.opacity); }, hide: function() { $('#ps_overlay').fadeOut(settings.animationSpeed, function() { $(this).remove(); }); } }; var DragHandler = { _oElem: null, attach: function(oElem) { oElem.onmousedown = DragHandler._dragBegin; oElem.dragBegin = new Function(); oElem.drag = new Function(); oElem.dragEnd = new Function(); return oElem; }, _dragBegin: function(e) { var oElem = DragHandler._oElem = this; if (isNaN(parseInt(oElem.style.left))) { oElem.style.left = '0px'; } if (isNaN(parseInt(oElem.style.top))) { oElem.style.top = '0px'; } var x = parseInt(oElem.style.left); var y = parseInt(oElem.style.top); e = e ? e : window.event; oElem.mouseX = e.clientX; oElem.mouseY = e.clientY; oElem.dragBegin(oElem, x, y); document.onmousemove = DragHandler._drag; document.onmouseup = DragHandler._dragEnd; return false; }, _drag: function(e) { var oElem = DragHandler._oElem; var x = parseInt(oElem.style.left); var y = parseInt(oElem.style.top); e = e ? e : window.event; oElem.style.left = x + (e.clientX - oElem.mouseX) + 'px'; oElem.style.top = y + (e.clientY - oElem.mouseY) + 'px'; oElem.mouseX = e.clientX; oElem.mouseY = e.clientY; oElem.drag(oElem, x, y); return false; }, _dragEnd: function() { var oElem = DragHandler._oElem; var x = parseInt(oElem.style.left); var y = parseInt(oElem.style.top); oElem.dragEnd(oElem, x, y); document.onmousemove = null; document.onmouseup = null; DragHandler._oElem = null; } }; function _getScroll() { if (self.pageYOffset) { scrollTop = self.pageYOffset; scrollLeft = self.pageXOffset; } else if (document.documentElement && document.documentElement.scrollTop) { scrollTop = document.documentElement.scrollTop; scrollLeft = document.documentElement.scrollLeft; } else if (document.body) { scrollTop = document.body.scrollTop; scrollLeft = document.body.scrollLeft; } return { scrollTop: scrollTop, scrollLeft: scrollLeft }; }; function fixCrappyBrowser(element, caller) { if ($.browser.msie && $.browser.version == 6) { if (typeof DD_belatedPNG != 'undefined') { if (element == 'ps_websites') { $('#' + element + ' img').each(function() { DD_belatedPNG.fixPng($(this)[0]); }); } else { DD_belatedPNG.fixPng($('#' + element + ' .ps_hd .ps_c')[0]); DD_belatedPNG.fixPng($('#' + element + ' .ps_hd')[0]); DD_belatedPNG.fixPng($('#' + element + ' .ps_bd .ps_c')[0]); DD_belatedPNG.fixPng($('#' + element + ' .ps_bd')[0]); DD_belatedPNG.fixPng($('#' + element + ' .ps_ft .ps_c')[0]); DD_belatedPNG.fixPng($('#' + element + ' .ps_ft')[0]); } }; }; } 
    };
})(jQuery);