+var zoom = "sm/";
+var input_index = -1;
+
+function endsWith(str, suffix) {
+ return str.indexOf(suffix, str.length - suffix.length) !== -1;
+}
+
+function stripFromEnd(str, suffix) {
+ if (endsWith(str, suffix)) {
+ return str.substr(0, str.length - suffix.length);
+ }
+ return str;
+}
+
+function setpic() {
+ var display_filename;
+ if (endsWith(files[input_index], ".NEF")) {
+ if ("exposure" in picinfo[files[input_index]]) {
+ exposure = picinfo[files[input_index]].exposure;
+ } else {
+ picinfo[files[input_index]].exposure = exposure;
+ save_picinfo();
+ }
+ display_filename = zoom + exposure + "/" + stripFromEnd(files[input_index], ".NEF") + ".jpeg";
+ } else {
+ display_filename = zoom + files[input_index];
+ }
+ var $pic = $("#pic");
+ $pic.on("load", function() {
+ $pic.removeClass("rot90 rot180 rot270");
+ if ("rotate" in picinfo[files[input_index]]) {
+ $pic.addClass("rot" + picinfo[files[input_index]].rotate);
+ }
+ });
+ $pic.attr("src", display_filename);
+}
+
+function say(message) {
+ $("#message").text(message).removeClass("fade");
+ setTimeout(function() { $("#message").addClass("fade"); }, 1);
+}
+function announce() {
+ say(input_index + " " + (picinfo[files[input_index]].name || ""));
+}
+
+function toggle_zoom() {
+ if (zoom) {
+ zoom = "";
+ } else {
+ zoom = "sm/";
+ }
+ setpic();
+}
+
+function move_by_filter(direction, filter) {
+ // Keep moving in direction until filter is satisfied
+ var new_index = input_index;
+ while (true) {
+ var next = new_index + direction;
+ if (next < 0) {
+ say("At beginning");
+ return;
+ }
+ if (next >= files.length) {
+ say("At end");
+ return;
+ }
+ new_index = next;
+ if (filter(new_index)) {
+ break;
+ }
+ }
+ input_index = new_index;
+ announce();
+ setpic();
+}
+function move(direction) {
+ move_by_filter(direction, function() { return true; });
+}
+function move_to_nondeleted(direction) {
+ move_by_filter(direction, function(i) {
+ return !("deleted" in picinfo[files[i]]); });
+}
+function move_to_unnamed(direction) {
+ move_by_filter(direction, function(i) {
+ return !("deleted" in picinfo[files[i]]) &&
+ !("name" in picinfo[files[i]]); });
+}
+
+function mark_deleted() {
+ picinfo[files[input_index]].deleted = 1;
+ save_picinfo();
+ say("Deleted");
+}
+
+function mark_not_deleted() {
+ delete picinfo[files[input_index]].deleted;
+ save_picinfo();
+ say("Undeleted");
+}