// used by Social::Buttons to build social links

var scheme = document.location.href.match(/https/) ? 'https' : 'http';

var head = document.getElementsByTagName('head')[0];

// BEGIN overloadable
// overload this if needed with a modal (say)
function openShareWindow(shareUrl){
    shareWin = window.open(
                   shareUrl,
                   'sharewin',
                   'width=640,height=370,toolbar=0,location=0,directories=0,status=0,menubar=0'
               ); 
    shareWin.focus();
}
// END overloadable

function socialButton(args) {
    this.url            = args.url || document.location.href;
    this.urlEsc         = escape(args.url);
    this.title          = args['title'] || '';
    this.titleEsc       = escape(this.title);
    this.description    = args['description'] || ''; 
    // strip html replace(/<(?:.|\n)*?>/g,'')
    this.description    = this.description.replace(/<(?:.|\n)*?>/g,'');
    this.descriptionEsc = escape(this.description);
    this.linkId         = args.linkId;
    this.linkClass      = args.linkClass;
    this.iconImgDir     = args.iconImgDir || '/media/images/social';
    this.thumbImg       = args.thumbImg || '';
    this.thumbImgEsc    = escape(args.thumbImg);
    this.shareLink      = socialButtonsBuildShareLink;
    return this;
}

function wrapSocialButton(buttonHtml){
    return '<div class="social-button-wrapper">' + buttonHtml + '</div>';
}

function socialButtonsBuildShareLink(args) {
    var linkUrl   = args.url || this.url;
    var linkClass = args.linkClass
                    ? " class='"+linkClass+"'" : '';
    var linkId    = args.linkId
                    ? " id='"+linkId+"'" : '';
    var linkHtml  = args.linkHtml;
               
    var out = "<a"+linkClass+linkId+" href='#' onclick='openShareWindow(\""+linkUrl+"\");'>"+linkHtml+'</a>';
    return wrapSocialButton(out);
}


function socialButtonStumbleUpon(args) {
    var sb = socialButton(args);
    var title = escape(args.title) || '';

    var suUrl = scheme+'://www.stumbleupon.com/submit?url='+encodeURIComponent(sb.url)+'title='+title;

    var linkHtml = args.linkHtml || '<img src="'+sb.iconImgDir+'/stumbleupon_16x16.gif" alt="Share with StumbleUpon" style="width:16px;height:16px;border:0;"/>';
    return sb.shareLink({ 
                url: suUrl, 
                linkHtml: linkHtml 
            });
}

function socialButtonMyspace(args) {
    var sb = socialButton(args);
    var title = escape(args.title) || '';

    var myspaceUrl = scheme+'://www.myspace.com/Modules/PostTo/Pages/?t='+title+'&u='+encodeURIComponent(sb.url);

    var linkHtml = args.linkHtml || '<img src="'+sb.iconImgDir+'/myspace_16x16.gif" alt="Share on Myspace" style="width:16px;height:16px;border:0;"/>';
    return sb.shareLink({ 
                url: myspaceUrl, 
                linkHtml: linkHtml 
            });
}

function socialButtonDigg(args) {
    var sb = socialButton(args);
    var diggUrl = "http://digg.com/submit?url="+sb.urlEsc+"&title="+sb.titleEsc;
    var linkHtml = args.linkHtml || '<img src="'+sb.iconImgDir+'/digg_16x16.gif" alt="Digg This"/>';
    return sb.shareLink({ 
                url: diggUrl, 
                linkHtml: linkHtml 
            });
}

{
//   twiiter does have much functionality in the way of customizing, sso reverting to manual
//    var twitterJsServed=0;
    function socialButtonTweet(args) {
        var sb = socialButton(args);
        var tweet = args.tweet || '!!!';
        var url   = args.url || '';
//        var size = args.size || 'medium';
//        if (!twitterJsServed++) {
//            serveJs(scheme+'://platform.twitter.com/widgets.js');
//        }
		var tweeturl = scheme + '://twitter.com/share?text='+encodeURI(tweet);
        if (url) {
            tweeturl = tweeturl+'&url='+url;
        }
        var out = '<a id="tweet-button" href="'+ tweeturl +'" target="_blank"><img src="/media/images/social/twitter_18x18.png"/></a>';

        //var out = '<span style="display:inline-block;"><a href="'+scheme+'://twitter.com/share" class="twitter-share-button" data-count="none" data-size="'+size+'" data-url="'+sb.url+'" data-text="'+tweet+'">Tweet</a></span>';
        return wrapSocialButton(out);
    }
}

