var isCountdownPast = false;

var MarinoCountdown = function(container, options) {
    var container, options, remaining, executor, el_days, el_hours, el_mins;
    isCountdownPast = false;
    var init = function() {
        log('init');
        options = set_default(options, {});
        options.deadline = set_default(options.deadline, new Date().getTime()); // timestamp in milliseconds
        options.interval = set_default(options.interval, 10);
        options.onCountdownFinished = set_default(options.onCountdownFinished, function() { });
        el_days = container.select('.timer-slot-1')[0];
        el_hours = container.select('.timer-slot-2')[0];
        el_mins = container.select('.timer-slot-3')[0];
        update();
        start();
    }

    var update = function() {
        var now = lottery_server_timestamp.timestamp;
        var delta = options.deadline - now;
        if (delta < 0) {
            stop();
            delta = 0;
            isCountdownPast = true;
            options.onCountdownFinished();
        }
        remaining = new TimeBlock(delta);
        el_days.update(num_pad(remaining.days));
        el_hours.update(num_pad(remaining.hours));
        el_mins.update(num_pad(remaining.minutes));
        log(
      remaining.weeks + ' weeks, ' +
      remaining.days + ' days, ' +
      remaining.hours + ' hours, ' +
      remaining.minutes + ' minutes, ' +
      remaining.seconds + ' seconds, ' +
      remaining.milliseconds + ' milliseconds'
    );
    }

    var num_pad = function(s) {
        if (s.toString().length == 1) {
            return "0" + s
        }
        else {
            return s;
        }
    }

    var start = function() {
        if (!executor || !executor.timer) {
            log('start');
            executor = new PeriodicalExecuter(update, options.interval);
        }
    }

    var stop = function() {
        if (executor && executor.timer) {
            log('stop');
            executor.stop();
        }
    }

    var log = function(s) {
        //if(typeof(console) != "undefined" && typeof(console.log) != "undefined")
        //  console.log('MarinoCountdown:'+s);
    }

    var set_default = function(obj, default_value) {
        if (typeof (obj) == 'undefined') {
            return default_value;
        }
        return obj;
    }

    init();
    return {
        container: container,
        update: update,
        start: start,
        stop: stop
    };
}

var TimeBlock = function(time) {
  var time, weeks, days, hours, minutes, seconds, milliseconds;
  var init = function() {
    milliseconds = time%1000;
    time = parseInt(time/1000);
    seconds = time%60;
    time = parseInt(time/60);
    minutes = time%60;
    time = parseInt(time/60);
    hours = time%24;
    time = parseInt(time/24);
    days = time%7;
    weeks = parseInt(time/7);
  }

  var log = function(s) {
    //if(typeof(console) != "undefined" && typeof(console.log) != "undefined")
    //  console.log('TimeBlock:'+s);
  }

  var set_default = function(obj, default_value)
  {
    if(typeof(obj) == 'undefined')
    {
      return default_value;
    }
    return obj;
  }

  init();
  return {
    weeks:weeks,
    days:days,
    hours:hours,
    minutes:minutes,
    seconds:seconds,
    milliseconds:milliseconds
  };
}

var TimestampToDayDate = function(timestamp) {
  var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
  var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
  var date_suffix = ["st", "nd", "rd", "th"];
  var day_name, date_str, month_name;

  var init = function() {
    var t = new Date();
    t.setTime(timestamp);
    log(t);
    day_name = days[t.getDay()];
    date_str = t.getDate();
    /* AS - disabled as it doesn't work properly 
    if(date_str < 4)
      date_str = "" + date_str + date_suffix[date_str];
    else
      date_str = "" + date_str + date_suffix[3]; */
    month_name = months[t.getMonth()];
  }

  var log = function(s) {
    //if(typeof(console) != "undefined" && typeof(console.log) != "undefined")
      //console.log('TimestampToDayDate:'+s);
  }

  init();

  return {
    day: day_name,
    date: date_str,
    month: month_name
  };
}

