var day, month, year, minimonth, miniyear, minidispmonth, minidispyear, holdsel;
var currdate = new Date();
var dispday = currdate.getDate();
var dispmonth = currdate.getMonth() + 1;
var dispyear = currdate.getFullYear();
var dispdept;
var roomidlist = '';
var roomnamelist = '';
var roombldglist = '';
var calview = 'day';
var detailview = 0;
var detailwidth = 150;
var detOpen = false;
var detTrans = false;
var deptarray = new Array();
var deptcolors = new Array();
var roomarray = new Array();
var roomnames = new Array();
var roomsready = 0;
var browserType = navigator.appName;
var roomsReady = 0;
var deptsReady = 0;

function initLoad() {
	// DISPLAY DEPARTMENT LIST
	getDepts();
	// DISPLAY ROOMS LIST
	setTimeout('getVisibleRooms()', 50);
	// RELOAD CALENDAR
	setTimeout('showCal(' + dispmonth + ', ' + dispyear + ')', 250);
	setTimeout('showDay()', 350);
	document.getElementById('togglemonth').onClick = 'showCal(dispmonth, dispyear);';
	document.getElementById('toggleday').onClick = 'showDay();';
}

function getVisibleRooms() {
	var xhrRec = xhrRequest('xml');
	xhrRec.onreadystatechange = function() {
		if (xhrRec.readyState == 4) {
			if (xhrRec.status == 200) {
				var roomResponse = xhrRec.responseXML;
				var rooms = roomResponse.getElementsByTagName('room');
				if (rooms.length > 0) {
					for (var i=0; i<rooms.length; i++) {
						var roomitem = rooms[i];
						var roomid = roomitem.getElementsByTagName('roomid')[0].firstChild.nodeValue;
						var roomname = roomitem.getElementsByTagName('roomname')[0].firstChild.nodeValue;
						var roombldg = roomitem.getElementsByTagName('roombldg')[0].firstChild.nodeValue;
						roomidlist += roomid + ',';
						roomnamelist += roomid + ',';
						roombldglist += roomid + ',';
						roomarray[i] = roomid;
						roomnames[i] = roomname;
					}
				}
				roomsReady = 1;
			} else if (xhrRec.status == 404) {
				document.getElementById('statusmsg').innerHTML = 'Error retrieving rooms: ' + xhrRec.statusText;
			}
		} else {
			document.getElementById('daymsg').innerHTML = 'Retrieving rooms: ' + xhrRec.readyState;
		}
	};
	var url = 'respond.php?call=GetVisibleRooms';
	xhrRec.open("GET", url, true);
	xhrRec.send(null);
}

function getDepts(allcheck, filterform) {
	var xhrRec = xhrRequest('xml');
	xhrRec.onreadystatechange = function() {
		if(xhrRec.readyState == 4) {
			if (xhrRec.status == 200) {
				var deptResponse = xhrRec.responseXML;
				var depts = deptResponse.getElementsByTagName('dept');
				if (allcheck != 'all') {
					var allcheckbox = '<div id="alldepts" class="click" onclick="getDepts(\'all\', this.parentNode.id);" />View All</div>';
				} else {
					var allcheckbox = '<div id="alldepts" class="click" onclick="getDepts(\'none\', this.parentNode.id);" />Hide All</div>';
				}
				document.getElementById('depts').innerHTML = allcheckbox;
				document.getElementById('depts').innerHTML += '<div>View by Department</div>';
				for (var i=0; i<depts.length; i++) {
					var dept = depts[i];
					var deptid = dept.getElementsByTagName("deptid")[0].firstChild.nodeValue;
					var deptname = dept.getElementsByTagName('deptname')[0].firstChild.nodeValue;
					var deptcolor = dept.getElementsByTagName('deptcolor')[0].firstChild.nodeValue;
					itemdiv = '<input type="checkbox" id="dept' + i + '" value="' + deptid + '" onclick="deptFilter(this.parentNode.id);"';
					if ( ((allcheck!='none') || (allcheck == 'all')) && (allcheck != 'none') ) {
						itemdiv += ' checked';
						dispdept += deptid + ',';
					}
					itemdiv += ' /> <span>' + deptname + '</span> <div class="deptcolorblock" style="background:#' + deptcolor + ';"></div><br class="deptsbr" />';
					document.getElementById('depts').innerHTML += itemdiv;
					deptarray[i] = deptid;
					deptcolors[i] = deptcolor;
				}
				deptsReady = 1;
				if (allcheck) {
					deptFilter(filterform);
				}
			} else if (xhrRec.status == 404) {
				document.getElementById('depts').innerHTML += xhrRec.statusText;
			}
		} else {
			document.getElementById('depts').innerHTML = 'Retrieving departments...';
		}
	};
	var url = 'respond.php?call=GetDepts';
	xhrRec.open("GET", url, true);
	xhrRec.send(null);
}

