function Reservation() {

 this.toString = function() { return "[object Reservation]"; };

 this.month	= ""; //calendar.MONTH;
 this.year	= ""; //calendar.YEAR;
 this.eventFiles	= new Array();
 this.dateElements	= new Array();
 this.isBETA  = (window.location.href.match("beta")) ? 1 : 0;
 this.XMLDATA;

 this.setMonth	= function(month) {
	this.month	= month;
 };

 this.setYear	= function(year) {
	this.year	= year;
 };

 this.setDateElementArray	= function(dateArr) {
	this.dateElements	= new Array();
	for (var dIdx = 0; dIdx < dateArr.length; dIdx++) {
		var dateCell	= dateArr[dIdx];
		if (dateCell.date < new Date()) { 
			this.changeStatus(dateCell,"OldDate");
			continue;
		}
		this.dateElements["date" + dateCell.datestr] = dateCell;
		this.changeStatus(dateCell,"Available");
	}
 };

 this.setEventFile	= function(eventFile) {
	this.clearEventFiles();
	this.addEventFile(eventFile);
 };

 this.addEventFile	= function(eventFile) {
	this.eventFiles.push(eventFile);
 };

 this.clearEventFiles	= function(eventFile) {
	this.eventFiles	= new Array();
 };

 this.loadEvents	= function() {
	var variables   = "";
	    variables	+= "month=" + this.month;
	    variables	+= "&year=" + this.year;
	    variables	+= "&isBETA=" + this.isBETA;
	    variables	+= "&numevents=" + this.eventFiles.length;
	    variables	+= "&what=events";
	    for (var eIdx = 0; eIdx < this.eventFiles.length; eIdx++) {
			var eventFile	= this.eventFiles[eIdx];
	    	variables	+= "&eventFile" + eIdx + "=" + eventFile;
		}
	var XMLDATA = new XMLHttpRequest();
	var resObj	= this;
	this.XMLDATA	= XMLDATA;
	XMLDATA.onreadystatechange = function() {
								 if (XMLDATA.readyState == 4) { if (XMLDATA.status == 200) {
									resObj.applyReservations();
								 } }
	};
	this.XMLDATA.open('POST', '/cgi-bin/xmlgrep.cgi', true);
	this.XMLDATA.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
//alert(variables);
	this.XMLDATA.send(variables);
 };

 this.applyReservations	= function() {
//alert(this.XMLDATA.responseText);
	var Events	= this.XMLDATA.responseXML.getElementsByTagName("Event");
	for (var eIdx=0; eIdx < Events.length; eIdx++) {
		var Event	= Events[eIdx];
		var daterange	= getElementValue(Event,"Date",0);
		var datestrs	= daterange.split(",");
		var datestrarr	= new Array();
		for (dIdx = 0; dIdx < datestrs.length; dIdx++) {
			var datestr	= datestrs[dIdx];
			if (datestr.match(/-/)) {
				var dates	= datestr.split(/-/);
				var datefr	= dates[0];
				var dateto	= dates[1];
				var begmonth	= parseInt(this.year)*10000 + parseInt(this.month)*100;
				var endmonth	= begmonth + 32;
				if (begmonth > datefr) { datefr = begmonth; }
				if (endmonth < dateto) { dateto = endmonth; }
				var numdates	= dateto - datefr;
				if (numdates < 0) { continue; }
				dateto++;
				for (var thedate = datefr; thedate < dateto; thedate++) {
					datestrarr.push(thedate);
				}
			} else {
				datestrarr.push(datestr);
			}
		}
		for (dIdx = 0; dIdx < datestrarr.length; dIdx++) {
			var datestr = datestrarr[dIdx];
			var dateEle	= this.dateElements["date" + datestr];
			if (!dateEle) { continue; }
			var status	= getElementValue(Event,"Status","Available");
			this.changeStatus(dateEle,status);
		}
	}
 };

 this.changeStatus	= function(cell,newstatus) {
	if (newstatus.match(/Blackout/)) {
		newstatus = "Booked";
	}
	if (!newstatus.match(/(Available|Booked|Reserved|Selected|OnOrder)/)) {
		newstatus = "Other";
	}
	var cn  = cell.className;
	if (cn.length == 0) { cell.className = newstatus; return;}
	cn  = cn.replace(/(Available|Booked|Reserved|Selected|OnOrder)/,newstatus);
	if (!cn.match(newstatus)) { cn += " " + newstatus; }
	cell.className  = cn;
//alert(cell.className);
	return;
 }

	return this;
 }

