function doPrint() {
	
	// +++ print form pre-processing  +++
	
	_print_APP = dojo.byId("print_APP").value;
	_print_TIT = escape(dojo.byId("print_TIT").value);
	_print_SUB = escape(dojo.byId("print_SUB").value);
	_print_SVC = dojo.byId("print_SVC").value;
	_print_SIZ = dojo.byId("print_SIZ").value;
	_print_ORI = dojo.byId("print_ORI").value;
	_print_PRZ = escape(dojo.byId("print_PRZ").value);
	_print_PRINTSVC = dojo.byId("print_SVC").value;

	// set base map
	_print_BASE = currentBaseMap;
	
	// current map extent
	cp = map.extent.getCenter();
	lvl = map.getLevel();
	_print_CTX = cp.x.toFixed(0);
	_print_CTY = cp.y.toFixed(0);
	
	// print map scale
	var pel = document.getElementById("print_sel_PSC");
	if (pel != null) {
		if (pel.value != "init") { _print_SCL = pel.value; }
		else { _print_SCL = lodsArr[lvl].scale; }
	}
	else {
		_print_SCL = lodsArr[lvl].scale; // LOD to scale
	}
	
	// set svc transparencies
	_print_TRANS = "";
  for (var j=0, jl=map.layerIds.length; j<jl; j++) {
    var currentLayer = map.getLayer(map.layerIds[j]);
    //console.log("id: " + currentLayer.id);
    inverseOpacity = 1 - currentLayer.opacity;
    _print_TRANS += currentLayer.id + ":" + (inverseOpacity.toFixed(1)) + "|";
  }
		
	// set toc string (by svc, only inc visible lyrs)
	toc = "";
	for (x in bizSvc) {
		tocAdd = "";
		currSvc = bizSvc[x];
		console.log("print: " + currSvc);
		tocAdd += currSvc + "/";
		lyrCnt = 0;
		for (x in layerStore[currSvc]) {
			if(layerStore[currSvc][x].vis == 1) { 
				if(lyrCnt != 0) { tocAdd += ","; }
				lyrCnt = 1; 
				tocAdd += layerStore[currSvc][x].name_ags; 
			}
		}
		tocAdd += "|";
		if(lyrCnt == 0) { tocAdd = ""; }
		toc += tocAdd;
	}
	_print_TOC = toc;
		
	// create JSON graphic (optional)
	graphArray = map.graphics.graphics;
	var jsonGeometryArray = [];
  dojo.forEach (graphArray, function(graph) {                     
		var jsonGraphGeometry = graph.geometry.toJson();        
    jsonGeometryArray.push(jsonGraphGeometry);
  });

  if (jsonGeometryArray != []) {
  	var h = dojo.toJson(jsonGeometryArray);
  	_print_JSON = h;
	}

  // distinguish test/prod environments
  srvrHost = document.location.host;
  if (srvrHost == "www.geo.lu.ch") { _print_SRVR = "PROD"; printURL = "http://www.geo.lu.ch/src/inc/printMap.php"; }
  else { _print_SRVR = "TEST"; printURL = "http://www.geotest.lu.ch/src/inc/printMap.php"; }

	
  dojo.byId("pError").style.display = "none";
  dojo.byId("pRun").style.display="block";
  var start = new Date();
  
  // submit form thru dojo xhrPost, handleAs : "javascript"?
  dojo.xhrPost({
  	url : printURL,
  	handleAs : "javascript",
  	timeout: 60000,
  	content: { APP:_print_APP, TIT:_print_TIT, SUB:_print_SUB, SCL:_print_SCL, SIZ:_print_SIZ, ORI:_print_ORI, CTX:_print_CTX, CTY:_print_CTY, BASE:_print_BASE, TRANS:_print_TRANS, TOC:_print_TOC, JSON:_print_JSON, PRZ:_print_PRZ, SRVR:_print_SRVR, PRINTSVC:_print_PRINTSVC  }, 
  	
  	load : function(response, ioArgs) {
  		var stop = new Date();
  		timeUsed = dojo.date.difference(start, stop, 'second')
  		if (internalDebug) { 
  			console.log("INFO: print successfully generated in " + timeUsed + " secs.");
  		}
  		dojo.byId("pRun").style.display = "none";
  		window.open(pdfURL, 'printView');
  		return response;
  	},
  	
  	error : function(response, ioArgs) {
  		if (internalDebug) { 
  			console.log("INFO: xhrPost timeout (1 minute) reached." + response);
  		}
  		dojo.byId("pRun").style.display = "none";
  		dojo.byId("pError").style.display = "block";
  		return response;
  	}
	});
  
  if (internalDebug) { 
  	console.log("INFO: Fields POSTed to printMap.php");
  	console.log("		print_APP: ", _print_APP );
  	console.log("		print_TIT: ", _print_TIT );
  	console.log("		print_SUB: ", _print_SUB );
  	console.log("		print_CTX: ", _print_CTX );
  	console.log("		print_CTY: ", _print_CTY );
  	console.log("		print_SCL: ", _print_SCL );
  	console.log("		print_BASE: ", _print_BASE );
  	console.log("		print_TOC: ", _print_TOC );
  	console.log("		print_TRANS: ", _print_TRANS );
  	console.log("		print_JSON: ", _print_JSON );
  	console.log("		print_SRVR: ", _print_SRVR );  
  	console.log("		print_SVC: ", _print_SVC );  
  }
  
} 