var xhrEv = false;
function getEvents() {	
	var statusmsg;
	if (calview == 'day') {
		document.getElementById('dayblocks').innerHTML = '';
	}
	xhrEv = false; // ALLOW PREVIOUS XHR CALL TO BE CANCELLED TO HELP SAVE ON RESPONSE TIME
	xhrEv = xhrRequest('xml');
	xhrEv.onreadystatechange = function() {
		if(xhrEv.readyState == 4) {
			if (xhrEv.status == 200) {
				var eventResponse = xhrEv.responseXML;
				var events = eventResponse.getElementsByTagName('eventitem');
			
				if (events.length > 0) {
					var count = 0;
					var evcells = '';
					for (var i=0; i<events.length; i++) {
						var eventitem = events[i];
						if (calview == 'month') {
							// POPULATING THE MONTH VIEW
							var evcell = eventitem.getElementsByTagName('evcell')[0].firstChild.nodeValue;
							if (document.getElementById(evcell).childNodes.length < 3) {
								var evtitle = eventitem.getElementsByTagName('evtitle')[0].firstChild.nodeValue;
								var evdept = eventitem.getElementsByTagName('evdept')[0].firstChild.nodeValue;
								for (j=0; j<deptarray.length; j++) {
									if (deptarray[j] == eventitem.getElementsByTagName('evdept')[0].firstChild.nodeValue) {
										break;
									}
								}
								document.getElementById(evcell).innerHTML += '<div class="evitem" style="border:2px solid #' + deptcolors[j] + ';"><div class="evtitle">' + evtitle + '</div></div>';
							} else {
								document.getElementById('more' + evcell).innerHTML = 'more...';
							}
						} else {
							// GET HORIZONTAL POSITION
							for (j=0; j<roomarray.length; j++) {
								if (roomarray[j] == eventitem.getElementsByTagName('evroom')[0].firstChild.nodeValue) {
									break;
								}
							}
							var posleft = (86 * (j-1)) + 3;
							// POPULATING THE DAY VIEW
							var evdetails = '<div class="evdetail-title">' + eventitem.getElementsByTagName('evtitle')[0].firstChild.nodeValue + '</div>';							
							document.getElementById('dayblocks').innerHTML += '<div class="eventcell" style="background:#' + eventitem.getElementsByTagName('evcolor')[0].firstChild.nodeValue + '; color:#' + eventitem.getElementsByTagName('evtextcolor')[0].firstChild.nodeValue + '; top:' + (parseInt(eventitem.getElementsByTagName('evcell')[0].firstChild.nodeValue) + 30) + 'px; left:' + posleft +'px; height:' + eventitem.getElementsByTagName('evht')[0].firstChild.nodeValue + 'px;" onmousedown="evDetail(\'' + eventitem.getElementsByTagName('evstart')[0].firstChild.nodeValue + '\', \'' + eventitem.getElementsByTagName('evroom')[0].firstChild.nodeValue + '\');"><span>' + evdetails + '</span></div>';
						}
					}
					if (events.length > 1) {
						statusmsg = eventResponse.getElementsByTagName('eventnum')[0].firstChild.nodeValue + ' events';
					} else {
						statusmsg =  eventResponse.getElementsByTagName('eventnum')[0].firstChild.nodeValue + ' event';
					}
					if (calview == 'month') {
						document.getElementById('statusmsg').innerHTML = statusmsg;
					} else if (calview == 'day') {
						document.getElementById('daymsg').innerHTML = statusmsg;
					}
				} else {
					statusmsg = 'No events displayed';
					if (calview == 'month') {
						document.getElementById('statusmsg').innerHTML = statusmsg;
					} else if (calview == 'day') {
						document.getElementById('daymsg').innerHTML = statusmsg;
					}
				}
				if (calview == 'month') {
					document.getElementById('statusmsg').innerHTML +=  ' for ' + dispmonth + '/' + dispyear + '.';
				} else if (calview == 'day') {
					document.getElementById('daymsg').innerHTML +=  ' for ' + dispmonth + '/' + dispday + '/' + dispyear + '.';
				}
			} else if (xhrEv.status == 404) {
				if (calview == 'month') {	
					document.getElementById('statusmsg').innerHTML = xhrEv.statusText;
				} else if (calview == 'day') {
					document.getElementById('daymsg').innerHTML = xhrEv.statusText;
				}
			}
		} else {
			if (calview == 'month') {
				document.getElementById('statusmsg').innerHTML = 'Retrieving Month Events ... ';
			} else if (calview == 'day') {
				document.getElementById('daymsg').innerHTML = 'Retrieving Day Events ... ';
			}
		}
	}
	if (dispdept == null) {
		dispdept = '';
	}
	if (calview == 'month') { 
		var evurl = 'respond.php?call=GetEventMonth&month=' + dispmonth + '&year=' + dispyear + '&depts=' + dispdept;
	} else {
		var evurl = 'respond.php?call=GetEventDay&date=' + dispyear + '-' + dispmonth + '-' + dispday;
		if (dispdept) {
			evurl += '&depts=' + dispdept;
		}
	}
	xhrEv.open("GET", evurl, true);
	xhrEv.send(null);
}

