/* DayWeek ver 1.0 written by Steve Clare, Unitron Technical Books. 10/03/00.
   This program is Freeware.  Source code best viewed in fullscreen mode at
   800 x 600 resolution or higher. If you find any bugs or have any comments,
   please e-mail me at sales@unitronbooks.4all.cc */

var day, month, year, day_week, flag = true;

function test_input_data(day, month, year) {

	if(isNaN(day)) {
	  alert('Please enter a day!');
	  flag = false;
	  return flag;
	}

	if(isNaN(month)) {
	  alert('Please enter a month!');
	  flag = false;
	  return flag;
	}

	if((year == "")||(year < 0)||(isNaN(year))||((year - Math.floor(year)) != 0)) {
	  alert('Please input valid years in 4-digit format!');
	  flag = false;
	  return flag;
	}

	switch(day) {
		case 29 : // tests for leap years
		  if(month == 2) { // only applies to February
		    if(((year / 4) - Math.floor(year / 4)) == 0) { // year divisible by 4
		      if(((year / 100) - Math.floor(year / 100)) == 0) { // year div by 100
			if(((year / 400) - Math.floor(year / 400)) == 0) { // year div by 400
			  break; 
			} // year div by 400 so is a leap year
			else {
			  alert('That\'s not a leap year!');
			  flag = false;
			  return flag;
			} // year div by 4 and 100 but not 400 so can't be a leap year
		       }
		       else { // year div by 4 but not by 100 so is a leap year
			 break;
		       }
		    }
		    else { // year not div by 4 so can't be a leap year
		      alert('That\'s not a leap year!');
		      flag = false;
		      return flag;
		    }
		  }
		  else { // not Feruary
	 	    break;
		  }
		  
		case 30 :
		  if(month == 2) {
		    days_in_a_month();
		    flag = false;
		    return flag;
		  }
		  else {
		    break;
		  }

		case 31 :
		  if((month == 2)||(month == 4)||(month == 6)||(month == 11)) {
		    days_in_a_month();
		    flag = false;
		    return flag;
		  }
		   else {
		    break;
		  }
	}
}

function days_in_a_month() {

	var m1 = "30 days hath September, April, June and November.\n";
	var m2 = "All the rest have 31, excepting February alone,\n";
	var m3 = "which hath but 28 days clear and 29 in each leap year!";

	alert(m1 + m2 + m3);
	return;
}  

function day_of_the_week(day, month, year) {

	var m, y, c, dd; 	// parameters used in the calculations
		
	switch(month) {
		case 1 :
		  m = 1;
		break;

		case 2 :
		  m = 4;
		break;

		case 3 :
		  m = 3;
		break;

		case 4 :
		  m = 6;
		break;

		case 5 :
		  m = 1;
		break;

		case 6 :
		  m = 4;
		break;

		case 7 :
		  m = 6;
		break;

		case 8 :
		  m = 2;
		break;

		case 9 :
		  m = 5;
		break;

		case 10 :
		  m = 0;
		break;

		case 11 :
		  m = 3;
		break;

		case 12 :
		  m = 5;
		break;
		
		default:
		  alert('ERROR in m parameter');
		break;
	}

	if((month == 1)||(month == 2)) {
		year = year - 1;
	}
	
	y = (5 * (Math.floor((year % 100) / 4)) + year % 4)%7;

	c = (5 * ((Math.floor(year / 100)) % 4))%7;

	dd = (m + day + c + y)%7;
		
	switch(dd) {
		case 0:
		  day_week = "SATURDAY";
		break;

		case 1:
		  day_week = "SUNDAY";
		break;

  		case 2:
		  day_week = "MONDAY";
		break;

		case 3:
		  day_week = "TUESDAY";
		break;

		case 4:
		  day_week = "WEDNESDAY";
		break;

  		case 5:
		  day_week = "THURSDAY";
		break;

		case 6:
		  day_week = "FRIDAY";
		break;

		default:
		  alert('ERROR in day_week parameter');
		break;
	}
	
	return day_week;

}	 	

function main() {

	day = document.input_data.day.value*1;
	month = document.input_data.month.value*1;
	year = document.input_data.year.value*1;
	test_input_data(day, month, year);
	if(flag == false) {
	  flag = true;
	  return;
	}
	else {
          day_of_the_week(day, month, year);
	}
	document.input_data.day_week.value = day_week;
}
