var counter = null;
var interval = null;
var lastSeconds = null;
var hideAlerts = true;

function externalSetup() {
    window.alert = function(text) {
      if (window.dump) {
        dump(text);
      }
    }
    parseParameters();
    
    $("Header0").onclick = function() {
      var counter = this.parentNode.parentNode.object;
      if (counter.time.url) {
        window.open(counter.time.url, "_blank");
      }
    }

    if (interval) {
      clearInterval(interval);
    }
    interval = setInterval(update, 200);
    $("MainLoading").style.display = "none"; 
}

function parseParameters() {
  try {
    var search = location.search;
    if (search != null) {
      var background = getParameter(search, "background");
      if (background != null) {
        document.getElementsByTagName("body")[0].style.background = background;
      }  
    }
    var search = location.search;
    if (search != null && search.length > 0) {
      var sound = getParameter(search, "alert", null);
      var url = getParameter(search, "calendar", null);
      if (url != null) {
        //Adding Google Calendar
        var calendar = new GoogleCalendar(url, true, "CalScript0");
        counter = new Countdown(calendar, $("Countdown0"), 0);
        calendar.requestCalendar();
        var logo = getParameter(search, "logo", "calendar.png");
        counter.setLogo(logo);
        counter.alertSound = sound;
        return;
      }
      //Adding Date Coundown
      var title = getParameter(search, "title", "Countdown");
      if (title != null) {
        var timeString = getParameter(search, "time", null);
        if (timeString != null) {
          var numbers = timeString.split("_");
          var time = new Date(parseInt(numbers[0]), parseInt(numbers[1], 10) - 1, parseInt(numbers[2], 10), parseInt(numbers[3], 10), parseInt(numbers[4], 10));
          var timeZone = parseInt(getParameter(search, "timeZone", 99));
          if (timeZone != 99) {
            var zone = time.getTimezoneOffset();
            time.setMinutes(time.getMinutes()-zone + 60*timeZone);
          }
          var repeat = parseInt(getParameter(search, "repeat", "0"));
          var time = new Time(title, time, repeat);
          counter = new Countdown(time, $("Countdown0"), 0);
          var logo = getParameter(search, "logo", "");
          if (logo.length == 0) {
            logo = "clock.png";
          }
          counter.setLogo(logo);
          var url = getParameter(search, "url", "http://www.countdownr.com" + search);
          if (url.length == 0) {
            url = "http://www.countdownr.com" + search;
          }
          time.url = url;
          counter.alertSound = sound;
          return;
        }
      }
    }
    $("Countdown0").style.color = "red";
    $("Countdown0").innerHTML = "One or more URL parameter missing.";
  }
  catch (e) {    
    $("Countdown0").style.color = "red";
    $("Countdown0").innerHTML = "Failed to parse URL parameters: " + e;
  }
}

function getParameter(src, key, defaultValue) {
  if (src.indexOf("&amp;") >= 0) {
    src = src.replace(/\&amp\;/g, "&");
  }
  var index = src.indexOf("&" + key + "=");
  if (index < 0) {
    index = src.indexOf("?" + key + "=");
  }
  if (index >= 0) {
    var index2 = src.indexOf("&", index + 1);
    if (index2 >= 0) {
      return decode(src.substring(index + key.length + 2, index2));
    }
    return decode(src.substring(index + key.length + 2));
  }
  return defaultValue;   
}

function decode(value) {
  var result = decodeURIComponent(value);
  return result.replace(/(\+)/g, " ");
}

function update() {
  var date = new Date();
  if (lastSeconds == date.getSeconds()) {
    return;
  }
  lastSeconds = date.getSeconds();
  if (counter != null) {
  	counter.update(date);
  }  
}

function closeAlert(counterElement) {
  counterElement.object.closeAlert();
}

function addToWidgetop() {
  var search = location.search;
  if (getParameter(search, "calendar", null) != null) {
    var params = search.replace(/calendar/, "addCalCountdown");
    window.open("http://www.widgetop.com" + params, "_blank");
  }
  if (getParameter(search, "title", null) != null) {
    var params = search.replace(/title/, "addCountdown");
    window.open("http://www.widgetop.com" + params, "_blank");
  }
}          