/*
    
    name: bentoBoxOptions
    file: jquery.bentoBoxOptions.js
    author: gregory tomlinson
    copyright: (c) 2010 gregory tomlinson | gregory.tomlinson@gmail.com
    Dual licensed under the MIT and GPL licenses.
    ////////////////////////////////////
    ////////////////////////////////////
    dependencies: jQuery 1.4.2
    ////////////////////////////////////
    ////////////////////////////////////    
    
    Powers the 'options' drop down and appends the 'options' items to the end of the bento box        

*/

(function($){
    
    $.fn.bentoBoxOptions = function( options ) {

        var el=this, o = $.extend(true, {}, defaults, options ),
            listItemsDropDownBox, shortenUrls=[], shortenedItemListOpen = false;
            
        setTimeout(function() {
            el.trigger('shareAccounts', { 'accounts' : o.accounts || [] })            
        }, 50)


        // visual design complexity requires this.. ideally would be attaching to el direclty, but design is rendered via js... though it could be display:none...
        $('<div class="bentoBoxOptions"></div>').appendTo(el);
        
        el.find('.bentoBoxOptions').html( render_options_open_button() );        
        
        var actions = el.find('.shortenOptionsTopLevel');
        actions.toggle(function(e) {
            e.preventDefault();
            var $this = $(this);
            $this.removeClass('bentoOptionsClosed').addClass('bentoOptionsOpen');
            initiate_options_boxes();
            el.trigger('track', { 'plugin:bentoBoxOptions' : 'shortenPageOption: open bento box options button' } )                        
            
        }, function(e){
            e.preventDefault();
            var items = el.find('.bentoBoxOptionsItem'), $this = $(this);
            $this.addClass('bentoOptionsClosed').removeClass('bentoOptionsOpen');            
            items.slideUp('fast', function() {
                $(this).remove();
            });
            
            el.trigger('track', { 'plugin:bentoBoxOptions' : 'shortenPageOption: close bento box options button' } )                
                    
        });
        
        el.bind('refreshLinkedAccountsView', function(e,data) {
            initiate_options_boxes();            
        })
        
        /*
            Externally triggered Event
        */
        el.bind('openOptions', function(e) {
            e.preventDefault();
            actions.click();
        });
        
        el.bind('shareAccounts', function(e,data) {
            console.log('this is an event for shareAccounts')
            o.accounts = data.accounts;
        });             
        
        //getList();

        
  
        
        el.find('.bento_box_settings_controls input[type=checkbox]').live('click', function(e) {
            var $this = $(this), checked = $this.attr('checked'), name = $this.val();             
            o[name] = checked;             
            var data =  { 'key': name, 'value' : checked };
            connector(o.url, data, function(jo) {
                console.log('saved it..', data)    
            }, function() { /* error */  } )        
            $this.trigger('bentoBoxOptionsPreferences', data );   
             el.trigger('track', { 'plugin:bentoBoxOptions' : name + ' : ' + checked  } )            
        })
        
  
        
        
        return this;
        
        
        /****************************************************************** EVENTS ******************************************************************/
        

        
        /* draw and attach all the panels */
        function initiate_options_boxes() {

            //action_instructions();
            action_share_settings();
            action_warning_settings(); 
            action_clear_message_box_settings();
            action_shorten_settings();            
        }
        
        function basicShortenSuccess(jo)  {
            document.location.reload()
        }
        
        function action_shorten_settings() {
            
            if(el.find('.shortenSettingsBox').length > 0 ) return;
            
            var html = "", checked = "checked";
                html += '<div class="shortenSettingsBox bento_box_settings_controls">'
                    html += '<form action="#" method="get">';
                    html += '<ul>'
                    
                        if(!o.basicShortener) {
                            checked = (o.auto_shorten) ? "checked" : "";
                            html += '<li><input type="checkbox" name="autoShortenCheckBox" value="auto_shorten" id="autoShortenCheckBoxField" '+checked+' />'
                            html += '<label for="autoShortenCheckBoxField">Auto-shorten my long links (uncheck to manually shorten links).</label></li>';                        
                        }

                    
                    html += '</ul>'
                    html += '</form>';                    
                    //html += '<a class="closeOptionItem" href="">X</a>'
                html += '</div>'

            addOptionItem(html);
        }
        
        function action_warning_settings() {
            if(o.accounts.length <= 0) return;
            var html = '';
            html += '<div class="bento_box_settings_controls">'
                html += '<ul>'
                var checked = (o.auto_warn) ? "checked" : ""
                    html += '<li><input type="checkbox" name="autoWarnEmptyShareMessage" value="auto_warn" id="autoWarnEmptyShareMessage" '+checked+' />'
                    html += '<label for="autoWarnEmptyShareMessage">Warn me if I try to share a message without a link or with only links.</label></li>';
                html += '</ul>'
            html += '</div>'
            
            addOptionItem(html);
        }
        
        function action_clear_message_box_settings() {
            if(o.accounts.length <= 0) return;
            var html = '';
            html += '<div class="bento_box_settings_controls">'
                html += '<ul>'
                var checked = (o.auto_clear_share) ? "checked" : ""
                    html += '<li><input type="checkbox" name="autoClearShareMessage" value="auto_clear_share" id="autoClearShareMessage" '+checked+' />'
                    html += '<label for="autoClearShareMessage">Clear my old message after I share it.</label></li>';
                html += '</ul>'
            html += '</div>'
            
            addOptionItem(html);
        }        

                
        function action_share_settings() {
            console.log("o.accounts:", o.accounts)
            $('<div class="bentoBoxOptionsItem" style="display:none;"></div>').insertBefore('.bentoBoxOptions').socialLinkedAccounts( o.accounts )                         
            
            //addOptionItem(html);            
        }
        
        function addOptionItem( html ) {
            var item = $('<div class="bentoBoxOptionsItem" style="display:none;"></div>').html( html ).insertBefore('.bentoBoxOptions').slideDown('normal');     
                                
        }
        
        function render_options_open_button() {
            var html = '';
            html += '<div class="shortenOptionsTopLevel bentoOptionsClosed">'
                html += '<div id="activeServicesTopLevel"></div>'
                html += '<a class="shortenOptionsAction" title="Manage Shorten Box and Social Sharing" href="#">Share Settings</a>'
            html += '</div>'
            return html;
        }
        

        
        function _renderTopEdgeInputBoxWrapper() {
            var html = "";
            
            html += '<div class="inputBoxContainer">';
                html += '<b class="leftEdge"></b>';
                html += '<b class="rightEdge"></b>';
                
            return html;            
        }
        
        function _renderBottomEdgeInputBoxWrapper() {
            return '</div>'
        }          
        
        
        function success(jo) {
            
        }
    }
    
    var defaults = {
        url : '/data/preferences',
        // remove_share_account_url : '/data/remove_share_account',
        // check_twitter_params : {
        //     twitter_username : '',
        //     twitter_password : ''
        // },
        // delete_twitter_params : {
        //     account_login: null,
        //     account_type : null
        // },
        params : {
            
        },
        // linked accounts for twitter and facebook
        accounts:[],
        auto_shorten : true,
        auto_warn : false,
        basicShortener : false,
        auto_clear_share : false
    }
    
    // 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
    //     });        
    // }
    
    function connector(url, params, callback, error) {
        params._xsrf = $.cookie.get('_xsrf');
        var str = $.param( params );
        $.ajax({
            dataType: 'json', // jsonp                    
            'url' : url, 
            data : str,
            type : 'POST',
            success : callback,
            'error' : error
        });
    }
    
})(jQuery);