/**
 * Restores builder state from URL
 * @param map GMap2 instance
 */
function import_from(uri){
	var idx=uri.indexOf('?');
	if(idx<0){
		return;
	}
	uri=uri.substring(idx+1);
	var params = uri.split('&');

	$('#mapAutoFlagsRADIO').attr('checked', true);
	$('#mapHideFlagsRADIO').attr('checked', false);
	$('#mapShowFlagsRADIO').attr('checked', false);
	for(var i=0;i<params.length;i++){
		var pairs = params[i].split('=');
		switch(pairs[0]){
			case 'center':
				break;
			case 'zoom':
				map.setZoom(parseInt(pairs[1]));
				break;
			case 'markers':
				var pp=pairs[1].split('|');
				var points=[];
				var mParams={icon: 'lm_marker', color:'#1bcf34', label:''};
				for(var j=0;j<pp.length;j++){
					var p=pp[j].split(':');
					switch(p[0]){
						case 'icon' : mParams.icon=p[1];break;
						case 'color': mParams.color=p[1].replace(/0x/, '').substring(0, 7); break;
						case 'label': mParams.label=p[1]; break;
						default:
							var xy=p[0].split(',');
							if(xy.length==2){
								points.push(map.fromIngame(parseInt(xy[0]), parseInt(xy[1])));
							}
					}
				}
				if(points.length>0){
					for(var j=0;j<points.length;j++){
						var icon = RyzomIcons.find(mParams.icon);
						if(icon===false) icon = RyzomIcons.MARKER;
						createMarkerAt(points[j], icon, mParams.label);
						marker_param(markers.length-1, 'color', mParams.color, true);
					}
				}
				break;
			case 'path':
				var pp = pairs[1].split('|');
				var poly=false;
				var poly_idx=-1;
				var polyPoints=[];
				var polyParams=[];
				for(var j=0;j<pp.length;j++){
					var p=pp[j].split(':');
					if(p.length==2){
						polyParams.push(p);
					}else{
						var xy=p[0].split(',');
						if(xy.length==2){
							polyPoints.push(map.fromIngame(parseInt(xy[0]), parseInt(xy[1])));
						}
					}
				}
				if(polyPoints.length>0){
					// insertVertex for some reason adds point's in revers order every time
					for(var j=polyPoints.length;j>=0;j--){
						if(poly===false){
							// this creates poly
							createPolyAt(polyPoints[j]);
							poly_idx=polys.length-1;
							poly=polys[poly_idx];
						}else{
							poly.insertVertex(0, polyPoints[j]);
						}
					}
				}
				if(poly!==false){
					for(var j=0;j<polyParams.length;j++){
						var p=polyParams[j];
						// color, weight for now
						switch(p[0]){
							case 'color':
								p[1]=p[1].replace(/0x/, '#');
								//var alpha = parseInt(p[1].substring(7, 9), 16);
								//poly_param(poly_idx, 'opacity', alpha);
								p[1]=p[1].substring(0, 7);
								break;
							case 'weight':
								p[1]=parseInt(p[1]);
								break;
						}
						poly_param(poly_idx, p[0], p[1]);
					}
					// FIXME: this may not work
					GEvent.trigger(poly, 'endline');
					GEvent.trigger(poly, 'lineupdated');
					poly.redraw(true);
				}
				break;
			case 'maptype':
				// FIXME:
				if(pairs[1]=='satellite'){
					map.setMapType(map.igMapType());
				}else{
					map.setMapType(map.worldMapType());
				}
				break;
			case 'size':
				var wh=pairs[1].split('x');
				$('#mapWidthTEXT').val(wh[0]);
				$('#mapHeghtTEXT').val(wh[1]);
				break;
			case 'language':
				$('#mapLangSELECT').val(pairs[1]);
				break;
			case 'flags':
				$('#mapAutoFlagsRADIO').attr('checked', pairs[1]=='auto');
				$('#mapHideFlagsRADIO').attr('checked', pairs[1]=='0');
				$('#mapShowFlagsRADIO').attr('checked', pairs[1]=='1');
				break;
			default:
				alert('ERROR: unknown url component ['+pairs[0]+'='+pairs[1]+']');
		}
	}
}
