//  This code is based on "The ISO Week Date Calendar"
//  http://www.personal.ecu.edu/mccartyr/isowdcal.html
//  (c) Copyright 1998 by Rick McCarty
//  Used with kind permission
//  Modified for adaptation by Tom Huizenga

var yearNumber = 0;
var dayNumber = 0;
var monthNumber = 0;
var MonthLength = new Array();
        MonthLength[0] = 31; MonthLength[1] = 28; MonthLength[2] = 31; MonthLength[3] = 30; 
	MonthLength[4] = 31; MonthLength[5] = 30; MonthLength[6] = 31; MonthLength[7] = 31;
	MonthLength[8] = 30; MonthLength[9] = 31; MonthLength[10] = 30;

var today;
var weekNumber = 0;
var MonthsSum = 0;
var sum = 0;
var startDay;
var LY = false;
var lastYearLY = false;
var ISOyear = 0;
var ISOLY = false;
var weekDay;
var Day = new Array();
	Day[1]= "1<br><i>Mon";  Day[2]= "2<br><i>Tue";   Day[3]= "3<br><i>Wed";
	Day[4]= "4<br><i>Thu";  Day[5]= "5<br><i>&nbsp;Fri ";   Day[6]= "6<br><i>&nbsp;Sat ";
	Day[7]= "7<br><i>Sun";


var y;
var dayEntry;

function findNEWstart(form) {

document.forms[0].button2.value = "Convert !";

var r = form.YearBox.value;
var s = r.charAt(0);

while((r.length > 2 ) && (s==0)) {
	r = prompt("Please re-enter the year number without the initial 0.","");
	s = r.charAt(0);
	form.YearBox.value = r;
	yearNumber = eval(r);
			};

yearNumber = eval(form.YearBox.value);

while(yearNumber < -10000) {
	yearEntry = prompt("Please enter a year no earlier than -10000", "");
	form.YearBox.value = yearEntry ;
	yearNumber = eval(yearEntry);
			};


var yearNumber0 = yearNumber - 1;
var year = yearNumber0 % 100;
var century = yearNumber0 - year;
var y; var z; 
var x = century % 400;
	if(x==0  ){y=2};
	if((x==100) || (x== -100)) {y=0};
	if((x==200) || (x== -200)) {y=5};
	if((x==300) || (x== -300)) {y=3};

if(year > 3) { 
	z = ((year + ((year - (year % 4)) / 4)) % 7);
	} else { z = year;
		};
startDay = ((y + z + 6) % 7);


if(startDay == 0) {
		startDay = 7 ;
		};
 
LY = false;
if(((yearNumber % 4 == 0) && (yearNumber % 100 != 0)) || (yearNumber % 400 == 0)) {
	LY = true; 
	MonthLength[1] = 29;
	} else {
		MonthLength[1] = 28;
			};

dayEntry = form.DayBox.value;
monthEntry = form.months.selectedIndex;

while(dayEntry < 1) {
	dayEntry = prompt("Please enter a day of the month lager than 0.", "");
		form.DayBox.value = dayEntry ;
			};


while(dayEntry.length > 2) {
	dayEntry = prompt("Please enter a day of the month with less that 3 digits.", "");	
		form.DayBox.value = dayEntry;	
			}; 

while(((monthEntry == 0) || (monthEntry == 2) || (monthEntry == 4) || (monthEntry == 6) ||
	(monthEntry == 7) || (monthEntry == 9) || (monthEntry == 11)) &&
	((dayEntry < 1) || (dayEntry > 31))) {
		dayEntry = prompt("Please enter a number between 1 and 31.", "");
		form.DayBox.value = dayEntry ;
		} ;

while(((monthEntry == 3) || (monthEntry == 5) || (monthEntry == 8) || (monthEntry == 10)) &&
	((dayEntry < 1) || (dayEntry > 30))) {
		dayEntry = prompt("Please enter a number between 1 and 30.", "");
		form.DayBox.value = dayEntry ;
		} ;
if(LY) {
	while((monthEntry == 1) && (dayEntry > 29)) {
		dayEntry = prompt("Please enter a number between 1 and 29.", "");
		form.DayBox.value = dayEntry ;
			};
		} else {
			while((monthEntry == 1) && (dayEntry > 28)) {
				dayEntry = prompt("Please enter a number between 1 and 28.", "");
				form.DayBox.value = dayEntry ;
					};
				};		

MonthsSum = 0;
for(i=0; i < monthEntry; ++i) {
	MonthsSum += MonthLength[i];
	};

sum = MonthsSum + eval(dayEntry);

var a = sum - (8 - startDay );
var b = (a + 7) % 7;
if(b == 0) {
	weekNumber = a / 7;
		} else {
		weekNumber = 1 + ((a - b) / 7);
			};

if(startDay < 5) {
	++weekNumber; 
		};

var q = (startDay + sum) % 7;
	if(q < 1) {
		q = 7 };
weekDay = q - 1;
	if(weekDay < 1) {
		weekDay = 7 };

findISOdate();
displaySelected();
};


