function setRates(siteId,roomId,discountId) {
	var formId        = "";
	var row           = 0;
	var rowcount      = rateResults.getRowCount();
	var rowEnd        = rowcount;
	var rate          = 0;
	var rack          = 0;
	var xcharge       = 0;
	var message       = '&nbsp;';
	var savings       = 0;
	var site_id       = 0;
	var room_id       = 0;
	var discRate      = '';
	var pfdn          = ''; // discount type (percent off, flat rate, dollar off, free night(s)
	var discounts     = '';
	var discSplit     = '';
	var d             = 0;
	var e             = 0;
	var f             = 0;
	var discIndex     = -1;
	var thisDate      = '';
	var total         = 0;
	var trate         = 0; // this rate
	var rrate         = 0; // rack rate
	var frate         = 0; // final rate
	var wadj          = 0; // wholesaler adjustment
	var drate         = 0; // discount rate
	var avail         = 0; // daily availability
	var fnght         = 0; // free nights
	var lnght         = 0; // los nights
	var anght         = 0; // adv nights
	var dowavail      = 0;
	var call          = 0;
	var plustax       = '+ Tax';
	var calltotal     = 0;
	var bgcolor       = "";
	var txtcolor      = "";
	var roommessage   = "";
	var hasXcharge    = false;

	// discount id is hidden in the form, b/c the discount select is part of the flash
	try {
		f             = eval('resultsForm' + roomId);
		if (f.site_id.value == siteId) {
			formId    = roomId;
		} else {
			f         = "";
			formId    = "";
		}
	} catch(e) {

	}
	if (f == "") {
		try {
			f         = eval('resultsForm' + siteId);
			formId    = siteId;
		} catch(e) {

		}
	}
	if (eval('resultsForm' + formId + '.discount_id')) {
		eval('resultsForm' + formId + '.discount_id').value = discountId;
	}
	eval('resultsForm' + formId + '.room_id').value         = roomId;

	for(row; row < rowcount; row++) {
		site_id       = rateResults.getField(row, 'site_id');
		room_id       = rateResults.getField(row, 'room_id');
		thisDate      = rateResults.getField(row, 'rate_date');
		roommessage   = rateResults.getField(row, 'message');

		if (site_id == siteId && room_id == roomId) {
			avail     = rateResults.getField(row, 'available_final');
			dowavail  = rateResults.getField(row, 'available');
			xcharge   = rateResults.getField(row, 'extra_charge');
			rrate     = rateResults.getField(row, 'rate_rack');
			frate     = rateResults.getField(row, 'rate_final');
			drate     = rateResults.getField(row, 'rate_discount');
			wadj      = rateResults.getField(row, 'wholesaler_adjustment');
			fnght     = rateResults.getField(row, 'free_night');
			lnght     = rateResults.getField(row, 'los_night');
			anght     = rateResults.getField(row, 'adv_night');
			discounts = rateResults.getField(row, 'discounts');
			trate     = rrate;
			wadj      = (isNaN(wadj) == true) ? 0 : wadj;
			if (xcharge > 0) { hasXcharge = true; }
			if (dowavail == 0) { calltotal = 1; }
			if (discountId == 0) { trate = frate; }
			rate      = add(trate,xcharge);
			discSplit = discounts.split(',');
			discRate  = '';
			for (d = 0; d < discSplit.length; d++) {
				if (d == 0) {
					discRate = discSplit[d].split('|')[0];
				} else {
					discRate = discRate + ',' + discSplit[d].split('|')[0];
				}
			}
			discSplit = discRate.split(',');
			discIndex = -1;
			for (d = 0; d < discSplit.length; d++) {
				if (discSplit[d] == discountId) {
					discIndex = d;
				}
			}
			if (discIndex >= 0 && discounts.split(',')[discIndex] != '') {
				rate          = discounts.split(',')[discIndex];
				rate          = add(rate.split('|')[2],xcharge);
			}
			total             = add(total,rate);
			if (discountId > 0) {
				if (discIndex >= 0) {
					pfdn      = discounts.split(',')[discIndex].split('|');
					pfdn      = pfdn[pfdn.length - 1];
				}
				if (rate > 0) {
					rate      = dollar_format(rate);
				} else if (pfdn == 'n') {
					rate      = '<S>' + dollar_format(rrate) + '</S><DIV STYLE="font-weight:bold;color:0E882D;font-size:9px">FREE</DIV>';
					if (xcharge > 0) {
						rate += '<DIV STYLE="font-weight:bold;color:0E882D;font-size:9px">' + dollar_format(xcharge) + '</DIV>';
					}
				} else {
					rate      = 'Call';
					call      = 1;
				}
			} else if (fnght == 1) {
				rate          = '<S>' + dollar_format(drate) + '</S>';
				rate         += '<DIV STYLE="font-weight:bold;color:0E882D;font-size:9px">' + (wadj > 0) ? dollar_format(wadj) : 'FREE' + '</DIV>';
				if (xcharge > 0) {
					rate     += '<DIV STYLE="font-weight:bold;color:0E882D;font-size:9px">' + dollar_format(xcharge) + '</DIV>';
				}
			} else if (lnght == 1 || anght == 1) {
				rate          = '<S>' + dollar_format(rrate) + '</S><DIV STYLE="font-weight:bold;color:0E882D;font-size:9px">' + dollar_format(frate) + '</DIV>';
			} else if (frate > 0) {
				if (rrate == 0 && frate == wadj) {
					rate      = 'Call';
					call      = 1;
				} else {
					rate      = dollar_format(frate);
				}
			} else {
				rate          = 'Call';
				call          = 1;
			}
			// change date bgcolor
			if (document.getElementById('roomdate_' + thisDate.format('YYYYMMDD') + '_' + formId)) {
				txtcolor     = "#FFFFFF";
				if (ListFind(roommessage,"zeroavailability",",") > 0) {
					bgcolor  = "#CD0A0A";
				} else if (ListFind(roommessage,"overmax",",") > 0) {
					bgcolor  = "#FEDB78";
					txtcolor = "#232323";
				} else if (ListFind(roommessage,"maxstay",",") > 0) {
					bgcolor  = "#FEDB78";
					txtcolor = "#232323";
				} else if (ListFind(roommessage,"notmin",",") > 0 || ListFind(roommessage,"notminduring",",") > 0) {
					bgcolor  = "#FEDB78";
					txtcolor = "#232323";
				} else if (ListFind(roommessage,"cta",",") > 0) {
					bgcolor  = "#FEDB78";
					txtcolor = "#232323";
				} else if (ListFind(roommessage,"extracharge",",") > 0) {
					bgcolor  = "#00CC33";
				} else {
					bgcolor  = "#00CC33";
				}
				document.getElementById('roomdate_' + thisDate.format('YYYYMMDD') + '_' + formId).style.backgroundColor = bgcolor;
				document.getElementById('roomdate_' + thisDate.format('YYYYMMDD') + '_' + formId).style.color           = txtcolor;
			}
			// change rate
			document.getElementById('roomrate_' + thisDate.format('YYYYMMDD') + '_' + formId).innerHTML = rate;
			rowEnd    = row;
		}
		// break out of the loop
		if (row > rowEnd) {
			row       = rowcount;
		}
	}

	// update total
	if (call == 1 || calltotal == 1) {
		total     = 'CALL';
		plustax   = '';
		eval('resultsForm' + formId + '.room_total').value = '';
	} else {
		eval('resultsForm' + formId + '.room_total').value = total;
		if (eval('resultsForm' + formId + '.extra_total')) {
			total = add(total,eval('resultsForm' + formId + '.extra_total').value);
		}
		total     = dollar_format(total);
	}
	document.getElementById('total' + formId).innerHTML    = total;
	document.getElementById('plustax' + formId).innerHTML  = plustax;

	// book now button
	updateReservationButtons(formId,avail);

	// update messaage
	if (avail == 0 || discountId == 0) {
		message     = rateResults.getField(rowEnd, 'message_final') + message;
		savings     = rateResults.getField(rowEnd, 'savings');
		if (savings > 0 && message != '') {
			message = message + '<BR>Total Savings: ' + dollar_format(savings);
		}
	} else if (discountId > 0 && hasXcharge == true) {
		message     = rateResults.getField(rowEnd, 'message_final') + message;
	}

	document.getElementById('message' + formId).innerHTML = message;

	try {
		document.getElementById('messagespan' + formId).style.display = (message == '&nbsp;') ? 'none' : '';
	} catch(e) {

	}
}

// update reservation total
function updateReservationTotal(formid) {
	var r = eval("resultsForm" + formid + ".room_total").value; // room total
	var t = eval("resultsForm" + formid + ".extra_total").value; // extra total

	// update reservation total
	if (isNaN(r) == false) { document.getElementById('total' + formid).innerHTML = dollar_format(add(r,t)); }
}

// show-hide 'book now' - 'hold now' buttons for multiple hotel page
function updateReservationButtons(formid,avail) {
	var b = "";
	var h = "";

	// book now
	try {
		document.getElementById("book_enabled_" + formid).style.display  = (avail != 1) ? 'none' : '';
		document.getElementById("book_disabled_" + formid).style.display = (avail == 1) ? 'none' : '';

		// hold now
		try {
			document.getElementById("hold_enabled_" + formid).style.display  = (avail != 1) ? 'none' : '';
			document.getElementById("hold_disabled_" + formid).style.display = (avail == 1) ? 'none' : '';
		} catch(h) { }
	} catch(b) { }
}