//A quick search with Google learned me that Mozilla stores the line number in
//the lineNumber property and Opera appends it to the message property.
//
//Perhaps you could use window.onerror instead, eg:

window.onerror = function (err, file, line) {
	var s_ERROR = "";

	s_ERROR += 'The following error occured:\n';
	s_ERROR += 'Error [' + err + ']\n';
	s_ERROR += 'File  [' + file + ']\n';
	s_ERROR += 'Line  [' + line + ']\n';
	/*
	for (var i in err) {
		s_ERROR += i + ' = ' + err[i] +'\n';
	};
	*/

	if (window.onerror.caller === null){
		s_ERROR += 'CallLevel was called from the top level\n';
	}
	else{
		s_ERROR += 'CallLevel was called by another function.' + window.onerror.caller;
	}
	alert(s_ERROR);
	return true;
};

/*
// ----------------------------------------------------------------------------
// This overrides an extension in prototype.js so that we can do better
// trapping and debugging in ie.
// ----------------------------------------------------------------------------
Object.extend(
	String.prototype, {
		evalScripts: function() {
			return this.extractScripts().map(
				function(script) {
					var s_ERROR = "";
					var o_res;
					try {
						o_res = eval(script);
					}
					catch (e) {
						s_ERROR += "Exception Caught:eval(script)\n";
						s_ERROR += "Exception:" + e + "\n";
						if (script.match(/[\s\t\r\n]*<!--/)){
							s_ERROR += "[There is a <!-- --> Comment in the javascript]\n";
							s_ERROR += "[IE Does not like to eval() that]\n";
						}
						for (var i in e) {
							s_ERROR += i + ' = ' + e[i] +'\n';
						}
						alert(s_ERROR + "\n--------------------------------------------------------\n" + script);
					}
					//finally {
							//alert("Application failed - Sorry");
							//closeMyFile(); // always close the resource
					//}
					return o_res;
				}
			);
		}
	}
);

*/


var pre_select_do_search_count_waiting = 0;
var s_loading_html = '<img src="/images/ajax-loader-0.gif" alt="Loading data">';





// ############################################################################
// Function: new_window()
// Purpose:  create and populate a new wondow with a url
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function new_window(){
}