function findCurrentsum() {
today = new Date();
monthNumber = today.getMonth();
dayNumber = today.getDate();
yearNumber = today.getYear();

if(yearNumber < 2000) { 
	yearNumber+=1900 ;
	};

LY = false;
if(((yearNumber % 4 == 0) && (yearNumber % 100 != 0)) || (yearNumber % 400 == 0)) {
        LY = true;
	MonthLength[1] = 29;
	} else {
		MonthLength[1] = 28;
		};

for(i=0; i < monthNumber; ++i) {
	MonthsSum += MonthLength[i];
		};

sum = (MonthsSum + dayNumber);

weekDay = today.getDay();
	if(weekDay==0) { weekDay+=7 };
var yearWeeks1 = (sum - weekDay);
var weekFragment = ((yearWeeks1 + 7) % 7);
var yearWeeks2 = (yearWeeks1 - weekFragment);

weekNumber = ((yearWeeks2 + 7) / 7);


if(weekFragment > 3) {
	weekNumber +=1 ;
	};

if(weekFragment==0) {
	startDay=1 ;  
		} else {
			startDay = (8 - weekFragment);
			};

findISOdate();
displayCurrent();
};


function findISOdate() {

lastYearLY = false;

if((((yearNumber -1) % 4 == 0) && ((yearNumber-1) % 100 != 0)) || 
	((yearNumber-1) % 400 == 0)) {
        	lastYearLY = true;
		};

ISOyear = yearNumber;

//for years beginning in the last week of the previous year:

if(sum < weekDay) {
	if((startDay == 5) || (lastYearLY && (startDay == 6))) {
		weekNumber = 53; 
		ISOyear -= 1;
		} else {
			if(startDay > 4) {
				weekNumber = 52; 
				ISOyear -= 1;		
				};
			};
		};

//for years ending in week 1 of the following year:	

if((startDay < 3) || ((startDay == 3) && !LY) || ((startDay == 7) && (sum == 366))) {
	if((LY && (sum > 365 - startDay)) || (!LY && (sum > 365 - startDay))) {
			weekNumber = 1; 
			ISOyear += 1 ;
		};
	};

if(weekNumber < 10) { weekNumber = "0" + weekNumber };

ISOLY = false;
if(((ISOyear % 4 == 0) && (ISOyear % 100 != 0)) || (ISOyear % 400 == 0)) {
        ISOLY = true;
	};
};





function displayCurrent() {

if(ISOyear == yearNumber) { y = "the year"; 
	} else { y = yearNumber }; 

if(ISOyear == yearNumber) { v = y;
	} else { v = "year " + y };

document.write("Dag van het jaar: " + sum + "<br>");
document.write("Weeknummer: " + weekNumber + "<br>");
document.write("ISO weekdatum: " + ISOyear + "-W" + weekNumber + "-" + weekDay );

// parent.B.document.close();
displayTables();
};


function displaySelected() {

if(ISOyear == yearNumber) { y = "the year"; 
	} else { y = yearNumber }; 

if(ISOyear == yearNumber) { v = y;
	} else { v = "year " + y };

var monthName = new Array();
	monthName[0] = "January";  monthName[1] = "February";  monthName[2] = "March";
	monthName[3] = "April";    monthName[4] = "May";       monthName[5] = "June";
	monthName[6] = "July";     monthName[7] = "August";    monthName[8] = "September";
	monthName[9] = "October";  monthName[10] = "November"; monthName[11] = "December";

displayTables();
};