function socialButtonFbShare(args) {
    var sb = socialButton(args);

    var linkHtml = args.linkHtml || '<img id="fb-share-img" src="'+sb.iconImgDir+'/fb_18x18.gif" alt="Share on Facebook" style="width:18px;height:18px;border:0;"/>';
    var fbShareUrl = 'https://www.facebook.com/sharer/sharer.php?'+
                    'p[images][0]='+sb.thumbImgEsc+
                    '&p[url]='+sb.urlEsc+
                    '&p[summary]='+sb.description+
                    '&p[title]='+sb.titleEsc+
                    '&s=100';
    return sb.shareLink({ 
                url: fbShareUrl, 
                linkHtml: linkHtml 
            });
}

function socialButtonFbShareMobile(args) {
    var sb = socialButton(args);

    var linkHtml = args.linkHtml || '<img id="fb-share-img" src="'+sb.iconImgDir+'/fb_18x18.gif" alt="Share on Facebook" style="width:18px;height:18px;border:0;"/>';
    var fbShareUrl = 'http://m.facebook.com/sharer.php?u='+sb.urlEsc;

    return sb.shareLink({ 
                url: fbShareUrl, 
                linkHtml: linkHtml 
            });
}

{
    fbJsServed=0;

    function socialButtonFbLike(args) {
        if (!args) { args ={} }
        var sb = socialButton(args);
        var layout        = args.layout      || 'button_count';
        var showFaces     = args.showFaces   || 'false';
        var send          = args.send        || 'false';
        var colorScheme   = args.colorScheme || 'light';
        var width         = args.width       || '120';
        var font          = args.font        || 'Verdana';

        if (!fbJsServed++) {
            serveJs(scheme+'://connect.facebook.net/en_US/all.js#xfbml=1');
        }

        insertFbRootDivIfMissing();

        var out = '<div class="fb-like" style="float:left" data-href="'+sb.url+'" data-send="'+send+'" data-layout="'+layout+'" data-width="'+width+'" data-show-faces="'+showFaces+'" data-colorscheme="'+colorScheme+'" data-font="'+font+'"></fb:like></div>';
        return wrapSocialButton(out);
    }

    function socialButtonFbSend(args) {
        var sb = socialButton(args);
        var fbSendUrl = args.url;
        var font = args.font || 'arial';

        if (!fbJsServed++) {
            serveJs(scheme+'://connect.facebook.net/en_US/all.js#xfbml=1');
        }

        insertFbRootDivIfMissing();

        var out = '<div id="fb-root" style="display:none"></div><div class="fb-send" style="float:left" data-href="'+fbSendUrl+'" data-font="'+font+'"></div>';
        return wrapSocialButton(out);
    }
    function insertFbRootDivIfMissing() {
        if (!document.getElementById('fb-root')){
            var d = document.createElement('div');
            d.id = 'fb-root';
            d.style.display = 'none';
            document.body.appendChild(d);
        }
    }

}

{
    var gplusJsServed=0;

    function socialButtonGooglePlus(args) {
        var sb         = socialButton(args);
        var size       = args.size       || 'small';
        var width      = args.width      || '120';
        var annotation = args.annotation || 'none';

        var out='';
        if (!gplusJsServed++) {
            serveJs(scheme+'://apis.google.com/js/plusone.js');
            out = '<script type="text/javascript"> {parsetags: "explicit"} <\/script>';
        }

        out = out + '<div class="g-plusone" data-size="'+size+'" data-annotation="'+annotation+'" data-width="'+width+'" data-href="'+sb.url+'"></div><script type="text/javascript">gapi.plusone.go();<\/script>';

        return wrapSocialButton(out);
   }
}

function serveJs(url) {
    var script = document.createElement('script');
    script.type= 'text/javascript';
    script.src= url;
    head.appendChild(script);
}

