// ==========================
//  :: Default setting 
//window.MM_MAPQUADS = 'readonly_reference.ttw_mapquads9';

	/* Bounds Start. More above... */
	
	function checkBounds() {
	    var mapcentre = mapviewer.getCurrentPosition();
	    var out = false;
	    var sw = bounds.getSouthWest();
	    var ne = bounds.getNorthEast();
	    if ( mapcentre.lon > ne.lon )     {
	        out = true;
	        mapcentre.lon = ne.lon;
	    } else if( mapcentre.lon < sw.lon )  {
	        out = true;
	        mapcentre.lon = sw.lon;
	    }
	    if( mapcentre.lat > ne.lat ) {
	        out = true;
	        mapcentre.lat = ne.lat;
	    } else if( mapcentre.lat < sw.lat ) {
	        out = true;
	        mapcentre.lat = sw.lat;
	    }
	    if( out ) {
	        if( checkingBounds ) {
	        // Don't get stuck in a recursive loop
	        } else {
	            var smoothPan = mapviewer.getOption( 'smoothpan' );
	            mapviewer.setOption( 'smoothpan', false );
	            checkingBounds = true;
	            mapviewer.goToPosition( mapcentre, null, null, true );
	            checkingBounds = false;
	            mapviewer.setOption( 'smoothpan', smoothPan );
	        }
	    }
	}


	
	/* Bounds End */


// :: mapviewer
var show_mapviewer = true; 
var mapviewer_id = 'mapviewer';
var start_position = new MMLocation ( new MMLatLon ( -26.1594 , 134.7473 ), 5);
var mapviewer_units = 'miles'; // or 'km' 
var widget_types = {
    pan_zoom : 'panzoom',
    small_pan_zoom : 'smallpanzoom',
    small_zoom : 'smallzoom',
    map_type_ : 'maptype',
    //location : 'location',
    overview : 'overview',
    tools : 'tools',
    local_info : 'localinfo'
}
var mapviewer_widgets = { 
    pan_zoom_widget : { type : widget_types.pan_zoom, position : undefined, class_name : undefined, slider : undefined },
    //small_pan_zoom_widget : { type : widget_types.small_pan_zoom, position : undefined, class_name : undefined, slider : undefined },
    //small_zoom_widget : { type : widget_types.small_zoom, position : undefined, class_name : undefined, slider : undefined },
    //map_type_widget : { type : widget_types.map_type, types : undefined, position : undefined, class_name : undefined },
    map_type_widget : { type : widget_types.map_type, types : [ MM_WORLD_MAP, MM_WORLD_AERIAL ] , position : undefined, class_name :   undefined },
    //location_widget : { type : widget_types.location, options : undefined, position : undefined , class_name : undefined },
    overview_widget : { type : widget_types.overview, delta : undefined, dimensions : undefined, position : undefined, class_name : undefined },
    tool_widget : { type : widget_types.tools, label : undefined, position : undefined, class_name : undefined },
    local_info_widget : { type : widget_types.local_info, label : undefined, position : undefined, class_name : undefined }
}; 
var mapviewer_events = {
    //event_handler : { event_name: 'event_name', function_name: func_name },
	event_handler : { event_name: 'moveMap', function_name: checkBounds }
}; 

// :: geocoder
var show_geocoder = true;
var geocoder_id = 'geocoder';
 
// :: search
var show_search = true;
var search_id = 'search'; 
var perform_initial_search = false;

// :: search results display
var show_total_results_found = false
var move_pagination = false;

var search_params = {
    count : 10,
    start_index: undefined,
    order_by_fields : undefined,
    order_by_order : undefined,
    min_distance : undefined,
    max_distance : undefined,
    distance_units : 'miles',  
    return_fields : undefined     
}

// :: search result icon
var search_result_icon = MM_DEFAULT_ICON.copy(); 
search_result_icon.groupName = 'search_results';

// :: search/geocoder results list
var show_results_list = true; 
var results_list_id = 'resultslist';
var results_list_text_field = 'name';

// :: search result zoom in, will show in info box if info_box_text != ''
var search_result_zoom_in = {
    info_box_text : 'Zoom in to this location',
    zoom_factor : 18  
}
// :: route 
var route_id = 'routesteps';
var route_params = {
    optimize_for : 'distance', // or 'time' 
    mode : 'driving', // or 'walking' 
    exclude : '',
    lang : 'en',
    distance_units : 'miles' // or 'km'  
}
// :: route steps
var show_route_steps = true; 

// :: errors
var errors_id = 'errors'; 
var show_error_code = false; 

// :: error messages
var err_search_failed = '<p>Please try again later - your search did not generate results on this occasion.</p>';
var err_search_no_results = '<p>No results found, please try again.</p>';
var err_search_ambiguous_location = '<p>Your search returned more than one result, please select the correct location from the drop-down box.</p>'; 
var err_geocoder_failed = '<p>Please try again later.</p>'; 
var err_geocoder_no_matches = '<p>Could not find any matches for your location search.</p>'; 
var err_routing_failed = '<p>We could not generate a route for you between these locations at this time.</p>'; 

// :: ambiguous results
var ambiguous_id = 'ambiguous'; 

// :: pois
var show_poi = true;
var poi_id = 'poi';
var poi_type_url = '/clients/browse.cgi?client=julian_revgeo_poi&poi_default_radius=50&poi_howmany=100&rt=browse.json';
var poi_type_callback = 'poiCallback';
var poi_type_checkbox_first = true; // label or checkbox  
              
