var MONTHS = Array('Jan','Feb','Mar','Apr','May','Jun','July','Aug','Sep','Oct','Nov','Dec');
var DAYS = Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
var secNum = new Number(1000);
var minNum = new Number(60 * 1000);
var hrNum = new Number(minNum * 60);
var dayNum = new Number(hrNum * 24);
var wkNum = new Number(dayNum * 7);
var bzwk = new Number(dayNum * 5);

var Tdy = new Date();
var TimeZoneOffset = Tdy.getTimezoneOffset();


var blnAlerted = new Boolean();
blnAlerted = true;

//################
//function ResetDisplay () {
//	intCount = intCount + 1;
//	var SDay = new Date();
//	var Sumptin = RemainingTime(SDay,EDay,1);
//	testid.innerHTML = "There are " + Sumptin[0].toString() + " years, " + Sumptin[1].toString() + " Months, " + Sumptin[2].toString() + " days, " + Sumptin[3].toString() + ":" + Sumptin[4].toString() + ":" + Sumptin[5].toString() + "<BR>looped " + intCount + " times";
////	testid.innerHTML = "looped " + intCount + " times";
//}

//################
function localtime(jTime) {
	var sSec = jTime.getSeconds();
	var sMin = jTime.getMinutes();
	var sHour = jTime.getHours();
	var sMDay = jTime.getDate();
	var sMon = jTime.getMonth();
	var sYear = jTime.getYear();
	var sWDay = jTime.getDay();

	// For the Year Day, we'll have to compute:
	// the days in the month up to the current month (but not the current month)
	var curDayCount = new Number(0);
	var curMthCount = new Number(0);
	
	while (curMthCount < sMon){
		curDayCount += DaysInMonth(curMthCount,sYear);
		curMthCount += 1;
	}	// and add sMDay to that
	curDayCount += sMDay;

	var sYDay = curDayCount;
	return [sSec, sMin, sHour, sMDay, sMon, sYear, sWDay, sYDay];
}
//################
function timelocal(Sec,Min,Hour,Day,Mth,Year){
	var JTime = new Date(Year,Mth,Day,Hour,Min,Sec);

	return JTime;
}

//################
function RemainingTime (StartTime, EndTime, Collective){
var Yrs = new Number();		var Mths = new Number();	var Wks = new Number();
var Days = new Number();	var Hours = new Number();	var Min = new Number();	var Sec = new Number();

	if ((StartTime == null) && (EndTime == null)) { return false; }

	if (Collective == 1) {
		var WorkTime = StartTime;
		Yrs = DateDiff("yr", WorkTime, EndTime);
		WorkTime.setTime(DateAdd("yr", WorkTime, Yrs));
		Mths = DateDiff("mth", WorkTime, EndTime);
		WorkTime = DateAdd("mth",WorkTime, Mths);
		Days = DateDiff("day", WorkTime, EndTime);
		Wks = DateDiff("wk", WorkTime, EndTime);
		WorkTime = DateAdd("day", WorkTime, Days);
		Hours = DateDiff("hr", WorkTime, EndTime);
		WorkTime = DateAdd("hr", WorkTime, Hours);
		Min = DateDiff("min", WorkTime, EndTime);
		WorkTime = DateAdd("min", WorkTime, Min);

		Sec = DateDiff("sec", WorkTime, EndTime);	//# subtraction, but call the function anyway..

	} else {
		Min = DateDiff("min", StartTime, EndTime);
		Hours = DateDiff("hr", StartTime, EndTime);
		Days = DateDiff("day", StartTime, EndTime);
		Wks = DateDiff("wk", StartTime, EndTime);
		Mths = DateDiff("mth", StartTime, EndTime); 
		Yrs = DateDiff("yr", StartTime, EndTime);
		Sec = DateDiff("sec", StartTime, EndTime);	//# subtraction, but call the function anyway..
	}

//# Now, we only want one Minus sign so, if we have any then we'll use that:
	if (Yrs < 0 || Mths < 0 || Days < 0 || Hours < 0 || Min < 0 || Sec < 0){
		var re = new RegExp(/-/);
		Yrs = Yrs.replace(re,"");
		Mths = Mths.replace(re,"");
		Days = Days.replace(re,"");
		Hours = Hours.replace(re,"");
		Min = Min.replace(re,"");
		Sec = Sec.replace(re,"");
		Yrs = "-" + Yrs;
	}

	if (Hours < 10) { Hours = "0" + Hours; }
	if (Min < 10) { Min = "0" + Min; }
	if (Sec < 10) { Sec = "0" + Sec; }
	
	return [Yrs, Mths, Days, Hours, Min, Sec, Wks];
}

