Listing 1

<cfcomponent name="ListingGateway">

<cffunction name="search" access="public" returntype="query" output="false">
<cfargument name="status" type="string" default="" />
        <cfargument name="priceFrom" type="numeric" default="0" />
        <cfargument name="priceTo" type="numeric" default="0" />
        <cfargument name="hasPool" type="boolean" default="false" />
        <!--- additional arguments removed --->

        <cfset var listingQuery = "" />

        <cfquery name="listingQuery" datasource="realestate">
                SELECT  *
                FROM    listing
                WHERE
listing.price >= 
<cfqueryparam value="#arguments.priceFrom#" cfsqltype="CF_SQL_MONEY"/>

<cfif arguments.priceTo GT 0>
       AND listing.price <=
	   <cfqueryparam value="#arguments.priceTo#" cfsqltype="CF_SQL_MONEY"/>
       </cfif>

       <cfif len(arguments.status)>
       AND listing.status = 
	   <cfqueryparam value="#arguments.status#" cfsqltype="CF_SQL_VARCHAR"/>
       </cfif>

       <cfif arguments.hasPool>
       AND listing.hasPool = <cfqueryparam value="true" cfsqltype="CF_SQL_BIT">
       </cfif>

<!--- additional sql removed --->

                ORDER BY price, listedOn
        </cfquery>

        <cfreturn listingQuery />

   </cffunction>

</cfcomponent>

Listing 2

<cffunction name="search"
access="remote"
returnType="query"
output="false"
hint="Returns listings matching the search criteria">
<cfargument name="status" type="string" default="" />
        <cfargument name="priceFrom" type="numeric" default="0" />
        <cfargument name="priceTo" type="numeric" default="0" />
        <cfargument name="hasPool" type="boolean" default="false" />
        <!--- additional arguments removed --->

        <!--- you could also use cfinvoke or access a component in memory --->
        <cfset var listingGateway = 
		createObject("component", "RealEstate.components.ListingGateway")/>

        <cfreturn 
		listingGateway.search(argumentCollection=arguments) />
</cffunction>

Listing 3

//get all the search criteria items
var searchArguments = {};

//in order to get data contained in Text inputs,
//use myTextInputName.text
searchArguments.mls_id = search_mls_id.text;

//to get data from radio buttons, 
//use myRadioButtonName.selectedData
searchArguments.status = search_status.selectedData;

//checkboxes store their true/false value in their selected property,
//myCheckboxName.selected
searchArguments.hasPool = search_hasPool.selected;
searchArguments.hasWalkInClosets = search_hasWalkInClosets.selected;
searchArguments.hasLaundry = search_hasLaundry.selected;
searchArguments.hasFireplace = search_hasFireplace.selected;

//to get the selected choice in a dropdown, 
//use mySelectName.value or mySelectName.selectedItem.data
searchArguments.footage = search_footage.value;
searchArguments.bedrooms = search_bedrooms.value;
searchArguments.bathrooms = search_bathrooms. value;
searchArguments.priceFrom = search_priceRangeFrom.value;
searchArguments.priceTo = search_priceRangeTo.value;