var MINZF=1;
var MAXZF=18;
var CZF=2;
var DZF=3;
var RZF=6;
var AZF=12;
var MDZF=8;
var DMG="Destinations";
var RMG="Resorts";
var AMG="Accommodation";
var MH=19;
var MW=19;
var mv;
var pzw;
var lw;
var mtw;
var initZoomFactor = 5;

var markerSearcher;
var foundGeocode;


function displayMap(lat, lon, level,name){

		mv = MMFactory.createViewer( document.getElementById('mapViewer'), MM_WORLD_MAP );
		var geocode = new MMLatLon(Number(lat),Number(lon));
	    mv.setAllowedZoomFactors(MINZF, MAXZF);
		pzw = new MMPanZoomWidget();
		mv.addWidget(pzw);
	
		mtw=new MMMapTypeWidget();
		mv.addWidget(mtw);		
		mv.setZoomFactor(initZoomFactor);
		mv.goToPosition( geocode );
		mv.addEventHandler('moveMap', checkBounds);
		reverseDataPrefs(MM_WORLD_MAP);
		mv.setOption('mousewheel:wheelup',"zoomin");
		mv.setOption('mousewheel:wheeldown',"zoomout");


		var icon;
		if(level == DZF){
			icon = new MMIcon('/images/browse/mmicon-destination.png');
		
		} 
		else if(level == RZF){
			icon=new MMIcon('/images/browse/mmicon-resort.png');
		
		}
		if(icon){
			icon.iconSize=new MMDimensions(MH,MH);
			icon.iconAnchor=new MMPoint(9.5,19);
			icon.groupName='destGroup';
			var location = new  MMLocation();
			location.coords= geocode;
			
			var test = new MMLatLon(42.29,4.57);
	        var marker=mv.createMarker( geocode, {'label': name, 'icon':icon} );	
	      
			
		}

		
		
}
/**
 *	Function to check bounds for fixing the Multimap.
 **/
function checkBounds() {
    var bounds = mv.getMapBounds();
    var mapcentre = mv.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 = mv.getOption('smoothpan');
            mv.setOption('smoothpan', false);
            checkingBounds = true;
            mv.goToPosition(mapcentre);
            checkingBounds = false;
            mv.setOption('smoothpan', smoothPan);
        }
    }
}

function getGeocode(itemType,repositoryId){

	markerSearcher = new MMSearchRequester( handleResult );
    
    var search = new MMSearch(); 
    
    search.count=10000;
    
    search.filters = new Array();
    
	search.filters.push(new MMSearchFilter('type', 'equals', itemType));
	search.filters.push(new MMSearchFilter('repository_id', 'equals', repositoryId));
		
   	markerSearcher.search( search );
}


function handleResult(){
	if ( markerSearcher.error_code ) {
		
		var err = '';
		if ( markerSearcher.error_explanation ) {
		    err =  markerSearcher.error_explanation;
		} else {
		    err =  'Your request failed. Error code: ' + markerSearcher.error_code;
		}
		
	    var errorDiv = document.getElementById('errorMessage');
	    errorDiv.innerHTML=err;
		return;
	}

	if(!markerSearcher.record_sets){
		return;
	}
	
	// Loop through each record set
	for ( var count=0, l = markerSearcher.record_sets.length; count < l; count++ ) {

		// If an error was returned for the record set, display details and return:
		if ( markerSearcher.record_sets[count].error ) {
		    err =  '';
		    if ( markerSearcher.record_sets[count].error.error_explanation ) {
			err =  markerSearcher.record_sets[count].error.error_explanation;
		    } else {
			err =  'Your request failed. Error code: ' + markerSearcher.record_sets[count].error.error_code;
		    }
		    errorDiv = document.getElementById('errorMessage');
		    errorDiv.innerHTML=err;
		    return;  
		}
		// If we have a record then position it on the map
		if ( markerSearcher.record_sets[count].records ) {
		    var record = markerSearcher.record_sets[count].records[0];
		    foundGeocode = record.point;
		    return;
		}
	}
} 

function reverseDataPrefs(maptype) {
    var prefs = MMDataResolver.getDataPreferences( maptype);
    var newprefs = [];
    // Reverse order:
    for( var i = prefs.length - 1 ; i >= 0; --i ) {
        newprefs.push(prefs[i]);
    }
    // Re-draw map:
    MMDataResolver.setDataPreferences( maptype, newprefs ); 
    mv.redrawMap();
}     