// Date and Time utilities in JavaScript
// Nicola Zordan
// 30 June 2004
// www.NicolaZordan.com
// Nicola@Zordan.net

// Write Date Input
function DateInputHTML(field, value) {
 return ('<input type="text" name="'+field+'" value="'+value+'" size="10">');
};
function WriteDateInputClient(field, value) {
 document.write(DateInputHTML(field,value));
};
function WriteDateInputServer(field, value) {
 Response.write(DateInputHTML(field,value));
};

// Write Time Input
function TimeInputHTML(field, value) {
 return ('<input type="text" name="'+field+'" value="'+value+'" size="5">');
};
function WriteTimeInputClient(field, value) {
 document.write(TimeInputHTML(field,value));
};
function WriteTimeInputServer(field, value) {
 Response.write(TimeInputHTML(field,value));
};

function Remainder(n,d) {
 return(n-Math.floor(n/d)*d);
};

// Time

function JavaTime2SQLTimeFormat (time) {
  return(NAZTime2SQLTime(JavaTime2NAZTime(time)));
};

function NAZTime2SQLTimeFormat (NAZTime) {
// SQL Date format: #h:m:s#
  return ('#'+NAZTime+'#');
};

            

function NAZValidateTimeInputHM(InputText) {
var hms,h,m,s,hf;
 hms=InputText.split(':');
// if (hms.length<2) return(false);
// if (isNaN(h=parseInt(hms[0],10))) return(false);
 if (isNaN(h=parseFloat(hms[0]))) return(false);
//Float
 hf=Math.floor((h-Math.floor(h))*60);
 h=Math.floor(h);
 m=0;
 if (hms.length>1 && isNaN(m=parseInt(hms[1],10))) return(false);
 if (m==0) m=hf;
 s=0;
 if (hms.length>2 && isNaN(s=parseInt(hms[2],10))) return(false);
// return ([h,m,s]);
// if (h<1 || h>24) return(false);
// OK Durations of more than 24 hours
 if (h<0) return(false);
 if (m<0 || m>59) return(false);
 if (s<0 || s>59) return(false);
 return(NAZTimeHM (h,m));
};



function NAZValidateTimeInput(InputText) {
var hms,h,m,s;
 hms=InputText.split(':');
// if (hms.length<2) return(false);
 if (isNaN(h=parseInt(hms[0],10))) return(false);
 m=0;
 if (hms.length>1 && isNaN(m=parseInt(hms[1],10))) return(false);
 s=0;
 if (hms.length>2 && isNaN(s=parseInt(hms[2],10))) return(false);
// return ([d,m,y]);
// if (h<1 || h>24) return(false);
// OK Durations of more than 24 hours
 if (h<0) return(false);
 if (m<0 || m>59) return(false);
 if (s<0 || s>59) return(false);
 return(NAZTimeHMS (h,m,s));
};

function NAZTimeHMS2JavaTime (NAZTime) {
//--changed
var hms,h,m,s,j, InputText=NAZTime;
 hms=InputText.split(':');
 h=parseInt(hms[0]);
 m=parseInt(hms[1]);
 s=0;
 if (hms.length>2) s=parseInt(hms[2]);
 j=new Date(0,0,0,0,0,0,0);
 j.setHours(h);
 j.setMinutes(m);
 j.setSeconds(s);
 return(j);
};

function JavaTimeDurationDecimal (time) {
var h,m,s,a,hms;
  a=JavaTimeDurationArray (time);
  h=a[0];
  m=a[1]*100/60;
  s=a[2]*100/60;
  return(Math.floor((h+m/100+s/10000)*10000)/10000); 
};

function SQLDurationDecimal2JavaTime (duration) {
var t,h,m,s,d;
  t=duration*24;
  h=Math.floor(t);
  m=Math.floor((t-h)*100);
  s=Math.floor((t-h-m/100)*10000);
  m=m*60/100;
  s=s*60/100;
//Response.write ('<br>'+duration+' '+t+' '+h+':'+m+':'+s);
  d=new Date(0,0,0,0,0,0,0);
  d.setHours(h);
  d.setMinutes(m);
  d.setSeconds(s);
  return(d); 
};


function JavaTimeDuration2NAZTimeHM (time) {
var h,m,s,a,hms;
  a=JavaTimeDurationArray (time)
  h=a[0];
  m=a[1];
  s=a[2];
  return(NAZTimeHM (h,m,s)); 
};

function JavaTime2NAZTimeHM (time) {
var h,m,s,a,hms;
  a=JavaTimeArray (time)
  h=a[0];
  m=a[1];
  s=a[2];
  return(NAZTimeHM (h,m,s)); 
};


function JavaTimeDuration2NAZTime (time) {
var h,m,s,a,hms;
  a=JavaTimeDurationArray (time)
  h=a[0];
  m=a[1];
  s=a[2];
  return(NAZTimeHMS (h,m,s)); 
};

function JavaTime2NAZTime (time) {
var h,m,s,a,hms;
  a=JavaTimeArray (time)
  h=a[0];
  m=a[1];
  s=a[2];
  return(NAZTimeHMS (h,m,s)); 
};

function JavaTimeArray (time) {
var d,h,m,s,d;
  ms=time.getTime();
//  s=Math.floor(ms/1000);
//  m=Math.floor(s/60);
//  h=Math.floor(m/60);
//  m=Remainder(m,60);
//  s=Remainder(s,60);
//  h=Remainder(h,24);
  s=time.getSeconds();
  m=time.getMinutes();
  h=time.getHours();
//  d=time.getDay()
//  h=h+d*24;
  return([h,m,s]);
};

