var Dance = function (selector, deg) {
  var self = this;
  self.direction = true;
  self.timeout = null;
  self.active = false;
  self.element = $(selector);

  self.start = function () {
    self.active = true;
    self.step();
  };

  self.step = function () {
    if (self.direction) {
      self.element
        .css("-webkit-transition", "all 1s ease-in-out" )
        .css("-webkit-transform", "rotate("+deg+"deg)");
    } else {
      self.element
        .css("-webkit-transition", "all 1s ease-in-out" )
        .css("-webkit-transform", "rotate(-"+deg+"deg)");
    };
    self.direction = !self.direction;
    if (self.active == true) {
      setTimeout(function () {self.step();}, 1000);
    } else {
      self.element
        .css("-webkit-transition", "all 1s ease-in-out" )
        .css("-webkit-transform", "rotate(0deg)");
    }

  };

  self.stop = function () {
    self.active = false;
  };

  self.isActive = function () {
    return self.active;
  };
}

$(function () {
  $("*").live ("click", function (e) {
    var target = $(e.target);
    if (target.data("dancingObject") == undefined)
      target.data("dancingObject", new Dance(target, "10"));

    var obj = target.data("dancingObject");
    if (!obj.isActive()) {
      obj.start();
    } else {
      obj.stop();
    };
  });
});

