function year(name) {
	var cal = document.getElementById('cal');
	var yearDiv = document.createElement("div");
	yearDiv.id = name;
	yearDiv.className = "year";
	yearDiv.innerHTML = "<span style='font-size:15px;'><br/></span>";
	document.getElementById('calendar').appendChild(yearDiv);
}

function month(name, dayOne, numDays, year) {
	this.nm = name;
	this.numDays = numDays;
	
	this.display = function () {
		var week = 0; //y
		var day = 0; //x

		var yr = document.getElementById(year);
		var monthDiv = document.createElement("div");
		monthDiv.id = this.nm;
		monthDiv.className = "month";
		monthDiv.style.align = "center";
		monthDiv.innerHTML = this.nm + "<br/>";
		yr.appendChild(monthDiv);
	
		//beginning blank days
		for(var day = 0; day < dayOne; day++) {
			this.createDay(null, week, day);   //value, x, y
		}
		for(var date = 0; date < numDays; date++) {
			if(date%7==0) {
				week++;
				day = 0;
			}
			this.createDay(date+1, week, day);
			day++;
		}
		//alert((numDays - dayOne + 1)%7);
		//ending blank days
		if((numDays - dayOne + 1)%7 != 0) { //day%7 != 0) { //???
			for(var date = numDays; date%7 != 0; date++) {
				this.createDay(null, week, day);
				day++;
			}
		}
		
		//yr.innerHTML += "<br/>";
	}
	
	this.createDay = function(date, x, y) {
		var mn = document.getElementById(this.nm);
		var dayDiv = document.createElement('div');
		dayDiv.id = this.nm + "-" + date;
		if(date == null) {
			dayDiv.className = "blankDay";
		}
		else {
			dayDiv.className = "day";
			dayDiv.innerHTML = "<a href='#' onMouseOver='showStates(\"" + this.nm + "-" + date + "\");' onMouseOut='hideStates(\"" +  this.nm + "-" + date + "\");'>" + date + "</a><br/>";
		}	
		mn.appendChild(dayDiv);
	}
}

var months = ["January", "February", "March", "April"];

var yr2009 = new year("yr-2009");
var jan = new month(months[0], "4", "31", "yr-2009");
var feb = new month(months[1], "0", "28", "yr-2009");
var mar = new month(months[2], "0", "31", "yr-2009");
var apr = new month(months[3], "3", "30", "yr-2009");
jan.display();
feb.display();
mar.display();
apr.display();

var states = new Array();
states['National Average'] = "April-13";
states['Alabama'] = "April-2";
states['Alaska'] = "March-23";
states['Arizona'] = "April-10";
states['Arkansas'] = "April-4";
states['California'] = "April-20";
states['Colorado'] = "April-12";
states['Connecticut'] = "April-30";
states['Delaware'] = "April-11";
states['District of Columbia'] = "April-13";
states['Florida'] = "April-9";
states['Georgia'] = "April-12";
states['Hawaii'] = "April-13";
states['Idaho'] = "April-12";
states['Illinois'] = "April-13";
states['Indiana'] = "April-8";
states['Iowa'] = "April-4";
states['Kansas'] = "April-8";
states['Kentucky'] = "April-3";
states['Louisiana'] = "March-28";
states['Maine'] = "April-6";
states['Maryland'] = "April-19";
states['Massachusetts'] = "April-16";
states['Michigan'] = "April-10";
states['Minnesota'] = "April-15";
states['Mississippi'] = "March-28";
states['Missouri'] = "April-6";
states['Montana'] = "April-3";
states['Nebraska'] = "April-8";
states['Nevada'] = "April-8";
states['New Hampshire'] = "April-10";
states['New Jersey'] = "April-29";
states['New Mexico'] = "April-2";
states['New York'] = "April-25";
states['North Carolina'] = "April-9";
states['North Dakota'] = "April-1";
states['Ohio'] = "April-11";
states['Oklahoma'] = "April-4";
states['Oregon'] = "April-9";
states['Pennsylvania'] = "April-14";
states['Rhode Island'] = "April-14";
states['South Carolina'] = "April-4";
states['South Dakota'] = "March-29";
states['Tennessee'] = "April-5";
states['Texas'] = "April-6";
states['Utah'] = "April-13";
states['Vermont'] = "April-12";
states['Virginia'] = "April-16";
states['Washington'] = "April-16";
states['West Virginia'] = "April-1";
states['Wisconsin'] = "April-13";
states['Wyoming'] = "April-5";

var regularDate = "#ccccff";
var highlitDate = "#ff88ff";
var extraHighlit = "#ff33ff";
var taxDate 	= "#88ff88";
var extraTaxDate = "#33ff33";