function JavaTimeDurationArray (time) {
var d,h,m,s,ms,hms,Zd,a;
//  Zd=new Date(0,0,0,0,0,0,0);
  Zd=new Date(0,0,1,0,0,0,0);
  a=JavaTimeArray (time); 
  h=a[0];
  m=a[1];
  s=a[2];
  // days
  d=new Date(time);
  z=0;
  while (d>=Zd) {
   h=h+24;
   d.setDate(d.getDate()-1);
  };
  return([h,m,s]);
};

function NAZTimeHMS (h,m,s) {
var hms;
  hms=NAZTimeHM (h,m); 
  hms=hms+':';
  if (s<10) hms=hms+'0';
  hms=hms+s;  
  return(hms);
};

function NAZTimeHM (h,m) {
var hm;
  hm=h+'';
  hm=hm+':';
  if (m<10) hm=hm+'0';
  hm=hm+m;
  return(hm);
};


// Client Functions
var DateTimeNow=new Date();
function WriteDateSelector(field) {
var dt=JavaDate2NAZDate(DateTimeNow);
 document.write('<input type="text" length="12" value="'+dt+'" readonly>');
};

function WriteTimeSelector(field) {
};



// Input-Output

function JavaDate2SQLDateFormat (date) {
  return(NAZDate2SQLDate(JavaDate2NAZDate(date)));
};

function NAZDate2SQLDateFormat (NAZDate) {
// SQL Date format: #m/d/y#
  return ('#'+NAZDate+'#');
};

function NAZValidateDateInput(InputText) {
var dmy,d,m,y;
 dmy=InputText.split('/');
 if (dmy.length<3) return(false);
 if (isNaN(m=parseInt(dmy[0],10))) return(false);
 if (isNaN(d=parseInt(dmy[1],10))) return(false);
 if (isNaN(y=parseInt(dmy[2],10))) return(false);
// return ([d,m,y]);
 if (d<1 || d>31) return(false);
 if (m<1 || m>12) return(false);
 if (y<0 || y>9999) return(false);
 return(NAZDateYMD (y,m,d));
};

function NAZDateInput (InputText) {
var y, m, d, dmy, date;
//// Input text in format   dD/mM/yyYY
// dmy=InputText.split('/');
//// alert(dmy);
// d=parseInt(dmy[0]);
// m=parseInt(dmy[1]);
// y=parseInt(dmy[2]);
 return(NAZDateYMD (y,m,d));
};

function NAZValidateDateInput2JavaDate(InputText) {
var nD;
 if (nD=NAZValidateDateInput(InputText)) return (NAZDate2JavaDate(nD));
// return (NAZDate2JavaDate(NAZDateInput(InputText)));
   return(false);
};

// NAZ_Date_manipulation

var NAZMonthNames=['no month','January','February','March','April','May','June','July','August','September','October','November','December'];
var NAZMonthNamesShort=['mth','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
var NAZDayNames=['no day','Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
var NAZDayNamesShort=['day','Sun','Mon','Tue','Wed','Thu','Fri','Sat'];

var NAZMonthsDays=[0,31,28,31,30,31,30,31,31,30,31,30,31];
function NAZMonthDays (year,month) {
var MonthsDays=[0,31,28,31,30,31,30,31,31,30,31,30,31];
  if (NAZLeapYear(year)) { MonthsDays[2]=29; }
  return (MonthsDays[month]);
};
function NAZLeapYear (year) {
var DateTMP;
  DateTMP= new Date();
  DateTMP.setFullYear(year);
  DateTMP.setMonth(1);
  DateTMP.setDate(29);
  return(DateTMP.getDate()==29);
};

function NAZDate (date) {
var dt=date, y,m,d;
 if (dt.length < 10) { dt='0'+dt};
 y=dt.substr(6,4);
 d=dt.substr(3,2);
 m=dt.substr(0,2);
 dt=m+'/'+d+'/'+y;
 return(dt);
};
function NAZDateDay (date) {
var dt=NAZDate(date),d;
 d=dt.substr(3,2);
 return(parseInt(d,10));
};
function NAZDateMonth (date) {
var dt=NAZDate(date),m;
 m=dt.substr(0,2);
 return(parseInt(m,10));
};
function NAZDateYear (date) {
var dt=NAZDate(date),y;
 y=dt.substr(6,4);
 return(parseInt(y,10));
};
function NAZDateYMD (year,month,day) {
var dt, y,m,d;
 y='';
 if (year < 100) {
    if (year<60) {y='20'+y;}
      else {y='19'+y;};
 };
 if (year < 10) {y=y+'0';};
 y=y+year;
 m='';
 if (month < 10) {m='0'+m;};
 m=m+month;
 d='';
 if (day < 10) {d='0'+d;};
 d=d+day;
 dt=m+'/'+d+'/'+y;
 return(dt);
};

function JavaDate2NAZDate (javaDate) {
//alert('Degub:'+javaDate);
  return(NAZDateYMD(javaDate.getFullYear(),javaDate.getMonth()+1,javaDate.getDate()));
};

function NAZDate2JavaDate (NAZDate) {
//var date=new Date();
// date.setFullYear(NAZDateYear(NAZDate));
// date.setMonth(NAZDateMonth(NAZDate)-1);
// date.setDate(NAZDateDay(NAZDate));
var date=new Date(NAZDateYear(NAZDate), NAZDateMonth(NAZDate)-1, NAZDateDay(NAZDate));
  return(date);
};



// /NAZ_Date_manipulation


