/* ------------------------------------------------------------------------
* prettySociable plugin.
* Version: 1.2.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.21
    };
    $.prettySociable = function(settings) {
        $.prettySociable.settings = jQuery.extend({
            animationSpeed: 'fast',
            opacity: 0.90,
            share_label: 'Share This Page',
            label_position: 'top',
            share_on_label: 'Share on ',
            hideflash: false,
            hover_padding: 0,
            websites: {
                facebook: {
                    'active': true,
                    'encode': true,
                    'title': 'Facebook',
                    'url': 'http://www.facebook.com/share.php?u=http://www.cascadeaids.org/wp-content/themes/CAP/js/jquery.prettySociable.js.php',
                    'icon': '/wp-content/themes/CAP/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': '/wp-content/themes/CAP/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': '/wp-content/themes/CAP/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': '/wp-content/themes/CAP/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': '/wp-content/themes/CAP/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': '/wp-content/themes/CAP/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': '/wp-content/themes/CAP/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': '/wp-content/themes/CAP/images/prettySociable/large_icons/tumblr.png',
                    'sizes': {
                        'width': 70,
                        'height': 70
                    }
                }
            },
            urlshortener: {
                bitly: {
                    'active': false
                }
            },
            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;
            _container = this;
            if ($(_self).find('img').size() > 0) {
                _self = $(_self).find('img');
            } else if ($.browser.msie) {
                if ($(_self).find('embed').size() > 0) {
                    _self = $(_self).find('embed');
                    $(_self).css({
                        'display': 'block'
                    });
                }
            } else {
                if ($(_self).find('object').size() > 0) {
                    _self = $(_self).find('object');
                    $(_self).css({
                        'display': 'block'
                    });
                }
            }
            $(_self).css({
                'cursor': 'move',
                'position': 'relative',
                'z-index': 1005
            });
            offsetLeft = (parseFloat($(_self).css('borderLeftWidth'))) ? parseFloat($(_self).css('borderLeftWidth')) : 0;
            offsetTop = (parseFloat($(_self).css('borderTopWidth'))) ? parseFloat($(_self).css('borderTopWidth')) : 0;
            offsetLeft += (parseFloat($(_self).css('paddingLeft'))) ? parseFloat($(_self).css('paddingLeft')) : 0;
            offsetTop += (parseFloat($(_self).css('paddingTop'))) ? parseFloat($(_self).css('paddingTop')) : 0;
            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': $(_self).width() + (settings.hover_padding + 8) * 2,
                'top': $(_self).position().top - settings.hover_padding - 8 + parseFloat($(_self).css('marginTop')) + offsetTop,
                'left': $(_self).position().left - settings.hover_padding - 8 + parseFloat($(_self).css('marginLeft')) + offsetLeft
            }).hide().insertAfter(_container).fadeIn(settings.animationSpeed);
            $('#ps_title').animate({
                top: -15
            }, 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() {
                    $('object,embed').css('visibility', 'hidden');
                    $(_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) {
                $('object,embed').css('visibility', 'visible');
                $(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;
                if (settings.urlshortener.bitly.active) {
                    if (window.BitlyCB) {
                        BitlyCB.myShortenCallback = function(data) {
                            var result;
                            for (var r in data.results) {
                                result = data.results[r];
                                result['longUrl'] = r;
                                break;
                            };
                            tooltip.link_to_share = result['shortUrl'];
                        };
                        BitlyClient.shorten(tooltip.link_to_share, 'BitlyCB.myShortenCallback');
                    };
                };
                attributes = $(caller).attr('rel').split(';');
                for (var i = 1; i < attributes.length; i++) {
                    attributes[i] = attributes[i].split(':');
                };
                desc = ($('meta[name=Description]').attr('content')) ? $('meta[name=Description]').attr('content') : "";
                if (attributes.length == 1) {
                    attributes[1] = ['title', document.title];
                    attributes[2] = ['excerpt', desc];
                }
                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;
                            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);

