text: /*!
   * jQuery Final Countdown
   *
   * @author Pragmatic Mates, http://pragmaticmates.com
   * @version 1.1.1
   * @license GPL 2
   * @link https://github.com/PragmaticMates/jquery-final-countdown
   */
  
  (function ($) {
      var settings;
      var timer;
  
      var circleSeconds;
      var circleMinutes;
      var circleHours;
      var circleDays;
  
      var layerSeconds;
      var layerMinutes;
      var layerHours;
      var layerDays;
  
      var element;
      var callbackFunction;
  
      $.fn.final_countdown = function(options, callback) {
          element = $(this);        
  
          var defaults = $.extend({
              start: undefined,
              end: undefined,
              now: undefined,
              selectors: {
                  value_seconds: '.clock-seconds .val',
                  canvas_seconds: 'canvas-seconds',
                  value_minutes: '.clock-minutes .val',
                  canvas_minutes: 'canvas-minutes',
                  value_hours: '.clock-hours .val',
                  canvas_hours: 'canvas-hours',
                  value_days: '.clock-days .val',
                  canvas_days: 'canvas-days'
              },
              seconds: {
                  borderColor: '#7995D5',
                  borderWidth: '6'
              },
              minutes: {
                  borderColor: '#ACC742',
                  borderWidth: '6'
              },
              hours: {
                  borderColor: '#ECEFCB',
                  borderWidth: '6'
              },
              days: {
                  borderColor: '#FF9900',
                  borderWidth: '6'
              }
          }, options);
  
          settings = $.extend({}, defaults, options);
  
          if (settings.start === undefined) {
              settings.start = element.data('start');
          }
  
          if (settings.end === undefined) {
              settings.end = element.data('end');
          }
  
          if (settings.now === undefined) {
              settings.now = element.data('now');
          }
  
          if (element.data('border-color')) {
              settings.seconds.borderColor = settings.minutes.borderColor = settings.hours.borderColor = settings.days.borderColor = element.data('border-color');
          }
  
          if (settings.now < settings.start ) {
              settings.start = settings.now;
              settings.end = settings.now;
          }
  
          if (settings.now > settings.end) {
              settings.start = settings.now;
              settings.end = settings.now;
          }
  
          if (typeof callback == 'function') { // make sure the callback is a function
              callbackFunction = callback;
          }
          
          responsive();
          dispatchTimer();
          prepareCounters();
          startCounters();
      };
  
      function responsive() {
          $(window).load(updateCircles);
  
          $(window).on('redraw', function() {
              switched = false;
              updateCircles();
          });
          $(window).on('resize', updateCircles);
      }
  
      function updateCircles() {     
          layerSeconds.draw();
          layerMinutes.draw();
          layerHours.draw();
          layerDays.draw();
      }
  
      function convertToDeg(degree) {
          return (Math.PI/180)*degree - (Math.PI/180)*90
      }
  
      function dispatchTimer() {
          timer = {
              total: Math.floor((settings.end - settings.start) / 86400),
              days: Math.floor((settings.end - settings.now ) / 86400),
              hours: 24 - Math.floor(((settings.end - settings.now) % 86400) / 3600),
              minutes: 60 - Math.floor((((settings.end - settings.now) % 86400) % 3600) / 60),
              seconds: 60 - Math.floor((((settings.end - settings.now) % 86400) % 3600) % 60 )
          }
      }
  
      function prepareCounters() {
          // Seconds
          var seconds_width = $('#' + settings.selectors.canvas_seconds).width()
          var secondsStage = new Kinetic.Stage({
              container: settings.selectors.canvas_seconds,
              width: seconds_width,
              height: seconds_width
          });
  
          circleSeconds = new Kinetic.Shape({
              drawFunc: function(context) {
                  var seconds_width = $('#' + settings.selectors.canvas_seconds).width()
                  var radius = seconds_width / 2 - settings.seconds.borderWidth / 2;
                  var x = seconds_width / 2;
                  var y = seconds_width / 2;
  
                  context.beginPath();
                  context.arc(x, y, radius, convertToDeg(0), convertToDeg(timer.seconds * 6));
                  context.fillStrokeShape(this);
  
                  $(settings.selectors.value_seconds).html(60 - timer.seconds);
              },
              stroke: settings.seconds.borderColor,
              strokeWidth: settings.seconds.borderWidth
          });
  
          layerSeconds = new Kinetic.Layer();
          layerSeconds.add(circleSeconds);
          secondsStage.add(layerSeconds);
  
          // Minutes
          var minutes_width = $('#' + settings.selectors.canvas_minutes).width();
          var minutesStage = new Kinetic.Stage({
              container: settings.selectors.canvas_minutes,
              width: minutes_width,
              height: minutes_width
          });
  
          circleMinutes = new Kinetic.Shape({
              drawFunc: function(context) {
                  var minutes_width = $('#' + settings.selectors.canvas_minutes).width();
                  var radius = minutes_width / 2 - settings.minutes.borderWidth / 2;
                  var x = minutes_width / 2;
                  var y = minutes_width / 2;
  
                  context.beginPath();
                  context.arc(x, y, radius, convertToDeg(0), convertToDeg(timer.minutes * 6));
                  context.fillStrokeShape(this);
  
                  $(settings.selectors.value_minutes).html(60 - timer.minutes);
  
              },
              stroke: settings.minutes.borderColor,
              strokeWidth: settings.minutes.borderWidth
          });
  
          layerMinutes = new Kinetic.Layer();
          layerMinutes.add(circleMinutes);
          minutesStage.add(layerMinutes);
  
          // Hours
          var hours_width = $('#' + settings.selectors.canvas_hours).width();
          var hoursStage = new Kinetic.Stage({
              container: settings.selectors.canvas_hours,
              width: hours_width,
              height: hours_width
          });
  
          circleHours = new Kinetic.Shape({
              drawFunc: function(context) {
                  var hours_width = $('#' + settings.selectors.canvas_hours).width();
                  var radius = hours_width / 2 - settings.hours.borderWidth/2;
                  var x = hours_width / 2;
                  var y = hours_width / 2;
  
                  context.beginPath();
                  context.arc(x, y, radius, convertToDeg(0), convertToDeg(timer.hours * 360 / 24));
                  context.fillStrokeShape(this);
  
                  $(settings.selectors.value_hours).html(24 - timer.hours);
  
              },
              stroke: settings.hours.borderColor,
              strokeWidth: settings.hours.borderWidth
          });
  
          layerHours = new Kinetic.Layer();
          layerHours.add(circleHours);
          hoursStage.add(layerHours);
  
          // Days
          var days_width = $('#' + settings.selectors.canvas_days).width();
          var daysStage = new Kinetic.Stage({
              container: settings.selectors.canvas_days,
              width: days_width,
              height: days_width
          });
  
          circleDays = new Kinetic.Shape({
              drawFunc: function(context) {
                  var days_width = $('#' + settings.selectors.canvas_days).width();
                  var radius = days_width/2 - settings.days.borderWidth/2;
                  var x = days_width / 2;
                  var y = days_width / 2;
  
  
                  context.beginPath();
                  if (timer.total == 0) {
                      context.arc(x, y, radius, convertToDeg(0), convertToDeg(360));
                  } else {
                      context.arc(x, y, radius, convertToDeg(0), convertToDeg((360 / timer.total) * (timer.total - timer.days)));
                  }
                  context.fillStrokeShape(this);
  
                  $(settings.selectors.value_days).html(timer.days);
  
              },
              stroke: settings.days.borderColor,
              strokeWidth: settings.days.borderWidth
          });
  
          layerDays = new Kinetic.Layer();
          layerDays.add(circleDays);
          daysStage.add(layerDays);
      }
  
      function startCounters() {        
          var interval = setInterval( function() {                        
              if (timer.seconds > 59 ) {
                  if (60 - timer.minutes == 0 && 24 - timer.hours == 0 && timer.days == 0) {
                      clearInterval(interval);
                      if (callbackFunction !== undefined) {
                          callbackFunction.call(this); // brings the scope to the callback
                      }
                      return;
                  }
  
                  timer.seconds = 1;
  
                  if (timer.minutes > 59) {
                      timer.minutes = 1;
                      layerMinutes.draw();
                      if (timer.hours > 23) {
                          timer.hours = 1;
                          if (timer.days > 0) {
                              timer.days--;
                              layerDays.draw();
                          }
                      } else {                        
                          timer.hours++;
                      }                    
                      layerHours.draw()
                  } else {
                      timer.minutes++;
                  }
  
                  layerMinutes.draw();
              } else {            
                  timer.seconds++;
              }
  
              layerSeconds.draw();
          }, 1000);
      }
  })(jQuery);