docs: function populateContentModel(app, req, res, content, contentData, contentFiles, next) {
  	/*
  	console.log('###### populateContentModel:');
  	console.log('content:');
  	console.log(content);
  	console.log('contentData:');
  	console.log(contentData);
  	*/
  	
  	//trovo il modelId (dipende se mi passano un content con il field jslModel già popolato o meno)
  	if ( content.jslModel._id ) {
  		var modelId = content.jslModel._id;
  	} else {
  		var modelId = content.jslModel;
  	}
  	
  	//leggo dal db il mio model, per avere lo schema
  	app.jsl.jslModel.findOne( { '_id': modelId } )
  	.run( function(err, jslModel) {
  		if (!err)
  		{
  			if ( jslModel ) {
  				//trovato lo schema
  				var schema = JSON.parse(jslModel.jslSchema);
  				/*
  				console.log('trovato lo schema!');
  				console.log(schema);
  				*/
  				//ciclo su ogni field, e popolo solo quelli nel content
  				for(var field in schema) {
  					//non devo mai popolare alcuni field interni di jslardo, perchè non vengono gestiti dal form
  					if ( field == 'author' || field == 'created' ) {
  						//skippo
  					} else {
  						/*
  						console.log('### considero il field: '+field);
  						console.log('content[field]: '+content[field]);
  						console.log('contentData[field]: '+contentData[field]);
  						*/
  						//prima distinguo a seconda che sia un field array o a valore singolo
  						if ( is_array( schema[field] ) ) {
  							//è un array, per ora gestisco solo valori separati da virgola, perchè mi aspetto solo degli ObjectIds
  							//console.log(field+' è un array!');
  							if ( contentData[field] ) {
  								content[field] = contentData[field].split(',');
  							} else {
  								//content[field] = null;
  								delete content[field]; //tanto non serve a un cazzo perchè mongodb non resetta il field
  							}
  							/*
  							//per ogni ObjectId devo istanziare la relativa istanza, e aggiungerla al mio content
  							var ObjectIds = contentData[field].split(',');
  							for ( var i = 0; i < ObjectIds.length; i++ ) {
  								content[field].push( ObjectIds[i] );
  							}
  							*/
  						} else {
  							//non è un array, fisso il suo valore
  							//console.log(field+' è un single!');
  							//distinguo a seconda del datatype
  							switch ( schema[field].type ) {
  								case 'ObjectId':
  									//nel caso degli ObjectId non assegno un field se non ha l'ObjectId definito
  									if ( contentData[field] ) {
  										content[field] = contentData[field];
  									} else {
  										//content[field] = null;
  										delete content[field]; //tanto non serve a un cazzo perchè mongodb non resetta il field
  									}
  									break;
  								case 'Boolean':
  									//porcheria per gestire i valori boolean
  									//il form tratta tutto come string mentre lo schema mongoose è tipizzato
  									//quandi un 'false' che arriva da un form diventerebbe un true nel db in quanto stringa non vuota castata a boolean
  									if ( contentData[field] == 'sure_this_is_true' ) {
  										content[field] = true;
  									} else if ( contentData[field] == 'sure_this_is_false' ) {
  										content[field] = false;
  									} else {
  										content[field] = contentData[field];
  									}
  									break;
  								case 'Image':
  									//console.log('tinculo!');
  									/*
  									(se nessun file è stato uploadto, è tutto uguale, tranne size:0, name:'', lastModifiedDate:null )
  									contentFiles:
  									{ foto: 
  										{ 	size: 760,
  											path: 'public/uploads/b89e47bbef608847129906e6b875c7a5',
  											name: 'package.json',
  											type: 'application/octet-stream',
  											lastModifiedDate: Mon, 13 Feb 2012 02:42:55 GMT,
  											_writeStream: 
  											{ 	path: 'public/uploads/b89e47bbef608847129906e6b875c7a5',
  												fd: 14,
  												writable: false,
  												flags: 'w',
  												encoding: 'binary',
  												mode: 438,
  												busy: false,
  												_queue: [],
  												drainable: true
  											},
  											length: [Getter],
  											filename: [Getter],
  											mime: [Getter]
  										}
  									}
  									*/
  									/* invece content, secondo lo schema del datatype Image, dovrebbe essere una roba tipo
  									content:
  									{ foto:
  										[ {
  											'file_name': 	{ type: String },
  											'file_path': 	{ type: String },
  											'file_type': 	{ type: String },
  											'file_size': 	{ type: Number },
  											'file_date':{ type: Date },
  											'width': 		{ type: Number },
  											'height': 		{ type: Number }
  										} ]
  									}
  									*/
  									
  									//controllo se effettivamente è stato uploadato un file
  									if ( contentFiles[field].name != '' &&  contentFiles[field].size > 0 ) {
  										//c'è il file
  										//prima devo spostare il file nella sua posizione definitiva
  										//console.log('sposto file');
  										var from = process.cwd()+'/'+contentFiles[field].path;
  										//var to = process.cwd()+'/public/'+getContentPath(modelId,content._id)+contentFiles[field].name;
  										var to = process.cwd()+'/public/'+getContentPath(modelId,content._id);
  										var fs = require('fs');
  										//console.log(from);
  										//console.log(to);
  										var statsFrom = fs.lstatSync(from);
  										//console.log(from + ": is a file? " + statsFrom.isFile());										
  										//console.log(from + ": is a directory? " + statsFrom.isDirectory());										
  										//se la dir non esiste, la creo
  										try
  										{
  											var statsTo = fs.lstatSync(to);
  											//console.log(to + ": is a file? " + statsTo.isFile());										
  											//console.log(to + ": is a directory? " + statsTo.isDirectory());										
  											//console.log('la dir to esiste già');
  										}
  										catch (e)
  										{
  											//la dir non esiste
  											//console.log('la dir to non esiste');
  											//la creo
  											mkPath(to);
  										}
  										
  										//sposto il file
  										fs.renameSync(from, to+contentFiles[field].name);
  										
  										//poi posso popolare il content[field]
  										var contentField = {};
  										contentField.file_name = contentFiles[field].name;
  										contentField.file_path = getContentPath(modelId,content._id);
  										contentField.file_type = contentFiles[field].type;
  										contentField.file_size = contentFiles[field].size;
  										contentField.file_date = contentFiles[field].lastModifiedDate;
  										//assegno come array, perchè così vuole lo schema
  										content[field] = [ contentField ];
  									} else {
  										//nessun file uplodato
  										//il mio contentField non viene popolato
  									}
  									break;
  								default:
  									content[field] = contentData[field];
  									break;
  							}
  						}
  						/*
  						console.log('dopo assegnamento content['+field+']: ');
  						console.log(content[field]);
  						*/
  					}
  				}
  				/*
  				console.log('###### populateContentModel alla fine:');
  				console.log('content:');
  				console.log(content);
  				console.log('contentData:');
  				console.log(contentData);
  				*/
  				//finito di popolare
  				next();
  				
  				
  				
  			} else {
  				console.log("populateContentModel(): element not found");
  			}	
  		} else {
  			console.log("populateContentModel(): failed query to retrieve element");
  		}	
  			
  	});	
  	//var jsonSchema = JSON.parse(contentData.jsonModel.jslSchema);
  	//console.log('jsonSchema:');
  	//console.log(jsonSchema);
  }