gui/html: Finally implementing restore operation

+ modal jQueryUI-based dialogs for restore operation
+ fixing a small bug with NDN/REST API

Unrelated note: unless we do something with JSON compression, we can't request more
than 10 items at a time (I tried 20, and they already didn't fit).

Change-Id: I9206fa9ac6b02062915a6f6980ad9e69eaa8da3c
diff --git a/gui/html/js/jquery.timer.js b/gui/html/js/jquery.timer.js
new file mode 100755
index 0000000..0e2e5be
--- /dev/null
+++ b/gui/html/js/jquery.timer.js
@@ -0,0 +1,111 @@
+/**

+ * jquery.timer.js

+ *

+ * Copyright (c) 2011 Jason Chavannes <jason.chavannes@gmail.com>

+ *

+ * http://jchavannes.com/jquery-timer

+ *

+ * Permission is hereby granted, free of charge, to any person

+ * obtaining a copy of this software and associated documentation

+ * files (the "Software"), to deal in the Software without

+ * restriction, including without limitation the rights to use, copy,

+ * modify, merge, publish, distribute, sublicense, and/or sell copies

+ * of the Software, and to permit persons to whom the Software is

+ * furnished to do so, subject to the following conditions:

+ *

+ * The above copyright notice and this permission notice shall be

+ * included in all copies or substantial portions of the Software.

+ *

+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,

+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF

+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND

+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS

+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN

+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN

+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE

+ * SOFTWARE.

+ */

+

+;(function($) {

+	$.timer = function(func, time, autostart) {	

+	 	this.set = function(func, time, autostart) {

+	 		this.init = true;

+	 	 	if(typeof func == 'object') {

+		 	 	var paramList = ['autostart', 'time'];

+	 	 	 	for(var arg in paramList) {if(func[paramList[arg]] != undefined) {eval(paramList[arg] + " = func[paramList[arg]]");}};

+ 	 			func = func.action;

+	 	 	}

+	 	 	if(typeof func == 'function') {this.action = func;}

+		 	if(!isNaN(time)) {this.intervalTime = time;}

+		 	if(autostart && !this.isActive) {

+			 	this.isActive = true;

+			 	this.setTimer();

+		 	}

+		 	return this;

+	 	};

+	 	this.once = function(time) {

+			var timer = this;

+	 	 	if(isNaN(time)) {time = 0;}

+			window.setTimeout(function() {timer.action();}, time);

+	 		return this;

+	 	};

+		this.play = function(reset) {

+			if(!this.isActive) {

+				if(reset) {this.setTimer();}

+				else {this.setTimer(this.remaining);}

+				this.isActive = true;

+			}

+			return this;

+		};

+		this.pause = function() {

+			if(this.isActive) {

+				this.isActive = false;

+				this.remaining -= new Date() - this.last;

+				this.clearTimer();

+			}

+			return this;

+		};

+		this.stop = function() {

+			this.isActive = false;

+			this.remaining = this.intervalTime;

+			this.clearTimer();

+			return this;

+		};

+		this.toggle = function(reset) {

+			if(this.isActive) {this.pause();}

+			else if(reset) {this.play(true);}

+			else {this.play();}

+			return this;

+		};

+		this.reset = function() {

+			this.isActive = false;

+			this.play(true);

+			return this;

+		};

+		this.clearTimer = function() {

+			window.clearTimeout(this.timeoutObject);

+		};

+	 	this.setTimer = function(time) {

+			var timer = this;

+	 	 	if(typeof this.action != 'function') {return;}

+	 	 	if(isNaN(time)) {time = this.intervalTime;}

+		 	this.remaining = time;

+	 	 	this.last = new Date();

+			this.clearTimer();

+			this.timeoutObject = window.setTimeout(function() {timer.go();}, time);

+		};

+	 	this.go = function() {

+	 		if(this.isActive) {

+	 			this.action();

+	 			this.setTimer();

+	 		}

+	 	};

+	 	

+	 	if(this.init) {

+	 		return new $.timer(func, time, autostart);

+	 	} else {

+			this.set(func, time, autostart);

+	 		return this;

+	 	}

+	};

+})(jQuery);
\ No newline at end of file