var nextId = 0;
var counters = new Object();

var countdownCookie;
var interval = null;
var lastSeconds = -1;
var timeout;

var daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
var daysAfterMonth;

var phone = testPhone;

function setup() {
  Cookie_wait(function() {
    if (navigator.userAgent.toLowerCase().indexOf("iphone") >= 0) {
      phone = iPhone;
    }  
    if (navigator.userAgent.toLowerCase().indexOf("android") >= 0) {
      phone = gPhone;
    }
    phone.setup();
    countdownCookie = new Cookie("Timer-IDs");
    var ids = null;
    try {
      ids = eval(countdownCookie.get());
      reloadCounters(ids);
    }
    catch (e) {
      ids = null;
      //load defaults
    }
    if (ids == null || ids.length <= 1) {      
      createDefaultCounters();
    }
    
    this.daysAfterMonth = new Array(12);
    var count = 0;
    for (var i = 0; i < 12; i++) {
  	  daysAfterMonth[i] = count;
  	  count += daysInMonth[i];
    }
    
    parseParameters();
    
    if (interval) {
      clearInterval(interval);
    }
    interval = setInterval(update, 200);
    document.getElementById("MainLoading").style.visibility = "hidden";
  });
  setTimeout(function() {window.scrollTo(0, 1)}, 1);
}

function parseParameters() {
}

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 getTimeString() {
  var repeat = $("RepeatSelect").selectedIndex;
  if (repeat < 4) {
    var date = new Date($("YearSelect").value, $("MonthSelect").selectedIndex, 
                        $("DaySelect").selectedIndex + 1, $("HourSelect").selectedIndex, $("MinuteSelect").selectedIndex);
  }
  else {
    var date = new Date();
    var diff = $("WeekSelect").selectedIndex - date.getDay();
    if (diff < 0) {
      diff += 7
    }
    date.setDate(date.getDate() + diff);
    date.setHours($("HourSelect").selectedIndex);
    date.setMinutes($("MinuteSelect").selectedIndex);
  }                      
  var month = date.getMonth() + 1;
  if (month < 10) {
    month = "0" + month;
  }
  var day = date.getDate();
  if (day < 10) {
    day = "0" + day;
  }
  var hour = date.getHours();
  if (hour < 10) {
    hour = "0" + hour;
  }
  var minute = date.getMinutes();
  if (minute < 10) {
    minute = "0" + minute;
  }
  return date.getFullYear() + "_" 
             + month + "_"
             + day + "_"
             + hour + "_"
             + minute;  
}

function createLink() {
  var logo = $("LogoUrl").value;
  var sound = $("SoundSelect").value;
  if ($("TimeMethod").checked) {
    var time = getTimeString();
    var repeat = $("RepeatSelect").selectedIndex;           
    var title = $("TitleInput").value;
    window.open("linking.html?time=" + time + "&repeat=" + repeat 
                + "&title=" + encodeURIComponent(title) + "&logo=" + logo + "&alert=" + sound, "_self");
  }              
  else {              
    var url = $("CalUrlInput").value;
    window.open('linking.html?calendar=' + encodeURIComponent(url) + "&logo=" + logo + "&alert=" + sound,
                "_self"); 
  }              
}  

function createDefaultCounters() {
  clock = createNewCounter("Total", new Date(), true);
  clock = createNewCounter("Work", new Date());
  clock = createNewCounter("Pause", new Date());
}

function reloadCounters(ids) {
  for (var i = 0; i < ids.length; i++) {
  	var cookie = new Cookie("Counter" + ids[i]);
  	try {
  	  var text = cookie.get();
    	var settings = eval("new Object(" + text + ")");
    	if (text != null) {
   	    var counter = createCounter(ids[i], settings.title, new Date(settings.time), settings.sum, settings.status);
    	  counter.cookie = cookie;
    	}
    	nextId = Math.max(nextId, ids[i]);
  	}
  	catch (e) {
  	  alert("Reloading counter " + ids[i] + " failed: " + e);
  	  cookie.remove();
  	}  
  }
  saveCounterIds();
  nextId++;
}

function saveCounterIds() {
  var text = "[";
  var container = document.getElementById("Countdowns");
  var divs = container.childNodes;
  for (var i = 0; i < divs.length; i++) {
  	if (divs[i].nodeType == 1) {
  	  text += divs[i].counter.id + ",";
  	}  
  }
  text += "null]";
  countdownCookie.store(text);
}

function saveCounter(counter) {
  var text = "{"
  text += "title:'" + counter.time.title + "',";
  text += "time:" + counter.time.getTime().getTime() + ",";
  text += "sum:" + counter.time.sum + ",";
  text += "status:" + counter.time.status + ",";
  text += "empty:null}";
  counter.cookie.store(text);
}

function update() {
  var date = new Date();
  if (lastSeconds == date.getSeconds()) {
    return;
  }
  lastSeconds = date.getSeconds();
  for (var id in counters) {  	
    counters[id].update(date);
  }
}      

function addNewCounter() {
  var title = $("TitleInput").value;
  if (!title || title.length == 0) {
    alert("Please enter a title.");
    return;
  }
  createNewCounter(title, new Date(), false);
}

function createNewCounter(title, date, status) {
  var id = nextId++;
  var counter = createCounter(id, title, date, 0, status);
  saveCounterIds();
  counter.cookie = new Cookie("Counter" + id);
  saveCounter(counter);
  return counter;
}  

