function inner_send_part()
			{
				var part = file_parts.shift();
				params.action = "files/updateFilePart";
				params.fullpath = fullpath;
				params.offset = part.start;
				params.total_size = size;
				params.data = new Blob([part.data], {type: "application/octet-binary"});
				params.encoding = "file";

				var req = that.request( that.server_url, params, function(resp){
					if(resp.status == -1)
					{
						if(on_error)
							on_error( resp.msg, resp );
						return;
					}
					parts_sent++;
					if(on_progress)
						on_progress(fullpath, parts_sent / total_parts);
					if( file_parts.length )
						inner_send_part();
					else
					{
						//FINISH
						if(on_complete)
							on_complete(fullpath);
					}
				}, function(err){
					if(on_error)
						on_error( err );
				}, function(v, e){
					if(on_progress)
						on_progress((parts_sent + v) / total_parts, e, params );
				});
			}
Uploads a file to the server (it allows to send other info too like preview)
@method uploadFile
@param {String} fullpath
@param {ArrayBuffer||Blob||File||String} data 
@param {Object} extra could be category, metadata (object or string), preview (in base64)
@param {Function} on_complete
@param {Function} on_error
@param {Function} on_progress receives info about how much data has been sent