listStates();

function listStates() {
	var st = document.getElementById('states');
	var st2 = document.getElementById('states2');
	var secondCol = false;
	st.innerHTML += "<br/>";
	st2.innerHTML += "<br/>";
	for (var k in states) {
		//st.innerHTML += k + " - " + states[k] + "<br/>";
		var stDiv = document.createElement("div");
		stDiv.id = k;
		stDiv.className = "state";
		stDiv.style.align = "center";
		stDiv.innerHTML = "<a href='#' onMouseOver='showDate(\"" + k + "\", \"" + states[k] + "\");' onMouseOut='hideDate(\"" +  k + "\", \"" + states[k] + "\");'>" + k + "</a><br/>";
		if(k == "Missouri") { secondCol = true; }
		if(secondCol) { st = st2; }
		st.appendChild(stDiv);
		
		var sk = document.getElementById(states[k]);
		sk.style.backgroundColor = taxDate;
		if(states[k]=="April-13") {
			sk.style.backgroundColor = extraTaxDate;
			//sk.style.borderColor = "#000000";
		}
	}
}


showStates = function(dateStr) {
	for (var k in states) {
		if(states[k] == dateStr) {
			document.getElementById(k).style.backgroundColor = extraHighlit;
			if(k=="National Average") {
				document.getElementById(k).style.backgroundColor = extraTaxDate;
			}
			colorDate(dateStr, highlitDate);
			colorPast(dateStr, highlitDate);
			highlightDate(dateStr);
		}
	}
}

hideStates = function(dateStr) {
	for (var k in states) {
		if(states[k] == dateStr) {
			document.getElementById(k).style.backgroundColor = "#ffffff";
			colorDate(dateStr, regularDate);
			colorPast(dateStr, regularDate);
			lowlightDate(dateStr);
		}
	}
}

showDate = function(st, dateStr) {	
	//lighter other states
	for (var k in states) {
		if(states[k] == dateStr) {
			document.getElementById(k).style.backgroundColor = highlitDate;
			if(k=="National Average") {
				document.getElementById(k).style.backgroundColor = taxDate;
			}
		}
	}
	document.getElementById(st).style.backgroundColor = extraHighlit;
	if(st=="National Average") {
		document.getElementById(st).style.backgroundColor = extraTaxDate;
	}
	colorDate(dateStr, highlitDate);
	colorPast(dateStr, highlitDate);
	highlightDate(dateStr);
}

hideDate = function(st, dateStr) {
	//unlighten other states
	for (var k in states) {
		if(states[k] == dateStr) {
			document.getElementById(k).style.backgroundColor = "#FFFFFF";
		}
	}
	document.getElementById(st).style.backgroundColor = "#ffffff";
	colorDate(dateStr, regularDate);
	colorPast(dateStr, regularDate);
	lowlightDate(dateStr);
}

colorDate = function(dateStr, color) {
	var m = document.getElementById(dateStr);
	m.style.backgroundColor = color;
	if(color == regularDate) {
		for (var k in states) {
			if(states[k] == dateStr) {
				m.style.backgroundColor = taxDate;
				if(dateStr=="April-13") {
					m.style.backgroundColor = extraTaxDate;
					//m.style.borderColor = "#000000";
				}
			}
		}
	}
}

highlightDate = function(dateStr) {
	var m = document.getElementById(dateStr);
	m.style.border = "#000000 1px solid";
	m.style.backgroundColor = extraHighlit;
}

lowlightDate = function(dateStr) {
	var m = document.getElementById(dateStr);
	m.style.border = "#aaaaaa 1px solid";
	m.style.backgroundColor = regularDate;
	for (var k in states) {
		if(states[k] == dateStr) {
			m.style.backgroundColor = taxDate;
			if(dateStr=="April-13") {
				m.style.backgroundColor = extraTaxDate;
				//m.style.borderColor = "#000000";
			}
		}
	}
}

colorPast = function(dateStr, color) {
	var mon = dateStr.substring(0, dateStr.indexOf('-'));
	var day = dateStr.substring(dateStr.indexOf('-') + 1);
	
	for(var i = day; i > 0; i--) {
		dateStr = mon + "-" + i;
		colorDate(dateStr, color);
	}

	for(var i = 1; i <= jan.numDays; i++) {
		dateStr = "January-" + i;
		colorDate(dateStr, color);
	}
	for(var i = 1; i <= feb.numDays; i++) {
		dateStr = "February-" + i;
		colorDate(dateStr, color);
	}
	
	if(mon == "April") {
		for(var i = 1; i <= mar.numDays; i++) {
			dateStr = "March-" + i;
			colorDate(dateStr, color);
		}
	}
}