
 	function updateBuyRent( $form ) {

		populateSelect( $form.form.myfPricedFrom, {"":"Loading..."});
		populateSelect( $form.form.myfPricedTo, {"":"Loading..."});

		if ($('#fieldset-yourRequirements li.pets')) {
            if ($form.value == 'buy') {
                $('#fieldset-yourRequirements li.pets').fadeOut('slow');
            } else {
                $('#fieldset-yourRequirements li.pets').fadeIn('slow');
            }
		}

		$.getJSON( $quickSearchAJAX , {format: 'json', type: $form.value},
			function(data) {
				if (data['priceMinimum']) {
					populateSelect( $form.form.priceMinimum, data['priceMinimum']);
					populateSelect( $form.form.myfPricedFrom, data['priceMinimum']);
				}
				if (data['priceMaximum']) {
					populateSelect( $form.form.priceMaximum, data['priceMaximum']);
					populateSelect( $form.form.myfPricedTo, data['priceMaximum']);
				}
			}
		);

 	}

    function changeClassFF( $form )
    {

        if ($form.value == 'buy') {
            $("#lookingTo-buy").addClass("selected");
            $("#lookingTo-rent").removeClass("selected");
        } else {
            $("#lookingTo-rent").addClass("selected");
            $("#lookingTo-buy").removeClass("selected");
        }
        updateBuyRent($form);
    }
    
 	function updateLocationList( $form ) {

		populateCheckboxList( document.getElementById('myfLocations') , {"":"Loading..."});

		$.getJSON( $myfinderAJAX , {format: 'json', state: $form.value},
			function(data) {
				if (data['cities']) {
					populateCheckboxList( document.getElementById('myfLocations') , data['cities']);
				}
			}
		);


 	}

	function updateQuickSearch( $form )
    {
	    if ( $form.form.city ) {
		    populateSelect( $form.form.city, {"":"Loading..."});
		}
		populateSelect( $form.form.priceMinimum, {"":"Loading..."});
		populateSelect( $form.form.priceMaximum, {"":"Loading..."});

		if ($form.form.pets) {
            if ($form.value == 'buy') {
                $form.form.pets.value = '';
                $('#fieldset-quickSearch li.pets').fadeOut('slow');
            } else {
                $('#fieldset-quickSearch li.pets').fadeIn('slow');
            }
		}

		$.getJSON( $quickSearchAJAX , {format: 'json', type: $form.value},
			function(data) {

				if (data['cities']) {
				    //if ($form.form.city.type == "select" ) {
				        populateSelect( $form.form.city, data['cities']);
				    //} else {
				        //populateCheckboxList( document.getElementById('city') , data['cities']);
				    //}
				}
				if (data['commercialType']) {
					populateSelect( $form.form.commercialType, data['commercialType']);
				}
				if (data['priceMinimum']) {
					populateSelect( $form.form.priceMinimum, data['priceMinimum']);
				}
				if (data['priceMaximum']) {
					populateSelect( $form.form.priceMaximum, data['priceMaximum']);
				}
			}
		);
	}

	function updateCityList( $form )
	{


        populateSelect( $form.form.city, {"":"Loading..."});
        $.getJSON( $quickSearchAJAX , {format: 'json', type: $form.value},
            function(data) {
                if (data['cities']) {
                    populateSelect( $form.form.city, data['cities']);
                }
            }
        );

	}

	function populateSelect( element, values)
	{
		if (element) {
			element.disabled = true;
			while (element.hasChildNodes()) {
				element.removeChild(element.firstChild);
			}
			populateList(element, values);
			element.disabled = false;
		}
	}

	function populateList( parent, values)
	{
		for ( var value in values ) {
			if (typeof values[value] === 'object') {
				var optionGroup = document.createElement('optgroup');
				optionGroup.setAttribute('label', value);
				optionGroup.setAttribute('value', value);
				parent.appendChild(optionGroup);
				populateList(optionGroup, values[value] );
			} else {
				var option = document.createElement('option');
				option.setAttribute('value', value);
				option.appendChild(document.createTextNode(values[value]));
				parent.appendChild(option);
			}
		}

	}

	function populateCheckboxList( element, values)
	{

		if (element) {
			element.disabled = true;
			while (element.hasChildNodes()) {
				element.removeChild(element.firstChild);
			}
            populateCheckbox(element, values);
			element.disabled = false;
		}
	}

	function populateCheckbox( parent, values)
	{
		for ( var value in values ) {
		
		    if (typeof values[value] === 'object') {
		    
		        populateCheckbox( parent, values[value]);
		    
		    } else {    
                var label = document.createElement('label');
                label.setAttribute('for', parent.id + '-' + value);
    
                var checkbox = document.createElement('input');
                checkbox.setAttribute('value', value);
                checkbox.setAttribute('name', parent.id + '[]');
                checkbox.setAttribute('type', 'checkbox');
                checkbox.setAttribute('class', 'input-checkbox');
                checkbox.setAttribute('id', parent.id + '-' + value);
    
                label.appendChild(checkbox);
                label.appendChild(document.createTextNode(values[value]));
                parent.appendChild(label);
            }
		}
	}

	var agentLoc = false;
	var markersArray = new Array();
  	var map = false;
  	var mapData = false;
  	var mapForm = false;
  	var cityList = false;

	function initialize()
	{

	    agentLoc = new google.maps.LatLng( $addressLa, $addressLo );

		var mapOptions = { zoom: 10, mapTypeId: google.maps.MapTypeId.ROADMAP, center: agentLoc };


        if (map === false) {
		    map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
		}

        google.maps.Marker.prototype.attachInfoWindow = function (options) {
            var map_ = this.getMap();
            map_.bubble_ = map_.bubble_ || new google.maps.InfoWindow();
            google.maps.event.addListener(this, 'click', function () {
                map_.bubble_.setOptions(options);
                map_.bubble_.open(map_, this);
            });
            map_.infoWindowClickShutter = map_.infoWindowClickShutter ||
            google.maps.event.addListener(map_, 'click', function () {
             map_.bubble_.close();
            });
        }

        google.maps.Map.prototype.accessInfoWindow = function () {
            this.bubble_ = this.bubble_ || new google.maps.InfoWindow();
            return this.bubble_;
        }

        if (mapData === false) {
          $.getJSON( $mapSearchAJAX, {format: 'json'},
                function(data) {
                    mapData = data['data'];
                    mapForm = document.getElementById("quicksearchMapSearch");
                    populateSelect( mapForm.city, data['cities']);
                    updateMap();
               }
            );
		}
	}

	function updateMap( )
	{
        var bounds = new google.maps.LatLngBounds()
        while(markersArray[0]){
            markersArray.pop().setMap(null);
        }

		for(var i = 0; i < mapData.length; i++ ) {

		    var suburb = criteriaIsMet(mapData[i].suburb, mapForm.city, '=');
            var priceMin = criteriaIsMet(mapData[i]._price, mapForm.priceMinimum, '>');
		    var priceMax = criteriaIsMet(mapData[i]._price, mapForm.priceMaximum, '<');
		    var bedrooms = criteriaIsMet(mapData[i].bedrooms, mapForm.bedrooms, '>');

		    if (suburb && priceMin && priceMax && bedrooms) {
		        var loc = new google.maps.LatLng(mapData[i].latitude, mapData[i].longitude ) ;
		        bounds.extend(loc);
                marker = createMarker(loc, map, mapData[i]);
                markersArray.push(marker);
		    }
		}

		if (markersArray.length === 0) {
		    bounds.extend( agentLoc );
		    map.fitBounds( bounds );
		    alert("No Properties found that match your criteria, Please refine your criteria.");
		} else {
		   map.fitBounds( bounds );
		}

		if (map.getZoom() > 14) {
		    map.setZoom(14);
		}

	}

	function criteriaIsMet( $dataValue, $searchField, $operator)
	{

	    if ($searchField.value === '' || $searchField.value === '0') {
	        return true;
	    }

        if ($operator === '=') {
            return ($dataValue ===  $searchField.value);
        }

        if ($operator === '<') {
            return ($dataValue <=  $searchField.value);
        }

        if ($operator === '>') {
            return ($dataValue >=  $searchField.value);
        }

        return false;

	}

	function createMarker(markerLocation, map, Property)
    {
        var marker = new google.maps.Marker( { position : markerLocation, title: Property['heading'], map: map, draggable:false, animation: google.maps.Animation.DROP} );

        html = document.getElementById("mapPopUp").innerHTML;
        html = html.replace('src="/js/spacer.gif"', '<img src="' + Property['thumbnailURL'] +'"');
        for( var i in Property) {
            html = html.replace('['+ i +']', Property[i]);
        }

        marker.attachInfoWindow({content : html});
        return marker;
    }

	function toggleBounce() {
		if (marker.getAnimation() != null) {
			marker.setAnimation(null);
		} else {
			marker.setAnimation(google.maps.Animation.BOUNCE);
		}
  	}