// ############################################################################
// Function: show_popup()
// Purpose:  create and populate a popup div
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function show_popup(){
}
// ############################################################################
// Function: pre_select_set_defaults()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function pre_select_set_defaults(){
}
// ############################################################################
// Function: pre_select_add_handlers()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function pre_select_add_handlers(){
	debugit('pre_select_add_handlers');
	aryMapLinks        = $A($$('#pnlPsWhereMap area'));
	aryWhereCheckboxes = $$('#pnlPsWhere input.cbx');
	aryWhereLabels     = $A($$('#pnlPsWhere label.lblPsWhere'));

	aryWhenCheckboxes = $$('#pnlPsWhen input.cbx');
	aryWhenLabels     = $A($$('#pnlPsWhen label.lblPsWhen'));

	aryWhatCheckboxes = $$('#pnlPsWhat input.cbx');
	aryWhatLabels     = $A($$('#pnlPsWhat label.lblPsWhat'));

	// --------------------------------------------------------------------------
	// Set all Where Checkboxes to unchecked except for the Where=Any Checkbox
	// --------------------------------------------------------------------------
	aryWhereCheckboxes.each(function(item) {item.checked = false;});
	aryWhereLabels.invoke('removeClassName','cbxLblChecked');
	$("lblPsWhereZZ").addClassName('cbxLblChecked');
	$("cbxPsWhereZZ").checked = true;


	// --------------------------------------------------------------------------
	// Add event handler for clicks on "Where" areas on the image map
	// --------------------------------------------------------------------------
	aryMapLinks.each(function(item) {
		var strMapAreaId = item.id;
		$(strMapAreaId).observe(
			'click',
			function(e){
				debugit("-------------------------");
				debugit("MAP Clicked:" + strMapAreaId);

				var intLength = strMapAreaId.length;
				var strDistrictId = strMapAreaId.substring(intLength-2,intLength);


				debugit("strDistrictId:" + strDistrictId);
				//toggleWhereCheckbox(strDistrictId);
				var cbxPsWhere = $("cbxPsWhere" + strDistrictId);
				var lblPsWhere = $("lblPsWhere" + strDistrictId);

				if(!cbxPsWhere){
					alert(strMapAreaId + " does not exist on the page!");
					return;
				}



				if (cbxPsWhere.disabled){
					lblPsWhere.removeClassName('cbxLblChecked');
					return;
				}

				if(strDistrictId == "ZZ"){

					if (cbxPsWhere.checked){
						debugit(cbxPsWhere.id + " is checked");
						cbxPsWhere.checked=false;
						lblPsWhere.removeClassName('cbxLblChecked');
					}
					else {
						debugit(cbxPsWhere.id + " is not checked");
						aryWhereCheckboxes.each(function(item) {item.checked = false;});
						aryWhereLabels.invoke('removeClassName','cbxLblChecked');
						cbxPsWhere.checked = true;
						lblPsWhere.addClassName('cbxLblChecked');
					}

					pre_select_do_search_count();

					return;
				}

				$("lblPsWhereZZ").removeClassName('cbxLblChecked');
				$("cbxPsWhereZZ").checked = false;


				if (cbxPsWhere.checked){
					cbxPsWhere.checked=false;
					lblPsWhere.removeClassName('cbxLblChecked');
				}
				else {
					cbxPsWhere.checked=true;
					lblPsWhere.addClassName('cbxLblChecked');
				}


				pre_select_do_search_count();


			}
		);
		//debugit(strMapAreaId);


	});

	// --------------------------------------------------------------------------
	// Add event handler for clicks on "Where" checkbox labels
	// --------------------------------------------------------------------------
	/*
	aryWhereLabels.each(
		function(item) {
			var strWhereLabelId = item.id;
			$(strWhereLabelId).observe(
				'click',
				function(e){
					debugit("-------------------------");
					debugit("Clicked:" + strWhereLabelId);
					var strDistrictId = strWhereLabelId.substring(-2,2);
					debugit("strDistrictId:" + strDistrictId);
					var cbxPsWhere = $("cbxPsWhere" + strDistrictId);
					var lblPsWhere = $("lblPsWhere" + strDistrictId);

					if (cbxPsWhere.disabled){
						lblPsWhere.removeClassName('cbxLblChecked');
						return;
					}

					// --------------------------------------------------------------------
					// When the user has clicked on the "Any" label, we want to remove the
					// checks from all other districts and remove the checked class from
					// their corresponding labels
					// --------------------------------------------------------------------
					if(strDistrictId == "ZZ"){
						if (cbxPsWhere.checked){
							debugit(cbxPsWhere.id + " is checked");
							lblPsWhere.removeClassName('cbxLblChecked');
						}
						else {
							debugit(cbxPsWhere.id + " is not checked");
							aryWhereCheckboxes.each(function(item) {item.checked = false;});
							aryWhereLabels.invoke('removeClassName','cbxLblChecked');
							lblPsWhere.addClassName('cbxLblChecked');
						}
						return true;
					}

					$("lblPsWhereZZ").removeClassName('cbxLblChecked');
					$("cbxPsWhereZZ").checked = false;

					if (cbxPsWhere.checked){
						lblPsWhere.removeClassName('cbxLblChecked');
					}
					else {
						lblPsWhere.addClassName('cbxLblChecked');
					}


				}
			); // End Observe
		} // End Function
	); // End Each
	*/

	// --------------------------------------------------------------------------
	// Add event handler for clicks on "Where" checkbox
	// --------------------------------------------------------------------------
	aryWhereCheckboxes.each(
		function(item) {




			var strWhereCheckboxId = item.id;
			$(strWhereCheckboxId).observe(
				'click',
				function(e){
					debugit("-------------------------");
					debugit("Checkbox Clicked:" + strWhereCheckboxId);
					var intLength = strWhereCheckboxId.length;
					var strDistrictId = strWhereCheckboxId.substring(intLength-2,intLength);
					debugit("strDistrictId:" + strDistrictId);
					//debugit("strDistrictId2:" + strDistrictId2);
					var cbxPsWhere = $("cbxPsWhere" + strDistrictId);
					var lblPsWhere = $("lblPsWhere" + strDistrictId);

					if (cbxPsWhere.disabled){
						lblPsWhere.removeClassName('cbxLblChecked');
						return;
					}

					// --------------------------------------------------------------------
					// When the user has clicked on the "Any" label, we want to remove the
					// checks from all other districts and remove the checked class from
					// their corresponding labels
					// --------------------------------------------------------------------
					if(strDistrictId == "ZZ"){
						if (cbxPsWhere.checked){
							debugit(cbxPsWhere.id + " is checked");
							aryWhereCheckboxes.each(function(item) {item.checked = false;});
							aryWhereLabels.invoke('removeClassName','cbxLblChecked');
							lblPsWhere.addClassName('cbxLblChecked');
							cbxPsWhere.checked = true;
						}
						else {
							debugit(cbxPsWhere.id + " is not checked");
							lblPsWhere.removeClassName('cbxLblChecked');
						}
						pre_select_do_search_count();
						return true;
					}

					$("lblPsWhereZZ").removeClassName('cbxLblChecked');
					$("cbxPsWhereZZ").checked = false;

					if (cbxPsWhere.checked){
						debugit(cbxPsWhere.id + " is checked");
						lblPsWhere.addClassName('cbxLblChecked');
					}
					else {
						debugit(cbxPsWhere.id + " is not checked");
						lblPsWhere.removeClassName('cbxLblChecked');
					}

					pre_select_do_search_count();


				}
			); // End Observe
		} // End Function
	); // End Each

	// --------------------------------------------------------------------------
	// Add event handler for clicks on "When" checkbox
	// --------------------------------------------------------------------------
	aryWhenCheckboxes.each(
		function(item) {
			var strWhenCheckboxId = item.id;
			$(strWhenCheckboxId).observe(
				'click',
				function(e){
					debugit("-------------------------");
					debugit("WHEN Checkbox Clicked:" + strWhenCheckboxId);
					var intLength = strWhenCheckboxId.length;
					var intDateNumber = strWhenCheckboxId.substring(intLength-1,intLength);
					debugit("intDateNumber:" + intDateNumber);

					var cbxPsWhen = $("cbxPsWhen" + intDateNumber);
					var lblPsWhen = $("lblPsWhen" + intDateNumber);

					if (cbxPsWhen.disabled){
						lblPsWhen.removeClassName('cbxLblChecked');
						return;
					}


					// --------------------------------------------------------------------
					// When the user has clicked on the "Any" label, we want to remove the
					// checks from all other dates and remove the checked class from
					// their corresponding labels
					// --------------------------------------------------------------------
					if(intDateNumber == "0"){
						if (cbxPsWhen.checked){
							debugit(cbxPsWhen.id + " is checked");
							aryWhenCheckboxes.each(function(item) {item.checked = false;});
							aryWhenLabels.invoke('removeClassName','cbxLblChecked');
							lblPsWhen.addClassName('cbxLblChecked');
							cbxPsWhen.checked = true;
						}
						else {
							debugit(cbxPsWhen.id + " is not checked");
							lblPsWhen.removeClassName('cbxLblChecked');
						}
						pre_select_do_search_count();
						return true;
					}

					// --------------------------------------------------------------------
					// When the user has clicked on the "Any" label, we want to remove the
					// checks from all other dates and remove the checked class from
					// their corresponding labels
					// --------------------------------------------------------------------
					else if(intDateNumber == "8"){
						if (cbxPsWhen.checked){
							debugit(cbxPsWhen.id + " is checked");
							aryWhenCheckboxes.each(function(item) {item.checked = false;});
							aryWhenLabels.invoke('removeClassName','cbxLblChecked');
							lblPsWhen.addClassName('cbxLblChecked');
							cbxPsWhen.checked = true;
						}
						else {
							debugit(cbxPsWhen.id + " is not checked");
							lblPsWhen.removeClassName('cbxLblChecked');
						}
						pre_select_do_search_count();
						return true;
					}

					else{
						$("lblPsWhen8").removeClassName('cbxLblChecked');
						$("cbxPsWhen8").checked = false;
						$("lblPsWhen0").removeClassName('cbxLblChecked');
						$("cbxPsWhen0").checked = false;
					}




					if (cbxPsWhen.checked){
						debugit(cbxPsWhen.id + " is checked");
						lblPsWhen.addClassName('cbxLblChecked');
					}
					else {
						debugit(cbxPsWhen.id + " is not checked");
						lblPsWhen.removeClassName('cbxLblChecked');
					}

					pre_select_do_search_count();


				}
			); // End Observe
		} // End Function
	); // End Each



	// --------------------------------------------------------------------------
	// Add event handler for clicks on "What" checkbox
	// --------------------------------------------------------------------------
	aryWhatCheckboxes.each(
		function(item) {
			var strWhatCheckboxId = item.id;
			$(strWhatCheckboxId).observe(
				'click',
				function(e){
					debugit("-------------------------");
					debugit("WHAT Checkbox Clicked:" + strWhatCheckboxId);
					var intLength = strWhatCheckboxId.length;
					var strListingType = strWhatCheckboxId.substring(9,intLength);
					debugit("strListingType:" + strListingType);

					var cbxPsWhat = $("cbxPsWhat" + strListingType);
					var lblPsWhat = $("lblPsWhat" + strListingType);

					if (cbxPsWhat.disabled){
						lblPsWhat.removeClassName('cbxLblChecked');
						return;
					}


					// --------------------------------------------------------------------
					// When the user has clicked on the "Any" label, we want to remove the
					// checks from all other dates and remove the checked class from
					// their corresponding labels
					// --------------------------------------------------------------------
					if(strListingType == "ZZ"){
						if (cbxPsWhat.checked){
							debugit(cbxPsWhat.id + " is checked");
							aryWhatCheckboxes.each(function(item) {item.checked = false;});
							aryWhatLabels.invoke('removeClassName','cbxLblChecked');
							lblPsWhat.addClassName('cbxLblChecked');
							cbxPsWhat.checked = true;
						}
						else {
							debugit(cbxPsWhat.id + " is not checked");
							lblPsWhat.removeClassName('cbxLblChecked');
						}
						pre_select_do_search_count();
						return true;
					}

					else{
						$("lblPsWhatZZ").removeClassName('cbxLblChecked');
						$("cbxPsWhatZZ").checked = false;
					}

					if (cbxPsWhat.checked){
						debugit(cbxPsWhat.id + " is checked");
						lblPsWhat.addClassName('cbxLblChecked');
					}
					else {
						debugit(cbxPsWhat.id + " is not checked");
						lblPsWhat.removeClassName('cbxLblChecked');
					}

					pre_select_do_search_count();

				}
			); // End Observe
		} // End Function
	); // End Each





	// --------------------------------------------------------------------------
	// Add event handler for change and blur on selPriceTo
	// --------------------------------------------------------------------------
	objSelPriceTo = $('selPriceTo');
	objSelPriceTo.observe(
		'change',
		function(e){
			debugit("-------------------------");
			var objSelPriceFrom = $('selPriceFrom');
			var objSelPriceTo = $('selPriceTo');

			intPriceFrom = parseInt(objSelPriceFrom.value,10);
			intPriceTo   = parseInt(objSelPriceTo.value,10);
			debugit("selPriceTo Changed:" + intPriceTo);
			debugit("selPriceTo   Index:" + objSelPriceTo.selectedIndex);

			while((intPriceTo > 0) && (intPriceFrom > 0) && (intPriceFrom >= intPriceTo )){
				debugit("FROM: (" + intPriceFrom + ") GREATER/EQ TO: (" + intPriceTo + ")");
				objSelPriceFrom.selectedIndex =  objSelPriceFrom.selectedIndex - 1;
				debugit("selPriceFrom NOW:" + objSelPriceFrom.value);
				//debugit("selPriceTo NOW:" + objSelPriceTo.value);
			intPriceFrom = parseInt(objSelPriceFrom.value,10);
			intPriceTo   = parseInt(objSelPriceTo.value,10);
			}
			pre_select_do_search_count();
		}
	); // End Observe



	// --------------------------------------------------------------------------
	// Add event handler for change and blur on selPriceFrom
	// --------------------------------------------------------------------------
	objSelPriceFrom = $('selPriceFrom');
	objSelPriceFrom.observe(
		'change',
		function(e){
			debugit("-------------------------");
			var objSelPriceFrom = $('selPriceFrom');
			var objSelPriceTo = $('selPriceTo');
			intPriceFrom = parseInt(objSelPriceFrom.value,10);
			intPriceTo   = parseInt(objSelPriceTo.value,10);
			debugit("selPriceFrom Changed:" + intPriceFrom);
			debugit("selPriceFrom   Index:" + objSelPriceFrom.selectedIndex);
			debugit("selPriceTo value:" + intPriceTo);
			while((intPriceTo > 0) && (intPriceFrom > 0) && (intPriceTo <= intPriceFrom)){
				debugit("TO: (" + intPriceTo + ") LESSS/EQ  FROM: (" + intPriceFrom + ")");
			intPriceFrom = parseInt(objSelPriceFrom.value,10);
			intPriceTo   = parseInt(objSelPriceTo.value,10);
				objSelPriceTo.selectedIndex =  objSelPriceTo.selectedIndex + 1;
				//debugit("selPriceFrom NOW:" + objSelPriceFrom.value);
				debugit("selPriceTo NOW:" + objSelPriceTo.value);
			}
			pre_select_do_search_count();
		}
	); // End Observe


	// --------------------------------------------------------------------------
	// Add event handler for change and blur on selBedrooms
	// --------------------------------------------------------------------------
	objSelBedrooms = $('selBedrooms');
	objSelBedrooms.observe(
		'change',
		function(e){
			debugit("-------------------------");
			debugit("selBedrooms Changed:" + objSelBedrooms.value);
			debugit("selBedrooms   Index:" + objSelBedrooms.selectedIndex);
			pre_select_do_search_count();
		}
	); // End Observe


	// --------------------------------------------------------------------------
	// Add event handler for change and blur on selBathrooms
	// --------------------------------------------------------------------------
	objSelBathrooms = $('selBathrooms');
	objSelBathrooms.observe(
		'change',
		function(e){
			debugit("-------------------------");
			debugit("selBathrooms Changed:" + objSelBathrooms.value);
			debugit("selBathrooms   Index:" + objSelBathrooms.selectedIndex);
			pre_select_do_search_count();
		}
	); // End Observe




}
// ############################################################################
// Function: pre_select_where_change_list()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function pre_select_where_change_list(){
}
// ############################################################################
// Function: pre_select_where_change_map()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function pre_select_where_change_map(){
}