// :: poi types
var poi_types = {
    airline_access : { code: '7356', value: 'Airline Access' },
    airport : { code: '7383', value: 'Airport' },
    amusement_park : { code: '9902', value: 'Amusement Park' },
    beach : { code: '9357', value: 'Beach' },
    camping_ground : { code: '7360', value: 'Camping Ground' },
    car_dealer : { code: '9910', value: 'Car Dealer' },
    car_repair_facility : { code: '7310', value: 'Car Repair Facility' },
    cash_dispenser : { code: '7397', value: 'Cash Dispenser' },
    casino : { code: '7341', value: 'Casino' },
    cemetery : { code: '9390', value: 'Cemetery' },
    cinema : { code: '7342', value: 'Cinema' },
    college_university : { code: '7377', value: 'College / University' },
    commercial_building : { code: '9382', value: 'Commercial Building' },
    company : { code: '9352', value: 'Company' },
    concert_hall : { code: '9367', value: 'Concert Hall' },
    condominium : { code: '9381', value: 'Condominium' },
    convention_centre : { code: '9377', value: 'Convention Centre' },
    courthouse : { code: '9363', value: 'Courthouse' },
    cultural_centre : { code: '7319', value: 'Cultural Centre' },
    dentist : { code: '9374', value: 'Dentist' },
    doctor : { code: '9373', value: 'Doctor' },
    embassy : { code: '7365', value: 'Embassy' },
    exhibition_centre : { code: '7385', value: 'Exhibition Centre' },
    ferry_terminal : { code: '7352', value: 'Ferry Terminal' },
    forest_area : { code: '9387', value: 'Forest Area' },
    frontier_crossing : { code: '7366', value: 'Frontier Crossing' },
    general : { code: '9600', value: 'General POI' },
    golf_course : { code: '9911', value: 'Golf Course' },
    government_office : { code: '7367', value: 'Government Office' },
    hospital_polyclinic : { code: '7321', value: 'Hospital/Polyclinic' },
    hotel_or_motel : { code: '7314', value: 'Hotel or Motel' },
    ice_skating_rink : { code: '9360', value: 'Ice Skating Rink' },
    important_tourist_attraction : { code: '7376', value: 'Important Tourist Attraction' },
    industrial_building : { code: '9383', value: 'Industrial Building' },
    leisure_centre : { code: '9378', value: 'Leisure Centre' },
    library : { code: '9913', value: 'Library' },
    military_cemetery : { code: '9915', value: 'Military Cemetery' },
    military_installation : { code: '9388', value: 'Military Installation' },
    monument : { code: '9917', value: 'Monument' },
    mountain_pass : { code: '9935', value: 'Mountain Pass' },
    mountain_peak : { code: '9364', value: 'Mountain Peak' },
    museum : { code: '7317', value: 'Museum' },
    music_centre : { code: '9372', value: 'Music Centre' },
    nightlife : { code: '9379', value: 'Nightlife' },
    open_parking_area : { code: '7369', value: 'Open Parking Area' },
    opera : { code: '9365', value: 'Opera' },
    park_and_recreation_area : { code: '9362', value: 'Park and Recreation Area' },
    parking_garage : { code: '7313', value: 'Parking Garage' },
    petrol_station : { code: '7311', value: 'Petrol Station' },
    pharmacy : { code: '7326', value: 'Pharmacy' },
    place_of_worship : { code: '7339', value: 'Place of Worship' },
    police_station : { code: '7322', value: 'Police Station' },
    post_office : { code: '7324', value: 'Post Office' },
    public_transport_stop : { code: '9942', value: 'Public Transport Stop' },
    railway_station : { code: '7380', value: 'Railway Station' },
    rent_a_car_facility : { code: '7312', value: 'Rent-a-Car Facility' },
    rent_a_car_parking : { code: '9930', value: 'Rent-a-Car Parking' },
    rest_area : { code: '7395', value: 'Rest Area' },
    restaurant : { code: '7315', value: 'Restaurant' },
    restaurant_area : { code: '9359', value: 'Restaurant Area' },
    scenic_panoramic_view : { code: '7337', value: 'Scenic / Panoramic View' },
    school : { code: '7372', value: 'School' },
    shop : { code: '9361', value: 'Shop' },
    shopping_centre : { code: '7373', value: 'Shopping Centre' },
    sports_centre : { code: '7320', value: 'Sports Centre' },
    stadium : { code: '7374', value: 'Stadium' },
    swimming_pool : { code: '7338', value: 'Swimming Pool' },
    tennis_court : { code: '9369', value: 'Tennis Court' },
    theatre : { code: '7318', value: 'Theatre' },
    tourist_information_office : { code: '7316', value: 'Tourist Information Office' },
    veterinarian : { code: '9375', value: 'Veterinarian' },
    water_sport : { code: '9371', value: 'Water Sport' },
    winery : { code: '7349', value: 'Winery' },
    yacht_basin : { code: '9380', value: 'Yacht Basin' },
    zoo : { code: '9927', value: 'Zoo' }  
}

// :: poi overlays
var poi_overlays = {
    transport_links : { 
        label: 'Transport Links',
        filter : poi_types.ferry_terminal.code + ',' + poi_types.railway_station.code + ',' + poi_types.public_transport_stop.code, 
        image : '/share/travel_demo/i/train1.gif', 
        size : new MMDimensions( 24, 24 ) 
    },
    schools_and_colleges : { 
        label: 'Schools and Colleges',
        filter :  poi_types.college_university.code + ',' + poi_types.school.code, 
        image : '/share/travel_demo/i/college_new.gif', 
        size : new MMDimensions( 24, 24 ) 
    },
    healthcare : { 
        label: 'Healthcare',
        filter : poi_types.hospital_polyclinic.code, 
        image : '/share/travel_demo/i/hospital_new.gif', 
        size : new MMDimensions( 24, 24 ) 
    },
    recreation : { 
        label: 'Recreation',
        filter : poi_types.golf_course.code + ',' + poi_types.park_and_recreation_area.code+ ',' + poi_types.beach.code + ',' + poi_types.stadium.code + ',' + poi_types.yacht_basin.code + ',' + poi_types.sports_centre.code, 
        image : '/share/travel_demo/i/leisure_new.gif', 
        size : new MMDimensions( 28, 26) 
    },
    shopping : { 
        label : 'Shopping', 
        filter : poi_types.shopping_centre.code + ',' + poi_types.shop.code, 
        image : '/share/travel_demo/i/shop_new.gif', 
        size : new MMDimensions( 26, 23 ) 
    }
};

//  :: /Default setting 

// ====================================================
// ====================================================
var mapviewer = false;
var mapviewer_zoom_in_on_marker_click = false;

var poi_el = false;
var script_tag, timeout;
var last_request_num = 0;
var old_script_tags = [];

var geocoder_el = false; 
var geocoder_form = false; 
var geocoder;

var search_el = false; 
var search_form = false; 
var search_new = true;
var search, seacher, search_start_location;

var route_el = false; 
var route_finder, route;
var route_overlays = [];

var errors_el = false;  
var ambiguous_el = false; 
var results_list_el = false; 

// ====================================================
// ====================================================
function initMapviewer () {
    if ( !document.getElementById ( mapviewer_id ) ) return false; 
    if ( !show_mapviewer) {
         document.getElementById ( mapviewer_id ).style.display = 'none';
         return false;
    }
    // Add the map
    mapviewer = new MultimapViewer ( document.getElementById ( mapviewer_id ) );
    mapviewer.setOption ( 'units', mapviewer_units ); 

   mapviewer.drawAndPositionMap ( start_position );
    
    // Add widgets
    for( var key in mapviewer_widgets ) {
        addWidget ( mapviewer_widgets [ key ] )
    } 

    // Add events handlers
    for( var key in mapviewer_events ) {
        addEventHandler ( mapviewer_events [ key ] )
    } 

    // Add marker onclick zoom in if required
    if (mapviewer_zoom_in_on_marker_click) {
        mapviewer.addEventHandler( 'openInfoBox', function( eventType, eventTarget, marker ) {
            var location = marker.getPosition();
            location.zoom_factor = search_result_zoom_in.zoom_factor;
            mapviewer.goToPosition(location);
        });
    }

    return true; 
}

