var $j = jQuery.noConflict();


$j(document).ready( function () {
    var geocoder = new GClientGeocoder();

    function showAddress(country, province, city, street) {
        address = "";
        if (street) {
            address += street;
            address += ", ";
        }
        if (city) {
            address += city;
            address += ", ";
        }
        if (province) {
            address += province;
            address += ", ";
        }
        if (country) {
            address += country;
        }
        geocoder.getLatLng(
          address,
          function(point) {
            if (point) {
                map_geoposition.save_position(point);

                map_geoposition.map.clearOverlays();
                map_geoposition.m = new GMarker(point, {draggable: true});

                GEvent.bind(map_geoposition.m, "dragend", map_geoposition, function() {
                    point = map_geoposition.m.getPoint();
                    map_geoposition.save_position(point);
                });

                map_geoposition.map.addOverlay(map_geoposition.m);
                map_geoposition.map.setCenter(point);

                if (!street) {
                    if (city) {
                        map_geoposition.map.setZoom(10);
                    } else if (province) {
                        map_geoposition.map.setZoom(7);
                    } else {
                        map_geoposition.map.setZoom(4);
                    }
                    //map_geoposition.map.setCenter(point);
                    //var marker = new GMarker(point);
                    //map_geoposition.map.addOverlay(marker);
                }
                else {
                    map_geoposition.map.setZoom(18);
                }
            } else { // if (!point)
                if (street) {
                    showAddress(country, province, city, "");
                } else if (city) {
                    showAddress(country, province, "", "");
                } else if (province) {
                    showAddress(country, "", "", "");
                }
            }
        });
    }
    address_fields = $j("#id_country,#id_province,#id_city,#id_postal_code,#id_street_name,#id_street_type,#id_street_number")
    address_fields.change(function () {
        street = "";
        city = "";
        province = "";
        country = "";
        if ($j("#id_street_name").val()) {
            if ($j("#id_street_type option:selected").text()) {
                street += $j("#id_street_type option:selected").text();
                street += " ";
            }
            street += $j("#id_street_name").val();
            if ($j("#id_street_number").val()) {
                street += " ";
                street += $j("#id_street_number").val();
            }
        }
        if ($j("#id_city").val()) {
            city += $j("#id_city").val();
        }
        if ($j("#id_province").val()) {
            province += $j("#id_province").val();
        }
        if ($j("#id_country option:selected").text()) {
            country += $j("#id_country option:selected").text();
        }
        showAddress(country, province, city, street);
    });
});