// ############################################################################
// Function: pre_select_date_change()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function pre_select_date_change(){
}

// ############################################################################
// Function: pre_select_property_type_change()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function pre_select_property_type_change(){
}

// ############################################################################
// Function: pre_select_price_from_change()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function pre_select_price_from_change(){
}

// ############################################################################
// Function: pre_select_price_to_change()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function pre_select_price_to_change(){
}

// ############################################################################
// Function: pre_select_price_to_change()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function debugClear(){
	$('pnlDebug').update("");
}
// ############################################################################
// Function: pre_select_price_to_change()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function debugit(strMessage){
	//return;
	$('pnlDebug').update($('pnlDebug').innerHTML + '<br>' +  strMessage);
}

// ############################################################################
// Function: toggleWhereCheckbox()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function toggleWhereCheckbox(strDistrictId){
	var cbxWhere = $("where-" + strDistrictId);
	var lblWhere = $("lbl-where-" + strDistrictId);

	if (cbxWhere.checked){
		cbxWhere.checked=false;
		lblWhere.removeClassName('cbxLblChecked');
	}
	else {
		cbxWhere.checked=true;
		lblWhere.addClassName('cbxLblChecked');
	}
}




// ############################################################################
// Function: pre_select_remove_handlers()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function pre_select_remove_handlers(){
}