function evDetail(time, room) {
	if (!detTrans) {
		var xhrRec = xhrRequest('xml');
		xhrRec.onreadystatechange = function() {
			if(xhrRec.readyState == 4) {
				if (xhrRec.status == 200) {
					expandDetail(0);
					var details = xhrRec.responseXML;
					for (j=0; j<roomarray.length; j++) {
						if (roomarray[j] == details.getElementsByTagName('evroom')[0].firstChild.nodeValue) {
							
							break;
						}
					}
					document.getElementById('eventdetail').style.border = '6px solid #' + details.getElementsByTagName('evcolor')[0].firstChild.nodeValue;
					document.getElementById('eventdetail').innerHTML = '<div id="detbody">';
					document.getElementById('eventdetail').innerHTML += '<div id="evdetclose" onclick="evDetailClose();"></div>';
					document.getElementById('eventdetail').innerHTML += '<div class="evdet-date">' + dispmonth + '/' + dispday + '/' + dispyear + '</div>';
					document.getElementById('eventdetail').innerHTML += '<div class="evdet-title">' + details.getElementsByTagName('evtitle')[0].firstChild.nodeValue + '</div>';
					document.getElementById('eventdetail').innerHTML += '<div class="evdet-room">Room : ' + roomnames[j] + '</div>';
					document.getElementById('eventdetail').innerHTML += '<div class="evdet-time">' + details.getElementsByTagName('evstart')[0].firstChild.nodeValue + ' - ' + details.getElementsByTagName('evend')[0].firstChild.nodeValue + '</div>';
					if (details.getElementsByTagName('evdesc')[0].firstChild) {
						document.getElementById('eventdetail').innerHTML += '<div class="evdet-desc">' + details.getElementsByTagName('evdesc')[0].firstChild.nodeValue + '</div>';
					}
					if (details.getElementsByTagName('evurl')[0].firstChild) {
						document.getElementById('eventdetail').innerHTML += '<div class="evdet-url">[ <a href="' + details.getElementsByTagName('evurl')[0].firstChild.nodeValue + '">more</a> ]</div>';
					}
					document.getElementById('eventdetail').innerHTML += '</div>';
	
				}
			}
		}
		var deturl = 'respond.php?call=GetEventDetail&date=' + dispyear + '-' + dispmonth + '-' + dispday + '&time=' + time + '&room=' + room;
		if (dispdept) {
			deturl += '&depts=' + dispdept;
		}
		
		xhrRec.open("GET", deturl, true);
		xhrRec.send(null);
	}
}
function expandDetail(currwidth) {
	detTrans = true;
	if ((currwidth <= detailwidth) && (!detOpen)) {
		currwidth = parseInt(currwidth) + 30;
		document.getElementById('eventdetail').style.width = currwidth + 'px';
		setTimeout('expandDetail(\'' + currwidth + '\')', 5);
	} else {
		detOpen = true;
		detTrans = false;
	}
}
function collapseDetail(currwidth) {
	if ((currwidth > 0) && (detOpen)) {
		if (currwidth > 0) {
			currwidth = parseInt(currwidth) - 30;
			document.getElementById('eventdetail').style.width = currwidth + 'px';
		}
		setTimeout('collapseDetail(\'' + currwidth + '\')', 5);
	} else {
		document.getElementById('eventdetail').style.width = '0';
		document.getElementById('eventdetail').style.border = '0';
		detOpen = false;
	}
}
function evDetailClose() {
	document.getElementById('eventdetail').innerHTML = '';
	collapseDetail(detailwidth);
}