// ====================================================
// ====================================================
function initPOIs() {
    if (!document.getElementById(poi_id)) {
		return false; 
	}
    if (!show_poi) {
        document.getElementById(poi_id).style.display = 'none';
        return false;
    }
    // Populate POI types 
    poi_el = document.getElementById(poi_id); 
    for( var key in poi_overlays ) {
        if (!ul) {
            var ul = document.createElement('ul');
            ul.className = 'poiTypes';  
            poi_el.appendChild(ul);
        }    
        var li = document.createElement('li'); 
        if (poi_type_checkbox_first) {
            li.innerHTML = '<' + 'input type="checkbox" id ="show_' + key + '" name="" onclick="displayCheckedPois()"/>' + '<' + 'label for="show_' + key + '" >' + poi_overlays[key].label + '</label>';
        } else {
            li.innerHTML = '<' + 'label for="show_' + key + '" >' + poi_overlays[key].label + '</label>' + '<' + 'input type="checkbox" id ="show_' + key + '" name="" onclick="displayCheckedPois()"/>';
        }
        ul.appendChild(li);
    }  
    // Add event handlers to update POIs 
    mapviewer.addEventHandler( 'endPan', mapChanged );
    mapviewer.addEventHandler( 'changeZoom', mapChanged );
    return true; 
}  
// ==========================
// Called on pans/zooms to re-search POIs
function mapChanged(first, second, third, fourth, reason) {
    // If the map moved because an infobox popped up, don't re-search
    if (reason == 'infobox') {
        return;
    }
    displayCheckedPois();
}
// ==========================
function displayCheckedPois() {
    for( var key in poi_overlays ) {
        var el = document.getElementById( 'show_'+key );
        if( el ) {
            if( el.checked ) {
                displayPoiType( key );
            } else {
                hidePoiType( key );
            }
        }
    }
}
// ==========================
function hidePoiType ( key ) {
    var results = poi_overlays[key].results;

    // Remove all the markers from this type of POI from the map
    if( results ) {
        var result_count = results.length;
        for( var i = 0; i < result_count; i++ ) {
            if( results[i].infoBoxOpened() ) results[i].closeInfoBox();
            mapviewer.removeOverlay( results[i] );
        }
    }
}
// ==========================
function displayPoiType( key ) {
    var centre = mapviewer.getCurrentPosition();
    var url = poi_type_url;
    url += '&lon='+centre.lon+'&lat='+centre.lat;
    url += '&poi_types='+escape(poi_overlays[key].filter);
    url += '&callback=poiCallback&identifier='+key;

    // Create JSON script tag
    if( poi_overlays[key].script_tag )
        old_script_tags.push( poi_overlays[key].script_tag );
    var st = document.createElement( 'script' );
    st.type = 'text/javascript';
    st.src = url;
    poi_overlays[key].script_tag = st;
    loadingStatus(poi_el, true);
    document.getElementsByTagName( 'head' )[0].appendChild( st ); 
}
// ==========================
function poiCallback( key, results ) {
    // Don't display anything if check-box unchecked for this POI type
    if( ! document.getElementById( 'show_'+key ).checked ) return;

    // Remove old icons for POI type
    var old_results = poi_overlays[key].results;
    if( old_results ) {
        var result_count = old_results.length;
        for( var i = 0; i < result_count; i++ ) {
            if( old_results[i].infoBoxOpened() ) old_results[i].closeInfoBox();
            mapviewer.removeOverlay( old_results[i] );
        }
    }
    poi_overlays[key].results = null;
    // Turn off POI loading spinner
    loadingStatus(poi_el, false);

    var poi_markers = [];
    
    // Loop round JSON results from browse.cgi
    for( var i = 0; i < results.locationData.length - 1; i++ ) {
        var poi_results = results.locationData[i];

        var point = new MMLatLon( Number(poi_results.lat), Number(poi_results.lon) );

        // Grab the icon and icon size for this POI type
        var icon = undefined;
        if ( poi_overlays[key].image ) {
            var icon = new MMIcon ();
            icon.image = poi_overlays[key].image;
            icon.iconSize  = poi_overlays[key].size;
            icon.iconAnchor  = new MMPoint( Math.floor( icon.iconSize.width / 2 ), Math.floor( icon.iconSize.height / 2 ) );
            icon.infoBoxAnchor  = new MMPoint( Math.floor( icon.iconSize.width / 2 ), 0 );
        }

        // Create POI marker
        var marker = mapviewer.createMarker( point, { label: poi_results.name, icon: icon} );

        // Create info box HTML
        var html = "<h1>"+poi_results.name+"</h1>";
        var addr = '';
        if (poi_results.street && poi_results.street != '') {addr += poi_results.street + '<br/>'; }
        if (poi_results.town && poi_results.town != '') {addr += poi_results.town + '<br/>'; }
        if (poi_results.pc && poi_results.pc != '') {addr += poi_results.pc; }
        if (addr != '') html += '<p class="address" >'+addr+'</p>';
        if( poi_results.telephone && poi_results.telephone != '' )
          html += '<p class="phone">Telephone:&nbsp;'+poi_results.telephone.replace( / /g, "&nbsp;" )+'</p>';

        if( poi_results.url && poi_results.url != '' ) {
            if( poi_results.url.substring( 0, 7 ) != 'http://' ) {
                poi_results.url = 'http://'+poi_results.url;
            }
            html += '<p class="website"><a href="'+poi_results.url+'" target=\'_blank\'>Visit Website</a></p>';
        }
        marker.setInfoBoxContent ( html );
        poi_markers.push( marker );
    }
    
    poi_overlays[key].results = poi_markers;
}
// ====================================================
// ====================================================
function addWidget ( widget ) {
    //Add widget
    switch ( widget.type ) {
        case widget_types.pan_zoom : 
            var obj = new MMPanZoomWidget(widget.position, widget.class_name, widget.slider);
            break;    
        case widget_types.small_pan_zoom :  
            var obj = new MMSmallPanZoomWidget(widget.position, widget.class_name, widget.slider);
            break;    
        case widget_types.small_zoom :  
            var obj = new MMSmallZoomWidget(widget.position, widget.class_name, widget.slider );
            break;    
        case widget_types.map_type :  
            var obj = new MMMapTypeWidget(widget.types, widget.position, widget.class_name);
            break;    
        case widget_types.location :  
            var obj = new MMLocationWidget(widget.options, widget.position, widget.class_name);
            break;    
        case widget_types.overview :  
            var obj = new MMOverviewWidget(widget.delta, widget.dimensions, widget.position, widget.class_name);
            break;    
        case widget_types.tools :  
            var obj = new MMToolsWidget(widget.label, widget.position, widget.class_name);
            break; 
        case widget_types.local_info :
            var obj = new MMLocalInfoWidget(widget.label, widget.position, widget.class_name);
            break;
   }
    mapviewer.addWidget( obj );  
}