// ############################################################################
// Function: pre_select_summary_update()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function pre_select_summary_update(){
}

// ############################################################################
// Function: pre_select_get_search_criteria()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function pre_select_get_search_criteria(){
}


// ############################################################################
// Function: gatherPreselectFormData()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function gatherPreselectFormData(){
	debugit('gatherPreselectFormData');
	h_params = $('frmPreSelect').serialize(true);
	h_params['mode'] = '99';
	return h_params;
}

// ############################################################################
// Function: gatherResultSelectionFormData()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function gatherResultSelectionFormData(){
	debugit('gatherResultSelectionFormData');
	h_params = $('frmRsResults').serialize(true);
	h_params['mode'] = '4';
	return h_params;
}



// ############################################################################
// Function: pre_select_do_search_count()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function pre_select_do_search_count(){

	pre_select_do_search_count_waiting++;

	if(pre_select_do_search_count_waiting > 1){
		debugit("Already running pre_select_do_search_count");
		return;
	}




	$('lblExpectedResultCount').update(s_loading_html);





	new Ajax.Updater(
		{ success: 'lblExpectedResultCount', failure: 'pnlPreSelectSummaryFail' },
		'/buying/open_house.code-2009.php',
		{
			method:'post',
			EvalScripts: true,
			parameters: gatherPreselectFormData(),
			onSuccess: function(transport) {
				debugit("onSuccess:pre_select_do_search_count");
				//pre_select_do_search_count_waiting--;
			},
			onFailure: function(transport) {
				debugit("onFailure:pre_select_do_search_count");
				//pre_select_do_search_count_waiting--;
			},
			onComplete: function(){
				debugit("onComplete:pre_select_do_search_count");
				pre_select_do_search_count_waiting--;
				debugit("onComplete:pre_select_do_search_count_waiting = " + pre_select_do_search_count_waiting);
				if(pre_select_do_search_count_waiting > 0){
					pre_select_do_search_count_waiting = 0;
					pre_select_do_search_count();
				}
			}
		}
	);

}

