/*
    name : socialLinkedAccounts
    file : jquery.socialLinkedAccounts.js
    author : gregory tomlinson
    copyright: (c) 2010 bit.ly
    Dual licensed under the MIT and GPL licenses.
    ///////////////////////////
    ///////////////////////////
    dependencies : jQuery 1.4.2, jquery.cookie.js
    ///////////////////////////
    ///////////////////////////
    
    This plugin draws the HTML that is used in the account page and the bento box options,
    
    it has lots of events and it connects to the server to save preferences

*/

(function() {
    
    $.fn.socialLinkedAccounts = function(accounts,  options ) {
        // extend the defaults settings
        var el = this, o = $.extend(true, defaults, options);
        
        action_share_settings();
        attach_events();
        el.trigger('shareAccounts', { 'accounts' : accounts } );
        el.slideDown('normal');
        
        return this;
        
        
        function attach_events() {
            el.find('.toggleThisLinkedAccountButton').bind('click', toggleLinkedAccountEvent)
            
            el.find('.addTwitterAccount').bind('click', function(e) {
                e.preventDefault();
                el.trigger('track', { 'plugin:socialLinkedAccounts' : 'Add Twitter Account' } );       
                el.trigger('addTwitterViaOAuth', { 'share_text' : '' });
            });
            
            el.find('.addFacebookAccount').bind('click', function(e) {
                e.preventDefault();
                el.trigger('track', { 'plugin:socialLinkedAccounts' : 'Add Facebook Account'});
                el.trigger('addFacebookViaConnect', {'share_text' : ''});
                
            });
            
            el.find('.deleteThisLinkedAccountButton').bind('click', function(e) {
                e.preventDefault();
                var i=0, $this = $(this), $p = $this.parents('.linked_account_item'), type = $p.attr('type'), account = $p.attr('account'), params = {};
                
                params = $.extend(true, {}, o.delete_twitter_params );
                params.account_login = $.trim( account );
                params.account_type = $.trim( type );
                connector(o.remove_share_account_url, params, function(jo) {
                    if(jo.status_code !== 200) {
                        console.log('ERROR: Unable to delete that account')
                        
                        el.trigger('errorMessage', {
                            text : 'Unable remove that account at this time: ' + account
                        });
                        return;
                    }
                    var pos = -1;
                    for(; i<accounts.length; i++) {
                        if(accounts[i].account_type === params.account_type
                            && accounts[i].account_login === params.account_login) {
                                pos = i;
                            }
                    }
                    
                    if(pos > -1) accounts.splice(pos,1);
                    
                    var lis = $p.parent().find('.linked_account_item');
                    el.trigger('shareAccounts', { 'accounts' : accounts } );

                    
                    $p.slideUp('normal', function() {
                        $p.remove();
                    })
                    
                })
            
            })
        }

        
        function action_share_settings() {
            
            //if(el.find('.shortenShareSettingsBox').length > 0 ) return;
            
            var fb_accounts = 0, tweet_accounts = 0, twitter_html = "", facebook_html = "", html = "", account_html="", account = null;
            
            for(var i=0; i<accounts.length; i++) {
                account = accounts[i];
                account_html = '';
                account_html += '<div class="linked_account_item" type="'+account.account_type+'" account="'+account.account_login+'">'
                    account_html += '<img class="activeAccount" width="17" height="17" alt="" src="/s/graphics/'+ account.account_type+ (account.primary ? "-on" : "-off") + '.png" />'
                    account_html +=  '<span>' + $.escapeHTML(account.account_name || account.account_login) + '</span>'
                    account_html += ' <a href="#" class="toggleThisLinkedAccountButton"'
                        account_html += ' account_login="' + $.escapeHTML(account.account_login) + '"'
                        account_html += ' account_type="' + $.escapeHTML(account.account_type) + '"'
                        account_html += ' account_primary="' + (account.primary ? 'true' : 'false') + '"'
                        account_html += ' >' + (account.primary ? 'Sharing on' : 'Sharing off') + '</a>'
                    account_html += ' - <a href="#" class="deleteThisLinkedAccountButton" >Remove</a>'
                account_html += '</div>'
                
                if (account.account_type === 'twitter'){
                    twitter_html += account_html;
                } else if (account.account_type === 'facebook') {
                    facebook_html += account_html;
                }
            }
            
                html += '<div class="shortenShareSettingsBox">'
                    html += '<h3 class="bentoBoxOptionsShareHeadline">Services</h3>'
                    if (twitter_html || facebook_html ) {
                        html += '<p>Share your links on:</p>'
                        html += twitter_html + facebook_html;
                    }
                    html += '<div class="addAdditionalLinkedAccountsBentoBox">';
                            html += 'Add Account: '
                            html += '<a class="addTwitterAccount" href="#">'
                                // html += '<img alt="" width="17" height="17" src="/s/graphics/twitter-on.png" />'
                            html += ' Twitter</a> ı '
                            html += '<a class="addFacebookAccount" href="#">'
                                // html += '<img alt="" width="17" height="17" src="/s/graphics/facebook-on.png" />'
                            html += ' Facebook</a> '
                    html += '</div>'
                html += '</div>'
            
            var $html = $(html).appendTo(el);
            
            return;
        }
        
        function toggleLinkedAccountEvent(e,data) {
            e.preventDefault();
            var $this = $(this),
                 account_type = $.trim( $this.attr('account_type') ),
                 account_login = $.trim( $this.attr('account_login') );
                 account_primary = $this.attr('account_primary') == 'true';
                 $this.html(account_primary ? 'Sharing off' : 'Sharing on');
                 $this.attr('account_primary', '' + (!account_primary))
             // update the icon
             var img = $this.parent('.linked_account_item').find('.activeAccount')[0]
             if (account_primary) { 
                 img.src = img.src.replace('-on','-off');
             } else {
                 img.src = img.src.replace('-off','-on');
             }
             var params = {
                 'account_type' : account_type,
                 'account_login' : account_login,
                 'enabled' : account_primary ? 0 : 1
             }
             connector(o.share_settings_url, params, function(jo) {
                 for(var i=0; i<accounts.length; i++ ) {
                     if( accounts[i].login === jo.data.login
                         && accounts[i].account_type === jo.data.account_type
                         && accounts[i].account_login === jo.data.account_login ) {
                             accounts[i].primary = jo.data.primary
                     }
                 }
                 el.trigger('shareAccounts', { 'accounts' : accounts || [] })
             })
            
            el.trigger('track', { 'plugin:socialLinkedAccounts' : 'Account enabled check box: ' + account_primary  } )
        }
    
    }
    
    function connector( url, params, callback, error ) {
        params._xsrf = $.cookie.get('_xsrf');
        var str = $.param( params );
        $.ajax({
            dataType: 'json',
            data : str,
            type:'POST',
            'url' : url,
            success: callback,
            'error' : error
        });
    }
    
    function connector_cherrypy(url, params, callback, error) {
        // in cherrypy _xsrf is called token
        params.token = $.cookie.get('_xsrf');
        var str = $.param( params );
        $.ajax({
            dataType: 'json', // jsonp
            'url' : url,
            data : str,
            type : 'POST',
            success : callback,
            'error' : error
        });
    }
    
    var defaults = {
        remove_share_account_url : '/data/remove_share_account',
        share_settings_url : '/data/toggle_share_account',
        messageClearInterval : 5000,
        check_twitter_params : {
            twitter_username : '',
            twitter_password : ''
        },
        delete_twitter_params : {
            account_login: null,
            account_type : null
        }
    };

})(jQuery);