// ==========================
function addEventHandler ( event_handler ) {
    //Add event handler
    mapviewer.addEventHandler ( event_handler.event_name, event_handler.function_name );
}

// ====================================================
// ====================================================
function initGeocoder () {
    if ( !document.getElementById ( geocoder_id ) || !document.getElementById ( geocoder_id ).getElementsByTagName ( 'form' )[0]) {
		return false;
		
	}
    if ( !show_geocoder ) {
        document.getElementById ( geocoder_id ).style.display = 'none';
        if ( document.getElementById ( errors_id ) ) { document.getElementById ( errors_id ).style.display = 'none'; }
        if ( document.getElementById ( results_list_id ) ) { document.getElementById( results_list_id ).style.display = 'none'; }
        return false;
    }
    geocoder_el = document.getElementById(geocoder_id); 
    geocoder_form = geocoder_el.getElementsByTagName('form')[0];
    if (document.getElementById(errors_id)) errors_el = document.getElementById(errors_id);   
    if (show_results_list && document.getElementById(results_list_id)) results_list_el = document.getElementById(results_list_id); 
    
    // Use standard geocoder for location search    
    geocoder = new MMGeocoder( processGeocoderResults );
    geocoder_form.onsubmit = function () {return doGeocoder () };
    return true; 
}
// ==========================
function doGeocoder () {
    // Verify required fields are populated
    if (!verifyForm()) return false;
    
    // clear any existing items from previous geocoding requests
    cleanUp ();
   
    // Add dynamic geocoder params:
    // format for address param input filed name is 'a_/param_name' 
    var address = new MMAddress();
    var form_elements = geocoder_form.elements;
    
    for (i = 0; i < form_elements.length; i++) {
        var el = form_elements[i];
        if ( el.name ) {
            var name_parts = el.name.split('/');
            var tag_name = el.tagName.toLowerCase();
            var value = undefined;

            if ( ( tag_name == 'input' && el.type && ((el.type == 'checkbox' || el.type == 'radio' ) && el.checked) || el.type == 'text' || el.type == 'hidden'  ) ||
                tag_name == 'select' ||
                tag_name == 'textarea' ) {
                value = el.value;
            } 
 
            if ( value && name_parts.length == 2 && name_parts[0] == 'a_') {
                address [ name_parts[1] ] = value;
            }
         }
    }    
    
    // perform the geocode
    loadingStatus ( geocoder_el, true ) 
    geocoder.geocode ( address );
    return false;
}
// ==========================
function verifyForm() {
    var suburb = document.getElementById('a_city').value;
    if (suburb == '') {
        alert('Please enter a Suburb before searching.');
        return false;
    } else {
        return true;
    }
}
// ==========================
function processGeocoderResults() {
    //console.log ( geocoder ); 
    // callback function registered with the Geocoder to handle geocoding results
    // Error - no results
    if (geocoder.error_code && geocoder.error_code != 'MM_GEOCODE_MULTIPLE_MATCHES') {
        var msg = err_geocoder_failed;
        if ( geocoder.error_code == 'MM_GEOCODE_NO_MATCHES' ) {
            msg = err_geocoder_no_matches;
        } 
        displayError( true, msg );          
        loadingStatus( geocoder_el, false );
        return false;
    }
   
    // Process results 
    var results = geocoder.result_set;
    var markers = [];
    if (results.length > 0) {
        for( var i = 0; i < results.length; i++ ) {
            // Add a marker for each result
            var marker = createGeocoderResultMarker ( results[i], i );
            markers.push(marker);
            // Create list DOM elements
            if (results_list_el)  {
                if (!list) {
                    var list = document.createElement( 'ol' );
                    results_list_el.appendChild(list); 
                } 
                var li = createGeocoderResultListItem (results[i], i, marker );
                list.appendChild( li );
           }
        }                    
        //display all the results
        var location = mapviewer.getAutoScaleLocation( markers );
        if( location.zoom_factor > 17 )
        location.zoom_factor = 17;
        mapviewer.goToPosition( location );
        loadingStatus( geocoder_el, false );
        return false;
    }
} 
// ==========================
function createGeocoderResultMarker ( record, num ) {
    // Add a marker for each result
    var marker = mapviewer.createMarker( record, { 'label' : record.address.display_name, 'text' : num + 1 });
    // Add an infobox for each result
    marker.setInfoBoxContent('<p>' + record.address.display_name + '<' + '/p>');
    return marker; 
}

// ==========================
function createGeocoderResultListItem ( record, num, marker ) {
    var li = document.createElement( 'li' );
    var a = document.createElement( 'a' );
    a.href = '#';
    a.onclick = onClickResult ( marker );
    var a_text = record.address.display_name;
    a.appendChild( document.createTextNode( a_text ) );
    li.appendChild( a );
    return li; 
}

// ====================================================
// ====================================================
function initSearch() {
    if (!document.getElementById(search_id) || !document.getElementById(search_id).getElementsByTagName('form')[0]) {
		return false;
	}
    if (!show_search) {
        document.getElementById(search_id).style.display = 'none';
        if (document.getElementById(errors_id)) {document.getElementById(errors_id).style.display = 'none';}
        if (document.getElementById(ambiguous_id)) {document.getElementById(ambiguous_id).style.display = 'none';}
        if (document.getElementById(results_list_id)) {document.getElementById(results_list_id).style.display = 'none';}
        return false;
    }
    search_el = document.getElementById(search_id); 
    search_form = search_el.getElementsByTagName('form')[0];
    search_form.onsubmit = function () { 
		return doSearch();
	}

    if (document.getElementById(errors_id)) errors_el = document.getElementById(errors_id);   
    if (document.getElementById(ambiguous_id)) ambiguous_el = document.getElementById(ambiguous_id);
    if (show_results_list && document.getElementById(results_list_id)) results_list_el = document.getElementById(results_list_id); 
    
    // Set up new search and searcher objects
    search = new MMSearch(); 
    searcher = new MMSearchRequester( processSearchResults );
    
    loadingStatus( search_el, false );
    if (perform_initial_search) {
        initialSearch();
    }

    return true; 
}