// ############################################################################
// Function: results_add_select_handlers()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function results_add_select_handlers(){

	debugit("--------------------------------------------------------------------------------");
	debugit("results_add_select_handlers()");
	debugit("--------------------------------------------------------------------------------");


	var aryCheckboxes = $$('#pnlOhResults .tblRecord input.cbx');


	var lnkOhAddAll    = $('pnlOhResultsSummaryAddAll');
	var lnkOhRemoveAll = $('pnlOhResultsSummaryRemoveAll');


	if(lnkOhAddAll !== null){
		// --------------------------------------------------------------------------
		// Add event handler for clicks on "Open House Add All" link
		// --------------------------------------------------------------------------
		$(lnkOhAddAll).observe(
			'click',
			function(e){
				debugit("-------------------------");
				debugit("lnkOhAddAll Clicked:" + lnkOhAddAll.innerHTML);
				// --------------------------------------------------------------------------
				// Handles clicks on "Add All nn" linkButton
				// --------------------------------------------------------------------------
				var aryCheckboxes = $$('#pnlOhResults .tblRecord input.cbx');
				aryCheckboxes.each(
					function(item) {
						var strOhidCheckboxId = item.id;
						var intOhID = $(strOhidCheckboxId).value;
						debugit("intOhID:" + intOhID);
						if ($(strOhidCheckboxId).checked === false){
							$(strOhidCheckboxId).checked = true;
							setOpenHouseSelected(intOhID);
						}
					} // End Function
				); // End Each


			} // End Function
		); // End Observe

	}




	// --------------------------------------------------------------------------
	// Add event handler for clicks on "Open House Remove All" link
	// --------------------------------------------------------------------------
	if(lnkOhAddAll !== null){
		$(lnkOhRemoveAll).observe(
			'click',
			function(e){
				debugit("-------------------------");
				debugit("lnkOhRemoveAll Clicked:" + lnkOhRemoveAll.innerHTML);


				// --------------------------------------------------------------------------
				// Handles clicks on "Remove All nn" linkButton
				// --------------------------------------------------------------------------
				var aryCheckboxes = $$('#pnlOhResults .tblRecord input.cbx');
				aryCheckboxes.each(
					function(item) {
						var strOhidCheckboxId = item.id;
						var intOhID = $(strOhidCheckboxId).value;
						debugit("intOhID:" + intOhID);
						if ($(strOhidCheckboxId).checked === true){
							$(strOhidCheckboxId).checked = false;
							setOpenHouseDeSelected(intOhID);
						}
					} // End Function
				); // End Each


			}
		); // End Observe
	}


	// --------------------------------------------------------------------------
	// Add event handler for clicks on "Open House Select" checkbox
	// --------------------------------------------------------------------------
	aryCheckboxes.each(
		function(item) {
			var strOhidCheckboxId = item.id;
			debugit("Adding Listener for " + item.id);
			$(strOhidCheckboxId).observe(
				'click',
				function(e){
					debugit("-------------------------");
					debugit("Open House Select Checkbox Clicked:" + strOhidCheckboxId);
					var intOhID = $(strOhidCheckboxId).value;
					debugit("intOhID:" + intOhID);

					if ($(strOhidCheckboxId).checked){
						debugit($(strOhidCheckboxId).value + " is checked");
						setOpenHouseSelected(intOhID);
					}
					else {
						debugit($(strOhidCheckboxId).id + " is not checked");
						setOpenHouseDeSelected(intOhID);
					}
				}
			); // End Observe
		} // End Function
	); // End Each















}

// ############################################################################
// Function: setOpenHouseDeSelected()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function setOpenHouseDeSelected(intOhId){
	debugit("setOpenHouseDeSelected");
	new Ajax.Updater(
		{ success: 'pnlDebug', failure: 'pnlOhError' },
		'/buying/open_house.code-2009.php',
		{
			method:'post',
			evalScripts: true,
			 parameters: {
			 	'mode': 11,
			 	'ohid' : intOhId
			 }
		}
	);

	setOpenHouseSelectedCount();

	var intOpenHouseSelectedCountTotal = parseInt($('spnOpenHouseSelectedCountTotal').innerHTML, 10);
	$('spnOpenHouseSelectedCountTotal').update(intOpenHouseSelectedCountTotal-1)

	if((intOpenHouseSelectedCountTotal-1) < 1){
		$('btnPrint').disable();
		$('btnPrint').addClassName("disabled");

		$('btnSend').disable();
		$('btnSend').addClassName("disabled");
	}

}
// ############################################################################
// Function: setOpenHouseSelected()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function setOpenHouseSelected(intOhId){
	debugit("setOpenHouseSelected");
	new Ajax.Updater(
		{ success: 'pnlDebug', failure: 'pnlOhError' },
		'/buying/open_house.code-2009.php',
		{
			method:'post',
			evalScripts: true,
			 parameters: {
			 	'mode': 10,
			 	'ohid' : intOhId
			 }
		}
	);

	setOpenHouseSelectedCount();

	var intOpenHouseSelectedCountTotal = parseInt($('spnOpenHouseSelectedCountTotal').innerHTML, 10);
	$('spnOpenHouseSelectedCountTotal').update(intOpenHouseSelectedCountTotal+1)
	$('btnPrint').enable();
	$('btnPrint').removeClassName("disabled");
	$('btnSend').enable();
	$('btnSend').removeClassName("disabled");

}

// ############################################################################
// Function: results_remove_select_handlers()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function setOpenHouseSelectedCount(){

	var aryCheckboxes = $$('#pnlOhResults .tblRecord input.cbx');

	var iChecked = 0;

	aryCheckboxes.each(function(item) {if(item.checked){iChecked++;}});

	var spnOpenHouseSelectedCount = $('spnOpenHouseSelectedCount');

	debugit("aryCheckboxes.length" + iChecked);

	spnOpenHouseSelectedCount.update(iChecked);
}




// ############################################################################
// Function: results_remove_select_handlers()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function results_remove_select_handlers(){
}

// ############################################################################
// Function: results_add_pagination_handlers()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function results_add_pagination_handlers(){
}