function deptFilter(filterform) {
	var filterarg = document.getElementById(filterform);
	dispdept = '';
	for (var i=0; i<filterarg.childNodes.length; i++) {
		if (filterarg.childNodes[i].checked) {
			dispdept += filterarg.childNodes[i].value + ',';
		}
	}
	if (calview == 'month') {
		showCal(dispmonth, dispyear);
	} else {
		showDay();
	}
}

function showCal(month, year) {
	evDetailClose();
	document.getElementById('statusmsg').innerHTML = 'Composing Month Grid ... ';
	document.getElementById('calpane').className = null;
	if (document.getElementById('caltable')) {
		document.getElementById('caltable').className = null;
	}
	document.getElementById('toggle').innerHTML = '<div><input type="radio" name="toggle" checked onclick="showCal(dispmonth, dispyear);" /> Month</div><div><input type="radio" name="toggle" onclick="showDay();" /> Day</div>';
	document.getElementById('calpane').style.display = '';
	document.getElementById('eventdetail').style.display = 'none';
	if (calview == 'day') {
		document.getElementById('dayblocks').innerHTML = '';
	}
	document.getElementById('daypane').style.display = 'none';
	document.getElementById('daymsg').style.display = 'none';
	document.getElementById('evheadwrapper').style.display = 'none';
	document.getElementById('evtimewrapper').style.display = 'none';
	calview = 'month';
	if (deptsReady == 1) {
		if ((month < 10) && (month.length == 1)) {
			month = "0" + month;
		}
		dispmonth = month;
		dispyear = year;
		calledfunction = "Refresh Calendar";
		var xhrRec = xhrRequest('xml');
		xhrRec.onreadystatechange = function() {
			if(xhrRec.readyState == 4) {
				if(xhrRec.status == 200) {
					document.getElementById('calpane').innerHTML = xhrRec.responseText;
					getEvents();
				} else if (xhrRec.status == 404) {
					document.getElementById('statusmsg').innerHTML = xhrRec.statusText;
				}
			}
		};
		url = "calpane.php";
		if (month || year) {
			url += "?";
			if (month) {
				url += "month=" + String(month);
			}
			if (month && year) {
				url += "&";
			}
			if (year) {
				url += "year=" + year;
			}
		}
		xhrRec.open("GET", url, true);
		xhrRec.send(null);
	} else {
		document.getElementById("statusmsg").innerHTML = 'Retrieving Departments';
		setTimeout('showCal("' + dispmonth + '", "' + dispyear + '")', 100);
	}
}

