/*! NUS IVLE API JavaScript SDK - v0.3.0 - 2013-08-15 * https://github.com/zhuochun/nus-ivle-api * Copyright (c) 2013 Wang Zhuochun; Licensed MIT */!function(a,b,c){"use strict";function d(a,b){this.KEY=a,this.TOKEN=b}function e(a,b){this._user=a,this._data=b,this._lastUpdate=new Date}var f,g="https://ivle.nus.edu.sg/api/",h=g+"lapi.svc/",i=function(b){return a.ajax({type:"GET",dataType:"jsonp",contentType:"application/x-javascript",url:b,xhrFields:{widthCredentials:!1}})},j=function(b,d,e,f){return h+e+"?APIKey="+b+(f===c?"&Token="+d:"&AuthToken="+d+"&"+decodeURIComponent(a.param(f)))+"&output=json"},k=function(a){return!a||"Valid login!"!==a.Comments&&""!==a.Comments?null:a.Results},l=function(a,b){return b?a.success(function(a){b(k(a))}):a};f="undefined"!=typeof exports?exports:b.ivle={},f.VERSION="0.3.0",f.getToken=function(a){var c=/\?token=(\w+)/gi.exec(a||b.location.href);return c?c[1]:null},f.login=function(a,b){return g+"login/?apikey="+a+"&url="+encodeURIComponent(b)},f.filterResult=k,f.User=function(a,b){return new d(a,b)},d.prototype={constructor:d,init:function(){var b=this;return a.when(b.validate(),b.get("Profile_View",{})).done(function(a,c){b.data=k(c[0])[0]})},get:function(a,b){return i(j(this.KEY,this.TOKEN,a,b))},validate:function(a){var b=this;return this.get("Validate").success(function(c){c.Success&&c.Token!==b.TOKEN&&(b.TOKEN=c.Token),a&&a(c.Success)})},profile:function(a){return a?this.data[a]:this.data},Module:function(a){return new e(this,a)},modules:function(b,c){a.isFunction(b)&&(c=b,b={});var d=this,f=a.extend({Duration:0,IncludeAllInfo:!0},b),g=this.get("Modules",f),h=function(a){var b,f=[],g=k(a);if(g){for(b in g)f.push(new e(d,g[b]));c(f)}else c(g)};return c?g.success(h):g},modulesTaken:function(a){var b=this,c=this.get("Modules_Taken",{StudentId:b.profile("UserID")});return l(c,a)},unreadAnnouncements:function(a){var b=this.get("Announcements_Unread",{TitleOnly:!1});return l(b,a)},search:function(b,c,d){var e=a.extend({IncludeAllInfo:!0},c),f=this.get("Modules_Search",e);if("Modules"===b)return l(f,d);throw new Error("Search invalid type")},download:function(a){var b=g+"downloadfile.ashx?APIKey="+this.KEY+"&AuthToken="+this.TOKEN+"&target=workbin&ID=";return"string"==typeof a?b+a:a.ID?b+a.ID:null}},e.prototype={constructor:e,get:function(a){return this._data[a]},update:function(){var a=this;this._user.get("Module",{Duration:0,IncludeAllInfo:!0,CourseID:a.get("ID"),TitleOnly:!1}).success(function(b){var c=k(b);c&&c.length>0&&(a._lastUpdate=new Date,a._data=b.Results[0])})},gradebooksAsync:function(a){var b=this,c=this._user.get("Gradebook_ViewItems",{CourseID:b.get("ID")});return l(c,a)}};var m,n="announcements forums workbins webcasts gradebooks polls webLinks lecturers descriptions".split(" "),o=function(a){return a.slice(0,1).toUpperCase()+a.slice(1)},p=function(a){return function(){return this.get(a)}};for(m in n)e.prototype[n[m].toLowerCase()]=p.apply(e.prototype,[o(n[m])]);var q=[{api:"announcements",options:{Duration:0,TitleOnly:!1}},{api:"workbins",options:{Duration:0,TitleOnly:!1,WorkbinID:""}},{api:"forums",options:{Duration:0,IncludeThreads:!0,TitleOnly:!1}},{api:"webcasts",options:{Duration:0}}],r=function(b){return function(c,d){a.isFunction(c)&&(d=c,c={});var e=this,f=a.extend({CourseID:e.get("ID")},b.options,c),g=this._user.get(o(b.api),f);return l(g,d)}};for(m in q)e.prototype[q[m].api+"Async"]=r.apply(e.prototype,[q[m]])}(jQuery,window);