function createCounter(id, title, date, sum, status) {
  var counter = document.createElement("div");
  counter.id = "Counter" + id;
  counter.className = "countdown";
  //counter.style.display = "block";
  /*
  counter.onmouseover = function() {
    counterMouseOver(this);
  }   
  counter.onmouseout = function() {
    counterMouseOut(this);
  }
  */  
  var template = document.getElementById("CountdownTemplate").innerHTML;
  counter.innerHTML = template.replace(/\$ID\$/g, id);
  $("Countdowns").appendChild(counter);

  var counterObj = setupCounter(id, counter, title, date, sum, status);
  counter.counter = counterObj;

  updateStatus(counter, status);

  addToCountdowns(counter);
  return counterObj;
}

function addToCountdowns(countdown) {
  var container = $("Countdowns");
  var children = container.childNodes;
  container.appendChild(countdown);
}

function setupCounter(id, element, title, date, sum, status) {
  var time = new Time(title, date, sum, status);
  var counter = new Countdown(time, element, id);
  counters["" + id] = counter;
  return counter;
}

function counterMouseOver(counterElement) {
  var closeBtn = document.getElementById("CloseButton" + counterElement.counter.id);
  closeBtn.style.display = "block";
}

function counterMouseOut(counterElement) {
  var closeBtn = document.getElementById("CloseButton" + counterElement.counter.id);
  closeBtn.style.display = "none";
}

function closeCounter(counterElement) {
  delete counters["" + counterElement.counter.id];
  var countersElement = document.getElementById("Countdowns");
  countersElement.removeChild(counterElement);
  counterElement.counter.cookie.remove();
  saveCounterIds();
}

function toggleStatus(counterElement) {
  alert(counterElement.id);
  var status = counterElement.counter.time.toggleStatus();
  saveCounter(counterElement.counter);
  updateStatus(counterElement, status);
}

function updateStatus(counterElement, status) {
  if (status) {
    $("Play" + counterElement.counter.id).style.display = "none";
    $("Pause" + counterElement.counter.id).style.display = "inline";
  }
  else {
    $("Play" + counterElement.counter.id).style.display = "inline";
    $("Pause" + counterElement.counter.id).style.display = "none";
  }  
}

function startEditHeader(counterElement) {
  $("Header" + counterElement.counter.id).style.display = "none";
  $("HeaderInput" + counterElement.counter.id).style.display = "inline"; 
  $("HeaderInput" + counterElement.counter.id).value = $("Header" + counterElement.counter.id).innerHTML;
  $("HeaderInput" + counterElement.counter.id).focus();
  $("Clear" + counterElement.counter.id).style.display = "inline";
  counterMouseOver(counterElement);
}

function stopEditHeader(counterElement) {
  $("Header" + counterElement.counter.id).style.display = "inline";
  $("HeaderInput" + counterElement.counter.id).style.display = "none";
  var title = $("HeaderInput" + counterElement.counter.id).value;
  if (title.length == 0) {
    return;
  }
  $("Header" + counterElement.counter.id).innerHTML = title;
  counterElement.counter.time.title = title;
  saveCounter(counterElement.counter);
  window.setTimeout(function() {
    $("Clear" + counterElement.counter.id).style.display = "none";
    counterMouseOut(counterElement);
  }, 250);  
}

function clearCounter(counterElement) {
  var counter = counterElement.counter;
  counter.time.sum = 0;
  counter.time.time = new Date();
  saveCounter(counter);
  counter.update(counter.time.time);
}

function emailData() {
  var body = new Date() + ":<br>";
  var counters = $("Countdowns").children;
  for ( var i = 0; i < counters.length; i++) {
    var counter = counters[i].counter;
    body += "<br>" + counter.time.title + ": ";
    var sum = counter.time.sum;
    var days = parseInt(sum / 86400000);
    sum = sum - days * 86400000;
    if (days > 0) {
      body += days + "d ";
    }  
    var hours = parseInt(sum / 3600000);
    sum = sum - hours * 3600000;
    body += formatNumber(hours);
    var minutes = parseInt(sum / 60000);
    sum = sum - minutes * 60000;
    body += ":" + this.formatNumber(minutes);
    var seconds = parseInt(sum / 1000);
    body += ":" + this.formatNumber(seconds);
    if (counter.time.status) {
      body += " (running)";
    }
    else {
      body += " (paused)";
    }  
  }
  phone.sendMail("My Current Timers", body);
}

function formatNumber(number) {
  if (Math.abs(number) < 10) {
    var isNegativ = number < 0;
    number = "0" + Math.abs(number);
    if (isNegativ) {
      number = "-" + number;
    }
  }
  return number;  
}

function tellFriend() {
  var body = "Hi,<br><br>I just stumbled upon this iPhone Timer application:" +
      "<br><br>http://timer.speedymarks.com<br><br>" +
      "Create timers and let them sum up the time you need for your different tasks." +
      "<br><br>Best regards";
  window.open("mailto:?subject=Timer on the iPhone&body=" + body, "_self");  
}

function debug(msg) {
  $("Debug").innerHTML = msg + "<br>" + $("Debug").innerHTML;
}

function $(id) {
  return document.getElementById(id);
}  