//################//#  Interval Values:  hr,min,sec,day,wk,mth,yr
function DateDiff (Interval, StartDate, EndDate) {
var Diff;			var StartMin;
var EndMin;			var StartHours;
var EndHours;		var StartDays;
var EndDays;		var StartMonth;
var EndMonth;		var StartYear;
var EndYear;		var Sign = "";
var Start = new Date();
var End = new Date();

	Interval = Interval.toLowerCase();

	if (EndDate > StartDate){
		Start.setTime(StartDate);
		End.setTime(EndDate);
	} else {
		Sign = "-";
		Start.setTime(EndDate);
		End.setTime(StartDate);
	}

	var Delta = parseInt(End - Start);

	if (Interval == "yr"){
		var arySTime = localtime(Start);
		var aryETime = localtime(End);
		
		var SSec = arySTime[0];				var SMin = arySTime[1];
		var SHour = arySTime[2];			var SMth = arySTime[3];
		var SDay = arySTime[4];				var SYear = arySTime[5];
		var SWkDay = arySTime[6];			var SYrDay = arySTime[7];
		
		var ESec = aryETime[0];				var EMin = aryETime[1];
		var EHour = aryETime[2];			var EDay = aryETime[3];
		var EMth = aryETime[4];				var EYear = aryETime[5];
		var EWkDay = aryETime[6];			var EYrDay = aryETime[7];
		
//		(SSec,SMin,SHour,SDay,SMth,SYear,SWkDay,SYrDay) = localtime(Start);
//		(ESec,EMin,EHour,EDay,EMth,EYear,EWkDay,EYrDay) = localtime(End);

		if (EYear == SYear){
			Diff = "0";
		} else if (EYear - SYear > 1){
			while (EYear - SYear > 1){
				Diff += 1;
				EYear -= 1;
			}
		} else {
			DaysLeft = DaysInYear(SYear) - SYrDay;
			DaysLeft += EYrDay;
			if (DaysLeft >= 365){ Diff = 1; } else { Diff = "0"; }
		}
	} else if (Interval == "mth"){
		var CurYr = (localtime(Start))[5];
		var CurMth = (localtime(Start))[4];
		var WorkDate = new Date(Start);
		var Diff = new Number(0);
		
		if (CurYr < 1900) { CurYr += 1900; }
		
		while (WorkDate < End){
			CurMth = (localtime(WorkDate))[4];
			CurYr = (localtime(WorkDate))[5];
			var DaysThisMth = DaysInMonth(CurMth, CurYr);
			WorkDate.setTime(WorkDate.getTime() + (DaysThisMth * dayNum));
			Diff ++;
		}
		Diff --; //# Cause the above loop will put us over... 
		
		//# Now, if the workdate is > than the end date, then what?
		if (WorkDate < End) {
			//# Hmm, shouldn't get here... 
			Diff = 0;
		}
	} else if (Interval == "wk"){
		Diff = parseInt(Delta / wkNum);
	} else if (Interval == "day"){
		Diff = parseInt(Delta / dayNum);
	} else if (Interval == "hr"){
		Diff = parseInt(Delta / hrNum);
	} else if (Interval == "min"){
		Diff = parseInt(Delta / minNum);
	} else if (Interval == "sec"){
		Diff = parseInt(Delta / secNum);
	} else {
		Diff = "-0";
	}

	if (Diff == null || Diff == "") { Diff = "0"; Sign = ""; }
	return Sign + Diff.toString();
}

