function getRangeFilter(name) {
    var from, to;
    var filter = "";
    var facet = name.replace(/range_/, "facet_");

    var eFrom = document.getElementById(name + '_from');
    var eTo = document.getElementById(name + '_to');
    var eFromSelect = document.getElementById(name + '_from_select');
    var eToSelect = document.getElementById(name + '_to_select');

    if (eFrom && eTo && eFrom.value && eTo.value) {
        from = eFrom.value;
        to = eTo.value;
    } else if (eFromSelect && eToSelect) {
        from = eFromSelect.options[eFromSelect.selectedIndex].value;
        to = eToSelect.options[eToSelect.selectedIndex].value;
    }

    if (from && to) {
        if (from == '0' && to == '*')
            filter = "";
        else 
            filter = facet + ':[' + from + ' TO ' + to + ']';
    }

    return filter;
}

function submitForm(frm) {
    var url = "homes-for-sale/search-results?filter=";

    var search = "";
    var distanceMiles, distanceFromAddress;
    var propertyType = "";

    var foreclosure = document.getElementById("search_foreclosure");

    if (foreclosure && "1" == foreclosure.value)
        url = "foreclosures/homes-for-sale/search-results?filter=";

    // radio buttons
    for (var i = 0; i < frm.elements.length; i++) {
        var e = frm.elements[i];

        // property type needs to be handled differently
        if (e.id == "property_type") {
            if (e.value == "all") {
                if (!e.checked) {
                    var propertyTypes = document.getElementsByName("property_type");
                    var counter = 0;
                    for (var j = 0; j < propertyTypes.length; j++) {
                        if (propertyTypes[j].checked) {
                            propertyType += propertyTypes[j].value + " ";
                            if (propertyTypes[j].value == "condos") {
                                if (foreclosure && "1" == foreclosure.value)
                                    url = "foreclosures/condos-for-sale/search-results?filter=";
                                else
                                    url = "condos-for-sale/search-results?filter=";
                                counter++;
                            } else if (propertyTypes[j].value == "single-family") {
                                if (foreclosure && "1" == foreclosure.value)
                                    url = "foreclosures/homes-for-sale/search-results?filter=";
                                else
                                    url = "homes-for-sale/search-results?filter=";
                                counter++;
                            } else if (propertyTypes[j].value == "multi-family") {
                                if (foreclosure && "1" == foreclosure.value)
                                    url = "foreclosures/houses-for-sale/search-results?filter=";
                                else
                                    url = "houses-for-sale/search-results?filter=";
                                counter++;
                            }
                        }
                    }
                    if (counter > 1)
                        if (foreclosure && "1" == foreclosure.value)
                            url = "foreclosures/homes-for-sale/search-results?filter=";
                        else
                            url = "homes-for-sale/search-results?filter=";
                }
            }
            continue;
        }

        // range filters
        if (e.id.indexOf("range_") == 0) {
            if (e.id.indexOf("_from_select") > 0) {
                var name = e.id.replace(/_from_select/, "");
                var filter = getRangeFilter(name);
                if (filter) url += '%2B' + filter + " ";
            }
            continue;
        }
        // skip multi select filters
        if (e.id.indexOf("multi_") == 0) {
            continue;
        }
        // handle distance field differently
        if (e.id == "distanceMiles") {
            distanceMiles = e.options[e.selectedIndex].value;
            continue;
        }
        if (e.id == "distanceFromAddress") {
            distanceFromAddress = e.value;
            continue;
        }

        if (e.type == 'radio' && e.checked && e.value.length > 0) {
            url += "%2B" + e.value + " ";
            continue;
        }
        if (e.type == 'checkbox' && e.checked && e.value.length > 0) {
            url += "%2B" + e.value + " ";
            continue;
        }
        if (e.type.indexOf('select') >= 0) {
            for (var j = 0; j < e.options.length; j++) {
                if (e.id == 'facet_town' && e.options[j].value) {
                    url += e.options[j].value + " ";
                    continue;
                }
                if (e.options[j].selected) {
                    if (e.type == 'select-one') {
                        if (e.options[j].value.length > 0) {
                            url += "%2B" + e.options[j].value + " ";
                        }
                        continue;
                    } else {
                        if (e.options[j].value.length > 0) {
                            url += e.options[j].value + " ";
                        }
                    }
                }
            }
            continue;
        }
        if ((e.type == 'text' || e.type == 'textarea') && e.value) {
            if (e.id == 'search') {
                search = e.value;
                continue;
            }
            if (e.id == 'mls_list_no') {
                var value = trim(e.value);
                if (!isNumeric(value)) {
                    alert("Please enter a numeric value for MLS Listing Number");
                    document.getElementById("mls_list_no").focus();
                    document.getElementById("mls_list_no").select();
                    return;
                }
                url += '%2B' + e.id + ':' + value + ' ';
                continue;
            }
            var separator = ",";
            values = "";
            var vals = e.value.split(separator);    
            if (vals.length > 1) {
                for (var j = 0; j < vals.length; j++)
                    values += e.id + ':"' + vals[j] + '" ';
            } else {
                values = '%2B' + e.id + ':"' + vals[0] + '" ';
            }
            url += values;
            continue;
        }
    }

    if (search)
        url += "&search=" + search;

    if (distanceFromAddress) {
        url += "&distanceMiles=" + distanceMiles +
               "&distanceFromAddress=" + distanceFromAddress +
               "&sort=geo_distance asc";
    }

    if (propertyType.length > 0)
        url += "&propertyType=" + propertyType;

    goto(url);
}
function addTowns() {
	var availableTownsList = document.getElementById('multi_facet_town');
	var selectedTownsList = document.getElementById('facet_town');
	moveItems(availableTownsList, selectedTownsList);
}
function removeTowns() {
	var availableTownsList = document.getElementById('multi_facet_town');
	var selectedTownsList = document.getElementById('facet_town');
	moveItems(selectedTownsList, availableTownsList);
}
function moveItems(fromList, toList)
{
  for(i = 0; i < fromList.length; i++)
  {
	if (fromList.options[i].value == "-1") {
		fromList.options[i].selected = false;
	}
    if(fromList.options[i].selected)
    {
      //alert(fromList.options[i].text + " : " + fromList.options[i].value)
      toList.options[toList.length] = new Option(fromList.options[i].text, fromList.options[i].value)
    }
  }

  for(i = fromList.length-1; i >= 0; i--)
  {
    if(fromList.options[i].selected)
    {
      fromList.options[i] = null;
    }
  }
}

