function load( loadFunction )
{
    if( loadFunction != null ) loadFunction();
    loadingHide();
}
function loadingShow()
{
    document.body.style.cursor = "wait";
    for( var i = 0; i < document.body.getElementsByTagName( "input" ).length; i ++ ) document.body.getElementsByTagName( "input" )[ i ].disabled = true;
    for( var i = 0; i < document.body.getElementsByTagName( "button" ).length; i ++ ) document.body.getElementsByTagName( "button" )[ i ].disabled = true;
    for( var i = 0; i < document.body.getElementsByTagName( "select" ).length; i ++ ) document.body.getElementsByTagName( "select" )[ i ].disabled = true;
    for( var i = 0; i < document.body.getElementsByTagName( "textarea" ).length; i ++ ) document.body.getElementsByTagName( "textarea" )[ i ].disabled = true;
}
function loadingHide()
{
    document.body.style.cursor = "default";
    for( var i = 0; i < document.body.getElementsByTagName( "input" ).length; i ++ ) document.body.getElementsByTagName( "input" )[ i ].disabled = false;
    for( var i = 0; i < document.body.getElementsByTagName( "button" ).length; i ++ ) document.body.getElementsByTagName( "button" )[ i ].disabled = false;
    for( var i = 0; i < document.body.getElementsByTagName( "select" ).length; i ++ ) document.body.getElementsByTagName( "select" )[ i ].disabled = false;
    for( var i = 0; i < document.body.getElementsByTagName( "textarea" ).length; i ++ ) document.body.getElementsByTagName( "textarea" )[ i ].disabled = false;
}
function ambienceShow()
{
    var ambience = document.getElementById( "ambience" );

    resize_();
    scroll_();
    ambience.style.display = "block";
    new Silk( ambience, "opacity", null, 0.25, null, 0.02, null );
}
function ambienceHide()
{
    var ambience = document.getElementById( "ambience" );

    new Silk( ambience, "opacity", null, 0, null, 0.1, function()
    {
        ambience.style.display = "none";
    } );
}
function WindowScroll()
{
    if (self.pageYOffset) // all except Explorer
    {
	    this.x = self.pageXOffset;
	    this.y = self.pageYOffset;
    }
    else if (document.documentElement && document.documentElement.scrollTop)
	    // Explorer 6 Strict
    {
	    this.x = document.documentElement.scrollLeft;
	    this.y = document.documentElement.scrollTop;
    }
    else if (document.body) // all other Explorers
    {
	    this.x = document.body.scrollLeft;
	    this.y = document.body.scrollTop;
    }
}
function WindowSize()
{
    if( typeof( window.innerWidth ) == 'number' ) {
        //Non-IE
        this.x = window.innerWidth;
        this.y = window.innerHeight;
    } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
        //IE 6+ in 'standards compliant mode'
        this.x = document.documentElement.clientWidth;
        this.y = document.documentElement.clientHeight;
    } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
        //IE 4 compatible
        this.x = document.body.clientWidth;
        this.y = document.body.clientHeight;
    }
}
function resize_()
{
    var ambience = document.getElementById( "ambience" );

    var dimension = new WindowSize();
    ambience.style.width = dimension.x + "px";
    ambience.style.height = dimension.y + "px";
}
function scroll_()
{
    var ambience = document.getElementById( "ambience" );
    
    var point = new WindowScroll();
    ambience.style.left = point.x + "px";
    ambience.style.top = point.y + "px";
}
var selectedItem;
var selectedX, selectedY;
var mouseX, mouseY;
var nextWindowX = 50, nextWindowY = 50;
function windowOpen( wnd )
{
    ambienceShow();
    wnd.style.left = nextWindowX + "px";
    wnd.style.top = nextWindowY + "px";
    wnd.style.display = "block";
    focusWindow( wnd );
    nextWindowX += 30;
    nextWindowY += 30;
    if( nextWindowX > 100 ) nextWindowX = 50;
    if( nextWindowY > 100 ) nextWindowY = 50;
    if( document.compatMode )
    {
        var agent = document.getElementById( "search_agent" );
        var type = document.getElementById( "search_type" );
        var state = document.getElementById( "search_state" );
        var minimumPrice = document.getElementById( "search_minimum_price" );
        var maximumPrice = document.getElementById( "search_maximum_price" );
        var bedrooms = document.getElementById( "search_bedrooms" );
        var bathrooms = document.getElementById( "search_bathrooms" );
        var minimumFloorSpace = document.getElementById( "search_minimum_floor_space" );
        var maximumFloorSpace = document.getElementById( "search_maximum_floor_space" );
        
        agent.style.visibility = "hidden";
        type.style.visibility = "hidden";
        state.style.visibility = "hidden";
        minimumPrice.style.visibility = "hidden";
        maximumPrice.style.visibility = "hidden";
        if( bedrooms != null ) bedrooms.style.visibility = "hidden";
        if( bathrooms != null ) bathrooms.style.visibility = "hidden";
        if( minimumFloorSpace != null ) minimumFloorSpace.style.visibility = "hidden";
        if( maximumFloorSpace != null ) maximumFloorSpace.style.visibility = "hidden";
    }
}
function windowClose( wnd )
{
    wnd.style.display = "none";
    for( var i = 0; i < document.body.getElementsByTagName( "div" ).length; i ++ )
        if( document.body.getElementsByTagName( "div" )[ i ].className == "window" && document.body.getElementsByTagName( "div" )[ i ].style.display == "block" )
            return;
    ambienceHide();
    if( document.compatMode )
    {
        var agent = document.getElementById( "search_agent" );
        var type = document.getElementById( "search_type" );
        var state = document.getElementById( "search_state" );
        var minimumPrice = document.getElementById( "search_minimum_price" );
        var maximumPrice = document.getElementById( "search_maximum_price" );
        var bedrooms = document.getElementById( "search_bedrooms" );
        var bathrooms = document.getElementById( "search_bathrooms" );
        var minimumFloorSpace = document.getElementById( "search_minimum_floor_space" );
        var maximumFloorSpace = document.getElementById( "search_maximum_floor_space" );
        
        agent.style.visibility = "visible";
        type.style.visibility = "visible";
        state.style.visibility = "visible";
        minimumPrice.style.visibility = "visible";
        maximumPrice.style.visibility = "visible";
        if( bedrooms != null ) bedrooms.style.visibility = "visible";
        if( bathrooms != null ) bathrooms.style.visibility = "visible";
        if( minimumFloorSpace != null ) minimumFloorSpace.style.visibility = "visible";
        if( maximumFloorSpace != null ) maximumFloorSpace.style.visibility = "visible";
    }    
}
function focusWindow( wnd )
{
    for( var i = 0; i < document.body.getElementsByTagName( "div" ).length; i ++ )
        if( document.body.getElementsByTagName( "div" )[ i ].className == "window" )
            document.body.getElementsByTagName( "div" )[ i ].style.zIndex = "10";
    wnd.style.zIndex = "11";
}
function moveWindow( ev, item )
{
    selectedItem = item;
    selectedX = selectedItem.offsetLeft;
    selectedY = selectedItem.offsetTop;
    mouseX = document.all ? event.clientX : ev.clientX;
    mouseY = document.all ? event.clientY : ev.clientY;
    document.onmousemove = dragWindow;
    document.onmouseup = dropWindow;
}
function dragWindow( ev )
{
    selectedItem.style.left = ( selectedX + ( ( document.all ? event.clientX : ev.clientX ) - mouseX ) ) + "px";
    selectedItem.style.top = ( selectedY + ( ( document.all ? event.clientY : ev.clientY ) - mouseY ) ) + "px";
    return false;
}
function dropWindow()
{
    document.onmousemove = null;
    document.onmouseup = null;
}
function searchQuickSearch( page )
{
    var wnd = document.getElementById( "search_results_window" );
    wnd.setAttribute( "mode", "Quick" );
    quickSearch( page == null ? 0 : page );
    windowOpen( wnd );
}
function searchRegularSearch( page )
{
    var wnd = document.getElementById( "search_results_window" );
    wnd.setAttribute( "mode", "Regular" );
    regularSearch( page == null ? 0 : page );
    windowOpen( wnd );
}
function searchClear()
{
    for( var i = 0; i < document.body.getElementsByTagName( "input" ).length; i ++ )
        if( document.body.getElementsByTagName( "input" )[ i ].getAttribute( "type" ) != "hidden" )
        {
            document.body.getElementsByTagName( "input" )[ i ].value = "";
            document.body.getElementsByTagName( "input" )[ i ].checked = false;
        }
    for( var i = 0; i < document.body.getElementsByTagName( "select" ).length; i ++ )
        document.body.getElementsByTagName( "select" )[ i ].value = "";
}
function searchSimpleAdvanced()
{
    var button = document.getElementById( "search_simple_advanced_button" );
    var panel = document.getElementById( "search_simple_advanced_panel" );
    
    var newLabel = "";
    if( button.firstChild.nodeValue == "Simple" )
    {
        new Silk( panel, "height", null, 5, "px", 30, function()
        {
            new Silk( panel, "height", null, 0, "px", 1, null );
        } );
        newLabel = "Advanced";
    }
    else if( button.firstChild.nodeValue == "Advanced" )
    {
        new Silk( panel, "height", null, panel.scrollHeight - 5, "px", 30, function()
        {
            new Silk( panel, "height", null, panel.scrollHeight, "px", 1, null );
        } );
        newLabel = "Simple";
    }
    while( button.hasChildNodes() ) button.removeChild( button.firstChild );
    button.appendChild( document.createTextNode( newLabel ) );
}
function quickSearch( page )
{
    var category = document.getElementById( "category" );
    var searchString = document.getElementById( "quick_search" );
    
    loadingShow();
    var category = category.value;
    if( category == "residential" ) category = "Residential";
    else if( category == "commercial" ) category = "Commercial";
    else if( category == "holiday" ) category = "Holiday";
    ajaxSend( "/gateway.aspx?command=QuickSearch&abn=" + escape( abn ), "category=" + category + "&quick_string=" + escape( searchString.value ) + "&page=" + page + "&results_per_page=4", searchResponse );
}
function regularSearch( page )
{
    var category = document.getElementById( "category" );
    var simpleAdvanced = document.getElementById( "search_simple_advanced" );
    var agent = document.getElementById( "search_agent" );
    var type = document.getElementById( "search_type" );
    var suburb = document.getElementById( "search_suburb" );
    var state = document.getElementById( "search_state" );
    var minimumPrice = document.getElementById( "search_minimum_price" );
    var maximumPrice = document.getElementById( "search_maximum_price" );
    var simpleAdvancedButton = document.getElementById( "search_simple_advanced_button" );
    loadingShow();
    var request = ( agent.value == "" ? "" : "&agent_abn=" + agent.getElementsByTagName( "option" )[ agent.selectedIndex ].getAttribute( "abn" ) + "&agent_license=" + agent.getElementsByTagName( "option" )[ agent.selectedIndex ].getAttribute( "license" ) ) + ( type.value == "" ? "" : "&type=" + type.value ) + ( suburb.value == "" ? "" : "&suburb=" + suburb.value ) + ( state.value == "" ? "" : "&state=" + state.value ) + ( minimumPrice.value == "" ? "" : "&minimum_price=" + minimumPrice.value ) + ( maximumPrice.value == "" ? "" : "&maximum_price=" + maximumPrice.value ) + "&results_per_page=4&page=" + page;
    if( category.value == "residential" )
    {
        request = "category=Residential" + request + ( document.getElementById( "search_bedrooms" ).value != "" ? "&bedrooms=" + document.getElementById( "search_bedrooms" ).value : "" ) + ( document.getElementById( "search_bathrooms" ).value != "" ? "&bathrooms=" + document.getElementById( "search_bathrooms" ).value : "" );
        if( simpleAdvancedButton.firstChild.nodeValue == "Simple" ) request += ( document.getElementById( "search_furnished" ).checked ? "&furnished=true" : "" ) + ( document.getElementById( "search_pets_allowed" ).checked ? "&pets_allowed=true" : "" ) + ( document.getElementById( "search_ground_floor" ).checked ? "&ground_floor=true" : "" ) + ( document.getElementById( "search_parking" ).checked ? "&parking=true" : "" ) + ( document.getElementById( "search_swimming_pool" ).checked ? "&swimming_pool=true" : "" ) + ( document.getElementById( "search_security_alarm" ).checked ? "&security_alarm=true" : "" ) + ( document.getElementById( "search_balcony_views" ).checked ? "&balcony_views=true" : "" ) + ( document.getElementById( "search_public_transport" ).checked ? "&public_transport=true" : "" ) + ( document.getElementById( "search_smoke_alarm" ).checked ? "&smoke_alarm=true" : "" ) + ( document.getElementById( "search_disability_access" ).checked ? "&disability_access=true" : "" );
    }
    else if( category.value == "commercial" )
    {
        request = "category=Commercial" + request + ( document.getElementById( "search_minimum_floor_space" ).value != "" ? "&search_minimum_floor_space=" + document.getElementById( "search_minimum_floor_space" ).value : "" ) + ( document.getElementById( "search_maximum_floor_space" ).value != "" ? "&search_maximum_floor_space=" + document.getElementById( "search_maximum_floor_space" ).value : "" );
        if( simpleAdvancedButton.firstChild.nodeValue == "Simple" ) request += ( document.getElementById( "search_parking" ).checked ? "&parking=true" : "" ) + ( document.getElementById( "search_security" ).checked ? "&security=true" : "" ) + ( document.getElementById( "search_disability_access" ).checked ? "&disability_access=true" : "" ) + ( document.getElementById( "search_3_phase_power" ).checked ? "&3_phase_power=true" : "" ) + ( document.getElementById( "search_public_transport" ).checked ? "&public_transport=true" : "" ) + ( document.getElementById( "search_air_conditioned" ).checked ? "&air_conditioned=true" : "" ) + ( document.getElementById( "search_services" ).checked ? "&services=true" : "" ) + ( document.getElementById( "search_industrial" ).checked ? "&industrial=true" : "" ) + ( document.getElementById( "search_retail" ).checked ? "&retail=true" : "" ) + ( document.getElementById( "search_professional" ).checked ? "&professional=true" : "" );
    }
    else if( category.value == "holiday" )
    {
        request = "category=Holiday" + request + ( document.getElementById( "search_bedrooms" ).value != "" ? "&bedrooms=" + document.getElementById( "search_bedrooms" ).value : "" ) + ( document.getElementById( "search_bathrooms" ).value != "" ? "&bathrooms=" + document.getElementById( "search_bathrooms" ).value : "" );
        if( simpleAdvancedButton.firstChild.nodeValue == "Simple" ) request += ( document.getElementById( "search_parking" ).checked ? "&parking=true" : "" ) + ( document.getElementById( "search_linen" ).checked ? "&linen=true" : "" ) + ( document.getElementById( "search_pets_allowed" ).checked ? "&pets_allowed=true" : "" ) + ( document.getElementById( "search_smoke_alarm" ).checked ? "&smoke_alarm=true" : "" ) + ( document.getElementById( "search_disability_access" ).checked ? "&disability_access=true" : "" ) + ( document.getElementById( "search_balcony_views" ).checked ? "&balcony_views=true" : "" ) + ( document.getElementById( "search_near_beach" ).checked ? "&near_beach=true" : "" ) + ( document.getElementById( "search_laundry" ).checked ? "&laundry=true" : "" ) + ( document.getElementById( "search_services" ).checked ? "&services=true" : "" ) + ( document.getElementById( "search_phone" ).checked ? "&phone=true" : "" );
    }
    ajaxSend( "/gateway.aspx?command=RegularSearch&abn=" + escape( abn ), request, searchResponse );
}
function searchResponse( response )
{
    loadingHide();

    var listingsContainer = document.getElementById( "search_results_listings_container" );
    var searchResultsControlContainer = document.getElementById( "search_results_control_container" );
    var searchResultsControlPageTemplate = document.getElementById( "search_results_control_page_template" );    
    var propertyImages = document.getElementById( "property_images" );
    var listingTemplate = document.getElementById( "listing_template" );
    var category = document.getElementById( "category" );
    var label = document.getElementById( "search_results_label" );
    var pages = parseInt( response.getElementsByTagName( "pages" )[ 0 ].firstChild.nodeValue );
    var pageValue = parseInt( response.getElementsByTagName( "page" )[ 0 ].firstChild.nodeValue );
    while( searchResultsControlContainer.getElementsByTagName( "div" ).length > 0 ) searchResultsControlContainer.removeChild( searchResultsControlContainer.getElementsByTagName( "div" )[ 0 ] );
    for( var i = 0; i < pages; i ++ )
    {
        var control = searchResultsControlPageTemplate.cloneNode( true );
        control.appendChild( document.createTextNode( ( i + 1 ) ) );
        control.setAttribute( "page", i );
        control.setAttribute( "title", "Page " + ( i + 1 ) );
        if( i == pageValue )
        {
            control.style.backgroundPosition = "-100% 0%";
            control.selected = true;
        }
        searchResultsControlContainer.appendChild( control );
        control.id = "";
    }
    while( listingsContainer.getElementsByTagName( "div" ).length > 0 ) listingsContainer.removeChild( listingsContainer.getElementsByTagName( "div" )[ 0 ] );
    for( var i = 0; i < response.getElementsByTagName( "listing" ).length; i ++ )
    {
        var listingTag = response.getElementsByTagName( "listing" )[ i ];
        var idValue = listingTag.getAttribute( "id" );
        var suburbValue = listingTag.getElementsByTagName( "suburb" )[ 0 ].hasChildNodes() ? listingTag.getElementsByTagName( "suburb" )[ 0 ].firstChild.nodeValue.toLowerCase() : "";
        var stateValue = listingTag.getElementsByTagName( "state" ).length > 0 ? listingTag.getElementsByTagName( "state" )[ 0 ].firstChild.nodeValue.toUpperCase() : "";
        var typeValue = listingTag.getElementsByTagName( "type" )[ 0 ].hasChildNodes() ? listingTag.getElementsByTagName( "type" )[ 0 ].firstChild.nodeValue : "";
        var rentValue = listingTag.getElementsByTagName( "rent" )[ 0 ].hasChildNodes() ? listingTag.getElementsByTagName( "rent" )[ 0 ].firstChild.nodeValue : "";
        var referenceValue = listingTag.getElementsByTagName( "reference" )[ 0 ].firstChild.nodeValue;
        var descriptionValue = listingTag.getElementsByTagName( "description" )[ 0 ].hasChildNodes() ? listingTag.getElementsByTagName( "description" )[ 0 ].firstChild.nodeValue : "";
        var photoValue = listingTag.getElementsByTagName( "photo" ).length > 0 ? listingTag.getElementsByTagName( "photo" )[ 0 ].firstChild.nodeValue : null;
        
        var listing = listingTemplate.cloneNode( true );
        listingsContainer.appendChild( listing );
        listing.setAttribute( "title", referenceValue );
        listing.getElementsByTagName( "h3" )[ 0 ].appendChild( document.createTextNode( suburbValue + " " + stateValue ) );
        listing.getElementsByTagName( "td" )[ 1 ].appendChild( document.createTextNode( typeValue ) );
        listing.getElementsByTagName( "td" )[ 3 ].appendChild( document.createTextNode( rentValue ) );
        listing.getElementsByTagName( "td" )[ 5 ].appendChild( document.createTextNode( referenceValue ) );
        listing.getElementsByTagName( "div" )[ 0 ].appendChild( document.createTextNode( descriptionValue ) );
        listing.getElementsByTagName( "img" )[ 0 ].setAttribute( "src", photoValue == null ? propertyImages.value + "/no_image.gif" : propertyImages.value + "/M_images/" + photoValue );
        listing.getElementsByTagName( "a" )[ 0 ].setAttribute( "href", "/" + category.value + "/Details?Listing=" + idValue );
        listing.id = "";
    }
    if( response.getElementsByTagName( "listing" ).length == 0 ) label.style.display = "block";
    else label.style.display = "none";
}
function buttonOver( searchButton )
{
    searchButton.style.backgroundPosition = "-100% 0%";
}
function buttonOut( searchButton )
{
    searchButton.style.backgroundPosition = "";
}
function listingOver( listing )
{
    listing.style.backgroundPosition = "-100% 0%";
}
function listingOut( listing )
{
    listing.style.backgroundPosition = "";
}
function listingUp( listing )
{
    new Silk( listing, "top", null, 0, "px", 1, null );
    new Silk( listing, "left", null, 0, "px", 1, null );
}
function listingDown( listing )
{
    new Silk( listing, "left", null, 2, "px", 1, null );
    new Silk( listing, "top", null, 2, "px", 1, null );
}
function listingSelect( listing )
{
    var anchor = listing.getElementsByTagName( "a" )[ 0 ];

    location.href = anchor.getAttribute( "href" );
}
function searchResultsOpen()
{
    var window = document.getElementById( "search_results_window" );
    
    windowOpen( window );
}
function searchResultsClose()
{
    var window = document.getElementById( "search_results_window" );
    var label = document.getElementById( "search_results_label" );
    var listingsContainer = document.getElementById( "search_results_listings_container" );
    var controlContainer = document.getElementById( "search_results_control_container" );
    
    label.style.display = "none";
    while( listingsContainer.getElementsByTagName( "div" ).length > 0 ) listingsContainer.removeChild( listingsContainer.getElementsByTagName( "div" )[ 0 ] );
    while( controlContainer.getElementsByTagName( "div" ).length > 0 ) controlContainer.removeChild( controlContainer.getElementsByTagName( "div" )[ 0 ] );
    windowClose( window );
}
function searchResultsControlOver( control )
{
    control.style.backgroundPosition = "-100% 0%";
}
function searchResultsControlOut( control )
{
    if( control.selected == true ) return;
    control.style.backgroundPosition = "";
}
function searchResultsNextPage()
{
    var wnd = document.getElementById( "search_results_window" );
    var searchResultsControlContainer = document.getElementById( "search_results_control_container" );
    
    for( var i = 0; i < searchResultsControlContainer.getElementsByTagName( "div" ).length; i ++ )
        if( searchResultsControlContainer.getElementsByTagName( "div" )[ i ].selected == true )
        {
            if( i == searchResultsControlContainer.getElementsByTagName( "div" ).length - 1 ) i = -1;
            if( wnd.getAttribute( "mode" ) == "Regular" ) regularSearch( i + 1 );
            else if( wnd.getAttribute( "mode" ) == "Quick" ) quickSearch( i + 1 );
            return;
        }
}
function searchResultsPreviousPage()
{
    var wnd = document.getElementById( "search_results_window" );
    var searchResultsControlContainer = document.getElementById( "search_results_control_container" );
    
    for( var i = 0; i < searchResultsControlContainer.getElementsByTagName( "div" ).length; i ++ )
        if( searchResultsControlContainer.getElementsByTagName( "div" )[ i ].selected == true )
        {
            if( i == 0 ) i = searchResultsControlContainer.getElementsByTagName( "div" ).length;
            if( wnd.getAttribute( "mode" ) == "Regular" ) regularSearch( i - 1 );
            else if( wnd.getAttribute( "mode" ) == "Quick" ) quickSearch( i - 1 );
            return;
        }
}
function searchResultsControlSelect( control )
{
    var wnd = document.getElementById( "search_results_window" );
    var page = parseInt( control.getAttribute( "page" ) );
    
    if( wnd.getAttribute( "mode" ) == "Regular" ) regularSearch( page );
    else if( wnd.getAttribute( "mode" ) == "Quick" ) quickSearch( page );
}
function focusRegionOpen( region )
{
    var focusRegionWindow = document.getElementById( "focus_region_window" );
    var focusRegion = document.getElementById( "focus_region" );
    var regionLocations = document.getElementById( region.getAttribute( "locations" ) );
    var focusRegionMap = document.getElementById( "focus_region_map" );
    var state = document.getElementById( "search_state" );
    var defaultRegion = document.getElementById( region.getAttribute( "defaultregion" ) );

    focusRegion.setAttribute( "src", region.src );
    regionLocations.style.display = "block";
    focusRegionWindow.style.display = "block";
    defaultRegion.onclick();
    state.value = region.getAttribute( "value" );
    windowOpen( focusRegionWindow );
}
function focusRegionClose()
{
    var focusRegionWindow = document.getElementById( "focus_region_window" );
    var focusRegion = document.getElementById( "focus_region" );
    var focusRegionLocations = document.getElementById( "focus_region_locations" );
    var descriptionContainer = document.getElementById( "focus_region_description_container" );
    var suburb = document.getElementById( "focus_region_suburb" );
    
    focusRegion.src = "";
    suburb.style.visibility = "hidden";
    for( var i = 0; i < descriptionContainer.getElementsByTagName( "p" ).length; i ++ ) descriptionContainer.getElementsByTagName( "p" )[ i ].style.display = "none";
    for( var i = 0; i < focusRegionLocations.getElementsByTagName( "div" ).length; i ++ )
        if( focusRegionLocations.getElementsByTagName( "div" )[ i ].className == "focus_region_location_container" )
        {
            for( var t = 0; t < focusRegionLocations.getElementsByTagName( "div" )[ i ].getElementsByTagName( "div" ).length; t ++ )
                focusRegionLocations.getElementsByTagName( "div" )[ i ].getElementsByTagName( "div" )[ t ].style.fontWeight = "";
            focusRegionLocations.getElementsByTagName( "div" )[ i ].style.display = "none";
        }
    windowClose( focusRegionWindow );
}
function focusRegionLocationSelect( location )
{
    var focusRegion = document.getElementById( "focus_region" );
    var container = focusRegion.parentNode;
    var mapContainer = document.getElementById( "focus_region_map" );
    var descriptionContainer = document.getElementById( "focus_region_description_container" );
    var description = document.getElementById( location.getAttribute( "description" ) );
    var suburb = document.getElementById( "focus_region_suburb" );

    while( suburb.getElementsByTagName( "option" ).length > 1 ) suburb.removeChild( suburb.getElementsByTagName( "option" )[ 1 ] );
    loadingShow();
    new ajaxSend( "/ajax.aspx?command=GetSuburbs", "region=" + escape( location.getAttribute( "code" ) ), function( response )
    {
        loadingHide();
        for( var i = 0; i < response.getElementsByTagName( "suburb" ).length; i ++ )
        {
            var suburbValue = response.getElementsByTagName( "suburb" )[ i ].firstChild.nodeValue;
            
            var option = document.createElement( "option" );
            suburb.appendChild( option );
            option.value = suburbValue;
            option.appendChild( document.createTextNode( suburbValue ) );
        }      
    } );
    for( var i = 0; i < descriptionContainer.getElementsByTagName( "p" ).length; i ++ ) descriptionContainer.getElementsByTagName( "p" )[ i ].style.display = "none";  
    mapContainer.map = new GMap2( mapContainer, { size : new GSize( 360, 250 ) } );
    new GClientGeocoder().getLatLng( location.getAttribute( "maplocation" ), function( point )
    {
        mapContainer.map.setCenter( point, 9 );
        mapContainer.map.setMapType( G_MAP_TYPE );
    } );
    GEvent.addListener( mapContainer.map, "click", focusRegionOpenGeographicSearch );
    for( var i = 0; i < container.getElementsByTagName( "div" ).length; i ++ )
        container.getElementsByTagName( "div" )[ i ].style.fontWeight = "";
    location.style.fontWeight = "bold";
    if( description != null ) description.style.display = "block";
    suburb.style.visibility = "visible";
}
function focusRegionOpenGeographicSearch()
{
    var mapContainer = document.getElementById( "focus_region_map" );
    
    var point = mapContainer.map.getCenter();
    regionOpen( point );
}
function focusRegionSuburbChange()
{
    var suburb = document.getElementById( "focus_region_suburb" );
    var searchSuburb = document.getElementById( "search_suburb" );
    
    searchSuburb.value = suburb.value;
    regularSearch( 0 );
    searchResultsOpen();
}
function regionOpen( point )
{
    var window = document.getElementById( "region_window" );
    var map = document.getElementById( "region_map" );
    var category = document.getElementById( "category" );
    var propertyImages = document.getElementById( "property_images" );

    var update = function()
    {
        var radius = ( ( ( 742 * 64 * Math.pow( 2, 20 - map.map.getZoom() ) ) / 256 ) / 1000 ) * 2;
        ajaxSend( "/gateway.aspx?command=GeoSearch&abn=" + escape( abn ), "category=" + escape( category.value ) + "&latitude=" + escape( map.map.getCenter().lat() ) + "&longitude=" + escape( map.map.getCenter().lng() ) + "&radius=" + radius, function( response )
        {
            map.map.clearOverlays();
            var loop = function( i )
            {
                if( i < response.getElementsByTagName( "listing" ).length )
                {
                    var listingTag = response.getElementsByTagName( "listing" )[ i ];
                    var idValue = listingTag.getAttribute( "id" );
                    var suburbValue = listingTag.getElementsByTagName( "suburb" )[ 0 ].hasChildNodes() ? listingTag.getElementsByTagName( "suburb" )[ 0 ].firstChild.nodeValue : "";
                    var photoValue = listingTag.getElementsByTagName( "photo" ).length > 0 ? listingTag.getElementsByTagName( "photo" )[ 0 ].firstChild.nodeValue : null;
                    var latitudeValue = listingTag.getElementsByTagName( "latitude" ).length > 0 ? listingTag.getElementsByTagName( "latitude" )[ 0 ].firstChild.nodeValue : null;
                    var longitudeValue = listingTag.getElementsByTagName( "longitude" ).length > 0 ? listingTag.getElementsByTagName( "longitude" )[ 0 ].firstChild.nodeValue : null;
                    var typeValue = listingTag.getElementsByTagName( "type" )[ 0 ].hasChildNodes() ? listingTag.getElementsByTagName( "type" )[ 0 ].firstChild.nodeValue : null;
                    var referenceValue = listingTag.getElementsByTagName( "reference" )[ 0 ].hasChildNodes() ? listingTag.getElementsByTagName( "reference" )[ 0 ].firstChild.nodeValue : null;
                    var rentValue = listingTag.getElementsByTagName( "rent" )[ 0 ].hasChildNodes() ? listingTag.getElementsByTagName( "rent" )[ 0 ].firstChild.nodeValue : null;
                    var bondValue = listingTag.getElementsByTagName( "bond" ).length > 0 ? listingTag.getElementsByTagName( "bond" )[ 0 ].firstChild.nodeValue : null;
                    var bedroomsValue = listingTag.getElementsByTagName( "bedrooms" ).length > 0 ? listingTag.getElementsByTagName( "bedrooms" )[ 0 ].firstChild.nodeValue : null;
                    var bathroomsValue = listingTag.getElementsByTagName( "bathrooms" ).length > 0 ? listingTag.getElementsByTagName( "bathrooms" )[ 0 ].firstChild.nodeValue : null;
                    var parkingValue = listingTag.getElementsByTagName( "parking" ).length > 0 ? listingTag.getElementsByTagName( "parking" )[ 0 ].firstChild.nodeValue : null;
                    var descriptionValue = listingTag.getElementsByTagName( "description" ).length > 0 ? listingTag.getElementsByTagName( "description" )[ 0 ].firstChild.nodeValue : null;

                    if( latitudeValue != null && longitudeValue != null )
                    {
                        var icon = new GIcon();
                        icon.image = "/resources/tack_red.png";
                        icon.iconSize = new GSize( 25, 26 );
                        icon.iconAnchor = new GPoint( 6, 20 );
                        icon.infoWindowAnchor = new GPoint( 5, 1 );
                        var marker = new GMarker( new GLatLng( latitudeValue, longitudeValue ), icon );
                        marker.idValue = idValue;
                        marker.suburbValue = suburbValue;
                        marker.photoValue = photoValue;
                        marker.latitudeValue = latitudeValue;
                        marker.longitudeValue = longitudeValue;
                        try
                        {
                            map.map.addOverlay( marker );
                            GEvent.addListener( marker, "mousedown", function( eventInfo )
                            {
                                var output = "<div id='listing_template' class='listing' style='left: 0px; top: 0px; onclick='listingSelect( this );'>";
                                output += "<img style='position: absolute;' class='listing_image' src='" + propertyImages.value + ( marker.photoValue == null ? "/no_image.gif" : "/S_images/" + marker.photoValue ) + "'/>";
                                output += "<h3 class='listing_suburb'>" + suburbValue + "</h3>";
                                output += "<table class='listing_form'><tbody>";
                                output += "<tr><td class='form_label'>Type</td><td id='listing_type' class='form_value'>" + typeValue + "</td><td class='form_label'>Rent</td><td id='listing_rent' class='form_value'>" + rentValue + "</td><td class='form_label'>Reference</td><td id='listing_reference' class='form_value'>" + referenceValue + "</td></tr>";
                                output += "</tbody></table>";
                                output += "<div class='listing_description'>" + descriptionValue + "</div>";
                                output += "<a class='listing_link' title='View Details'>View Details</a>";
                                output += "</div>";
                                marker.openInfoWindowHtml( output );
                            } );
                        }
                        catch( exception )
                        {
                        }
                    }
                    loop( i + 1 );
                }
                else return;
            };
            loop( 0 );
        } );
    };
    map.map = new GMap2( map, { size : new GSize( 740, 540 ) } );    
    map.map.setCenter( point, 13 );
    map.map.addControl( new GSmallMapControl() );
    map.map.addControl( new GMapTypeControl() );
//    map.map.setMapType( G_HYBRID_TYPE );
    GEvent.addListener( map.map, "dragend", update );
    windowOpen( window );
    update();
}
function regionClose()
{
    var window = document.getElementById( "region_window" );

    windowClose( window );
}
function locationOver( location )
{
    location.style.textDecoration = "underline";
}
function locationOut( location )
{
    location.style.textDecoration = "";
}