function showDay(cell) {
	//evDetailClose();
	document.getElementById('daymsg').innerHTML = 'Composing Day Grid ... ';
	if (calview == 'month') {
		document.getElementById('toggle').innerHTML = '<div><input type="radio" name="toggle" onclick="showCal(dispmonth, dispyear);" /> Month</div><div><input type="radio" name="toggle" checked onclick="showDay();" /> Day</div>';
	
		document.getElementById('statusmsg').style.display = 'none';
		document.getElementById('evheadwrapper').style.display = '';
		document.getElementById('evtimewrapper').style.display = '';
		document.getElementById('daypane').style.display = '';
		document.getElementById('daymsg').style.display = '';
		document.getElementById('eventdetail').style.display = '';
		document.getElementById('calpane').className = 'calpanemini';
		document.getElementById('caltable').className = 'caltablemini';
	}
	calview = 'day';

	if ((deptsReady == 1) && (roomsReady == 1)) {
		if (cell) {
			setFull(cell);
			var datestring = document.getElementById(cell).childNodes[1].id.split("");
			dispday = datestring[6] + datestring[7];
		}
		var xhrRec = xhrRequest('xml');
		xhrRec.onreadystatechange = function() {
			if(xhrRec.readyState == 4) {
				if(xhrRec.status == 200) {
					document.getElementById("evwrapper").innerHTML = xhrRec.responseText;
					getEvents();
				} else if (xhrRec.status == 404) {
					document.getElementById("daymsg").innerHTML = xhrRec.statusText;
				}
			} else {
				document.getElementById("daymsg").innerHTML = 'Retrieving Day Grid';
			}
		}
		dayurl = 'daypane.php?date=' + dispyear + '-' + dispmonth + '-' + dispday;
		xhrRec.open("GET", dayurl, true);
		xhrRec.send(null);
	} else {
		if (deptsReady == 1) {
			document.getElementById("daymsg").innerHTML = 'Departments Ready';
		} else if (roomsReady == 1) {
			document.getElementById("daymsg").innerHTML = 'Rooms Ready';
		} else {
			document.getElementById("daymsg").innerHTML = 'Retrieving Departments and Rooms';
		}
		if (cell) {
			setTimeout('showDay("' + cell + '")', 100);
		} else {
			setTimeout('showDay()', 100);
		}
	}
}

function showdatesel(dateroll, popupdiv) {
	holdsel = true;
	var dispdate = document.getElementById(dateroll);
	document.getElementById(popupdiv).style.display = "inline";
}

function showdatehighlight(dateroll) {
	holdsel = true;
	var dispdate = document.getElementById(dateroll);
	dispdate.style.border = "1px solid #000";
	dispdate.style.backgroundColor = "#FFF";
}

function showdatenormal(dateroll) {
	holdsel = true;
	var dispdate = document.getElementById(dateroll);
	dispdate.style.border = "1px dotted #AAA";
	dispdate.style.backgroundColor = null;
}

function cleardatesel(closepop) {
	closepop.parentNode.style.display = "";
	holdsel = false;
}

var currSelect = null;
function setFull(cell) {
	document.getElementById(cell).style.backgroundColor = "#AFA";
	if ((currSelect) && (currSelect != cell)) {
		document.getElementById(currSelect).style.backgroundColor = "";
	}
	currSelect = cell;
}

function showRoomDate(room, date, cell) {
    var regcell = document.getElementById(cell).className;
    if (regcell = "eventcellreg") {
        document.getElementById(cell).innerHTML = "Room : " + room + "<br />" + date;
        document.getElementById(cell).style.backgroundColor = "#CCF";
    }
}
function hideRoomDate(cell) {
    var regcell = document.getElementById(cell).className;
    if (regcell = "eventcellreg") {
        document.getElementById(cell).innerHTML = "";
        document.getElementById(cell).style.backgroundColor = "";
    }
}

function gridOn(gridcell) {
	var gridOnInfo = new Array();
	var gridTime, gridRoom;
	gridOnInfo = gridcell.split('-');
	gridTime = gridOnInfo[0];
	gridRoom = gridOnInfo[1];
	document.getElementById(gridcell).style.backgroundColor = "#DDD";
	document.getElementById(gridcell).innerHTML = gridRoom + '<br />' + gridTime;
}
function gridOff(gridcell) {
	
	document.getElementById(gridcell).style.backgroundColor = "#FFF";
	document.getElementById(gridcell).innerHTML = '';
}
window.onload = setTimeout('initLoad()', 200);