/* *********************************************************

.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.               .xxxxxxxx.
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM               MMMMMMMMMM
"*********************************"               "MMMMMMMM"
.xxxxxxxxxxxxxxxxxxxxxxxxxxx.               .xxxxxxxxxxxxxx.
MMMMMMMMMMMMMMMMMMMMMMMMMMMMM               MMMMMMMMMMMMMMMM
"***************************"               "**************"
.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
"**********************************************************"
.xxxxxxxxxxxxxx.               .xxxxxxxxxxxxxxxxxxxxxxxxxxx.
MMMMMMMMMMMMMMMM               MMMMMMMMMMMMMMMMMMMMMMMMMMMMM
"**************"               "***************************"
.xxxxxxxx.               .xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
MMMMMMMMMM               MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
"********"               "*********************************"

ENoor.com                                       Web Software
866-ENOOR-COM                                 for Businesses
www.enoor.com                             Police Departments
info@enoor.com                          and Auto Dealerships

        Copyright (c) 2002, ENoor Creations, Inc.


If you make modifications to this program (see below) please
let me know about it, by emailing gpl-datenav@enoor.com.  If
you use this program, I would appreciate it if you let me
know what you think of it by sending an email to
gpl-datenav@enoor.com.

Please send feature requests to gpl-datenav@enoor.com, and
check back for enhancements at the program's web site, which
is http://www.enoor.com/gpl/date

This program is free software; you can redistribute it
and/or modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later
version.

This program is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.  See the GNU General Public License for more
details.

The GNU General Public License can be found at
http://www.gnu.org/licenses/gpl.txt

REVISION HISTORY
================
1.00  08/08/2002  Aijaz Ansari  Initial Version
1.01  08/17/2002  Aijaz Ansari  Made text selected after every change
1.02  09/01/2002  Aijaz Ansari  Change calls from getUTCDate and
                                getUTCMonth to getDate and getMonth and
                                getYear for today only;
1.03  11/28/2002  Aijaz Ansari  Change keyPress so that Y and R only
                                change year if already at 1/1 or 12/31
                                respectively


TODO
====
o Change variable names to make code self-documenting
o Modify kepPressChange to verify that the date is in a
  valid format.


********************************************************* */


var ssec = 1000;
var smin = ssec * 60;
var shour = smin * 60;
var sday = shour * 24;
var sweek = sday * 7;

var today = new Date();
var tempDate = new Date();
var tdate = wz(today.getDate());
var tmonth = wz(today.getMonth() + 1);
var tyear = today.getFullYear();

var s = "/";
function wz(i) {
  if (i < 10) // >
  {
    return "0"+i;
    }
  else {
    return i;
  }
}

var dim = new Array(99, 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
function getDaysInMonth(m, y)
{
  m = m - 0;
  y = y - 0;

  var n = dim[m];
  if (n == 0) {
    if (y % 4) {
      n = 28;
    }
    else if (y % 400 == 0){
      n = 29
    }
    else if (y % 100 == 0) {
      n = 28
    }
    else {
      n = 29
    }
  }
  return n;
}

function keyPressChange(event, obj){
  return keyPress(event, obj);
}

function keyPress(event, obj){
    kp=(window.event)?window.event.keyCode:event.which;

    if ((kp==0)||(kp==8)||(kp==9)||(kp==13)||(kp==27)) return true;


    kps=String.fromCharCode(kp);

    if (
      kps == '0' ||
      kps == '1' ||
      kps == '2' ||
      kps == '3' ||
      kps == '4' ||
      kps == '5' ||
      kps == '6' ||
      kps == '7' ||
      kps == '8' ||
      kps == '9' ||
      kps == '/'
    ) return true;

    if (kps == 't') {
      obj.value = tmonth + s + tdate + s + tyear;
    }
    else if (kps == '+' || kps == '=') {
      var nd = getDateUTCValue(obj.value);
      nd += sday;
      obj.value = myDateFormat(nd);
    }
    else if (kps == '-' || kps == '_') {
      var nd = getDateUTCValue(obj.value);
      nd -= sday;
      obj.value = myDateFormat(nd);
    }
    else if (kps == '[') {
      var nd = getDateUTCValue(obj.value);
      nd -= sweek;
      obj.value = myDateFormat(nd);
    }
    else if (kps == ']') {
      var nd = getDateUTCValue(obj.value);
      nd += sweek;
      obj.value = myDateFormat(nd);
    }
    else if (kps == 'm' || kps == 'M') {
      var a = getDateUTCFields(obj.value);
      if ((a[2] - 0) > 1) { a[2] = '01' ;  }
      else {
        a[1] = wz((a[1] - 0) - 1);  if (a[1] == 0) { a[1] = '12'; a[0] = a[0] - 1; }
      }
      obj.value = setDateFromFields(a);
    }
    else if (kps == 'h' || kps == 'H') {
      var a = getDateUTCFields(obj.value);
      var dim = getDaysInMonth(a[1], a[0]);
      if (a[2] < dim) { a[2] = dim }
      else {
        a[1] = wz(a[1] - 0 +  1);
        if (a[1] == 13) { a[1] = '01'; a[0] = a[0] - 0 + 1; }
        a[2] = getDaysInMonth(a[1], a[0]);
      }
      obj.value = setDateFromFields(a);
    }
    else if (kps == 'y' || kps == 'Y') {
      var a = getDateUTCFields(obj.value);
      if (a[1] == '01' && a[2] == '01') a[0] = a[0] - 1;
      a[1] = '01';
      a[2] = '01';
      obj.value = setDateFromFields(a);
    }
    else if (kps == 'r' || kps == 'R') {
      var a = getDateUTCFields(obj.value);
      if (a[1] == '12' && a[2] == '31') a[0] = a[0] - 0 + 1;
      a[1] = '12';
      a[2] = '31';
      obj.value = setDateFromFields(a);
    }

    obj.select();

    return false;
}

function setDateFromFields(a) {
  return (a[1] + s + a[2] + s + a[0]);
  }

function myDateFormat(nd) {
  tempDate.setTime(nd);
  var ddate = wz(tempDate.getUTCDate());
  var dmonth = wz(tempDate.getUTCMonth() + 1);
  var dyear = tempDate.getUTCFullYear();
  return(dmonth + s + ddate + s + dyear);
}

function getDateUTCFields(curv) {
  if (curv == '') { curv = tmonth + s + tdate + s + tyear; }
  var f = curv.split("/");
  //  var curm = curv.substr(0, 2) - 0;
  // var curd = curv.substr(3, 2) - 0;
  // var cury = curv.substr(6, 4) - 0;
  var curm = wz(f[0] - 0);
  var curd = wz(f[1] - 0);
  var cury = wz(f[2] - 0);

  var a  = new Array(cury, curm , curd, Date.UTC(cury, curm - 1 , curd, 0, 0, 0, 0));
  return(a);
}

function getDateUTCValue(curv) {
  if (curv == '') { curv = tmonth + s + tdate + s + tyear; }
  //  var curm = curv.substr(0, 2) - 0;
  // var curd = curv.substr(3, 2) - 0;
  // var cury = curv.substr(6, 4) - 0;
  var f = curv.split("/");
  var curm = wz(f[0] - 0);
  var curd = wz(f[1] - 0);
  var cury = wz(f[2] - 0);

  return(Date.UTC(cury, curm - 1 , curd, 0, 0, 0, 0))
}