// ==========================
function doSearch(lat, lon) {
    // Verify required fields are populated
    //if (!verifyForm()) return false;
    
    search_new = true;
    // Clear any existing items from previous search requests
    cleanUp();

    // Search from new location
    if ( search_new ) {
        search = new MMSearch(); 
       
        if (lat && lon) {
           var point = new MMLatLon(lat, lon);
           search.point = point;
        }

        while ( ambiguous_el && ambiguous_el.firstChild) {
            ambiguous_el.removeChild(ambiguous_el.firstChild);
        } 
        ambiguous_el.style.display = 'none';
    }
    
    // Add configuration search params
    for( var key in search_params ) {
        search [ key ] = search_params [key]; 
    } 
    
    // Add dynamic search params and filters:
    // format for address param input filed name is 'a_/param_name'
    // format for search param input filed name is 'p_/param_name'
    // format for filter input filed name is 'f_/field_name/operator'
    
    search.filters = [];
    var form_elements = search_form.elements;
    var address = new MMAddress();
    
    for (i = 0; i < form_elements.length; i++) {
        var el = form_elements[i];
        if ( el.name ) {
            var name_parts = el.name.split('/');
            var tag_name = el.tagName.toLowerCase();
            var value = undefined;

            if ( ( tag_name == 'input' && el.type && ((el.type == 'checkbox' || el.type == 'radio' ) && el.checked) || el.type == 'text' || el.type == 'hidden'  ) ||
                tag_name == 'select' ||
                tag_name == 'textarea' ) {
                value = el.value;
            } 
 
            if ( value && name_parts.length == 2 && name_parts[0] == 'a_') {
                address [ name_parts[1] ] = value;
                el.onchange =  function () {
                    search_new = true; 
                } 
            }

            if ( value && name_parts.length > 2 && name_parts[0] == 'f_' ) {
                search.filters.push( new MMSearchFilter( name_parts[1], name_parts[2], value ) );
            }

            if ( value && name_parts.length == 2 && name_parts[0] == 'p_') {
                search [ name_parts[1] ] = value;
            }
        }
    }
    if ( search_new ) {
        search.address = address;
        search_new = false;
    }
    loadingStatus( search_el, true );
    searcher.search ( search );
    return false;
}
// ==========================
function processSearchResults() {
    //console.log ( search ); 
    //console.log ( searcher ); 
    loadingStatus( search_el, false ); 
   
    // Error - geocode had no matches
    if ( searcher.error_code && searcher.error_code == 'MM_GEOCODE_NO_MATCHES' ) {
        var msg = err_geocoder_no_matches;
        search_new = true;
        displayError ( true,  msg );
        loadingStatus ( search_el, false );
        return false;
    }
 
    // Error - request failed
    if ( searcher.error_code && searcher.error_code != 'MM_GEOCODE_MULTIPLE_MATCHES' ) {
        var msg = err_search_failed;
        if ( show_error_code ) {
            msg += '<p><em>' + ( (searcher.error_explanation) ? searcher.error_explanation : '') + ' (' + searcher.error_code + ') <' + '/em><' + '/p>';
        }
        search_new = true;
        displayError ( true,  msg );
        loadingStatus ( search_el, false );
        return false;
    }
    
    // Error - multiple results
    if ( searcher.error_code && searcher.error_code == 'MM_GEOCODE_MULTIPLE_MATCHES' ) {
        results = searcher.result_set;
        var choicessel = false;
        // Find out if choices select is available
        var  sels = ambiguous_el.getElementsByTagName('select');
        for (i = 0; i < sels.length; i++) {
            if (sels[i].name == 'choices') { 
                choicessel = sels[i];
                break;
            }
        }
        // Clear if exists or create a new 
        if (choicessel) {
            while( choicessel.childNodes.length > 0 ) {
                choicessel.removeChild( choicessel.childNodes[0] );
            }
        } else {
            choicessel = document.createElement( 'select' );
            choicessel.setAttribute('name', 'choices'); 
            choicessel.setAttribute('id', 'choicessel'); 
            choicessel.onchange = function () {
                if (this.value != '' ) {
                    var coords = this.value.split(',');
                    search.address = new MMAddress();
                    search.point = new MMLocation(new MMLatLon(coords[0], coords[1]));
                    loadingStatus( search_el, true );
                    searcher.search ( search );
                    return false;
                }   
            };   
            ambiguous_el.appendChild(choicessel); 
        }
        // Create <option> elements for place name drop down
        var option = document.createElement( 'option' );
        option.value = '';
        option.appendChild( document.createTextNode( ' --- ' ) );
        choicessel.appendChild( option );

        for( var i = 0; i < results.length; i++ ) {
            var address = results[i].address;
            var coords = results[i].coords;
            var option = document.createElement( 'option' );
            option.value = coords.lat + ',' + coords.lon;
            option.appendChild( document.createTextNode( address.display_name ) );
            choicessel.appendChild( option );
        }
        ambiguous_el.style.display = 'block';
        displayError ( true, err_search_ambiguous_location ) ;
        loadingStatus( search_el, false );
        return false;
     }

    // No results
    if ( ! searcher.record_sets[0].records ) {
        loadingStatus( search_el, false );
        displayError(true, err_search_no_results );
        return false;
    }

    // Search results
    // Remove all the current markers as we will be display a new set
    mapviewer.removeAllOverlays();

    // Clean up prev results
    while (results_list_el && results_list_el.firstChild) {
        results_list_el.removeChild(results_list_el.firstChild);
    }   
    displayError (false);
    
    // Get search starting location
    search_start_location = false; 
    if ( search.point ) {
        search_start_location = search.point;
    } else {
        search_start_location = new MMLocation ( search.address.copy () ) ;
    }

    // Handle all records
    var markers = new Array();
    var list = false;
    var results = searcher.record_sets[0].records;
    var total_record_count = searcher.record_sets[0].totalRecordCount; 
    var start_index = ( search.start_index ) ? search.start_index : 1; 
    for( var i = 0; i < results.length; i++ ) {
        if ( results[i].point.lat &&  results[i].point.lon ) {
            // Create marker 
            var marker = createSearchResultMarker ( results[i], start_index - 1 + i );
            markers.push( marker );
            
            // Create list DOM elements
            if (results_list_el)  {
                if (!list) {
                    var list = document.createElement( 'ol' );
                    list.start = start_index;
                    results_list_el.appendChild(list); 
                } 
                var li = createSearchResultListItem ( results[i], start_index -1 + i, marker );
                list.appendChild( li );
           } 
        }
    } 

    // Autoscale the map to fit the points found
    if( markers.length > 0 ) {
        var location = mapviewer.getAutoScaleLocation( markers );
        mapviewer.goToPosition( location );
    }

    // Pagination
    if ( results.length < total_record_count ) {
        var p = document.createElement( 'p' );
        p.className = 'pagination';
        
        if ( start_index > 1 ) {
            var a = document.createElement( 'a' );
            a.href = '#';
            a.className = 'prev';
            a.onclick = function () {
                search.start_index = start_index - search.count;
                searcher.search ( search);
                return false;
            };
            var a_text = '< prev ';
            a.appendChild( document.createTextNode( a_text ) );
            p.appendChild( a );
        }
        if ( ( start_index + results.length ) < total_record_count ) {
            var a = document.createElement( 'a' );
            a.href = '#';
            a.className = 'next';
            a.onclick = function () {
                search.start_index = start_index + search.count;
                searcher.search ( search);
                return false;
            };
            var a_text = ' next >';
            a.appendChild( document.createTextNode( a_text ) );
            p.appendChild( a );
        }
        
        var numresults = document.createTextNode( 'Results found: '  + total_record_count );
        
        if(move_pagination){
        	results_list_el.insertBefore( p,results_list_el.firstChild);
        	if(show_total_results_found){
        		results_list_el.insertBefore(numresults,p);
        	}
      	} else {	
        	results_list_el.appendChild( p); 
        	if(show_total_results_found){
        		results_list_el.insertBefore(numresults,p);
        	}
        }
    }
     

    displayCheckedPois();

}

   
// ==========================
function createSearchResultMarker ( record, num ) {
    /* Create info box html */
    var html =''; 
    var caption = record [ name ]; 
	var shopID = record.client_id;
	//console.log(shopID);
	var currentShop = shopData[shopID];
	var locationHtml = '';
	var aboutusHtml = '';
	var openHoursHtml = '';
	var emailusHtml = '<h2 class="masterHeading">General Enquiry</h2><iframe name="'+shopID+'" frameborder="0" src="/javascript/etau/generalEnquiry.html" height="375px" width="309" />';
	
	/*  Matching Psuedo (client_id) with shopData */
	 if(currentShop) {
		 
		/* // Use shopData to poplate the markers
		Shopcat data no longer used
		locationHtml += '<p class="mmText">' + currentShop.address;
		if(currentShop.address2 != "") {
			locationHtml += '<br/>'+currentShop.address2;
		}
		if(currentShop.address3 != "") {
			 locationHtml += '<br/>'+currentShop.address3;
		}
		locationHtml += '<br/>'+currentShop.locality+'</p>';*/
		
		
		viewStoreButton = '<p class="mmText"><a href="'+currentShop.loc+'">View store page</a></p>'; /*Shopcat*/
		
		locationHtml = '<h2 class="masterHeading">' + currentShop.name + '</h2>'; /*Shopcat*/
		locationHtml += '<p class="mmText">'+record.street+"<br/>"+record.town+" "+record.pc+" "+record.state+'</p>'; /*Multimap*/
		locationHtml += viewStoreButton;
		
		aboutusHtml = '<p class="mmText">'+currentShop.description+'</p>'; /*Shopcat*/
		aboutusHtml += viewStoreButton;
		
		openHoursHtml = '<h2 class="masterHeading">Opening hours</h2>'; 
		openHoursHtml += '<p class="mmText">'+currentShop.openhours+'</p>'; /*Shopcat*/
		openHoursHtml += viewStoreButton; 
		
		
		
		var tabs = [
			new MMInfoBoxTab( 'Location', locationHtml ),
			new MMInfoBoxTab( 'About us', aboutusHtml ),
			new MMInfoBoxTab( 'Opening hours', openHoursHtml ),
			new MMInfoBoxTab( 'Email us', emailusHtml ),
		];
	
	} else {
		
		locationHtml = '<p class="mmText">'+record.street+"<br/>"+record.town+" "+record.pc+" "+record.state+'</p>';
		
		var tabs = [
			new MMInfoBoxTab( 'Location', '<h2 class="masterHeading">' + record.name + '</h2>'+locationHtml ),
			new MMInfoBoxTab( 'Email us', emailusHtml ),
		];
	}

    // Declutter search results markers 
    if ( search_result_icon.groupName != '' ) mapviewer.declutterGroup( search_result_icon.groupName, {}, MM_DECLUTTER_AGGREGATE );

    // Create marker
    var marker = mapviewer.createMarker( new MMLatLon( record.point.lat, record.point.lon) , { 'label': caption, icon: search_result_icon, text : num + 1 } );
    marker.setInfoBoxContent (tabs);
    marker.setAttribute('lon', record.point.lon);
    marker.setAttribute('lat', record.point.lat);
    return marker;  
}



