/**
 * Copyright (c) 2011-2013 Felix Gnass
 * Licensed under the MIT license
 */

/*

 Basic Usage:
 ============

 $('#el').spin(); // Creates a default Spinner using the text color of #el.
 $('#el').spin({ ... }); // Creates a Spinner using the provided options.

 $('#el').spin(false); // Stops and removes the spinner.

 Using Presets:
 ==============

 $('#el').spin('small'); // Creates a 'small' Spinner using the text color of #el.
 $('#el').spin('large', '#fff'); // Creates a 'large' white Spinner.

 Adding a custom preset:
 =======================

 $.fn.spin.presets.flower = {
 lines: 9
 length: 10
 width: 20
 radius: 0
 }

 $('#el').spin('flower', 'red');

 */

(function (factory) {

    if (typeof exports == 'object') {
        // CommonJS
        factory(require('jquery'), require('spin'))
    }
    else if (typeof define == 'function' && define.amd) {
        // AMD, register as anonymous module
        define(['jquery', 'spin'], factory)
    }
    else {
        // Browser globals
        if (!window.Spinner)
            throw new Error('Spin.js not present')
        factory(window.jQuery, window.Spinner)
    }

}(function ($, Spinner) {

    $.fn.spin = function (opts, color) {

        return this.each(function () {
            var $this = $(this),
                data = $this.data();

            if (data.spinner) {
                data.spinner.stop();
                delete data.spinner;
            }
            if (opts !== false) {
                opts = $.extend(
                    {color: color || $this.css('color')},
                    $.fn.spin.presets[opts] || opts
                )
                data.spinner = new Spinner(opts).spin(this)
            }
        })
    }

    $.fn.spin.presets = {
        tiny: {lines: 8, length: 2, width: 2, radius: 3},
        small: {lines: 8, length: 3, width: 3, radius: 4},
        medium: {lines: 8, length: 5, width: 3, radius: 5},
        large: {lines: 10, length: 8, width: 4, radius: 8}
    }

}));