// ############################################################################
// Function: results_add_view_handlers()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function results_add_view_handlers(){


	// --------------------------------------------------------------------------
	// Add event handler for clicks on "Open House Select" checkbox
	// --------------------------------------------------------------------------
	var aryRadioNames = $A(Array('radResFormatListTop','radResFormatThumbTop','radResFormatListBottom','radResFormatThumbBottom'));
	// --------------------------------------------------------------------------
	// Add event handler for clicks on "Sort Headers"
	// --------------------------------------------------------------------------
	aryRadioNames.each(
		function(strFormatRadioButtonId) {
			debugit("Adding Listener for " + strFormatRadioButtonId);
			if($(strFormatRadioButtonId) !== null){
				$($(strFormatRadioButtonId)).observe(
					'click',
					function(event){
						debugit("-------------------------");
						debugit("radResFormatListTop Radio Clicked:" + strFormatRadioButtonId);
						var objRadioButton = Event.element(event);


						var strDisplayMode = $('display_mode').value;
						debugit("strDisplayMode:" + strDisplayMode);
						var intMode = (strDisplayMode == 'print') ? 44 : 48;



						var strRadioButtonId = objRadioButton.id;
						var strFormatSelected = objRadioButton.value;


						if(strFormatSelected == 'thumb'){
							$('radResFormatThumbTop').checked = true;
							$('radResFormatThumbBottom').checked = true;
						}
						else{
							$('radResFormatListTop').checked = true;
							$('radResFormatListBottom').checked = true;
						}

						debugit("strRadioButtonId:" + strRadioButtonId);
						debugit("strFormatSelected:" + strFormatSelected);


						var aryUrlAndQuery = document.URL.split('?');
						var strUrlBase     = aryUrlAndQuery[0];
						var strNewUrl      = strUrlBase + '?mode=' + intMode + '&format=' + strFormatSelected;

						debugit("strUrlBase:" + strUrlBase);
						debugit("strNewUrl:" + strNewUrl);


						//return;

						window.location.href=strNewUrl;

						return;

					}
				); // End Observe
			}


		} // End Function
	); // End Each

//			var strFormatRadioButtonId = 'radResFormatListTop';
//
//			debugit("Adding Listener for " + strFormatRadioButtonId);


//			.each(












}

// ############################################################################
// Function: result_selection_changed()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function result_selection_changed(){
}

// ############################################################################
// Function: results_add_action_handlers()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function results_add_action_handlers(){

	var btnResults = $('btnResults');
	// --------------------------------------------------------------------------
	// Add event handler for clicks on "btnResults"
	// --------------------------------------------------------------------------

	if(btnResults !== null){
		debugit("Adding Listener for btnResults");
		btnResults.observe(
			'click',
			function(event){
				debugit("-------------------------");
				debugit("btnResults Clicked:");
				debugit("btnResults Clicked:");




					var aryUrlAndQuery = document.URL.split('?');
					var strUrlBase     = aryUrlAndQuery[0];
					var strNewUrl      = strUrlBase + '?mode=48&results=1'; // MODE_RESULTS_VIEW


					debugit("strUrlBase:" + strUrlBase);
					debugit("strNewUrl:" + strNewUrl);

					window.location.href=strNewUrl;

					return;







			} // End Function
		); // End Observe

	}

	// --------------------------------------------------------------------------
	// Add event handler for clicks on "btnSend"
	// --------------------------------------------------------------------------
	var btnSend  = $('btnSend');
	if(btnSend !== null){
		debugit("Adding Listener for btnSend");

		btnSend.observe(
			'click',
			function(event){
				debugit("-------------------------");
				debugit("btnSend Clicked:");
				debugit("btnSend Clicked:Save Selections");
				$('pnlOhResultsSend').show();
				$('pnlOhEmailControls').show();
				$('pnlOhEmailStatus').update("");
				$('pnlOhEmailStatus').hide();
				return;

			} // End Function
		); // End Observe

	}


	// --------------------------------------------------------------------------
	// Add event handler for clicks on "btnSendEmail"
	// --------------------------------------------------------------------------
	var btnSendEmail  = $('btnSendEmail');
	if(btnSendEmail !== null){
		debugit("Adding Listener for btnSendEmail");

		btnSendEmail.observe(
			'click',
			function(event){
				debugit("-------------------------");
				debugit("btnSendEmail Clicked:");

				var strErrors = "";

				if(!is_valid_email($('txtEmailFrom').value)){
					strErrors += "Email From: " + $('txtEmailFrom').value + " is not a valid email address.\n";
				}
				if(!is_valid_email($('txtEmailTo').value)){
					strErrors += "Email To: " + $('txtEmailTo').value + " is not a valid email address.\n";
				}
				if(strErrors !== ""){
					alert(strErrors);
					return false;
				}

				debugit("txtEmailFrom:" + $('txtEmailFrom').value);
				debugit("txtEmailTo:" + $('txtEmailTo').value);


				$('pnlOhEmailControls').hide();
				$('pnlOhEmailStatus').show();
				$('pnlOhEmailStatus').update("<p>" + s_loading_html + "Sending email.... please wait.</p>");

				new Ajax.Updater(
					{ success: 'pnlOhEmailStatus', failure: 'pnlOhEmailStatus' },
					'/buying/open_house.code-2009.php',
					{
						method:'post',
						evalScripts: true,
						parameters: {
							'mode': 13, // MODE_SEND
							'from': $('txtEmailFrom').value,
							'to'  : $('txtEmailTo').value
						}
					}
				); // End Ajax.Updater



			} // End Function
		); // End Observe

	}

}

// ############################################################################
// Function: results_remove_action_handlers()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function results_remove_action_handlers(){
}

