//calculator functions
//--------------------------------
var selection = 'h';
var operation = ''; //+-*/= or empty
//stored values
var v1 = 0,v2 = 'notSet';
var clearOnNext = false;

function setSelection(s) {
  if(s != selection) {
    var oldSelection = selection;
    selection = s;
    document.getElementById(oldSelection).className = 'not-selected';
    document.getElementById(selection).className = 'selected';
    var x = document.getElementById('dot');
    if(s == 's') {
      x.removeAttribute('disabled');
      x.className = 'number';
    }
    else {
      x.setAttribute('disabled','disabled');
      x.className = 'disabled';
    }
  }
}

function setOperator(op) {
  operation = op;
  var x = document.getElementById('operator');
  switch(op) {
    case '':
      x.innerHTML = '&nbsp;';
      break;
    case '/':
      x.innerHTML = '&divide;';
      break;
    case '*':
      x.innerHTML = '&times;';
      break;
    case '-':
      x.innerHTML = '&minus;';
      break;
    default:
      x.innerHTML = op;
  }
  //writeHistory('operation');
}

function clearDisplay() {
  document.getElementById('h').innerHTML = '0';
  document.getElementById('m').innerHTML = '00';
  document.getElementById('s').innerHTML = '00';
}

function insertNumber(n) {
  if(clearOnNext && n != ':') {
    clearDisplay();
    clearOnNext = false;
  }
  if(n == ':') {
    switch(selection) {
      case 'h':
        setSelection('m');
        break;
      case 'm':
        setSelection('s');
        break;
      case 's':
        setSelection('h');
        break;
    }
    return;
  }
  x = document.getElementById(selection);
  if((n == '.') && (x.innerHTML.indexOf('.') >= 0)) return;
  if(x.innerHTML == 0) x.innerHTML = n;
  else x.innerHTML += n;
}

function storeValues() {
  var h = document.getElementById('h').innerHTML * 1;
  var m = document.getElementById('m').innerHTML * 1;
  var s = document.getElementById('s').innerHTML * 1;
  if(h < 0) {
    var neg = true;
    h *= -1;
  }
  s += (60 * m) + (60 * 60 * h);
  if(neg) s *= -1;
  if(!v1) v1 = s;
  else v2 = s;
}

function calc(op) {
  storeValues();
  //writeHistory('pre-calc');
  if(v2 == 'notSet') {
    setOperator(op);
  }
  else {
    switch(operation) {
      case '+':
        v1 = v1 + v2;
        break;
      case '-':
        v1 = v1 - v2;
        break;
      case '*':
        v1 = v1 * v2;
        break;
      case '/':
        if(v2 == 0) {
          alert('Can\'t divide by zero!');
          return;
        }
        v1 = v1 / v2;
        break;
    }
    v2 = 'notSet';
    setOperator(op);
    displayResult(v1);
  }
  clearOnNext = true;
  if(operation == '/' || operation == '*') setSelection('s');
  else setSelection('h');
  //writeHistory('calc');
}

function equals() {
  calc(operation);
  setOperator('=');
}

function displayResult(s) {
  if(s < 0) {
    var neg = true;
    s *= -1;
  }
  // This is a brute force algorithm...
/*  while(s >= 60) {
    s -= 60;
    m++;
  }
  while(m >= 60) {
    m -= 60;
    h++;
  }*/

  // Much better...
  // Convert seconds to hours, minutes, and seconds
  var m = Math.floor(s / 60);
  s %= 60;
  var h = Math.floor(m / 60);
  m %= 60;

  if(m < 10) m = '0' + m;
  if(s < 10) s = '0' + s;
  if(neg) h = '-' + h;
  document.getElementById('h').innerHTML = h;
  document.getElementById('m').innerHTML = m;
  document.getElementById('s').innerHTML = s;
  setSelection('h');
}

function clearX(v) {
  if(v == 'C' && !(document.getElementById('h').innerHTML * 1) && !(document.getElementById('m').innerHTML * 1) && !(document.getElementById('s').innerHTML * 1)) v = 'AC';
  else if(operation == '=') v = 'AC';
  clearDisplay();
  setSelection('h');
  if(v == 'AC') {
    setOperator('');
    v1 = 0;
    v2 = 'notSet';
  }
}

function backspace() {
  var x = document.getElementById(selection);
  var y = x.innerHTML;
  var z = '';
  if(y == 0) return;
  for(var i=0;i<y.length-1;i++) {
    if(y[i] == undefined) {
      alert('Your browser doesn\'t support the backspace function.\nIn most cases, you can use the C key instead.');
      return;
    }
    z += y[i];
  }
  if(z.length == 0) z = '0';
  x.innerHTML = z;
}
