/*

Jappix - An open social platform
These are the welcome tool functions for Jappix

-------------------------------------------------

License: AGPL
Author: Valérian Saliou

*/

// Bundle
var Welcome = (function () {

    /**
     * Alias of this
     * @private
     */
    var self = {};


    /* Variables */
    self.is_done = false;

    
    /**
     * Opens the welcome tools
     * @public
     * @return {undefined}
     */
    self.open = function() {

        try {
            // Share message
            var share_msg = Common.printf(Common._e("Using Jappix, an open social platform. I am %s!"), Common.getXID());
            
            // Popup HTML content
            var html = 
            '<div class="top">' + Common._e("Welcome!") + '</div>' + 
            
            '<div class="tab">' + 
                '<a href="#" class="tab-active" data-step="1">' + Common._e("Options") + '</a>' + 
                '<a href="#" class="tab-missing" data-step="2">' + Common._e("Friends") + '</a>' + 
                '<a href="#" class="tab-missing" data-step="3">' + Common._e("Share") + '</a>' + 
            '</div>' + 
            
            '<div class="content">' + 
                '<div class="lap-active one-lap welcome1">' + 
                    '<div class="infos">' + 
                        '<p class="infos-title">' + Common._e("Welcome on Jappix, your own social cloud!") + '</p>' + 
                        '<p>' + Common._e("Before you start using it, you will have to change some settings, search for friends and complete your profile.") + '</p>' + 
                    '</div>' + 
                    
                    '<a href="#" class="box enabled" title="' + Common._e("Click to disable") + '">' + 
                        '<span class="option">' + Common._e("Sounds") + '</span>' + 
                        '<span class="description">' + Common._e("Enable notification sounds") + '</span>' + 
                        '<span class="image sound talk-images"></span>' + 
                        '<span class="tick talk-images"></span>' + 
                    '</a>' + 
                    
                    '<a href="#" class="box enabled pep-hidable" title="' + Common._e("Click to disable") + '">' + 
                        '<span class="option">' + Common._e("Geolocation") + '</span>' + 
                        '<span class="description">' + Common._e("Share your position on the globe") + '</span>' + 
                        '<span class="image geolocation talk-images"></span>' + 
                        '<span class="tick talk-images"></span>' + 
                    '</a>' + 
                    
                    '<a href="#" class="box xmpplinks-hidable" title="' + Common._e("Click to enable") + '">' + 
                        '<span class="option">' + Common._e("XMPP links") + '</span>' + 
                        '<span class="description">' + Common._e("Open XMPP links with Jappix") + '</span>' + 
                        '<span class="image xmpp talk-images"></span>' + 
                        '<span class="tick talk-images"></span>' + 
                    '</a>' + 
                    
                    '<a href="#" class="box mam-hidable pref" title="' + Common._e("Click to enable") + '">' + 
                        '<span class="option">' + Common._e("Message archiving") + '</span>' + 
                        '<span class="description">' + Common._e("Store a history of your chats") + '</span>' + 
                        '<span class="image mam talk-images"></span>' + 
                        '<span class="tick talk-images"></span>' + 
                    '</a>' + 
                    
                    '<a href="#" class="box" title="' + Common._e("Click to enable") + '">' + 
                        '<span class="option">' + Common._e("Offline friends") + '</span>' + 
                        '<span class="description">' + Common._e("Don\'t hide offline friends") + '</span>' + 
                        '<span class="image offline talk-images"></span>' + 
                        '<span class="tick talk-images"></span>' + 
                    '</a>' + 
                '</div>' + 
                
                '<div class="one-lap welcome2">' + 
                    '<div class="infos">' + 
                        '<p class="infos-title">' + Common._e("Friends") + '</p>' + 
                        '<p>' + Common._e("Use this tool to find your friends on the server you are using right now, or add them later.") + '</p>' + 
                    '</div>' + 
                    
                    '<div class="results welcome-results"></div>' + 
                '</div>' + 
                
                '<div class="one-lap welcome3">' + 
                    '<div class="infos">' + 
                        '<p class="infos-title">' + Common._e("Share") + '</p>' + 
                        '<p>' + Common._e("Good job! Now, you can share Jappix with your friends!") + '</p>' + 
                        '<p>' + Common._e("When you will press the save button, the profile editor will be opened. Happy socializing!") + '</p>' + 
                    '</div>' + 
                    
                    '<a class="box share first" href="http://www.facebook.com/sharer/sharer.php?u=' + Common.encodeQuotes(Utils.generateURL(JAPPIX_LOCATION)) + '" target="_blank">' + 
                        '<span class="logo facebook welcome-images"></span>' + 
                        '<span class="name">Facebook</span>' + 
                        '<span class="description">' + Common.printf(Common._e("Share Jappix on %s"), 'Facebook') + '</span>' + 
                        '<span class="go talk-images"></span>' + 
                    '</a>' + 
                    
                    '<a class="box share" href="http://twitter.com/intent/tweet?text=' + Common.encodeQuotes(share_msg) + '&amp;url=' + Common.encodeQuotes(Utils.generateURL(JAPPIX_LOCATION)) + '" target="_blank">' + 
                        '<span class="logo twitter welcome-images"></span>' + 
                        '<span class="name">Twitter</span>' + 
                        '<span class="description">' + Common.printf(Common._e("Share Jappix on %s"), 'Twitter') + '</span>' + 
                        '<span class="go talk-images"></span>' + 
                    '</a>' + 
                    
                    '<a class="box share" href="https://plus.google.com/share?url=' + Common.encodeQuotes(Utils.generateURL(JAPPIX_LOCATION)) + '" target="_blank">' + 
                        '<span class="logo plus welcome-images"></span>' + 
                        '<span class="name">Google+</span>' + 
                        '<span class="description">' + Common.printf(Common._e("Share Jappix on %s"), 'Google+') + '</span>' + 
                        '<span class="go talk-images"></span>' + 
                    '</a>' + 
                    
                    '<a class="box share" href="https://waaave.com/spot/jappix/" target="_blank">' + 
                        '<span class="logo waaave welcome-images"></span>' + 
                        '<span class="name">Waaave</span>' + 
                        '<span class="description">' + Common.printf(Common._e("Follow Jappix topic on %s"), 'Waaave') + '</span>' + 
                        '<span class="go talk-images"></span>' + 
                    '</a>' + 
                '</div>' + 
            '</div>' + 
            
            '<div class="bottom">' + 
                '<div class="wait wait-medium"></div>' + 
                
                '<a href="#" class="finish next">' + Common._e("Next") + ' »</a>' + 
                '<a href="#" class="finish save">' + Common._e("Save") + '</a>' + 
            '</div>';
            
            // Create the popup
            Popup.create('welcome', html);
            
            // Unavoidable popup
            $('#welcome').addClass('unavoidable');
            
            // Apply the features
            Features.apply('welcome');
            
            // Associate the events
            self.instance();
            
            Console.log('Welcome assistant opened.');
        } catch(e) {
            Console.error('Welcome.open', e);
        }

    };


    /**
     * Closes the welcome tools
     * @public
     * @return {boolean}
     */
    self.close = function() {

        try {
            // Destroy the popup
            Popup.destroy('welcome');
        } catch(e) {
            Console.error('Welcome.close', e);
        } finally {
            return false;
        }

    };


    /**
     * Switches the welcome tabs
     * @public
     * @param {string} id
     * @return {boolean}
     */
    self.switchTab = function(id) {

        try {
            // Path to
            var welcome = '#welcome ';
            var content = welcome + '.content .';
            var tab = welcome + '.tab ';
            var wait = $(welcome + '.wait');
            
            $(content + 'one-lap').hide();
            $(content + 'welcome' + id).show();
            $(tab + 'a').removeClass('tab-active');
            $(tab + 'a[data-step="' + id + '"]').addClass('tab-active').removeClass('tab-missing');
            
            // Update the "save" button if all is okay
            if(!Common.exists(tab + '.tab-missing')) {
                var finish = welcome + '.finish.';
                $(finish + 'save').show();
                $(finish + 'next').hide();
            }
            
            // If this is ID 2: vJUD search
            if(id == 2) {
                wait.show();
                DataForm.go(HOST_VJUD, 'search', '', '', 'welcome');
            } else {
                wait.hide();
            }
        } catch(e) {
            Console.error('Welcome.switchTab', e);
        } finally {
            return false;
        }

    };


    /**
     * Sends the welcome options
     * @public
     * @param {object} array
     * @return {undefined}
     */
    self.send = function(array) {

        try {
            // Sends the options
            var iq = new JSJaCIQ();
            iq.setType('set');
            
            var query = iq.setQuery(NS_PRIVATE);
            var storage = query.appendChild(iq.buildNode('storage', {'xmlns': NS_OPTIONS}));
            
            // Value array
            var tags = ['sounds', 'geolocation', '', '', 'roster-showall'];
            
            // Build the XML with the array
            for(var i in array) {
                var value = array[i];
                var tag = tags[i];
                
                if((i != 2) && (i != 3) && tag && value) {
                    storage.appendChild(iq.buildNode('option', {'type': tag, 'xmlns': NS_OPTIONS}, value));
                    DataStore.setDB(Connection.desktop_hash, 'options', tag, value);
                }
            }
            
            con.send(iq);
            
            // If geolocation is enabled
            if(array[1] == '1') {
                PEP.geolocate();
            }
        } catch(e) {
            Console.error('Welcome.send', e);
        }

    };


    /**
     * Saves the welcome options
     * @public
     * @return {boolean}
     */
    self.save = function() {

        try {
            // Get the new options
            var array = [];
            
            $('#welcome a.box').each(function() {
                var current = '0';
                
                if($(this).hasClass('enabled'))
                    current = '1';
                
                array.push(current);
            });
            
            // If XMPP links is enabled
            if(array[2] == '1')
                Utils.xmppLinksHandler();
            
            // If offline buddies showing is enabled
            if(array[4] == '1')
                Interface.showAllBuddies('welcome');
            
            // If archiving is supported by the server
            if(Features.enabledMAM()) {
                // If archiving is enabled
                if(array[3] == '1') {
                    MAM.setConfig('roster');
                }
            }
            
            // Send the new options
            self.send(array);
            
            // Close the welcome tool
            self.close();
            
            // Open the profile editor
            vCard.open();
            
            // Unavoidable popup
            $('#vcard').addClass('unavoidable');
            
            self.is_done = true;
        } catch(e) {
            Console.error('Welcome.save', e);
        } finally {
            return false;
        }

    };


    /**
     * Goes to the next welcome step
     * @public
     * @return {boolean}
     */
    self.next = function() {

        try {
            // Check the next step to go to
            var next = 1;
            var missing = '#welcome .tab a.tab-missing';
            
            if(Common.exists(missing))
                next = parseInt($(missing + ':first').attr('data-step'));
            
            // Switch to the next step
            self.switchTab(next);
        } catch(e) {
            Console.error('Welcome.next', e);
        } finally {
            return false;
        }

    };


    /**
     * Plugin launcher
     * @public
     * @return {undefined}
     */
    self.instance = function() {

        try {
            // Click events
            $('#welcome .tab a').click(function() {
                // Switch to the good tab
                var key = parseInt($(this).attr('data-step'));
                
                return self.switchTab(key);
            });
            
            $('#welcome a.box:not(.share)').click(function() {
                if($(this).hasClass('enabled'))
                    $(this).removeClass('enabled').attr('title', Common._e("Click to enable"));
                else
                    $(this).addClass('enabled').attr('title', Common._e("Click to disable"));
                
                return false;
            });
            
            $('#welcome .bottom .finish').click(function() {
                if($(this).is('.next'))
                    return self.next();
                if($(this).is('.save'))
                    return self.save();
                
                return false;
            });
        } catch(e) {
            Console.error('Welcome.instance', e);
        }

    };


    /**
     * Return class scope
     */
    return self;

})();