// ############################################################################
// Function: results_add_sort_handlers()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function results_add_sort_handlers(){

	debugit("--------------------------------------------------------------------------------");
	debugit("results_add_sort_handlers()");
	debugit("--------------------------------------------------------------------------------");


	var btnSort = $('btnSort');
	debugit("btnSort = " + btnSort);
	/*
	var arySelectSortControls2xx = $$('#pnlOhResultsSummarySort select');
	//alert("arySelectSortControls2xx.length " + arySelectSortControls2xx.length);
	debugit("arySelectSortControls2xx.length " + arySelectSortControls2xx.length);
	*/

	if (btnSort !== null){
		btnSort.observe(
			'click',
			function(event){
	/*
				var objSortControl = Event.element(event);
				var strSortControl = objSortControl.id;
				var strSortValue   = objSortControl.value;

				debugit("--------------------------------------------------------------------------------");
				debugit("SORTING()");
				debugit("--------------------------------------------------------------------------------");

				debugit("objSortControl:" + objSortControl);
				debugit("strSortControl:" + strSortControl);
				debugit("strSortValue:" + strSortValue);

				//objSortControl = $(strSortControl);

				debugit("Select Changed:" + strSortControl);
	*/
				var hashParams = $H({});


				var arySelectSortControls2 = $$('#pnlOhResultsSummarySort select');
				//alert("arySelectSortControls2.length " + arySelectSortControls2.length);

				arySelectSortControls2.each(
					function(objSelectControl) {
						var strSortControl = objSelectControl.id;
						var strSortValue1  = objSelectControl.value;
						var strSortName1   = objSelectControl.name;
						var strSortNumber  = strSortName1.substring(strSortName1.length-1,strSortName1.length);
						/*
						debugit("------------------------------------------------------------");
						*/
						if(!strSortValue1.match(/^(Address|Price|Bedrooms|Bathrooms|Mls|MapArea|LotSize|SizeUnFin|SizeFin|PropertyType|YearBuilt|DateTimes)-([ad])$/)){
							//debugit("Nothing to do for " + strSortValue1);
							return;
						}

						var strSortField1 = strSortValue1.substring(0,strSortValue1.length-2);
						var strSortDir   = strSortValue1.substring(strSortValue1.length-1,strSortValue1.length);

						/*
						debugit("strSortControl:" + strSortControl);
						debugit("strSortValue1:" + strSortValue1);
						debugit("strSortName1:" + strSortName1);
						debugit("strSortField1:" + strSortField1);
						debugit("strSortDir:" + strSortDir);
						debugit("strSortNumber:" + strSortNumber);
						*/

						// 15/10/2009 1:41:28 PM apugh 
						// Backwards compatibility changes in Prototype 1.6

						//hashParams['sort'+strSortNumber] = strSortField1;
						//hashParams['dir'+strSortNumber] = strSortDir;
						
						hashParams.set('sort'+strSortNumber, strSortField1); 
						hashParams.set('dir'+strSortNumber, strSortDir); 

					} // End Function
				); // End Each



				var aryUrlAndQuery = document.URL.split('?');
				var strUrlBase     = aryUrlAndQuery[0];
				var strNewUrl      = strUrlBase + '?mode=43&' + (hashParams.toQueryString());


				/*
				debugit("hashParams:" + hashParams);
				debugit("hashParams.toQueryString():" + hashParams.toQueryString());
				debugit("strUrlBase:" + strUrlBase);
				debugit("strNewUrl:" + strNewUrl);
				*/
				window.location.href=strNewUrl;

				return;


			}
		); // End Observe

	}

	var aryHeaderDivs = $$('#pnlOhResults .tblHeader div');

	// --------------------------------------------------------------------------
	// Add event handler for clicks on "Sort Headers"
	// --------------------------------------------------------------------------
	aryHeaderDivs.each(
		function(item) {
			var strHeaderId = item.id;
			$(strHeaderId).observe(
				'click',
				function(e){

					debugit("-------------------------");

					objHeaderDiv = $(strHeaderId);

					debugit("Header Clicked:" + strHeaderId);
					var strHeaderName = strHeaderId.substring(9,strHeaderId.length);
					debugit("strHeaderName:" + strHeaderName);


					if(!strHeaderName.match(/^(Address|Price|Bedrooms|Bathrooms|Mls|MapArea|LotSize|SizeUnFin|SizeFin|PropertyType|YearBuilt|DateTimes)$/)){
						debugit("Nothing to do for " + strHeaderName);
						return;
					}




				var aryUrlAndQuery = document.URL.split('?');
				var strUrlBase     = aryUrlAndQuery[0];
				var strNewUrl      = strUrlBase + '?mode=43&sort=' + strHeaderName;


				debugit("strUrlBase:" + strUrlBase);
				debugit("strNewUrl:" + strNewUrl);
				window.location.href=strNewUrl;

				return;



				}
			); // End Observe
		} // End Function
	); // End Each







}