function displayTables() {

var d;

//fixes the initial d number for left table

if(lastYearLY) { 
	d = 368 - startDay;
		} else {
			d = 367 - startDay;
				};

var w = 1;

if(weekNumber > 18) {
	w = 18;
	if(startDay > 4) {
		d = 128 - startDay;
			} else {
				d = 121 - startDay }; 
				};
	
if(weekNumber > 35) { 
	w = 35;
	if(startDay > 4) { 
		d = 247 - startDay ;
			} else {
				d = 240 -startDay };
				};

if(weekNumber > 44) {
	if((ISOLY && (startDay == 6)) || (!ISOLY && (startDay == 7))) {
		w = 35, d = 247 - startDay };
		
	if(ISOLY) {
		if(startDay==5) {
			w = 44, d = 310 - startDay };
			} else {
			if((startDay == 5) || (startDay == 6)) {
				w = 44, d = 310 - startDay };
				};

	// for years ending in week 53:
		
	if((startDay == 4) || (LY && (startDay == 3))) {
		w = 45; d = 310 - startDay ;
			};  
		};
	

//for years beginning in W52 or W53

if((weekNumber > 51) && (sum < 4)) {

	if(startDay > 4) {
		w = 44;
		if(lastYearLY) {
			d = 312 - startDay; 
			} else {
				d = 311 - startDay;
					};
				};
          
	if((startDay == 5) || (lastYearLY && (startDay == 6))) {
		w = 45 };

	};

if(weekNumber < 19 ) {
	if(startDay > 4) {
		w = 1, d = 9 - startDay } ;
				
			};

//for years ending in week 1

if(weekNumber == 1) {
	if(sum > 360) {
		if(LY) {
			if(startDay < 3) {
				w = 44, d = 303 - startDay };
			if(startDay == 7) {
				w = 44, d = 310 - startDay };
			} else {
				if(startDay < 4 ) {
					w = 44, d = 303 - startDay };
			};
		};
		
	// for the first full week of years begining in w52 or w53

	if((startDay > 4) && (startDay < 7)){
		w = 1, d = 9 - startDay ;
			} ;
				
			};

var Holiday=false;
var Christmas=false;
var Valentines=false;
var StPatricks=false;
var Halloween=false;

if(sum==45) { Holiday=true; Valentines=true };
if(LY) {
	if(sum==77) { Holiday=true; StPatricks=true };
	if(sum==360) { Holiday=true; Christmas=true };
	if(sum==305) { Holiday=true; Halloween=true };
	} else {
	if(sum==76) { Holiday=true; StPatricks=true };
	if(sum==359) { Holiday=true; Christmas=true };
	if(sum==304) { Holiday=true; Halloween=true }; 
		};


//Left Table

if(ISOyear == yearNumber) {
	yTable = yearNumber;
		} else {
			if(ISOyear < yearNumber) {
				yTable = ISOyear; 
					};
			if(ISOyear > yearNumber) { 		
				yTable = y; 
					};				
				}; 
					

var dn = d;
if((dn > 362) || (LY && (dn > 363))) {
	dn = 2 - startDay};

for(i=1, j=1; i < 8; ++i) {
	if((weekDay==i) && (sum < dn + 63)) { ++j;
		} else {	
			};
		};


for(i=1; i < 10; ++i, ++w) {

	if(w < 10) { w = "0" + w ;
		}

	if(w==weekNumber) {
		} else {
		};


	for(n=1; n < 8; ++n, ++d) {

		if(w==1) {

// specifies the beginning of the year on the 1st

			if(lastYearLY) {
				if(d > 366) { d = 1 };
					}  else {
						if(d > 365) { d = 1 };
							};
						};

		if(w > 44) {

//for years ending in w52 or 53:

			if(ISOLY){
				if(d > 366) { d = 1 };
				} else {
				if(d > 365) { d = 1 };
				};
			};

		if(sum==d)  {
			if(Holiday) {
			if(Valentines) {
				} ;
			if(Christmas) {
				};
			if(Halloween) {
				};
				} else {

			};
			}else{

			};
		};
	};


//Right Table

if(w > 52) { 
	w = 1;
	++yTable;
	};
			

for(i=1; i < 8; ++i) {

	if((weekDay==i) && (j==1)) {
		} else {
			};
	};

for(i=1; i < 10; ++i, ++w) {
	
	if(w > 53) { w = 1};

	if(w < 10) { w = "0" + w };
		
	if(weekNumber==w) {
		} else {
		};

	for(n=1; n < 8; ++n, ++d) {

		if(LY) {
			if(d > 366) { d = 1} } else {
				if(d > 365) { d = 1} ;
					};
			
		if(sum==d)  {
	
			if(Holiday){ 			
			if(StPatricks) {
				};
			if(Christmas) {
				};
			if(Halloween) {
				};
				} else {
				};
				}else{
				};
		};
	};
};

findCurrentsum();

function about() {
	open("aboutwdc.htm", target="C");
	};

function restoreConvert() {
	};

