
var ymd_day = /^\d\d\d\d-\d\d-\d\d$/;

function getY(ymd) {
  return parseInt(ymd.substring(0,4));
}

function getM(ymd) {
  var m1 = ymd.substring(5,6);
  var m2 = ymd.substring(6,7);
  if (m1 == '0') {
    return parseInt(m2);
  } else {
    return parseInt(''+m1+m2);
  }
}

function getD(ymd) {
  var d1 = ymd.substring(8,9);
  var d2 = ymd.substring(9,10);
  if (d1 == '0') {
    return parseInt(d2);
  } else {
    return parseInt(''+d1+d2);
  }
}

function nextDay(ymd) {
  if (!ymd_day.test(ymd)) {
    return '';
  }
  y = getY(ymd);
  m = getM(ymd);
  d = getD(ymd);
  switch (m) {
  case 1:
  case 3:
  case 5:
  case 7:
  case 8:
  case 10:
  case 12:
    x = 32;
    break;
  case 2:
    if (false) {
    } else if (y % 400 == 0) {
      x = 30;
    } else if (y % 100 == 0) {
      x = 29;
    } else if (y % 4 == 0) {
      x = 30;
    } else {
      x = 29;
    }
    break;
  default:
    x = 31;
    break;
  }
  d++;
  if (d == x) {
    d = 1;
    m++;
    if (m == 13) {
      m = 1;
      y++;
    }
  }
  return '' + y + '-' + (m<10 ? '0'+m : m) + '-' + (d<10 ? '0' + d : d);
}

function prevDay(ymd) {
  if (!ymd_day.test(ymd)) {
    return '';
  }
  y = getY(ymd);
  m = getM(ymd);
  d = getD(ymd);
  switch (m) {
  case 2:
  case 4:
  case 6:
  case 8:
  case 9:
  case 11:
  case 1:
    x = 31;
    break;
  case 3:
    if (false) {
    } else if (y % 400 == 0) {
      x = 29;
    } else if (y % 100 == 0) {
      x = 28;
    } else if (y % 4 == 0) {
      x = 29;
    } else {
      x = 28;
    }
    break;
  default:
    x = 30;
    break;
  }
  d--;
  if (d == 0) {
    d = x;
    m--;
    if (m == 0) {
      m = 12;
      y--;
    }
  }
  return '' + y + '-' + (m<10 ? '0'+m : m) + '-' + (d<10 ? '0' + d : d);
}

function sec2hms(sec) {
  var s = sec;
  var m = Math.floor(s/60);
  var h = Math.floor(m/60);
  m = m % 60;
  s = s % 60;
  return (h<10?'0':'')+h+':'+(m<10?'0':'')+m+':'+(s<10?'0':'')+s;
}

function hms2sec(hms) {
  var a = hms.split(':',3);
  var s = 0;
  var td = /^0([0-9])/;
  s += parseInt(a[0].replace(td,'$1'));
  s *= 60;
  s += parseInt(a[1].replace(td,'$1'));
  s *= 60;
  s += parseInt(a[2].replace(td,'$1'));
  return s;
}

function frame2rtc(n) {
  var td = /^0{1,}([0-9]{1,})/;
  var f = parseInt(n.toString().replace(td,'$1'));
  var s = Math.floor(f/25);
  var m = Math.floor(s/60);
  var h = Math.floor(m/60);
  f %= 25;
  s %= 60;
  m %= 60;
  h %= 100;
  var rtc = '';
  rtc += (h < 10 ? '0' : '') + h;
  rtc += ':' + (m < 10 ? '0' : '') + m;
  rtc += ':' + (s < 10 ? '0' : '') + s;
  rtc += ':' + (f < 10 ? '0' : '') + f;
  return rtc;
}

function rtc2frame(rtc) {
  var td = /^0{1,}([0-9]{1,})/;
  var tcmask = /^([0-9]{2}):?([0-5][0-9]):?([0-5][0-9]):?(([0-1][0-9])|(2[0-4]))$/;
  if (!tcmask.test(rtc)) {
    return 0;
  }
  hmsf = rtc.replace(tcmask,'$1:$2:$3:$4');
  n = parseInt(hmsf.substr(0,2).replace(td,'$1')); // h
  n *= 60;
  n += parseInt(hmsf.substr(3,2).replace(td,'$1')); // m
  n *= 60;
  n += parseInt(hmsf.substr(6,2).replace(td,'$1')); // s
  n *= 25;
  n += parseInt(hmsf.substr(9,2).replace(td,'$1')); // f
  return n;
}

