+/** Send off a hash probe request to the backend.
+ * @param {string} fen
+ */
+var explore_hash = function(fen) {
+ // If we already have a backend response going, abort it.
+ if (current_hash_xhr) {
+ current_hash_xhr.abort();
+ }
+ if (current_hash_display_timer) {
+ clearTimeout(current_hash_display_timer);
+ current_hash_display_timer = null;
+ }
+ current_hash_xhr = $.ajax({
+ url: backend_hash_url + "?fen=" + fen
+ }).done(function(data, textstatus, xhr) {
+ show_explore_hash_results(data, fen);
+ });
+}
+
+/** Process the JSON response from a hash probe request.
+ * @param {!Object} data
+ * @param {string} fen
+ */
+var show_explore_hash_results = function(data, fen) {
+ if (board_is_animating) {
+ // Updating while the animation is still going causes
+ // the animation to jerk. This is pretty crude, but it will do.
+ current_hash_display_timer = setTimeout(function() { show_explore_hash_results(data, fen); }, 100);
+ return;
+ }
+ current_hash_display_timer = null;
+ hash_refutation_lines = data['lines'];
+ update_board();
+}
+
+/**
+ * @param {string} new_backend_url
+ */
+var switch_backend = function(new_backend_url) {
+ // Stop looking at historic data.
+ current_display_line = null;
+ current_display_move = null;
+ displayed_analysis_data = null;
+ if (current_historic_xhr) {
+ current_historic_xhr.abort();
+ }
+
+ // If we already have a backend response going, abort it.
+ if (current_analysis_xhr) {
+ current_analysis_xhr.abort();
+ }
+ if (current_hash_xhr) {
+ current_hash_xhr.abort();
+ }
+
+ // Otherwise, we should have a timer going to start a new one.
+ // Kill that, too.
+ if (current_analysis_request_timer) {
+ clearTimeout(current_analysis_request_timer);
+ current_analysis_request_timer = null;
+ }
+ if (current_hash_display_timer) {
+ clearTimeout(current_hash_display_timer);
+ current_hash_display_timer = null;
+ }
+
+ // Request an immediate fetch with the new backend.
+ backend_url = new_backend_url;
+ current_analysis_data = null;
+ ims = 0;
+ request_update();
+}
+window['switch_backend'] = switch_backend;
+