// ==========================
function createSearchResultListItem ( record, num, marker ) {
	var li = document.createElement( 'li' );

	if (num % 2 != 0) {
		li.className='odd';
	} 
     var a = document.createElement( 'a' );
	 var p = document.createElement( 'p' );
	 var p2 = document.createElement( 'p' );
     var strong = document.createElement( 'strong' );
	 var em = document.createElement( 'em' );
	 var recordName = "";
	 var recordStreet = "";
	 var recordTown = "";
	 var shopID = record.client_id;
	 var currentShop = shopData[shopID];
	 
     a.href = '#';
     a.onclick = onClickResult ( marker );
	 
	/*  Matching Psuedo (client_id) with shopData */
	 if(currentShop) {
		 /* Shopcat data no longer being used 
		 recordName = currentShop.name;
		 recordStreet = currentShop.address+" "+currentShop.address2+" "+currentShop.address3+", "+currentShop.locality;
		 
		 p.className = "resultTitle";
		 p.appendChild(document.createTextNode( num+1+". "));
		 p.appendChild(document.createTextNode(recordName));
		 
		 p2.className = "resultDetails";
		 p2.appendChild(document.createTextNode(recordStreet)); */
		 
		 recordName = currentShop.name; //Shopcat name
		 recordStreet = record.street; 
		 recordTown = record.town+' '+record.pc;
		 
		 p.className = "resultTitle";
		 p.appendChild( document.createTextNode( num+1+". "));
		 p.appendChild(document.createTextNode(recordName));
		 
		 p2.className = "resultDetails";
		 p2.appendChild(document.createTextNode(recordStreet+", "+recordTown));
		 
	 } else {
		 recordName = record.name;
		 recordStreet = record.street;
		 recordTown = record.town+' '+record.pc;
		 
		 p.className = "resultTitle";
		 p.appendChild( document.createTextNode( num+1+". "));
		 p.appendChild(document.createTextNode(recordName));
		 
		 p2.className = "resultDetails";
		 p2.appendChild(document.createTextNode(recordStreet+", "+recordTown));
	 }
	 	
     if (search_params.distance_units == 'miles') {
         var recordDist = 'Distance from location  ' + record['distance']['miles']  + ' miles';
     } else {
         var recordDist = 'Distance from location  ' + record['distance']['km']  + ' km';
     }
	 p2.appendChild( document.createElement( 'br' ) );
	 p2.appendChild(document.createTextNode(recordDist));
	 
	 a.appendChild(p);
	 a.appendChild(p2);
     li.appendChild( a );	
     return li;
}
// ====================================================