// ############################################################################
// Function: results_add_image_control_handler()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function results_add_image_control_handler(){

	debugit("--------------------------------------------------------------------------------");
	debugit("results_add_image_control_handler()");
	debugit("--------------------------------------------------------------------------------");

	var aryImageControllers = $$('#pnlOhResults .thumbPhoto .btnPhotoNav');
	debugit("aryImageControllers = " + aryImageControllers);

	// --------------------------------------------------------------------------
	// Add event handler for clicks on "Sort Headers"
	// --------------------------------------------------------------------------
	aryImageControllers.each(
		function(item) {
			var strImageControllerId = item.id;
			$(strImageControllerId).observe(
				'click',
				function(e){

					debugit("-------------------------");

					objHeaderDiv = $(strImageControllerId);

					debugit("Button Clicked:" + strImageControllerId);


					// ------------------------------------------------------------------
					// Extract the open house id from the id of the id of the image
					// controller
					// ------------------------------------------------------------------
					var intOhid = parseInt(strImageControllerId.substring(7,strImageControllerId.length),10);
					debugit("intOhid:" + intOhid);

					// ------------------------------------------------------------------
					// Create a reference to the image object
					// ------------------------------------------------------------------
					var objImage = $('photo'+intOhid);
					debugit("objImage:" + objImage);
					var strSrc = objImage.src;
					debugit("strSrc:" + strSrc);
					//var aryMatches = strSrc.match(/(\d+)\.jpg/);
					//debugit("aryMatches:" + aryMatches);
					//var strImgNum = aryMatches[0];
					//debugit("strImgNum:" + strImgNum);


					var strImgNum  = parseInt($('photoNum'+intOhid).innerHTML,10);
					var strImgCount = parseInt($('photoCount'+intOhid).innerHTML,10);
					debugit("strImgNum:" + strImgNum);
					debugit("strImgCount:" + strImgCount);


					var numIncrement = strImageControllerId.match(/Next/)?1:-1;


					var strImgNumNew = parseInt(strImgNum+numIncrement,10);
					debugit("strImgNumNew:" + strImgNumNew);

					var strSrcNew = strSrc.replace(/(\d+)\.jpg/, strImgNumNew + '.jpg');
					debugit("strSrcNew:" + strSrcNew);

					objImage.src=strSrcNew;

					$('photoNum'+intOhid).update(strImgNumNew);

					debugit("strImgNumNew == 1:" + (strImgNumNew == 1));
					debugit("strImgNumNew == strImgCount:" + (strImgNumNew == strImgCount));

					if(strImgNumNew == 1){
						$('btnPrev'+intOhid).disable();
					}
					else{
						$('btnPrev'+intOhid).enable();
					}

					if(strImgNumNew == strImgCount){
						$('btnNext'+intOhid).disable();
					}
					else{
						$('btnNext'+intOhid).enable();
					}

				}
			); // End Observe
		} // End Function
	); // End Each

}




// ############################################################################
// Function: results_add_external_link_handlers()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function results_add_external_link_handlers(){

	debugit("--------------------------------------------------------------------------------");
	debugit("results_add_external_link_handlers()");
	debugit("--------------------------------------------------------------------------------");
	$$('#pnlOhApplication a.external').each(
		function(objLink){
			objLink.setAttribute('target', 'external');
			objLink.removeClassName('external');
		} // End Function
	); // End Each

	$$('#map img').each(
		function(objImage){
			if(objImage.readAttribute('alt') === null){
				objImage.setAttribute('alt', '');
			}
		} // End Function
	); // End Each

}


// ############################################################################
// Function: results_remove_sort_handlers()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function results_remove_sort_handlers(){
}


// ############################################################################
// Function: do_search_sort()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function do_search_sort(){
}


// ############################################################################
// Function: results_add_print_single_handlers()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function results_add_print_single_handlers(){
}

// ############################################################################
// Function: results_remove_print_single_handlers()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function results_remove_print_single_handlers(){
}

// ############################################################################
// Function: results_remove_print_single_handlers()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function is_valid_email(strEmail){
	var filter= /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
	return(filter.test(strEmail));
}

// ############################################################################
// Function: feedback_form_toggle()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function feedback_form_toggle(){
	$('pnlFeedback').toggle();
	$('pnlFeedbackForm').show();
	$('pnlFeedbackStatus').update("");
	$('txtName').value = "";
	$('txtEmail').value = "";
	$('txtComment').innerText = "";
	//$('txtComment').update("");
}

// ############################################################################
// Function: feedback_form_toggle()
// Purpose:
// Inputs:
// Returns:
// Modifies:
// ############################################################################
function feedback_form_post(){
	var s_sending_html = '<img src="/images/ajax-loader-0.gif" alt="Sending Email"><span>Sending Email:</span>';
	var strErrors = "";

	// ------------------------------------------------------------------------
	// Validate that comment is present
	// ------------------------------------------------------------------------
	if($F('txtComment') === ""){
		strErrors += "-- A Comment is required to send the feedback form\n";
	}
	// ------------------------------------------------------------------------
	// Validate the email address is valid if provided
	// ------------------------------------------------------------------------
	if($F('txtEmail') !== ""){
		if (is_valid_email($F('txtEmail')) === false){
			strErrors += '-- This is not a valid email address\n';
		}
	}
	// ------------------------------------------------------------------------
	// Notify of errors if any
	// ------------------------------------------------------------------------
	if(strErrors !== ""){
		alert('The following error(s) occurred:\n'+strErrors);
		return;
	}
	// ------------------------------------------------------------------------
	// Display Ajax Loader
	// ------------------------------------------------------------------------
	$('pnlFeedbackStatus').update(s_sending_html);
	$('pnlFeedbackStatus').show();
	// ------------------------------------------------------------------------
	// Hide the form
	// ------------------------------------------------------------------------
	$('pnlFeedbackForm').hide();

	// ------------------------------------------------------------------------
	// Make the request
	// ------------------------------------------------------------------------
	new Ajax.Request(
		'/buying/open_house.code-2009.php',
		{
			method:'post',
			EvalScripts: true,
			parameters: {
				'mode': 55,
				'name': $F('txtName'),
				'email': $F('txtEmail'),
				'comment': $F('txtComment')
			}, // End parameters
			onSuccess: function(transport) {
				//alert("onSuccess");
				$('txtName').value = "";
				$('txtEmail').value = "";
				$('txtComment').update("");
				$('pnlFeedbackForm').hide();
				var strResponse = transport.responseText;
				$('pnlFeedbackStatus').update(strResponse);
				$('pnlFeedbackStatus').show();
				setTimeout(function(){$('pnlFeedback').hide();}, 4000);
			}, // End onSuccess
			onFailure: function(transport) {
				alert("onFailure");
				$('pnlFeedbackStatus').update(transport.responseText);
				$('pnlFeedbackStatus').show();
				$('pnlFeedbackForm').show();
			} // End onFailure
			//onComplete: function(){}
		} // End Ajax.Request Arguments
	); // End Ajax.Request
} // End function
