Index: /issm/trunk-jpl/src/m/plot/plot_unit.js
===================================================================
--- /issm/trunk-jpl/src/m/plot/plot_unit.js	(revision 19884)
+++ /issm/trunk-jpl/src/m/plot/plot_unit.js	(revision 19885)
@@ -15,9 +15,15 @@
 	var ymin,ymax;
 	var zmin,zmax;
-	var datamin,datamax;
+	var datamin,datamax,datadelta;
 	var scale;
 
 	//Process data and model
-	var meshresults = processmesh(md,data,options);
+	var meshresults;
+	if (data["1"] instanceof Float64Array) {
+		meshresults = processmesh(md,data["1"],options);
+	}
+	else {
+		meshresults = processmesh(md,data,options);
+	}
 	var x = meshresults[0]; 
 	var y = meshresults[1]; 
@@ -27,7 +33,15 @@
 	var isplanet = meshresults[5];
 	
-	var dataresults = processdata(md,data,options);
-	var data2 = dataresults[0]; 
-	var datatype = dataresults[1];
+	var dataresults, data2, datatype;
+	if (data["1"] instanceof Float64Array) {
+		dataresults = processdata(md,data["1"],options);
+		data2 = dataresults[0]; 
+		datatype = dataresults[1];
+	}
+	else {
+		dataresults = processdata(md,data,options);
+		data2 = dataresults[0]; 
+		datatype = dataresults[1];
+	}
 	//}}}
 
@@ -45,7 +59,5 @@
 	zmin = zlim[0];
 	zmax = zlim[1];
-	var caxis= options.getfieldvalue('caxis',[ArrayMin(data),ArrayMax(data)]);
-	datamin = caxis[0];
-	datamax = caxis[1];
+	var caxis;
 
 	//Compute scaling: 
@@ -61,7 +73,4 @@
 	node["drawOrder"] = 0;
 		
-	//some defaults:
-	texcoords.itemSize = 2;
-
 	switch(datatype){
 
@@ -115,14 +124,66 @@
 			
 				vertices.itemSize = 3;
-				var cmap=options.getfieldvalue('cmap','jet');	
-				for(var i = 0; i < x.length; i++){
-					vertices[vertices.length] = x[i];
-					vertices[vertices.length] = y[i];
-					vertices[vertices.length] = z[i];
-
-					texcoords[texcoords.length] = 0.5;
-					texcoords[texcoords.length] = (data[i] - datamin) / (datamax - datamin);
+				var cmap=options.getfieldvalue('cmap','jet');
+				//If handling movie data, compute vertices once and texcoords for each movie frame
+				if (data["1"] instanceof Float64Array) {
+					for(var i = 0; i < x.length; i++){
+						vertices[vertices.length] = x[i];
+						vertices[vertices.length] = y[i];
+						vertices[vertices.length] = z[i];
+					}	
+
+					var datasubarray;
+					for(var i = 0; i < data.length-1; i++){
+						//Prevent evaluation of datasubarray min/max if caxis exists
+						datasubarray = data[String(i+1)];
+						if (options.exist('caxis')) {
+							caxis = options.getfieldvalue('caxis');
+						}
+						else {
+							caxis = [ArrayMin(datasubarray),ArrayMax(datasubarray)];
+						}
+						datamin = caxis[0];
+						datamax = caxis[1];
+						datadelta = datamax - datamin;
+						
+						//Precalculate arrays for each datasubarray
+						texcoords[i] = [];
+						texcoords[i].itemSize = 2;
+						for(var j = 0; j < x.length; j++){
+							texcoords[i][texcoords[i].length] = 0.5;
+							texcoords[i][texcoords[i].length] = (datasubarray[j] - datamin) / datadelta;
+						}
+					}
+					
+					//Initialize movie loop
+					node["movieInterval"] = 1000 / options.getfieldvalue('moviefps',5);
+					node["movieLength"] = data.length;
+					node["movieFrame"] = 0;
+					node["movieHandler"] = function () {
+							node["movieFrame"] = (node["movieFrame"] + 1) % (node["movieLength"]-1);
+							var array = [node["arrays"][0],node["arrays"][1][node["movieFrame"]],node["arrays"][2]];
+							node["buffers"] = initBuffers(gl,array);
+							if (true) {
+								setTimeout(node["movieHandler"], node["movieInterval"]);
+							}
+						};
+					setTimeout(node["movieHandler"], node["movieInterval"]);
 				}
-				
+				else {
+					caxis = options.getfieldvalue('caxis',[ArrayMin(data),ArrayMax(data)]);
+					datamin = caxis[0];
+					datamax = caxis[1];
+					datadelta = datamax - datamin;
+					texcoords.itemSize = 2;
+					for(var i = 0; i < x.length; i++){
+						vertices[vertices.length] = x[i];
+						vertices[vertices.length] = y[i];
+						vertices[vertices.length] = z[i];
+
+						texcoords[texcoords.length] = 0.5;
+						texcoords[texcoords.length] = (data[i] - datamin) / datadelta;
+					}
+				}
+
 				//linearize the elements array: 
 				indices = indices.concat.apply(indices, elements); 
@@ -149,5 +210,11 @@
 	
 	/*Initalize buffers: */
-	node["arrays"] = [vertices, texcoords, indices];
-	node["buffers"] = initBuffers(gl,node["arrays"]);
+	if (data["1"] instanceof Float64Array) {
+		node["arrays"] = [vertices, texcoords, indices];
+		node["buffers"] = initBuffers(gl,[node["arrays"][0],node["arrays"][1][0],node["arrays"][2]]);
+	}
+	else {
+		node["arrays"] = [vertices, texcoords, indices];
+		node["buffers"] = initBuffers(gl,node["arrays"]);
+	}
 }