//################//#  Interval Values:  hr,min,sec,day,wk,mth,yr
function DateAdd (Interval, StartDate, Unit){
	Interval = Interval.toLowerCase();
	Unit = parseInt(Unit);
	var dtStartDate = new Date(StartDate);
	var StartMS = dtStartDate.getTime();

	var Year = new Number();		var Mth = new Number();		var Sec = new Number();
	var Min = new Number();		var Hour = new Number();		var Day = new Number();

	if (Interval == "sec"){
		StartMS += Unit; 
	} else if (Interval == "min"){
		StartMS += (Unit * minNum);
	} else if (Interval == "hr"){
		StartMS += (Unit * hrNum);
	} else if (Interval == "day"){
		StartMS += (Unit * dayNum); 
	} else if (Interval == "wk"){
		StartMS += (Unit * wkNum); 
	} else if (Interval == "mth"){
		var arySTime = localtime(StartDate);
		
		var Sec = new Number(arySTime[0]);
		var Min = new Number(arySTime[1]);
		var Hour = new Number(arySTime[2]);
		var Day = new Number(arySTime[3]);
		var Mth = new Number(arySTime[4]);
		var Year = new Number(arySTime[5]);
		var WkDay = new Number(arySTime[6]);
		var YrDay = new Number(arySTime[7]);

		if (Unit < 0) {		//# We're actually subtracting
			Mth += Unit;
			while (Mth < 0){
				Year -= 1;
				Mth += 12;
			}
		} else if (Unit > 0){
			while (Unit >= 12){
				Year += 1;
				Unit -= 12;
			}
			Mth += Unit;
			if (Mth > 11){
				Year += 1;
				Mth -= 12;
			}
		}	//Note, if the month is February, and the day is 30 or 31 (also 29 on non-leap years) 
			//	then this will return March + the number of days > than the days in February for that year
		if (Year < 1900) {
			Year += 1900;
		}
		StartMS =  timelocal(Sec,Min,Hour,Day,Mth,Year);
	} else if (Interval == "yr"){
		var arySTime = localtime(StartDate);
		
		var Sec = new Number(arySTime[0]);
		var Min = new Number(arySTime[1]);
		var Hour = new Number(arySTime[2]);
		var Day = new Number(arySTime[3]);
		var Mth = new Number(arySTime[4]);
		var Year = new Number(arySTime[5]);
		var WkDay = new Number(arySTime[6]);
		var YrDay = new Number(arySTime[7]);
		Year = Year + Unit;
		if (Year < 1900) {
			Year += 1900;
		}
		StartMS =  timelocal(Sec,Min,Hour,Day,Mth,Year);
	} else { return 0; }
	return StartMS;	
}

//################
function DaysInMonth (mth, yr){
	var days;
	if (mth == 0) { days = 31; }
	 else if ((mth == 1) && ((yr % 4) == 0))  { days = 29; }
	 else if ((mth == 1) && ((yr % 4) != 0))  { days = 28; }
	 else if (mth == 2) { days = 31; }
	 else if (mth == 3) { days = 30; }
	 else if (mth == 4) { days = 31; }
	 else if (mth == 5) { days = 30; }
	 else if (mth == 6) { days = 31; }
	 else if (mth == 7) { days = 31; }
	 else if (mth == 8) { days = 30; }
	 else if (mth == 9) { days = 31; }
	 else if (mth == 10) { days = 30; }
	 else if (mth == 11) { days = 31; }
	else { days = 0; }
	return days;
}

//################
function DaysInYear (PDate){
	var Yr;
	if (PDate > 30000) { //# then we can ASSume it's a Perl time value
		(Yr) = (localtime(PDate))[5];
	} else {
		Yr = PDate;
	}
	if ((Yr % 4) == 0) { return 366; }
	else { return 365; }
}

//################
function SecondsInYear (JDate){
	var Yr = (localtime(JDate))[5];
	var NumReturn = (DaysInYear(Yr) * 86400);
	return NumReturn;
}
