// <!-- from https://github.com/Gazler/Underscore-Template-Loader/blob/master/index.html -->
// TODO Figure out how to initialize w/ static views from server (don't call .load but instead inject in django as strings)
// so this only loads the lazily loaded ones.
(function() {
	if (typeof window.templateLoader == 'function') return;
	
    var templateLoader = {
      templateVersion: "0.0.16",
      templates: {},
      loadRemoteTemplate: function(templateName, filename, callback) {
        if (!this.templates[templateName]) {
          var self = this;
          jQuery.ajax({url : filename, 
        	  success : function(data) {
	            self.addTemplate(templateName, data);
	            self.saveLocalTemplates();
	            callback(data);
	          },
	          error : function(xhdr, textStatus, errorThrown) { 
	        	  console.log(textStatus); },
	          dataType : "html"
	          })
        }
        else {
          callback(this.templates[templateName]);
        }
      },
      
      addTemplate: function(templateName, data) {
      	// is there a reason this doesn't go ahead and compile the template? _.template(data)
      	// I suppose localstorage use would still req raw string rather than compiled version, but that sd work
      	// if it maintains a separate cache of uncompiled ones
        this.templates[templateName] = data;
      },
      
      localStorageAvailable: function() {
       try {
    	   // window.cachetemplates is global set in base.js to turn caching on/off
          return window.cachetemplates && 'localStorage' in window && window['localStorage'] !== null;
        } catch (e) {
          return false;
        }
      },
      
      saveLocalTemplates: function() {
        if (this.localStorageAvailable) {
          localStorage.setItem("templates", JSON.stringify(this.templates));
          localStorage.setItem("templateVersion", this.templateVersion);
        }
      },
      
      loadLocalTemplates: function() {
        if (this.localStorageAvailable) {
          var templateVersion = localStorage.getItem("templateVersion");
          if (templateVersion && templateVersion == this.templateVersion) {
            var templates = localStorage.getItem("templates");
            if (templates) {
              templates = JSON.parse(templates);
              for (var x in templates) {
                if (!this.templates[x]) {
                  this.addTemplate(x, templates[x]);
                }
              }
            }
          }
          else {
            localStorage.removeItem("templates");
            localStorage.removeItem("templateVersion");
          }
        }
      }

      
      
    };
    templateLoader.loadLocalTemplates();
    window.templateLoader = templateLoader;
  })();
