'use strict';

var ayBaseUrl;
var moduleInformationPromise, moduleListPromise;
var moduleCodes;

module.exports = {
  getAllModules: function () {
    return moduleCodes;
  },
  generateModuleCodes: function () {
    moduleListPromise = moduleListPromise || $.getJSON(ayBaseUrl + 'moduleList.json');
    moduleListPromise.then(function () {
      moduleCodes = moduleListPromise.responseJSON;
    });
  },
  getLastModified: function (callback) {
    return $.ajax(ayBaseUrl + 'modules.json', {
      type: 'HEAD'
    }).then(function (data, textStatus, jqXHR) {
      var lastModified = jqXHR.getResponseHeader('Last-Modified');
      if (callback) {
        callback(lastModified);
      }
      return lastModified;
    });
  },
  getMod: function (code, callback) {
    return $.getJSON(ayBaseUrl + 'modules/' + code + '.json', callback);
  },
  getModIndex: function (code, callback) {
    return $.getJSON(ayBaseUrl + 'modules/' + code + '/index.json', callback);
  },
  getMods: function (callback) {
    moduleInformationPromise = moduleInformationPromise || $.getJSON(ayBaseUrl + 'moduleInformation.json');
    return moduleInformationPromise.then(callback);
  },
  getTimetable: function (semester, code, callback) {
    return $.getJSON(ayBaseUrl + semester + '/modules/' + code + '/timetable.json', callback);
  },
  getCodesAndTitles: function (callback) {
    moduleListPromise = moduleListPromise || $.getJSON(ayBaseUrl + 'moduleList.json');
    return moduleListPromise.then(callback);
  },
  setConfig: function (config) {
    ayBaseUrl = config.baseUrl + config.academicYear.replace('/', '-') + '/';
  }
};

@@ -8,16 +8,52 @@
 rict';%0A%0A
+var Promise = require('bluebird');%0A%0A
 var ayBa
@@ -279,32 +279,48 @@
 eListPromise %7C%7C 
+Promise.resolve(
 $.getJSON(ayBase
@@ -339,24 +339,25 @@
 eList.json')
+)
 ;%0A    module
@@ -375,32 +375,36 @@
 .then(function (
+data
 ) %7B%0A      module
@@ -415,38 +415,12 @@
 s = 
-moduleListPromise.responseJSON
+data
 ;%0A  
@@ -482,16 +482,32 @@
  return 
+Promise.resolve(
 $.ajax(a
@@ -757,32 +757,33 @@
 Modified;%0A    %7D)
+)
 ;%0A  %7D,%0A  getMod:
@@ -814,32 +814,48 @@
 k) %7B%0A    return 
+Promise.resolve(
 $.getJSON(ayBase
@@ -890,32 +890,33 @@
 json', callback)
+)
 ;%0A  %7D,%0A  getModI
@@ -952,32 +952,48 @@
 k) %7B%0A    return 
+Promise.resolve(
 $.getJSON(ayBase
@@ -1034,32 +1034,33 @@
 json', callback)
+)
 ;%0A  %7D,%0A  getMods
@@ -1134,32 +1134,48 @@
 ationPromise %7C%7C 
+Promise.resolve(
 $.getJSON(ayBase
@@ -1201,24 +1201,25 @@
 ation.json')
+)
 ;%0A    return
@@ -1330,16 +1330,32 @@
  return 
+Promise.resolve(
 $.getJSO
@@ -1420,32 +1420,33 @@
 json', callback)
+)
 ;%0A  %7D,%0A  getCode
@@ -1524,16 +1524,32 @@
 mise %7C%7C 
+Promise.resolve(
 $.getJSO
@@ -1580,16 +1580,17 @@
 t.json')
+)
 ;%0A    re

Convert jQuery thenables to bluebird promises in nusmods.js