//=== CUSTOMISED VARIABLES FOR THIS SERVICE (taken from utilities.js)
//	var mapviewer_widgets

//=== CUSTOMISED FUNCTIONS FOR THIS SERVICE (taken from utilities.js)
//	createMarker() - moved into separate function
//	createSearchResultMarker() - logic for content display
//	createSearchResultListItem() - logic for display, also multiple lines
//	displayError() - changed style of error message





// ==========================
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 );
        
        document.getElementById('resultslist').className = "overflow";
        document.getElementById('results').getElementsByTagName('H3')[0].innerHTML = 'Results';
        document.getElementById('footer').className = "moveright";
    }

    // 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();

}

//#################################################
//	create marker function
function createMarker(location, display_name, num) {
    var marker = mapviewer.createMarker(location,{'icon' : icon});
   // marker.setInfoBoxContent('<p>' + display_name + '<' + '/p>', { className : 'altinfobox'}); 
   marker.setInfoBoxContent(display_name); 
    return marker;
}

//#################################################
//	content and layout of infobox
function createSearchResultMarker ( record, num ){
	// simplify variables
	var name = record [ results_name_field ];
	var street = record [ results_street_field ];
	var town = record [ results_town_field ];
	var pc = record.pc;
	var img = record.url;
	var scheme = record.scheme;
	var documents = record.documents;
	
	// assemble content for tab1
	var tab1_content = '<h1>' + name +'<' + '/h1>'; 
    tab1_content += '<p>';  
    if (street != ''){tab1_content += street + '<br />'}
    if (town !=''){tab1_content += town + '<br />'}
    tab1_content += pc;
    if (documents == null || documents == '') {
    	if(record.scheme == 'S'){
    		tab1_content += '<p><a href="http://www.westmerciahousinggroup.co.uk/documents/defaultdocumentsH.pdf" target="_blank">Download More Details</a></p>';
    	}else {
			tab1_content += '<p><a href="http://www.westmerciahousinggroup.co.uk/documents/defaultdocumentsL.pdf" target="_blank">Download More Details</a></p>';
		}
	} else {
	    	tab1_content += '<p><a href="'+documents+'" target="_blank">Download More Details</a></p>';
	}
	
    tab1_content += '<' + '/p>';  
   // if ( record.distance ) {
     //   markerText += '<p>Distance: ' + record.distance.km + ' km, ' + record.distance.miles + ' mi<' + '/p>'
   // }
    // assemble content for tab2
    var tab2_content = '<h1>' + name +'<' + '/h1>';
    tab2_content += '<p>';  
    if (img != '') {tab2_content += '<img src="'+ img + '" border="0" alt="' +name+ '" />' }else {tab2_content += 'No image available'}; 
    tab2_content += '<' + '/p>'; 
    
    // assemble content for tab3
    var tab3_content = '<h1>Info<' + '/h1>';
    tab3_content += '<p>';
    	if (scheme == 'M') {tab3_content += text_extra_2 + record[results_extra_2] + '<br />' + text_extra_9 + record[results_extra_9]}
    	if (scheme == 'S') {tab3_content += text_extra_1 + record[results_extra_1] + '<br />' + text_extra_7 + record[results_extra_7] + '<br />'+ text_extra_8 + record[results_extra_8] + '<br />' + text_extra_3 + record[results_extra_3] + '<br />' +text_extra_6 + record[results_extra_6] + '<br />'}
    tab3_content += text_extra_9 + record[results_extra_9];
    tab3_content += '<' + '/p>'; 
    
     // assemble content for tab4
    var tab4_content = '<h1>Description<' + '/h1>';
    tab4_content += '<p>'+record.description+'<'+'/p>'; 
    
    var tabs = [
    	 new MMInfoBoxTab( 'Address', tab1_content ),
         new MMInfoBoxTab( 'Info', tab3_content ),
         new MMInfoBoxTab( 'Image', tab2_content ),
         new MMInfoBoxTab( 'Description', tab4_content ),
    ];
    
    // call createMarker 
    if ( record.point ) {
    	var marker = createMarker( new MMLatLon(record.point.lat, record.point.lon), tabs, num + 1);
    	markers.push(marker);
 	} 
 	// pass the styled marker back up to processSearchResults() in utilities.js
 	return marker;
 }

//################################################    
//	List item layout
function createSearchResultListItem ( record, num, marker ){
    var li = document.createElement('li');
    var link = document.createElement ( 'a' );
    link.href = '#';
    link.record_id = record.id;
    link.appendChild(document.createTextNode(record[ results_name_field ]));
    var scheme = record.scheme;
    var extra_fields = document.createTextNode(' Managing agent: ' + record[ results_extra_9 ]);
    
    //var results_cont = document.createTextNode(record[ results_street_field ] + ' ' + record[ results_town_field ] + ' ' + record.pc);
     var results_cont = document.createTextNode(record.pc);
    var br = document.createElement('br');
    var br2 = document.createElement('br');
    li.appendChild(extra_fields);
    li.insertBefore(br2,extra_fields);
    li.insertBefore(results_cont,br2);
    li.insertBefore(br,results_cont);
    li.insertBefore(link,br);
    
   
    link.onclick = onClickResult ( marker );
    
    return li;  // pass the styled LI back up to processSearchResults() in utilities.js
}


//################################################
// ==========================
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';
            errors_el.setAttribute('class','errors');
            errors_el.style.background = '#fff';
            errors_el.style.width = '200px';
            errors_el.style.padding = '10px';
            errors_el.style.border = '1px solid #f90';
           
        } else {
            errors_el.innerHTML = ''; 
            errors_el.style.display = 'none';
        }
    }
}





// ====================================================
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; 
}  

 
// ======================================================