// ====================================================
function initRouting() {
    if ( show_route_steps && document.getElementById( route_id ) )  route_el = document.getElementById( route_id ); 
    route_finder = new MMRouteRequester( processRoutingResults );
}
function doRouting ( locations ) {
    loadingStatus( search_el, true );
    //console.log ( locations );
    
    route = new MMRoute( locations );
    route_finder = new MMRouteRequester( processRoutingResults );
    
    for( var key in route_params ) {
        route[ key ] = route_params [key]; 
    }
    for( var i = 0, l = route_overlays.length; i < l; ++i ) {
      mapviewer.removeOverlay( route_overlays[i] );
    }
    route_finder.request(route);
}
// ==========================
function processRoutingResults () {
    //console.log ( route );
    if (route.error_code) {
        var msg = err_routing_failed;
        if ( show_error_code ) {
            msg += '<p><em>' + ( (route.error_explanation) ? route.error_explanation : '') + ' (' + route.error_code + ') <' + '/em><' + '/p>';
        }
        displayError(true, msg);
        loadingStatus( search_el, false );
        return false;
    } 
    route_overlays = [];  
    displayError (false);
    mapviewer.goToPosition( mapviewer.getAutoScaleLocation( route.bounds ) );
    if ( route_el ) {
        while (route_el.firstChild) {
            route_el.removeChild(route_el.firstChild);
        }   
        displayStages (route, route_el);
    }  
    for( var i = 0, l = route.polyLine.length; i < l; ++i ) {
      route_overlays.push ( route.polyLine[i] );   
      mapviewer.addOverlay( route.polyLine[i] );
    }
    loadingStatus( search_el, false );
}
var max_zindex = 1000;
// ==========================
function displayStages(route, container) {
    var curr_step = 1;
    var stages = route.stages; 

    var h2 = document.createElement('h2');
    h2.appendChild(document.createTextNode('Travel directions'));
    container.appendChild(h2);
   
    //var summary = '';
    //summary += 'Start: ' + stages[0].start_address;
    //summary += '<br />End: ' + stages[stages.length - 1].end_address;
    //summary += '<br />Total Distance: ' + route.distance.miles + ' mile(s)';
    //summary += '<br />Estimated Total Time: ';
    //if (route.duration.days > 0) { summary += route.duration.days + ' day(s) '; }
    //if (route.duration.hours > 0) { summary += route.duration.hours + ' hour(s) '; }
    //if (route.duration.minutes > 0) { summary += route.duration.minutes + ' minute(s) '; }
    //var p = document.createElement('p');
    //p.innerHTML = summary;
    //container.appendChild(p);
    
    for (var count=0; count < stages.length; count++) {
    
        if (count == 0 ) createOverviewMarker(stages[count].start_point, '<a href="#" onclick="playRoute();return false;">Animate route...</a>');
         
        if (stages.length > 1) {
            var p = document.createElement('p');
            p.appendChild(document.createTextNode('Stage ' + (count + 1)));
            container.appendChild(p);
        }
        
        var ol = document.createElement('ol');
        ol.id = 'stage_' + count;
        ol.start = curr_step;

        var steps = stages[count].steps;

        for (var step_count=0; step_count < steps.length; step_count++) {
            var li = createRouteStepListItem ( steps[step_count], count, step_count, curr_step )
            ol.appendChild(li);
            ++curr_step;
        }
        container.appendChild(ol);
    }            
    
    container.style.display = 'block'; 
}
// ==========================
function createRouteStepListItem ( record, stage, step, global_step_num ) {
    var instruction = record.instruction;
    var roadname = record.road_name;
    var roadnumber = record.road_number; 
    var turndirection = record.turn_direction;

    if (roadname && roadnumber) {
        instruction += ' ' + roadname + ' (' + roadnumber + ') ';
    } else if (roadname) {
        instruction += ' ' + roadname + ' ';
    } else if (roadnumber) {
        instruction += ' ' + roadnumber + ' ';
    }
    var turnicon = ''; 
    turnicon += '<img src="/demos/turn_';
    turnicon += turndirection;
    turnicon += '.png" />';

    var distance = '';            
    if (record.distance.miles > 0 && route_params.distance_units == 'miles' ) { distance += record.distance.miles + ' mile(s) '; }
    if (record.distance.km > 0 && route_params.distance_units == 'km' ) { distance += record.distance.km + ' km '; }
    if (distance != '') { distance = ' | ' + distance };
    
    var li = document.createElement('li');
    var a = document.createElement( 'a' );
    a.href = '#';
    a.mmStage = stage;
    a.mmStep = step;
    a.mmInstruction = instruction;
    a.mmStepNum = global_step_num;
    a.onclick = function () { moveToStep (this.mmStage, this.mmStep, this.mmInstruction, this.mmStepNum); return false; };

    a.innerHTML = instruction + distance + turnicon;
    li.appendChild( a );
    return li; 
}

var animationCurrentStage = 0;
var animationCurrentStep = 0;   
var animationStageTotal = 0;
var animationCurrentStepTotal = 0;    
var overviewMarkers = new Array();
var stepMarkers = new Array();
         
// ==========================
function moveToNextStep () {
    var stepsList = document.getElementById('stage_' + animationCurrentStage);
    if (animationCurrentStep != 0) {
        var prevStepNode = stepsList.childNodes[animationCurrentStep-1].firstChild;
        prevStepNode.style.background = 'white';
    }
    var stepNode = stepsList.childNodes[animationCurrentStep].firstChild;
    stepNode.style.background = 'yellow';
    
    moveToStep (stepNode.mmStage, stepNode.mmStep, stepNode.mmInstruction, stepNode.mmStepNum );

    animationCurrentStep++;
    
    if (animationCurrentStep == animationCurrentStepTotal) {
       stepNode.style.background = 'white';
       clearInterval(animationInterval);
    }
                
}
// ==========================
function moveToStep (stage, step, instruction, num) {
     for (var markerCount=0; markerCount < stepMarkers.length; markerCount++) {
        mapviewer.removeOverlay(stepMarkers[markerCount]);
     }
     
     var step_start = route.stages[stage].steps[step].start_point;
     var step_end = route.stages[stage].steps[step].end_point;

     createStepMarker ( step_start, instruction, num );
     
     mapviewer.panToPosition(mapviewer.getAutoScaleLocation([step_start, step_end]));
 }
// ==========================
function createStepMarker(location, instruction, num ) {
   var marker = mapviewer.createMarker(location, { text: num } );
   marker.setInfoBoxContent ('<p>' + instruction + '<' + '/p>');
   stepMarkers.push ( marker );
   marker.openInfoBox ();
}
// ==========================
function createOverviewMarker(location, display_name) {
   var marker = mapviewer.createMarker( location, {text : 'x' } );
   marker.setInfoBoxContent ('<p>' + display_name + '</p>');
   overviewMarkers.push(marker);
}
// ==========================
function playRoute () {
    animationCurrentStage = 0;
    animationCurrentStep = 0;
    animationStageTotal = route.stages.length;
    animationCurrentStepTotal = document.getElementById('stage_0').childNodes.length;
    //console.log( 'playRoute' );
    moveToNextStep();
    animationInterval = setInterval(moveToNextStep,2000);    
}