function addPropertyType(o, url) {
    var foreclosure = document.getElementById("search_foreclosure");
    var urlPre = "";
    if (foreclosure && "1" == foreclosure.value)
        urlPre = "foreclosures/";

    if (o.id != "propertyTypeAll" && o.checked) {
        document.getElementById("propertyTypeAll").checked = false;
    }

    var tokens = url.split("?");
    var uri = urlPre + tokens[0];
    var queryString = "";
    if (tokens.length > 1) 
        queryString = tokens[1];

    var e = document.getElementById("propertyTypeAll");
    if (e.checked) {
        if (uri.indexOf('homes-for-sale/search-results') >= 0) 
            goto(uri + "?" + queryString + "&propertyType=all");
        else
            goto(uri + "/homes-for-sale?" + queryString + "&propertyType=all");
        return;
    }

    var type = "";
    var path = "homes-for-sale";
    var counter = 0;
    e = document.getElementById("propertyTypeCondo");
    if (e.checked) {
        type += "condos ";
        path = "condos-for-sale";
        counter++;
    }

    e = document.getElementById("propertyTypeSingleFamily");
    if (e.checked) {
        type += "single-family ";
        path = "homes-for-sale";
        counter++;
    }
    
    e = document.getElementById("propertyTypeMultiFamily");
    if (e.checked) {
        type += "multi-family ";
        path = "houses-for-sale";
        counter++;
    }

    if (counter > 1) {
        path = "homes-for-sale";
    }
    
    if (uri.indexOf('homes-for-sale/search-results') >= 0)
        goto(urlPre + path + "/search-results?" + queryString + "&propertyType=" + type);
    else
        goto(uri + "/" + path + "?" + queryString + "&propertyType=" + type);
}

function submitMiniSearch() {
    var url = "homes-for-sale/search-results?filter=";
    var town = document.getElementById("search_town").value;
    var townUrl = document.getElementById("search_town_url");
    var priceTo = document.getElementById("search_price_to").value;
    var minBeds = document.getElementById("search_min_bedrooms").value;
    var minBaths = document.getElementById("search_min_baths").value;
    var foreclosure = document.getElementById("search_foreclosure");
    var filter = "";

    if (townUrl && townUrl.value != null) {
        url = townUrl.value + "/homes-for-sale?filter=";
    } else if (town) {
        var tokens = town.split(",");
        var towns = "";
        for (var i = 0; i < tokens.length; i++) {
            towns += '"' + tokens[i] + '"';
            if (i < tokens.length - 1) {
               towns += ' OR ';
            }
        }
        if (towns.length > 0) 
            filter += "%2Boriginal_town_name:(" + towns + ") ";
    }

    if (foreclosure && "1" == foreclosure.value)
        url = "foreclosures/homes-for-sale/search-results?filter=";

    if (priceTo && priceTo.length > 0) {
        if (!isNumeric(priceTo)) {
            alert("Please enter a numeric value for price");
            document.getElementById("search_price_to").focus();
            document.getElementById("search_price_to").select();
            return;
        }
        filter += "%2Bfacet_list_price:[0 TO " + priceTo + "] ";
    }
    if (minBeds && minBeds.length > 0) {
        if (!isNumeric(minBeds)) {
            alert("Please enter a numeric value for bedrooms");
            document.getElementById("search_min_bedrooms").focus();
            document.getElementById("search_min_bedrooms").select();
            return;
        }
        filter += "%2Bfacet_total_bedrooms:[" + minBeds + " TO *] ";
    }
    if (minBaths && minBaths.length > 0) {
        if (!isNumeric(minBaths)) {
            alert("Please enter a numeric value for baths");
            document.getElementById("search_min_baths").focus();
            document.getElementById("search_min_baths").select();
            return;
        }
        filter += "%2Bfacet_total_baths:[" + minBaths + " TO *] ";
    }

    goto(url + filter);
}

