/* - - - - - - - - - - - - - - - - - - - - - - -
 * Multiply and Animate one image when mouseover/mouseout
 *
 * Autor: Raducu Ioan-Nisi
 *
 * Wednesday, June 15, 2011 10:07:54 PM
 *
 * http://www.arcasu.ro
 - - - - - - - - - - - - - - - - - - - - - - - */

(function($) {
    $.fn.extend({
        pulsar: function(src, settings) {
            var defaults = {
                repeat: 5,
                alfa0: 0,
                alfa1: 2*Math.PI,
                razaX: 200,
                razaY: 200,
                position: "",
                offsetLeft: 15,
                offsetTop: 15,
                duration: 1500,
                id: "pulsar",
                extraClass: ""
            };
            settings = $.extend({}, defaults, settings);

            return this.each( function() {

     var $this = $(this), gemeni = [], propIn = [], propOut = [],
         zindex = $this.css("zIndex");
     if (typeof zindex == "string") zindex = 1; else zindex++;

     for (var i=0; i<settings.repeat; i++) {
         gemeni[i] = $("<img id='" + settings.id + "' alt='' src='" + src
                                   + "' style='position: absolute; z-index: " + zindex
                                   + "' class='" + settings.extraClass + "'>")
                             // add to document
                             .appendTo(document.body)
                             // hide it at first
                             .hide();

         var alfa = settings.alfa0 + i * (settings.alfa1 - settings.alfa0) / settings.repeat;
         // stabilire coordonate de miscare functie de parametrul alfa si raza
         var offWidth  = parseInt(settings.razaX  * Math.cos(alfa));
         var offHeight = parseInt(settings.razaY  * Math.sin(alfa + Math.PI));
         propIn[i]  = {left: "+=" + offWidth + "px", top: "+=" + offHeight + "px"};
         propOut[i] = {left: "-=" + offWidth + "px", top: "-=" + offHeight + "px"};
     }

     var imgWidth = gemeni[0].outerWidth(), imgHeight = gemeni[0].outerHeight();

     function play(e) {
         if (gemeni[0].is(":animated")) return;

         var left = settings.offsetLeft;
         var top  = settings.offsetTop;
         if (settings.position=="mouse") {
            left += e.pageX;
            top  += e.pageY;
         } else {
            left += $this.offset().left;
            top  += $this.offset().top;
         }

         for (var i=0; i<settings.repeat; i++) {
             gemeni[i].css({left: left, top: top})
         }

         gemeni[0].css({width: 0, height: 0}).show()
                  .animate({width: imgWidth, height: imgHeight}, "slow", "linear", playMiddle);

         function playMiddle() {
             for (var i=0; i<settings.repeat; i++) {
                 gemeni[i].show().animate(propIn[i], {duration: settings.duration})
                                 .animate(propOut[i], {duration: 2*settings.duration,
                                                       queue: true,
                                                       complete: playOutput(i)});
             }
         }

         function playOutput(n) {
             if (n) {
                return function() {gemeni[n].hide()};
             } else {
                return function() {gemeni[0].animate({width: 0, height: 0}, "slow")};
             }
         }
     }

     $this.hover(play, function(){});

            })
        }
    })
})(jQuery);