// ====================================================
// ====================================================
function loadingStatus( container, bool ) {
    // If we're loading values we want to disable the form elements
    // and change presentation to show activity
    var form_elements = container.getElementsByTagName('input');
    for (i = 0; i < form_elements.length; i++) {
        form_elements[i].disabled = bool; 
    } 
    var form_elements = container.getElementsByTagName('select');
       for (i = 0; i < form_elements.length; i++) {
        form_elements[i].disabled = bool; 
    } 
    var form_elements = container.getElementsByTagName('textarea');     
    for (i = 0; i < form_elements.length; i++) {
        form_elements[i].disabled = bool; 
    } 
    class_name = container.className;
    class_name = class_name.replace( /loading/, '' ); 
    if (bool) class_name += 'loading'; 
    container.className = class_name;
}
// ==========================
function cleanUp() {
    // Remove any existing markers from the map
    mapviewer.removeAllOverlays();
    // Clean up prev results
    if ( search_new ) {
        while ( ambiguous_el && ambiguous_el.firstChild) {
            ambiguous_el.removeChild(ambiguous_el.firstChild);
        } 
        ambiguous_el.style.display = 'none';
    }   
    while (results_list_el && results_list_el.firstChild) {
        results_list_el.removeChild(results_list_el.firstChild);
    }   
    while (route_el && route_el.firstChild) {
        route_el.removeChild(route_el.firstChild);
    }   
    displayError (false);
}

// ==========================
function displayError ( show, msg ) {
    if (!errors_el) {
        if (show && msg) alert(msg);
    } else {
        if (show && msg) {
            errors_el.innerHTML = msg;
            errors_el.style.display = 'block';
        } else {
            errors_el.innerHTML = ''; 
            errors_el.style.display = 'none';
        }
    }
}
// ==========================
function onClickResult ( marker ) {
    return function() { 
        marker.openInfoBox();
        mapviewer.goToPosition( marker.getPosition() );
        return false;
    };
}
// ====================================================
// ====================================================
MMAttachEvent( window, 'load', function () {
        if (initMapviewer()) {
            initPOIs ();
            initSearch ();
            initGeocoder ();
            initRouting ();
        }
    } );



/*MMAttachEvent( window, 'load', onLoad );
$(document).ready(function () {
  	if (initMapviewer()) {		
		initPOIs();
		initSearch();
		initGeocoder();
		initRouting();
	}
});*/


var search2 = new MMSearch(new MMSearchFilter('id', 'gt', 1));
var searcher2 = new MMSearchRequester(proResults);
$(document).ready(function () {
	search2.count = 150;
	search2.result_set_size = 100;
	search2.max_distance = 300;
	searcher2.search(search2);						
});

function proResults() {
	var res = searcher2.record_sets[0].records;
		
	for(x in res){
		var shp = res[x];
		if(!shopData[shp.client_id]) {
			if(shp.state == "QLD") {
				$("#qldEnd").before("<p><strong>"+shp.name+"</strong><br/>"+shp.street+"<br/>"+shp.town+" "+shp.pc+" "+shp.state+"</p>");
			} else if(shp.state == "NSW") {
				$("#nswEnd").before("<p><strong>"+shp.name+"</strong><br/>"+shp.street+"<br/>"+shp.town+" "+shp.pc+" "+shp.state+"</p>");
			} else if(shp.state == "ACT") {	
				$("#actEnd").before("<p><strong>"+shp.name+"</strong><br/>"+shp.street+"<br/>"+shp.town+" "+shp.pc+" "+shp.state+"</p>");
			} else if(shp.state == "VIC") {
				$("#vicEnd").before("<p><strong>"+shp.name+"</strong><br/>"+shp.street+"<br/>"+shp.town+" "+shp.pc+" "+shp.state+"</p>");
			} else if(shp.state == "WA") {
				$("#waEnd").before("<p><strong>"+shp.name+"</strong><br/>"+shp.street+"<br/>"+shp.town+" "+shp.pc+" "+shp.state+"</p>");
			} else if(shp.state == "SA") {
				$("#saEnd").before("<p><strong>"+shp.name+"</strong><br/>"+shp.street+"<br/>"+shp.town+" "+shp.pc+" "+shp.state+"</p>");
			}
		} else {
			var shopcat = shopData[shp.client_id];
			if(shp.state == "QLD") {				
				$("#qldEnd").before("<p><strong><a href='"+shopcat.loc+"'>"+shopcat.name+"</a></strong><br/>"+shp.street+"<br/>"+shp.town+" "+shp.pc+" "+shp.state+"<br/><a href='"+shopcat.loc+"'>Meet the team</a></p>");
			} else if(shp.state == "NSW") {
				$("#nswEnd").before("<p><strong><a href='"+shopcat.loc+"'>"+shopcat.name+"</a></strong><br/>"+shp.street+"<br/>"+shp.town+" "+shp.pc+" "+shp.state+"<br/><a href='"+shopcat.loc+"'>Meet the team</a></p>");
			} else if(shp.state == "ACT") {	
				$("#actEnd").before("<p><strong><a href='"+shopcat.loc+"'>"+shopcat.name+"</a></strong><br/>"+shp.street+"<br/>"+shp.town+" "+shp.pc+" "+shp.state+"<br/><a href='"+shopcat.loc+"'>Meet the team</a></p>");
			} else if(shp.state == "VIC") {
				$("#vicEnd").before("<p><strong><a href='"+shopcat.loc+"'>"+shopcat.name+"</a></strong><br/>"+shp.street+"<br/>"+shp.town+" "+shp.pc+" "+shp.state+"<br/><a href='"+shopcat.loc+"'>Meet the team</a></p>");
			} else if(shp.state == "WA") {
				$("#waEnd").before("<p><strong><a href='"+shopcat.loc+"'>"+shopcat.name+"</a></strong><br/>"+shp.street+"<br/>"+shp.town+" "+shp.pc+" "+shp.state+"<br/><a href='"+shopcat.loc+"'>Meet the team</a></p>");
			} else if(shp.state == "SA") {
				$("#saEnd").before("<p><strong><a href='"+shopcat.loc+"'>"+shopcat.name+"</a></strong><br/>"+shp.street+"<br/>"+shp.town+" "+shp.pc+" "+shp.state+"<br/><a href='"+shopcat.loc+"'>Meet the team</a></p>");
			}
		}
	}
	
}








