/**
 * Create a digg, delicious, StumbleUpon or Technorati button.
 * 
 * The Widget inserts a digg, delicios, StumbleUpon or Technorati button into the target element on which the widget is executed on.
 * 
 * ### Examples
 * The Widget is executed on a pageelement and is called with passing the chosen services. In this example the digg and the Technorati button is implemented.
 * 
 * JavaScript:
 * 
 *     
 *     jQuery.ready({
 *     		plugin: [ 'de_epages.externalcontent.ui.otherbuttons' ],
 *     		DOM:    true
 *     	}, function($){
 *     		var widget = de_epages('<div>').externalcontentUiOtherbuttons({
 *     			services : ["digg","technorati"]
 *     		});
 *     });
 * 
 * 
 * @class jQuery.ui.externalcontentUiOtherbuttons
 * @extends jQuery.widget
 * 
 * @uses jQuery.ui.widget
 * @uses jQuery.tmpl 
 * @uses de_epages.externalcontent.ui.otherbuttons
 * @since 6.15.0
 */

/**
 * @cfg {Array of strings} [services] Specifies which Social Web buttons should be shown. Values: 'digg', 'delicious', 'stumbleupon', 'technorati'
 */

/**
 * See `jQuery.ui.externalcontentUiOtherbuttons` for details.
 * 
 * @param {Object} [options] A map of additional options to pass to the method.
 * @param {Array of strings} [services] Specifies which Social Web buttons should be shown. Values: 'digg', 'delicious', 'stumbleupon', 'technorati'
 * 
 * @method externalcontentUiOtherbuttons
 * @member jQuery
 * 
 * @since 6.15.0
 */

/*
 * @copyright   © Copyright 2006-2012, epages GmbH, All Rights Reserved.
 *
 * @module      de_epages.externalcontent.ui.otherbuttons
 *
 * @revision    $Revision: 1.5 $
 */
/*jslint nomen: true*/
/*global define*/
define('de_epages/externalcontent/ui/otherbuttons', [
	'jquery/ui/widget',
	'ep',
	'de_epages',

	'jquery/tmpl'
], function ($, ep, de_epages) {
	'use strict';
    // Constants.
    var gClassNames = 'SocialWeb SocialBookmarks',
        // Will be added to *self.element*.
        iconPath = ep.config.storeRoot + '/SF/SocialWeb/ico_bookmark_',
        // Start of icon path of respective services.
        services = {
            digg: {
                url: 'http://digg.com/submit?url=',
                alt: 'digg'
            },
            delicious: {
                url: 'http://www.delicious.com/save?url=',
                alt: 'delicious'
            },
            stumbleupon: {
                url: 'http://www.stumbleupon.com/submit?url=',
                alt: 'StumbleUpon'
            },
            technorati: {
                url: 'http://technorati.com/faves?add=',
                alt: 'Technorati'
            }
        },
        // Service constants.
        templateId = 'de_epages.externalcontent.ui.otherbuttons';

    // Render and cache template.
    $.template(templateId, '<a class="RightMargin" href="${url}${$item.url}" target="_blank"><img src="' + iconPath + '${$item.service}.png" alt="${alt}"/></a>');

    // The actual widget.
    $.widget('ui.externalcontentUiOtherbuttons', {

        options: {
            services: [] // Array of strings with the property names of *services*, see above (Constants).
        },

        _create: function () {
            var o = this.options,
                templateElems = [],
                service,
                i, // Loop variable.
                servicesLength = o.services.length;

            for (i = 0; i < servicesLength; i = i + 1) {
                service = o.services[i];
                // Create button using the template and append to *this.element*.
                $.merge(templateElems, $.tmpl(templateId, services[service], {
                    url: ep.config.canonicalUrl || ep.config.webUrl,
                    service: service
                }).get());
            }
            // "Append" *templateElems* and "addClass" *gClassNames* to *this.element*.
            this.renderedTemplates = $(templateElems).appendTo(this.element.addClass(gClassNames));
        },

        /**
         * This method removes the container on which the Social Web buttons plugin has been appended to.
         * 
         * @method destroy
         * @member jQuery.ui.externalcontentUiOtherbuttons
         * 
         * @since 6.15.0
         */
        destroy: function () {
            // Remove all traces of the widget.
            this.element.removeClass(gClassNames);
            if (this.renderedTemplates) {
                this.renderedTemplates.remove();
            }
            this._superApply(arguments);
        }

    });

    return de_epages;

});