var $ispm = null, $suggest = null;

window.domReady(function() {
    mint.globalize();
    
    $suggest = new mint.Suggest({
	    listClass: "city-suggest",
	    input: "ispm-city-input",
	    limit: 10,
	    startFrom: 2,
	    source: $cities
    });
    
    $('ispm-city-input').focus();
    
    $ispm = new ISPM_Frontend({
	    map: 'map',
	    
	    initAddr: 'Poland',
	    initZoom: 6,
	    
	    minZoom: 6,
	    
	    initLat: 51.919438,
	    initLng: 19.145136,
	    
	    groups: $groups,
	    reminders: $php.reminders ? $php.reminders : null,
	    
	    country: 'PL',
	    
	    base_url: $php.base_url,
	    
	    widgetEl: 'MapTool'
    });
    
    // provider mode
    if($php.actions.pm) {
	if($php.reminders) {
	    $ispm.enableReminders();
	}
	
	$ispm.loadWidget('frontend/provider_mode');
    }
    // user mode
    else {
	$ispm.enablePointers();
	$ispm.enableMarkers();
	$ispm.enableRequests();
	
	if(!$php.actions.w) {
	    $ispm.loadWidget('frontend/info');
	}
    }
    if(!$php.actions.w) {
	if($php.city) {
	    $ispm.findCityStreet($php.city, $php.street);
	}
    }
    
    // point action [zoom, lat, lng]
    if($php.actions.p) {
	$php.zoom = parseInt($php.actions.p[0]);
	$php.point = new GLatLng(parseFloat($php.actions.p[1]), parseFloat($php.actions.p[2]));
	
	// pointer action [color] (point action required)
	if($php.actions.pt) {
	    switch($php.actions.pt[0]) {
		case 'b': {
		    $ispm.pointers.blue.show();
		    $ispm.pointers.blue.setLatLng($php.point);
		    break;
		}
		case 'r': {
		    $ispm.pointers.red.show();
		    $ispm.pointers.red.setLatLng($php.point);
		    break;
		}
		case 'v': {
		    $ispm.pointers.violet.show();
		    $ispm.pointers.violet.setLatLng($php.point);
		    break;
		}
		case 'x': {
		    break;
		}
	    }
	}
	
	$ispm.cancelAddrSearch = true;
	$ispm.map.setZoom($php.zoom);
	$ispm.map.setCenter($php.point);
    }
    
    // widget action [widget_name, ...]
    if($php.actions.w) {
	switch($php.actions.w[0]) {
	    // find providers widget
	    case 'p': {
		$ispm.getProvidersInPoint($php.point);
		break;
	    }
	    // remove reminder
	    case 'rmr': {
		if($php.actions.rmr && $php.actions.pt) {
		    $ispm.loadWidget('frontend/remove_reminder', {
			id: $php.actions.rmr[0],
			lat: parseFloat($php.actions.p[1]),
			lng: parseFloat($php.actions.p[2]),
			code: $php.actions.rmr[1]
		    });
		}
		break;
	    }
	}
    }
    
    // request confirm action [md5, email, code, lat, lng]
    if($php.actions.rc) {
	$($ispm.request.confirmCodeEl).value = $php.actions.rc[2];
	$($ispm.request.confirmEmailEl).innerHTML = $php.actions.rc[1];
	
	$ispm.request.email = $php.actions.rc[1];
	$ispm.request.lat = $php.actions.rc[3];
	$ispm.request.lng = $php.actions.rc[4];
	
	$ispm.request.open();
	$ispm.request.openConfirm();
    }
});