/* 
 * Social Sharing Script 
 * Load social button asynchronously and count social engagement via Google Analytics
 * author: Elie Bursztein (socialsharing@elie.im)
 * version: 0.1
 * Revision: Sept 2011
 * Licence: GPL v3
 * URL: http://elie.im
 */


          page = document.location.href;
        
            //loading script
            function asyncLoader(src, tag){
                //alert("loading " + src);
                var po = document.createElement('script'); 
                po.type = 'text/javascript'; 
                po.async = true;
                po.src = src;
                var s = document.getElementsByTagName(tag)[0];
                s.appendChild(po);
                //parentNode.insertBefore(po, s);
            }
   
   
            //stumbleupon hardcore version (No way around this :()
            function loadStumbleUponAsync() {
                //adding the div
                var div = document.getElementById('stumbleupon-button');
                if (div != null) {
                    var po = document.createElement('script'); 
                    po.type = 'text/javascript'; 
                    po.async = true;
                    po.src = "http://www.stumbleupon.com/hostedbadge.php?s=1&a=1&d=stumbleupon-button"; //a=1 ?? &r=http://elie.im ??
                    div.appendChild(po);
                }  
            }
            
            
            asyncLoader('http://platform.twitter.com/widgets.js', 'head'); //Twitter
            asyncLoader('https://apis.google.com/js/plusone.js', 'head'); //Google
            asyncLoader('http://platform.linkedin.com/in.js', 'head'); //Linkedin
            asyncLoader('http://connect.facebook.net/en_US/all.js#xfbml=1', 'head'); //facebook
            //Utility function
            function extractParamFromUri(uri, paramName) {
                if (!uri) {
                    return;
                }
                var uri = uri.split('#')[0];  // Remove anchor.
                var parts = uri.split('?');  // Check for query params.
                if (parts.length == 1) {
                    return;
                }
                var query = decodeURI(parts[1]);

                // Find url param.
                paramName += '=';
                var params = query.split('&');
                for (var i = 0, param; param = params[i]; ++i) {
                    if (param.indexOf(paramName) === 0) {
                        return unescape(param.split('=')[1]);
                    }
                }
            }
         
            //main counting function
            function shared(network, socialAction, opt_target) {
                //alert(network + ":" + socialAction);
                _gaq.push(['_trackSocial', network, socialAction, opt_target]); //social tracking
                _gaq.push(['_trackEvent', 'Share', network, socialAction]); //event tracking
            
            }

            function googlePlusShared(data){ shared("Google", "+1", page);} //google
            function shareLinkedin(){shared('LinkedIn', 'Share', page);}    //linkedin
            //Hook to measure social engagement. Loaded after all the javascript are loaded#
            function hookButtons() {               
                //binding functions to the right
                
                loadStumbleUponAsync();
                
                //Facebook
                FB.Event.subscribe('edge.create', function(targetUrl) {shared('Facebook', 'Like', targetUrl);});    //Like
                FB.Event.subscribe('edge.remove', function(targetUrl) {shared('Facebook', 'Unlike', targetUrl);});  //Unlike
                FB.Event.subscribe('message.send', function(targetUrl) {shared('Facebook', 'Send', targetUrl);});  //Send
                //Twitter
                twttr.events.bind('tweet', function(event) {
                    if (event) {
                        var targetUrl;
                        if (event.target && event.target.nodeName == 'IFRAME') {
                            targetUrl = extractParamFromUri(event.target.src, 'url');
                        }
                        shared('Twitter', 'Tweet', targetUrl);
                    }
                });
                //bind to each Linkedin Button
                elts = document.getElementsByClassName("IN-widget");
                for (i = 0; i < elts.length; i++) {
                    elts[i].setAttribute("onclick", "shareLinkedin()")
                }
                
                //reddit (broken sorry)
                //asyncLoader("http://www.reddit.com/static/button/button1.js", 'su:share');
                
            }
      
            //are we ready to hook 
            if ( window.addEventListener ) { 
                window.addEventListener( "load", hookButtons, false );
            }
            else 
                if ( window.attachEvent ) { 
                    window.attachEvent( "onload", hookButtons );
                } else 
                if ( window.onLoad ) {
                    window.onload = hookButtons;
                }

