var oLast;
var withkey;
var garrDates = new Array(49);
var goldRealDate;
var DATEDIVIDER;
var DATEFORMAT;
var gfixdate;
var FIRSTDOW;
var FIRSTWOY;
var WeekDays;
var MonthNames;

function UpdateDate()
{
	// convert to a real date
	var realDate = jsDateDecode(gfixdate);
	
	var fixday = realDate.getDate();
	var fixmonth = realDate.getMonth();
	var fixyear = realDate.getFullYear();
	if (MonthNames.length == 12)
		document.getElementById("txtToday").innerHTML = MonthNames[fixmonth] + "-" + fixyear;
	
	var samemonth = false;
	if (goldRealDate != null) 
	{
		if (realDate.getFullYear() == goldRealDate.getFullYear() && realDate.getMonth() == goldRealDate.getMonth()) 
		{
			samemonth = true;
		}
	}
	
	// locate first date in month
	var dstart = new Date(fixyear,fixmonth,1,0,0,0);
	
	// now locate date of first weekday in that week
	// daynumber: 0=sun, 1=mon, 2=tue ...
	var daynumber = dstart.getDay()-FIRSTDOW+1;
	if (daynumber < 0) daynumber =+ 6;
	var FirstWeekDay = new Date(dstart.setDate(dstart.getDate() - daynumber));
	var dstart = FirstWeekDay;
	
	// Set week numbers
	if (samemonth == false) 
	{
		var iw;
		var elm;
		var weekcells = document.getElementsByName("calWeekText");
		for (iw=0; iw<weekcells.length; iw++) 
		{
			elm = weekcells[iw];
			elm.innerHTML = getWeek(new Date(dstart.getFullYear(), dstart.getMonth(), dstart.getDate() + iw*7 + 6));
		}
	}
	
	// update date-matrix (always 49 days)
	var id;
	var datecells = document.getElementsByName("calDateText");
	for (id=0; id<datecells.length; id++)
	{
		var idd = new Date(dstart.getFullYear(), dstart.getMonth(), dstart.getDate() + id);
		var itd = datecells[id];
		
		if (samemonth == false) 
		{
			garrDates[id] = idd;
			itd.innerHTML = idd.getDate();
			itd.className = "WLCALDAYOUT";
		}
		
		if (idd.getMonth() == fixmonth) 
			itd.className = "WLCALDAY";
		
		if (daysElapsed(new Date(realDate),new Date(idd)) == 0) 
			itd.className = "WLCALDAYSEL";
	}
	
	goldRealDate = realDate;
}

// pressed specific date in matrix
function SelectDate(id)
{
	var newdate;
	if (id<0 || id>48)
		newdate = new Date();
	else
		newdate = new Date(garrDates[id]);
	gfixdate = jsDateEncode(newdate);
	// requery page with new fixdate
	RefreshPage()
}

// pressed one of the advance buttons
// advance fixdate accordingly
// dont requery webpage
function Advance(dd, dm, dy) 
{
	var olddate = jsDateDecode(gfixdate);
	var newdate;
	
	if (dd != 0)
		newdate = new Date(olddate.getFullYear(), olddate.getMonth(), olddate.getDate() + dd*7);
	else if (dm != 0) 
		newdate = new Date(olddate.getFullYear(), olddate.getMonth() + dm, olddate.getDate());
	else if (dy != 0)
		newdate = new Date(olddate.getFullYear() + dy, olddate.getMonth(), olddate.getDate());
	else
		newdate = new Date();
	// encode the new date			
	gfixdate = jsDateEncode(newdate);
	// refresh page accordingly
	UpdateDate();
}

function getWeek(when)
{
	try
	{
		return vbgetWeek(when.getFullYear(),when.getMonth()+1,when.getDate(), FIRSTDOW, FIRSTWOY);
	}
	catch(err)
	{
	}
	
	if (FIRSTWOY==1)
	{
		// first week is the one with jan.1 (american)
		var year = when.getFullYear();
		var newYear = new Date(year,0,1);
		var offset = 7 + 1 - newYear.getDay();
		
		if (offset == 8) offset = 1;
		
		var daynum = ((Date.UTC(year,when.getMonth(),when.getDate(),0,0,0) - Date.UTC(year,0,1,0,0,0)) /1000/60/60/24) + 1;
		
		var weeknum = Math.floor((daynum-offset+7)/7)+1;
		
		if (newYear.getDay()==0) weeknum=weeknum-1;
		
		if (weeknum == 0)
		{
		    var prevNewYear = new Date(year-1,0,1);
		    var prevOffset = 7 + 1 - prevNewYear.getDay();
		    if (prevOffset == 2 || prevOffset == 8) weeknum = 53; else weeknum = 52;
		}
		
		return weeknum;
	}
	else if (FIRSTWOY==2 || FIRSTWOY==3)
	{
		// implementation below:
		//   first week is the one with a thursday (european)
		//
		// setting meaning:
		//   2 = first week containing at least 4 days is the first week
		//   3 = first full week following 1/1 is the first week
		var year = when.getFullYear();
		var newYear = new Date(year,0,1);
		var modDay = newYear.getDay();
		
		if (modDay == 0) modDay=6; else modDay--;
		
		var daynum = ((Date.UTC(year,when.getMonth(),when.getDate(),0,0,0) - Date.UTC(year,0,1,0,0,0)) /1000/60/60/24) + 1;
		
		if (modDay < 4) {
		    var weeknum = Math.floor((daynum+modDay-1)/7)+1;
		}
		else {
		    var weeknum = Math.floor((daynum+modDay-1)/7);
		    if (weeknum == 0) {
		        year--;
		        var prevNewYear = new Date(year,0,1);
		        var prevmodDay = prevNewYear.getDay();
		        if (prevmodDay == 0) prevmodDay = 6; else prevmodDay--;
		        if (prevmodDay < 4) weeknum = 53; else weeknum = 52;
		    }
		}
		
		if (weeknum == 53) {
		    if (getWeek(new Date(when.getFullYear(),when.getMonth(),when.getDate()+7)) == 2) weeknum = 1;
		}
		
		return weeknum;
	}
}

function daysElapsed(date1,date2) {
var difference =
    Date.UTC(date1.getFullYear(),date1.getMonth(),date1.getDate(),0,0,0)
  - Date.UTC(date2.getFullYear(),date2.getMonth(),date2.getDate(),0,0,0);
return difference/1000/60/60/24;
}

// selected a week - change viewtype and fixdate
function SelectWeek(weekid)
{
	var newdate = new Date(garrDates[weekid*7]);
	gfixdate = jsDateEncode(newdate);
	// select the week view
	document.frmArguments.ViewType.value = 3;
	// requery with new fixdate
	RefreshPage();
}

function JumpDate(newfix, newvt)
{
	if (newfix=="")
		gfixdate = jsDateEncode(new Date());
	else
		gfixdate = String(newfix);

	if (newvt>=0 && !withkey)  
		document.frmArguments.ViewType.value = newvt;
		
	RefreshPage();
}

