Index: /issm/trunk-jpl/src/m/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/m/Makefile.am	(revision 20725)
+++ /issm/trunk-jpl/src/m/Makefile.am	(revision 20726)
@@ -135,4 +135,5 @@
 				${ISSM_DIR}/src/m/io/loadmodel.js \
 				${ISSM_DIR}/src/m/io/saveAsFile.js \
+				${ISSM_DIR}/src/m/io/download.js \
 				${ISSM_DIR}/src/m/materials/paterson.js \
 				${ISSM_DIR}/src/m/mesh/triangle.js \
Index: /issm/trunk-jpl/src/m/classes/clusters/generic.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/generic.js	(revision 20725)
+++ /issm/trunk-jpl/src/m/classes/clusters/generic.js	(revision 20726)
@@ -86,6 +86,6 @@
 				return buf;
 			}
-			var buffer2 = str2ab(window.atob(request.responseText.slice(request.position + 10)));			
-			var returnBuffer = new Uint8Array(buffer2);
+			var buffer = str2ab(window.atob(request.responseText.slice(request.position + 10)));			
+			var returnBuffer = new Uint8Array(buffer);
 			var returnBuffer_size = returnBuffer.byteLength;
 			try {
Index: /issm/trunk-jpl/src/m/io/download.js
===================================================================
--- /issm/trunk-jpl/src/m/io/download.js	(revision 20726)
+++ /issm/trunk-jpl/src/m/io/download.js	(revision 20726)
@@ -0,0 +1,31 @@
+//DOWNLOAD - save model/variable data to file
+//
+//   Usage:
+//      download=download('id','slr-download');
+//      download=download('id','slr-download','data',md.geometry.thickness,'data',md.results.Stressbalance.Vel);
+
+function download() {
+	//Convert arguments to options
+	var args = Array.prototype.slice.call(arguments);
+	//var options = new pairoptions(args.slice());
+	
+	//Recover option values:
+	// var id = options.getfieldvalue('id','');
+	// document.getElementById(id).addEventListener('click', function() {
+	// });
+	
+	var data = {'elements':md.mesh.elements,'x':md.mesh.x,'y':md.mesh.y,'z':md.mesh.z};
+	for (var i=2; i < args.length; i+=2) {
+		try { 
+			data[args[i]] = args[i+1];
+		}
+		catch (e) { 
+			console.log(e);
+		}
+	}
+	string = JSONfn.stringify(data);
+	
+	var url='data:text/json:charset=utf8,' + encodeURIComponent(string);
+	window.open(url, '_blank');
+	window.focus();
+}
Index: /issm/trunk-jpl/src/m/plot/gauge.js
===================================================================
--- /issm/trunk-jpl/src/m/plot/gauge.js	(revision 20725)
+++ /issm/trunk-jpl/src/m/plot/gauge.js	(revision 20726)
@@ -1,15 +1,20 @@
-function gauge(){
+//GAGUE - create a gague and label that display a value
+//
+//   Usage:
+//      gauge=gauge(); TODO: Expand
+
+function gauge() {
 	//Convert arguments to options
 	var args = Array.prototype.slice.call(arguments);
 	var options = new pairoptions(args);
 
-	gaugecanvas=options.getfieldvalue('gaugecanvas','gauge');
-	gaugetext=options.getfieldvalue('gaugetext','gauge-text');
-	gaugediv=options.getfieldvalue('gaugediv','slr-controldiv');
-	gaugevalue=options.getfieldvalue('value',0);
-	min=options.getfieldvalue('min',0);
-	max=options.getfieldvalue('max',22);
-	colors=options.getfieldvalue('colors',[[0.0, "#000000" ], [0.50, "#880000"], [1.0, "#ff0000"]]);
-	label=options.getfieldvalue('label','');
+	gaugecanvas = options.getfieldvalue('gaugecanvas','gauge');
+	gaugetext = options.getfieldvalue('gaugetext','gauge-text');
+	gaugediv = options.getfieldvalue('gaugediv','slr-controldiv');
+	gaugevalue = options.getfieldvalue('value',0);
+	min = options.getfieldvalue('min',0);
+	max = options.getfieldvalue('max',22);
+	colors = options.getfieldvalue('colors',[[0.0, "#000000" ], [0.50, "#880000"], [1.0, "#ff0000"]]);
+	label = options.getfieldvalue('label','');
 	
 	$('<div class="bordered margin-8 padding-8"><canvas id="'+gaugecanvas+'" width="100px" height="50%" class="gauge-canvas"></canvas><div id="'+gaugetext+'" class="gauge-text"></div></div>').appendTo('#'+gaugediv);
Index: /issm/trunk-jpl/src/m/plot/slider.js
===================================================================
--- /issm/trunk-jpl/src/m/plot/slider.js	(revision 20725)
+++ /issm/trunk-jpl/src/m/plot/slider.js	(revision 20726)
@@ -1,7 +1,11 @@
-function slider(){
-	
+//SLIDER - create a slider bar to set a value
+//
+//   Usage:
+//      slider=slider(); TODO: Expand
+
+function slider() {
 	//Convert arguments to options
 	var args = Array.prototype.slice.call(arguments);
-	var  options = new pairoptions(args.slice());
+	var options = new pairoptions(args.slice());
 
 	//Recover option values:
@@ -31,9 +35,11 @@
 		max:max,
 		step:step,
-		slide:function(event,ui){
-			moveSlide(event,ui,info,middlemessage,precision);
+		slide:function(event,ui,info,middlemessage,precision){
+			info.text(middlemessage[0]+ui.value.toFixed(precision)+middlemessage[1]);
 		},
-		stop:function(event,ui){
-			stopSlide(event,ui,info,callback,middlemessage,endmessage,precision);
+		stop:function(event,ui,info,functionvalue,middlemessage,endmessage,precision){
+			info.text(middlemessage[0]+ui.value.toFixed(precision)+middlemessage[1]);
+			functionvalue(ui.value);
+			info.text(endmessage[0]+ui.value.toFixed(precision)+endmessage[1]);
 		}
 	});
@@ -53,20 +59,13 @@
 }
 
-function moveSlide(event,ui,info,middlemessage,precision){
-	var val=ui.value;
-	info.text(middlemessage[0]+val.toFixed(precision)+middlemessage[1]);
-}
+//PROGRESS - create a progress bar to display a value
+//
+//   Usage:
+//      progress=progress(); TODO: Expand
 
-function stopSlide(event,ui,info,functionvalue,middlemessage,endmessage,precision){
-	var val=ui.value;
-	info.text(middlemessage[0]+val.toFixed(precision)+middlemessage[1]);
-	functionvalue(val);
-	info.text(endmessage[0]+val.toFixed(precision)+endmessage[1]);
-}
-
-function progress(){
+function progress() {
 	//Convert arguments to options
 	var args = Array.prototype.slice.call(arguments);
-	var  options = new pairoptions(args.slice());
+	var options = new pairoptions(args.slice());
 	
 	var value = options.getfieldvalue('value',0);
@@ -113,12 +112,14 @@
 		max:1,
 		step:1,
-		start:function(event,ui){
-			startProgress(event,ui,canvas);
+		start:function(event,ui,canvas){
+			canvas.movieFrame = ui.value;
+			canvas.movieIncrement = false;
 		},
-		slide:function(event,ui){
-			moveProgress(event,ui,canvas);
+		slide:function(event,ui,canvas){
+			canvas.movieFrame = ui.value;
 		},
-		stop:function(event,ui){
-			stopProgress(event,ui,canvas);
+		stop:function(event,ui,canvas){
+			canvas.movieFrame = ui.value;
+			canvas.movieIncrement = true;
 		}
 	});
@@ -139,16 +140,2 @@
 	canvas.progressBar = $('.'+name+'-progressbar');
 }
-
-function startProgress(event,ui,canvas){
-	canvas.movieFrame = ui.value;
-	canvas.movieIncrement = false;
-}
-
-function moveProgress(event,ui,canvas){
-	canvas.movieFrame = ui.value;
-}
-
-function stopProgress(event,ui,canvas){
-	canvas.movieFrame = ui.value;
-	canvas.movieIncrement = true;
-}
Index: /issm/trunk-jpl/src/m/plot/tooltips.js
===================================================================
--- /issm/trunk-jpl/src/m/plot/tooltips.js	(revision 20725)
+++ /issm/trunk-jpl/src/m/plot/tooltips.js	(revision 20726)
@@ -1,7 +1,11 @@
-function tooltip(){
-	
+//TOOLTIP - create a hidden toolip that shows html formatted info on hover
+//
+//   Usage:
+//      tooltip=tooltip(); TODO: Expand
+
+function tooltip() {
 	//Convert arguments to options
 	var args = Array.prototype.slice.call(arguments);
-	var  options = new pairoptions(args.slice());
+	var options = new pairoptions(args.slice());
 
 	//Recover option values:
@@ -24,5 +28,6 @@
 		tooltip.fadeIn();
 		}, function() {
-		$("> div", this).fadeOut(function() {$(this).css("marginLeft", "");});
+			$("> div", this).fadeOut(function() {$(this).css("marginLeft", "");
+		});
 	});
 }
