// === datelib.js ===
// === Copyright (C) 2001  Ryuji Oyama. All rights reserved. ===

function getSysTime() { return( new Date() ); }

function getSysDate()
{
  var dObj = new Date();
  dObj.setHours(0);
  dObj.setMinutes(0);
  dObj.setSeconds(0);
  return( dObj );
}

function addDay( dObj, days )
{
  var dt = dObj.getTime();
  var ndt = dt + (days *24*60*60*1000);
  var rdObj = new Date();
  rdObj.setTime(ndt);
  return(rdObj);
}

function parseFmt( fmt )
{
  // フォーマットの分解
  var fmtArr = new Array();
  var i=0;
  var st = 0;
  fmt = fmt.toUpperCase();
  for ( var ed=0 ; ed<fmt.length ; )
  {
    var c = fmt.charAt(ed);
    while (true)
    {
      var x = fmt.charAt(ed);
      if ( c != x ) break;
      ed++;
    }
    fmtArr[i++] = fmt.substring(st,ed);
    st = ed;
  }
  return( fmtArr );
}

// String -> Date
function toDate( dStr, fmt )
{
  var fmtArr = parseFmt(fmt);
  // 文字列の生成
  var dObj = new Date(2000,1,1,0,0,0);
  var st = 0;
  for ( var i=0 ; i<fmtArr.length ; i++ ) {
    var item = fmtArr[i];
    var len = item.length;
    var ch = item.charAt(0);
    var v = dStr.substring(st,st+len);
    if ( ch == 'Y' ) {
      if ( len != 4 ) return(null);
      dObj.setFullYear(parseInt(v,10));
    } else
    if ( ch == 'M' ) {
      if ( len > 2 ) return(null);
      dObj.setMonth(parseInt(v,10)-1);
    } else
    if ( ch == 'D' ) {
      if ( len > 2 ) return(null);
      dObj.setDate(parseInt(v,10));
    } else
    if ( ch == 'H' ) {
      if ( len > 2 ) return(null);
      dObj.setHours(parseInt(v,10));
    } else
    if ( ch == 'F' ) {
      if ( len > 2 ) return(null);
      dObj.setMinutes(parseInt(v,10));
    } else
    if ( ch == 'S' ) {
      if ( len > 2 ) return(null);
      dObj.setSeconds(parseInt(v,10));
    } else
    if ( ch == 'W' ) { len = 3; }
    else { if ( ch != dStr.substring(st,st+1) ) return(null); }
    
    st += len;
  }
// alert('END dObj : ' + dObj.toLocaleString());
  return(dObj);
}

// Date -> String
function toChar( dObj, fmt )
{
  var fmtArr = parseFmt(fmt);
  // 文字列の生成
  var rtnStr = '';
  for ( i=0 ; i<fmtArr.length ; i++ )
  {
    var typeStr = 'YMDHFSW';
    var dateArr = new Array( dObj.getFullYear(), dObj.getMonth()+1,
                             dObj.getDate(), dObj.getHours(),
                             dObj.getMinutes(), dObj.getSeconds(),
                             dObj.getDay() );
    var dowArr_en = new Array( 'Sun','Mon','Tue','Wed','Thu','Fri','Sat' );
    var item = fmtArr[i];
    var len = item.length;
    var ch = item.charAt(0);
    if ( ch == 'Y' ) {
      if ( len > 4 ) return(null);
      else
      if ( len == 4 ) { rtnStr += dateArr[typeStr.indexOf(ch)] }
      else
      {
        var v = (parseInt(dateArr[typeStr.indexOf(ch)] % (Math.pow(10,(4-len))),10));
        if ( len==3 && v<10 ) rtnStr += ('00'+v);
        else
        if ( (len==2 && v<10) || (len==3 && v<100) ) rtnStr += ('0'+v);
        else
        { rtnStr += v; }
      }
    }
    else
    if ( isChar(ch,'MDHFS') ) {
      if ( len > 2 ) return(null);
      var v = dateArr[typeStr.indexOf(ch)];
      var z = ( len == 2 ) ? '0' : '';
      rtnStr += ( parseInt(v,10) < 10 ) ? (z+v) : v ;
    }
    else
    if ( ch == 'W' ) {
      if ( len > 1 ) return(null);
      rtnStr += dowArr_en[parseInt(dateArr[typeStr.indexOf(ch)],10)];
    }
    else
    { rtnStr += item; }
  }
//alert('END rtnStr : ' + rtnStr);
  return(rtnStr);
}

function padDate(dStr,delim)
{
  var dArr = dStr.split(delim);
  if ( dArr.length != 3 ) return(dStr);
  var tmp = dArr[0];
  for ( var i=tmp.length ; i<4 ; i++ ) tmp='0'+tmp;
  dArr[0] = tmp;
  if ( dArr[1].length == 1 && parseInt(dArr[1],10) < 10 )
                                           dArr[1] = '0' + dArr[1];
  if ( dArr[2].length == 1 && parseInt(dArr[2],10) < 10 )
                                           dArr[2] = '0' + dArr[2];
//alert('rtn : ' + dArr[0] + delim + dArr[1] + delim + dArr[2]);
  return( dArr[0] + delim + dArr[1] + delim + dArr[2] );
}

function cmpDate(dObj1,dObj2)
{ return( parseInt(dObj1.getTime()-dObj2.getTime(),10) ); }
