Advertisement
Guest User

Untitled

a guest
Apr 28th, 2016
342
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 203.42 KB | None | 0 0
  1.  
  2. <!DOCTYPE html>
  3. <html >
  4. <head>
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <title>GradPoint Player</title>
  7. <link rel="shortcut icon" type="image/vnd.microsoft.icon" href="/favicon.ico" /><link rel="stylesheet" type="text/css" href="/Scripts/ext-3.0.0-2/resources/css/ext-all.css" /><link rel="stylesheet" type="text/css" href="/Styles_vv1D19A9336C1DE00.css" /><link rel="stylesheet" type="text/css" href="/StylesOld_vv1D19A9336C1DE00.css" /><!--[if IE 6]><link rel="stylesheet" type="text/css" href="/IE6Styles.css" /><![endif]--><link rel="stylesheet" type="text/css" href="/resource/2199893/web/styles.css" /><script type="text/javascript" src="/Scripts/ext-3.0.0-2/ext-comb14.js"></script><script type="text/javascript" src="/Scripts/ext-3.0.0-2/locale/ext-lang-en.js"></script><script type="text/javascript">Ext.BLANK_IMAGE_URL = '/p';Ext.chart.Chart.CHART_URL='/Scripts/ext-3.0.0-2/resources/charts.swf';</script><script type="text/javascript">function convertLocalTimeToUtcDateTime(date){return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());}</script><script type="text/javascript" language="javascript" src="/Scripts/easyXDM-2.4.12.108/easyXDM.min.js"></script><script type="text/javascript" language="javascript">easyXDM.DomHelper.requiresJSON("/Scripts/easyXDM-2.4.12.108/json2.js");</script>
  8. <script type="text/javascript" language="javascript">
  9. var Privileges={None:0,Participate:1,CreateDomain:16,ReadDomain:32,UpdateDomain:64,DeleteDomain:128,CreateUser:256,ReadUser:512,UpdateUser:1024,DeleteUser:2048,CreateCourse:65536,ReadCourse:131072,UpdateCourse:262144,DeleteCourse:524288,CreateSection:1048576,ReadSection:2097152,UpdateSection:4194304,DeleteSection:8388608,GradeAssignment:16777216,GradeForum:33554432,GradeExam:67108864,SetupGradebook:134217728,ControlDomain:268435456,ControlCourse:536870912,ControlSection:1073741824,ReadGradebook:2147483648,ReportDomain:4294967296,ReportCourse:8589934592,ReportSection:17179869184,PostDomainAnnouncements:34359738368,Proxy:68719476736,ReportUser:274877906944,SubmitFinalGrade:549755813888,ControlEnrollment:1099511627776,ReadEnrollment:2199023255552,ReadCourseFull:4398046511104,ControlUser:8796093022208,ReadObjective:17592186044416,UpdateObjective:35184372088832,ReadCredits:70368744177664,UpdateCredits:140737488355328,ManageLicense:281474976710656,All:-1};
  10.  
  11. //FrameApi = function(config) {
  12. // // call parent constructor
  13. // FrameApi.superclass.constructor.call(this, config);
  14. //};
  15. FrameApi = Ext.extend(Ext.util.Observable, {
  16.  
  17. /*********Helper methods********/
  18. constructor: function (config) {
  19. Ext.apply(this, config);
  20.  
  21. this.addEvents(
  22. 'componentstatechanged',
  23. 'contentstatechanged',
  24. 'currentenrollmentchanged',
  25. 'helprequested',
  26. 'actionregistered',
  27. 'vieweropening',
  28. 'viewerclosed',
  29. 'editoropening',
  30. 'editorclosed',
  31. 'groupsetupopening',
  32. 'groupsetupclosed',
  33. 'jswindowopening',
  34. 'jswindowclosed',
  35. 'componentsaverequested',
  36. 'componentsaved',
  37. 'componentcancelled'
  38. );
  39.  
  40. this.listeners = config.listeners;
  41. this.componentStates = new Ext.util.MixedCollection();
  42. this.componentMethods = new Ext.util.MixedCollection();
  43. this.contentState = {};
  44. this.actionListeners = new Ext.util.MixedCollection();
  45. this.enrollmentCache = new Ext.util.MixedCollection();
  46.  
  47. FrameApi.superclass.constructor.call(this, config);
  48.  
  49. this.on('closegroupsetupwindow', function (o) {
  50. this.groupEditorClosed(o);
  51. }, this);
  52. // this.on('componentsaved', function(type, id, o) {
  53. // alert('componentsaved:' + type + ',' + id + ',' + o);
  54. // }, this);
  55. // this.on('componentcancelled', function(type, id, o) {
  56. // alert('componentcancelled:' + type + ',' + id + ',' + o);
  57. // }, this);
  58.  
  59. //Override the navToItem function so that links popup in grading (and other) windows that have inline course links
  60. if(typeof(navToItem) == 'undefined') {
  61. navToItem = function (itemId) {
  62. var courseId = FRAME_API.contentState.courseId;
  63. if(!Ext.isEmpty(courseId)) {
  64. var url = '%24APPROOT%24/Component/ActivityPlayer?courseid=' + FRAME_API.contentState.courseId + '&itemid=' + encodeURIComponent(itemId);
  65. window.open(String.escape(url), '', 'scrollbars, resizable, menubar, width=860, height=600');
  66. }
  67. }
  68. }
  69. },
  70.  
  71. findParentApi: function (win) {
  72. if (win.parent != win) {
  73. // locate the API:
  74. try {
  75. if (win.parent.FRAME_API != null) {
  76. // try in this window
  77. return win.parent.FRAME_API;
  78. }
  79. }
  80. catch (e) { }
  81. // try parent
  82. return this.findParentApi(win.parent);
  83. }
  84. // else give up
  85. return null;
  86. },
  87.  
  88. init: function (timeToLive) {
  89. this.recoverPingInterval = null;
  90. this.recoverPingCount = 0;
  91.  
  92. timeToLive = timeToLive || 15;
  93. this.recoverPingMax = timeToLive;
  94.  
  95. setInterval(this.pingServer.createDelegate(this), (timeToLive * 1000 * 28));
  96.  
  97. if (Ext.isIE) {
  98. document.onfocusin = this.pingServer.createDelegate(this);
  99. }
  100. else {
  101. window.onfocus = this.pingServer.createDelegate(this);
  102. }
  103.  
  104. if(this.viewAda) {
  105. Ext.getBody().addClass('ada-color');
  106. }
  107.  
  108. this.loginWindow = null;
  109.  
  110. try {
  111. //Do not call noConflict, as that kills the SameOrigin case
  112. this.easyXDM = easyXDM;//.noConflict('FrameAPI');
  113. this.rpc = new this.easyXDM.Rpc({},
  114. {
  115. local: {
  116. addListeners: function(events, successFn, errorFn){
  117. if(!Ext.isEmpty(events)) {
  118. if(typeof(events) == 'string') {
  119. events = events.split('|');
  120. }
  121. for(var i=0; i<events.length; i++) {
  122. FRAME_API.addListener(events[i], FRAME_API.rpc.onEvent.createDelegate(FRAME_API, [events[i]], 0));
  123. }
  124. }
  125. },
  126. setShowBeforeUnloadPrompts: function(val) {
  127. FRAME_API.setShowBeforeUnloadPrompts(val);
  128. },
  129. fireEvent: function(eventName, args) {
  130. return FRAME_API.fireEvent(eventName, args);
  131. },
  132. saveComponent: function(componentType, id) {
  133. return FRAME_API.saveComponent(componentType, id);
  134. },
  135. navigate: function(url) {
  136. FRAME_API.navigate(url);
  137. },
  138. getComponentState: function(componentType, id) {
  139. return FRAME_API.getComponentState(componentType, id);
  140. },
  141. callComponentMethod: function(componentType, id, name, args) {
  142. return FRAME_API.callComponentMethod(componentType, id, name, args);
  143. },
  144. getProperties: function() {
  145. return {
  146. adminUrl: FRAME_API.adminUrl,
  147. appVersion: FRAME_API.appVersion,
  148. appRoot: FRAME_API.appRoot,
  149. authenticated: FRAME_API.authenticated,
  150. canProxy: FRAME_API.canProxy,
  151. canTeachACourse: FRAME_API.canTeachACourse,
  152. catalogEntries: FRAME_API.catalogEntries,
  153. contentState: FRAME_API.contentState,
  154. currentEnrollment: FRAME_API.currentEnrollment,
  155. enrollments: FRAME_API.enrollments,
  156. domainId: FRAME_API.domainId,
  157. domainName: FRAME_API.domainName,
  158. frameResourceRoot: FRAME_API.frameResourceRoot,
  159. frameRoot: FRAME_API.frameRoot,
  160. isAdmin: FRAME_API.isAdmin,
  161. isProxy: FRAME_API.isProxy,
  162. menuEntries: FRAME_API.menuEntries,
  163. proxyUserId: FRAME_API.proxyUserId,
  164. resourceRoot: FRAME_API.resourceRoot,
  165. rights: FRAME_API.rights,
  166. roles: FRAME_API.roles,
  167. userId: FRAME_API.userId,
  168. userDisplay: FRAME_API.userDisplay,
  169. username: FRAME_API.username,
  170. userspace: FRAME_API.userspace,
  171. proxyUsername: FRAME_API.proxyUsername,
  172. proxyUserspace: FRAME_API.proxyUserspace
  173. };
  174. },
  175. hasRight: function(right, rights) {
  176. return FRAME_API.hasRight(right, rights);
  177. }
  178. },
  179. remote: {
  180. //Called so the containing frame can initialize event listeners, etc.
  181. init:{},
  182. onEvent:{}
  183. }
  184. });
  185.  
  186. this.rpc.init();
  187. }
  188. catch(e) {
  189. }
  190. },
  191.  
  192. pingServer: function () {
  193. if (!this.noforceRelogin) {
  194. Ext.Ajax.request({
  195. url: this.appRoot + "/ping",
  196. params: { checkuserid: FRAME_API.userId, proxyuserid: (!Ext.isEmpty(FRAME_API.proxyUserId) && FRAME_API.proxyUserId != FRAME_API.userId) ? FRAME_API.proxyUserId : '' },
  197. scope: this,
  198. success: function (response) {
  199. var result = eval("(" + response.responseText + ")");
  200. if (!result.authenticated) {
  201. this.displayModalPopup();
  202. }
  203. else {
  204. if (this.loginWindow) {
  205. this.loginWindow.close();
  206. this.loginWindow.destroy();
  207. this.loginWindow = null;
  208. }
  209. this.clearRecoverPing(true);
  210. }
  211. },
  212. failure: function (response) {
  213. this.displayModalPopup();
  214.  
  215. if (this.recoverPingInterval == null && this.recoverPingCount <= 0) {
  216. this.recoverPingInterval = setInterval(this.recoverPingServer.createDelegate(this), 1000 * 60);
  217. }
  218. }
  219. });
  220. }
  221. else {
  222. Ext.Ajax.request({
  223. url: this.appRoot + "/ping",
  224. scope: this,
  225. success: function (response) {
  226. var result = eval("(" + response.responseText + ")");
  227. if (!result.authenticated)
  228. this.statusDisplay.updateStatus(this.getPingText(this.I18N.notLoggedIn));
  229. else
  230. this.statusDisplay.hide();
  231. },
  232. failure: function (response) {
  233. this.statusDisplay.updateStatus(this.getPingText(this.I18N.notConnected));
  234. }
  235. });
  236. }
  237. },
  238.  
  239. getPingText: function (text) {
  240. return String.format(text, ['<a href="#" onclick="FRAME_API.statusDisplay.hide(); window.open(\'',
  241. this.appRoot, '/Login.vp/page.htm?ReturnUrl=',
  242. this.appRoot, '/Close\',\'LoginWindow\',\'width=800, height=600, scrollbars=yes\'); return false;">',
  243. this.I18N.login, '</a>'].join(''))
  244. },
  245.  
  246. displayModalPopup: function () {
  247. if (this.loginWindow == null) {
  248. var passwordField = new Ext.form.TextField({
  249. xtype: 'textfield',
  250. id: 'txtpassword',
  251. inputType: 'password',
  252. allowBlank: false,
  253. hideLabel: true,
  254. cls: 'default_font',
  255. scope: this,
  256. blankText: this.I18N.passwordRequired,
  257. hidden: this.isSSO,
  258. listeners: {
  259. specialkey: function (field, e) {
  260. var key = e.getKey();
  261. if (key == Ext.EventObject.ENTER) {
  262. Ext.get('loginOK').dom.click();
  263. }
  264. }
  265. }
  266. });
  267.  
  268. this.loginWindow = new Ext.Window({
  269. title: this.I18N.login,
  270. layout: 'form',
  271. width: 500,
  272. autoHeight: true,
  273. bodyCls: 'default_font',
  274. bodyStyle: 'padding: 10px 10px 25px 10px;',
  275. closeAction: 'hide',
  276. modal: true,
  277. resizable: false,
  278. shadow: false,
  279. closable: false,
  280. defaultButton: 'loginOK',
  281. items: [{
  282. xtype: 'label',
  283. html: String.format(this.I18N.connectionErrorMessage, FRAME_API.userDisplay, Ext.isEmpty(FRAME_API.proxyUsername) ? FRAME_API.username : FRAME_API.proxyUsername),
  284. forId: "txtpassword",
  285. cls: 'default_font'
  286. },
  287. passwordField, {
  288. xtype: 'label',
  289. id: "lblError",
  290. cls: 'default_font modalPopup-login-error'
  291. }, {
  292. xtype: 'label',
  293. hidden: false,
  294. html: '<iframe id="ssoiframe" name="ssoiframe" style="width:100%;height:200px;overflow:auto;display:none;"></iframe>'
  295. }],
  296. buttons: [{ xtype: 'tbfill' }, {
  297. text: this.I18N.login,
  298. id: 'loginOK',
  299. scope: this,
  300. handler: this.clickLoginOK
  301. }]
  302. });
  303.  
  304. this.loginWindow.show();
  305. }
  306. },
  307.  
  308. clickLoginOK: function () {
  309. if (this.isSSO) {
  310. try {
  311. this.setTimezoneInfoModel();
  312. var returnUrl = this.absoluteAppRoot + '/SSODone.aspx?DlapCookie=%TOKEN%&mode=login&userid=' + this.userId + '&puserid=' + this.proxyUserId + '&standardOffset=' + this.standardOffset + '&daylightOffset=' + this.daylightOffset + '&standardStartTime=' + this.standardStartTime + '&daylightStartTime=' + this.daylightStartTime;
  313. var iframeSrc = this.dlapUrl + '/SSOLogin' + '?domainid=' + encodeURIComponent(this.domainId) + '&url=' + encodeURIComponent(returnUrl) + '&token=' + encodeURIComponent(this.dlaptoken);
  314. document.getElementById('ssoiframe').src = iframeSrc;
  315. Ext.get(document.getElementById('ssoiframe')).show();
  316. }
  317. catch (e) {
  318. Ext.get(document.getElementById('ssoiframe')).setVisibilityMode(Ext.Element.DISPLAY).hide();
  319. if (e && e.message) {
  320. Ext.getCmp("lblError").setText(e.message);
  321. }
  322. else {
  323. Ext.getCmp("lblError").setText(this.I18N.unknownError);
  324. }
  325. if (this.loginWindow) {
  326. this.loginWindow.doLayout();
  327. }
  328. }
  329. }
  330. else if (Ext.getCmp('txtpassword').isValid()) {
  331. //reset the error label
  332. Ext.getCmp("lblError").setText('');
  333.  
  334. this.setTimezoneInfoModel();
  335.  
  336. var requestUserName = FRAME_API.username;
  337. if (!Ext.isEmpty(FRAME_API.proxyUsername)) {
  338. requestUserName = FRAME_API.proxyUserspace + '/' + FRAME_API.proxyUsername + '/' + FRAME_API.userspace + '/' + FRAME_API.username;
  339. }
  340. else if (!Ext.isEmpty(FRAME_API.userspace)) {
  341. requestUserName = FRAME_API.userspace + '/' + FRAME_API.username;
  342. }
  343. else {
  344. requestUserName = FRAME_API.username;
  345. }
  346.  
  347. Ext.Ajax.request({
  348. params: {
  349. username: requestUserName,
  350. password: Ext.get('txtpassword').getValue(),
  351. standardOffset: this.standardOffset,
  352. daylightOffset: this.daylightOffset,
  353. standardStartTime: this.standardStartTime,
  354. daylightStartTime: this.daylightStartTime
  355. },
  356. url: FRAME_API.appRoot + '/Controls/CredentialsUI.ashx?modalPopup=true',
  357. method: 'POST',
  358. scope: this,
  359. callback: this.modalLoginCompleted
  360. });
  361. }
  362. },
  363.  
  364. clickLoginDifferentUser: function(){
  365. if (this.isSSO) {
  366. try {
  367. var returnUrl = this.absoluteAppRoot + '/SSODone.aspx?mode=logout';
  368. var iframeSrc = this.dlapUrl + '/SSOLogout' + '?domainid=' + encodeURIComponent(this.domainId) + '&url=' + encodeURIComponent(returnUrl);
  369. document.getElementById('ssoiframe').src = iframeSrc;
  370. Ext.get(document.getElementById('ssoiframe')).show();
  371. }
  372. catch (e) {
  373. Ext.get(document.getElementById('ssoiframe')).setVisibilityMode(Ext.Element.DISPLAY).hide();
  374. if (e && e.message) {
  375. Ext.getCmp("lblError").setText(e.message);
  376. }
  377. else {
  378. Ext.getCmp("lblError").setText(this.I18N.unknownError);
  379. }
  380. if (this.loginWindow) {
  381. this.loginWindow.doLayout();
  382. }
  383. }
  384. }
  385. else {
  386. FRAME_API.logout();
  387. }
  388. },
  389.  
  390. ssoComplete: function(success, mode, error){
  391. if (success) {
  392. if (this.loginWindow) {
  393. this.loginWindow.close();
  394. this.loginWindow.destroy();
  395. this.loginWindow = null;
  396. }
  397. this.clearRecoverPing(true);
  398.  
  399. if (mode == 'logout') {
  400. FRAME_API.logout();
  401. }
  402. }
  403. else {
  404. Ext.get(document.getElementById('ssoiframe')).setVisibilityMode(Ext.Element.DISPLAY).hide();
  405. Ext.getCmp("lblError").setText(!Ext.isEmpty(error) ? error : this.I18N.unknownError);
  406. if (this.loginWindow) {
  407. this.loginWindow.doLayout();
  408. }
  409. }
  410. },
  411.  
  412. modalLoginCompleted: function (options, success, response) {
  413. if (response && !Ext.isEmpty(response.responseText)) {
  414. if (success && response.responseText == "OK") {
  415. if (this.loginWindow) {
  416. this.loginWindow.close();
  417. this.loginWindow.destroy();
  418. this.loginWindow = null;
  419. }
  420. this.clearRecoverPing(true);
  421. }
  422. else {
  423. Ext.getCmp("lblError").setText(response.responseText);
  424. }
  425. }
  426. else {
  427. Ext.getCmp("lblError").setText(this.I18N.unknownError);
  428. }
  429. },
  430.  
  431. recoverPingServer: function () {
  432. if (!this.noforceRelogin) {
  433. if (this.recoverPingCount >= this.recoverPingMax) {
  434. this.clearRecoverPing(false);
  435. }
  436. else {
  437. this.recoverPingCount++;
  438. this.pingServer();
  439. }
  440. }
  441. },
  442.  
  443. clearRecoverPing: function(resetCount) {
  444. if (this.recoverPingInterval != null) {
  445. clearInterval(this.recoverPingInterval);
  446. this.recoverPingInterval = null;
  447. }
  448. if (resetCount){
  449. this.recoverPingCount = 0;
  450. }
  451. },
  452.  
  453. TimeZoneInfo: function () { var year = new Date().getFullYear(); var beginDate = new Date(year, 0, 1, 0, 0, 0, 0); var begin = beginDate.getTime(); var end = new Date(year, 11, 31, 23, 59, 59, 999).getTime(); var currentOffset = beginDate.getTimezoneOffset(); this.standardOffset = currentOffset; this.daylightOffset = null; this.daylightStartTime = null; this.standardStartTime = null; for (var day = begin; day < end; day += 86400000) { var testDay = new Date(day); if (currentOffset != testDay.getTimezoneOffset()) { for (var hour = day - 86400000; hour < day; hour += 3600000) { var testHour = new Date(hour); if (currentOffset != testHour.getTimezoneOffset()) { for (var minute = hour - 3600000; minute < hour; minute += 60000) { var testMinute = new Date(minute); if (currentOffset != testMinute.getTimezoneOffset()) { if (currentOffset > testMinute.getTimezoneOffset()) { this.daylightStartTime = testMinute; this.daylightOffset = testMinute.getTimezoneOffset(); this.standardOffset = currentOffset; } else { this.standardStartTime = testMinute; this.standardOffset = testMinute.getTimezoneOffset(); this.daylightOffset = currentOffset; } currentOffset = testDay.getTimezoneOffset(); } } } } } } },
  454. setTimezoneInfoModel: function () {
  455. var DateToJson = function (date) { var f = function f(n) { return n < 10 ? '0' + n : n; }; return isFinite(date.valueOf()) ? date.getUTCFullYear() + '-' + f(date.getUTCMonth() + 1) + '-' + f(date.getUTCDate()) + 'T' + f(date.getUTCHours()) + ':' + f(date.getUTCMinutes()) + ':' + f(date.getUTCSeconds()) + 'Z' : null; };
  456. var zone = new this.TimeZoneInfo();
  457. this.standardOffset = zone.standardOffset;
  458. if (zone.daylightOffset) {
  459. this.daylightOffset = zone.daylightOffset;
  460. this.standardStartTime = DateToJson(zone.standardStartTime);
  461. this.daylightStartTime = DateToJson(zone.daylightStartTime);
  462. }
  463. },
  464.  
  465. statusDisplay: function () {
  466. var msgCt;
  467. var message;
  468. var currentText = "";
  469.  
  470. function createBox(text) {
  471. return ['<div class="gradebook_statusdisplay highlight_color" >', text, '</div>'].join('');
  472. }
  473. return {
  474. updateStatus: function (text) {
  475. currentText = text;
  476. if (!msgCt) {
  477. msgCt = Ext.DomHelper.append(document.body, { id: 'msg-div', style: "position:absolute;z-index:20001" }, true);
  478. }
  479. var slideIn = false;
  480. if (!message) {
  481. message = Ext.DomHelper.append(msgCt, { html: createBox(text) }, true);
  482. slideIn = true;
  483. msgCt.alignTo(document, 't-t');
  484. }
  485. else {
  486. message.update(createBox(text));
  487. msgCt.alignTo(document, 't-t');
  488. message.frame();
  489. }
  490.  
  491. if (slideIn) message.slideIn('t');
  492. },
  493. hide: function () {
  494. currentText = "";
  495. if (message) {
  496. message.ghost("t", { remove: true });
  497. message = null;
  498. }
  499. },
  500. getText: function () {
  501. return currentText;
  502. }
  503. };
  504. } (),
  505.  
  506. checkViewClose: function (frame, win) {
  507. frame.un('load', this.checkViewClose);
  508. if (frame.dom.contentWindow.location.href == 'about:blank') {
  509. win.hide();
  510. }
  511. },
  512.  
  513. resizeViewWindow: function () {
  514. if (this.viewWindow == null) return;
  515. if (this.viewWindow.hidden) return;
  516. var pageSizeObj = Ext.get(document.body).getSize();
  517. this.viewWindow.setSize(pageSizeObj.width - 64, pageSizeObj.height - 64);
  518. },
  519.  
  520. resizeEditWindow: function () {
  521. if (this.editWindow == null) return;
  522. if (this.editWindow.hidden) return;
  523.  
  524. var pageSizeObj = Ext.get(document.body).getSize();
  525.  
  526. this.editWindow.setSize(pageSizeObj.width - 32, pageSizeObj.height - 24);
  527. },
  528.  
  529. resizeGroupEditWindow: function () {
  530. if (this.groupEditorWindow == null) return;
  531. if (this.groupEditorWindow.hidden) return;
  532.  
  533. var pageSizeObj = Ext.get(document.body).getSize();
  534.  
  535. this.groupEditorWindow.setSize(pageSizeObj.width - 32, pageSizeObj.height - 24);
  536. },
  537.  
  538. editorClosed: function (o) {
  539. if (typeof o == 'boolean') {
  540. o = { refreshAll: o };
  541. }
  542. if (this.editWindow && this.editWindow.isVisible()) {
  543. this.editWindow.hide();
  544. }
  545. this.fireEvent('editorclosed', o);
  546. this.fireEvent('jswindowclosed');
  547. },
  548.  
  549. groupEditorClosed: function (o) {
  550. if (this.groupEditorWindow && this.groupEditorWindow.isVisible()) {
  551. this.groupEditorWindow.hide();
  552. }
  553. this.fireEvent('groupsetupclosed', o);
  554. this.fireEvent('jswindowclosed');
  555. },
  556.  
  557. /*********Public methods********/
  558. hasRight: function (right, flags) {
  559. flags = flags || this.rights;
  560. flags = flags * 1.0;
  561. if (flags == -1 || flags == -2) {
  562. flags = 0xffffff0ff0;
  563. }
  564.  
  565. if (right >= 0x100000000) {
  566. var flagsHigher = Math.floor(flags / 0x100000000);
  567. var rightHigher = Math.floor(right / 0x100000000);
  568. return (rightHigher & flagsHigher) ? true : false;
  569. }
  570. else {
  571. return (right & flags) ? true : false;
  572. }
  573. },
  574.  
  575. executeCommand: function (cmd, params, options) {
  576. Ext.Ajax.request(Ext.apply(options, {
  577. url: this.adminUrl,
  578. params: Ext.apply(params || {}, {
  579. cmd: cmd
  580. }),
  581. userCallback: options.callback,
  582. userScope: options.scope,
  583. scope: this,
  584. callback: null,
  585. success: function (response, options) {
  586. if(!options) {
  587. options = response.request.options;
  588. }
  589. if (options.userCallback) {
  590. var success = true;
  591. var details = [];
  592. var responses = response.responseXML.getElementsByTagName('response');
  593. if (Ext.isEmpty(responses)) {
  594. success = false;
  595. }
  596. else {
  597. for (var i = 0; i < responses.length; i++) {
  598. var detail = {
  599. code: responses[i].getAttribute('code'),
  600. message: responses[i].getAttribute('message'),
  601. detailedMessage: responses[i].textContent
  602. };
  603. details.push(detail);
  604. if (detail.code != 'OK') {
  605. success = false;
  606. }
  607. }
  608. }
  609. response.details = details;
  610. options.userCallback.call(options.userScope || this, options, success, response);
  611. }
  612. },
  613. failure: function (response, options) {
  614. if(!options) {
  615. options = response.request.options;
  616. }
  617. if (options.userCallback) {
  618. options.userCallback.call(options.userScope || this, options, false, response);
  619. }
  620. }
  621. }));
  622. },
  623.  
  624. findEnrollment: function (enrollmentId) {
  625. for (var i = 0; i < this.enrollments.length; i++) {
  626. var enrollment = this.enrollments[i];
  627. if (!Ext.isEmpty(enrollment.id) && enrollment.id == enrollmentId) {
  628. return enrollment;
  629. }
  630. }
  631. if (this.enrollmentCache.containsKey(enrollmentId)) {
  632. return this.enrollmentCache.get(enrollmentId);
  633. }
  634. return null;
  635. },
  636.  
  637. setComponentMethod: function(componentType, id, name, fn, scope) {
  638. if(Ext.isEmpty(name) || Ext.isEmpty(componentType) || Ext.isEmpty(id) || typeof(fn) != 'function') {
  639. return;
  640. }
  641. componentType = componentType.toLowerCase();
  642. id = id.toLowerCase();
  643. name = name.toLowerCase();
  644. var key = componentType + '|' + id + '|' + name;
  645.  
  646. //Update the hash of component properties
  647. this.componentMethods.replace(key, { fn: fn, scope: scope });
  648. },
  649.  
  650. callComponentMethod: function(componentType, id, name, args) {
  651. if(Ext.isEmpty(name) || Ext.isEmpty(componentType) || Ext.isEmpty(id)) {
  652. return;
  653. }
  654. componentType = componentType.toLowerCase();
  655. id = id.toLowerCase();
  656. name = name.toLowerCase();
  657. var key = componentType + '|' + id + '|' + name;
  658. if (!this.componentMethods.containsKey(componentType)) {
  659. var obj = this.componentMethods.get(key);
  660. return obj.fn.apply(obj.scope || this, args);
  661. }
  662. },
  663.  
  664. setComponentState: function (componentType, id, o) {
  665. componentType = componentType || '';
  666. id = id || '';
  667. o = o || {};
  668.  
  669. //Update the hash of component properties
  670. componentType = componentType.toLowerCase();
  671. id = id.toLowerCase();
  672. if (!this.componentStates.containsKey(componentType)) {
  673. this.componentStates.add(componentType, new Ext.util.MixedCollection());
  674. }
  675. var stateList = this.componentStates.get(componentType);
  676. if (stateList.containsKey(id)) {
  677. o = Ext.apply(stateList.get(id), o);
  678. }
  679. stateList.replace(id, o);
  680.  
  681. //Update the main content properties
  682. if (id == 'framecontent') {
  683. this.contentState = o;
  684. this.contentState.type = componentType;
  685. if (!Ext.isEmpty(o.enrollmentId) &&
  686. (this.currentEnrollment == null || this.currentEnrollment.id != o.enrollmentId)) {
  687. if (this.enrollmentCache.containsKey(o.enrollmentId)) {
  688. this.currentEnrollment = this.enrollmentCache.get(o.enrollmentId);
  689. this.fireEvent('currentenrollmentchanged', this.currentEnrollment);
  690. }
  691. else {
  692. Ext.Ajax.request({
  693. url: this.appRoot + "/FrameHelper.ashx",
  694. params: {
  695. cmd: 'getenrollment',
  696. enrollmentid: o.enrollmentId
  697. },
  698. scope: this,
  699. callback: function (options, success, response) {
  700. if (success && !Ext.isEmpty(response.responseText)) {
  701. this.currentEnrollment = Ext.util.JSON.decode(response.responseText);
  702. this.enrollmentCache.replace(o.enrollmentId, this.currentEnrollment);
  703. if (this.currentEnrollment.id != o.enrollmentId) {
  704. this.enrollmentCache.replace(this.currentEnrollment.id, this.currentEnrollment);
  705. }
  706. this.fireEvent('currentenrollmentchanged', this.currentEnrollment);
  707. }
  708. }
  709. });
  710. }
  711. }
  712. this.fireEvent('contentstatechanged', this.contentState);
  713. }
  714.  
  715. //Fire the event for this component
  716. this.fireEvent('componentstatechanged', componentType, id, o);
  717. },
  718.  
  719. getComponentState: function (componentType, id) {
  720. componentType = componentType.toLowerCase();
  721. id = id.toLowerCase();
  722. var o = null;
  723. if (this.componentStates.containsKey(componentType)) {
  724. var stateList = this.componentStates.get(componentType);
  725. if (stateList.containsKey(id)) {
  726. o = stateList.get(id);
  727. }
  728. }
  729. return o;
  730. },
  731.  
  732. registerAction: function (componentType, id, action, f, scope) {
  733. //Update the hash of component properties
  734. componentType = componentType.toLowerCase();
  735. id = id.toLowerCase();
  736. action = action.toLowerCase();
  737.  
  738. if (id == 'framecontent') {
  739. this.actionListeners.replace(action, { handler: f, scope: scope });
  740. this.fireEvent('actionregistered', action, f, scope);
  741. }
  742. },
  743.  
  744. getRegisteredActions: function () {
  745. var list = [];
  746. this.actionListeners.eachKey(function (key, item) {
  747. list.push(Ext.apply(item, { action: key }));
  748. }, this);
  749. return list;
  750. },
  751.  
  752. setShowBeforeUnloadPrompts: function(val) {
  753. this.showBeforeUnloadPrompts = val;
  754. },
  755.  
  756. addEvent: function (name) {
  757. this.addEvents(name);
  758. },
  759.  
  760. logout: function (returnUrl) {
  761. this.fireEvent('beforelogout');
  762. var url = this.appRoot + '/SignOff.ashx';
  763. if(returnUrl) {
  764. url += '?ReturnUrl=' + encodeURIComponent(returnUrl);
  765. }
  766. // Ensure the player frame has had a chance to unload, and allow SCOs to save their data, record time spent, etc.
  767. setTimeout(function () {
  768. window.location = url;
  769. }, 1000);
  770. },
  771.  
  772. proxy: function (name) {
  773. this.navigate('/Component/Proxy?proxy=' + encodeURIComponent(name));
  774. },
  775. unproxy: function () {
  776. this.navigate('/Component/Proxy');
  777. },
  778. navigate: function (url) {
  779. window.location = this.frameRoot + url;
  780. },
  781.  
  782. saveComponent: function(componentType, id) {
  783. componentType = componentType.toLowerCase();
  784. id = id.toLowerCase();
  785. return this.fireEvent('componentsaverequested', componentType, id);
  786. },
  787.  
  788. launchHelp: function (token) {
  789. if (this.hasListener('helprequested')) {
  790. this.fireEvent('helprequested', token);
  791. }
  792. else {
  793. if (Ext.isEmpty(token)) {
  794. token = 'root';
  795. var o = this.contentState;
  796. if (o != null && !Ext.isEmpty(o.helpToken)) {
  797. token = o.helpToken;
  798. }
  799. }
  800. window.open(this.helpRoot + token, 'bhHelp', 'scrollbars, resizable, toolbar, width=950, height=600');
  801. }
  802. },
  803.  
  804. viewItem: function (enrollmentId, itemId, title, params) {
  805. if (this.viewWindow == null) {
  806. var pageSizeObj = Ext.get(document.body).getSize();
  807. this.viewWindow = new Ext.Window({
  808. width: pageSizeObj.width - 64,
  809. height: pageSizeObj.height - 64,
  810. layout: 'fit',
  811. plain: false,
  812. buttonAlign: 'center',
  813. shim: true,
  814. x: 32,
  815. y: 32,
  816. modal: true,
  817. frame: true,
  818. closable: true,
  819. closeAction: "hide",
  820. resizable: true,
  821. draggable: true,
  822. listeners: {
  823. beforehide: function () {
  824. var frame = this.viewFrame.el.child('iframe', false);
  825. if (frame.dom.contentWindow.location.href != 'about:blank') {
  826. frame.on('load', this.checkViewClose.createDelegate(this, [frame, this.viewWindow], false));
  827. frame.dom.contentWindow.location.replace('about:blank');
  828. return false;
  829. }
  830. return true;
  831. },
  832. hide: function () {
  833. this.fireEvent('viewerclosed');
  834. this.fireEvent('jswindowclosed');
  835. },
  836. scope: this
  837. }
  838. });
  839. }
  840. else {
  841. this.viewWindow.remove(this.viewFrame, true);
  842. }
  843.  
  844. var url = this.appRoot + '/Component/ActivityPlayer?id=frameviewitem&showheader=false&enrollmentid=' + enrollmentId + '&itemid=' + itemId;
  845. if (params != null) {
  846. for (prop in params) {
  847. url += '&' + prop + '=' + params[prop];
  848. }
  849. }
  850.  
  851. this.viewFrame = new Ext.Panel({
  852. layout: 'fit',
  853. //autoScroll: true,
  854. monitorResize: true,
  855. html: '<iframe class="x-panel-body page_color default_font" style="width:100%;height:100%;" frameborder="0" src="' + url + '" title="' + this.I18N.ItemViewerFrame + '"></iframe>'
  856. });
  857. this.viewWindow.add(this.viewFrame);
  858.  
  859. this.fireEvent('jswindowopening');
  860. this.fireEvent('vieweropening');
  861. this.viewWindow.show();
  862. this.viewWindow.setTitle(Ext.util.Format.htmlEncode(title));
  863. this.resizeViewWindow();
  864. Ext.EventManager.onWindowResize(this.resizeViewWindow, this);
  865. return false;
  866. },
  867.  
  868. editItem: function (enrollmentId, itemId, title, params) {
  869. var pageSizeObj = Ext.get(document.body).getSize();
  870. if (this.editWindow == null) {
  871. this.editWindow = new Ext.Window({
  872. width: pageSizeObj.width - 32,
  873. height: pageSizeObj.height - 24,
  874. layout: 'fit',
  875. plain: false,
  876. buttonAlign: 'center',
  877. shim: true,
  878. x: 16,
  879. y: 4,
  880. modal: true,
  881. frame: true,
  882. closable: false,
  883. closeAction: "hide",
  884. resizable: true,
  885. constrain: true,
  886. draggable: true
  887. });
  888. }
  889. else {
  890. this.editWindow.remove(this.editFrame, true);
  891. this.editFrame = null;
  892. }
  893.  
  894. var url = this.appRoot + "/Component/ItemEditor?id=FrameItemEditor&closable=true&enrollmentid=" + enrollmentId + '&itemid=' + itemId;
  895. if (params != null) {
  896. for (prop in params) {
  897. url += '&' + prop + '=' + params[prop];
  898. }
  899. }
  900.  
  901. this.editFrame = new Ext.Panel({
  902. xtype: 'panel',
  903. layout: 'fit',
  904. //autoScroll: true,
  905. monitorResize: true,
  906. id: 'hdEditFrame',
  907. html: '<iframe class="x-panel-body page_color default_font" style="width:100%;height:100%;" frameborder="0" src="' + url + '" title="' + this.I18N.ItemEditorFrame + '"></iframe>'
  908. });
  909. this.editWindow.add(this.editFrame);
  910.  
  911. this.fireEvent('jswindowopening');
  912. this.fireEvent('editoropening');
  913. this.editWindow.show();
  914. this.editWindow.setTitle(Ext.util.Format.htmlEncode(title));
  915.  
  916. this.resizeEditWindow();
  917. Ext.EventManager.onWindowResize(this.resizeEditWindow, this);
  918. },
  919.  
  920. editGroupSet: function (enrollmentId, setId, title, params) {
  921. var pageSizeObj = Ext.get(document.body).getSize();
  922. if (this.groupEditorWindow == null) {
  923. this.groupEditorWindow = new Ext.Window({
  924. width: pageSizeObj.width - 32,
  925. height: pageSizeObj.height - 24,
  926. layout: 'fit',
  927. plain: false,
  928. buttonAlign: 'center',
  929. shim: true,
  930. x: 16,
  931. y: 4,
  932. modal: true,
  933. frame: true,
  934. closable: false,
  935. closeAction: "hide",
  936. resizable: true,
  937. constrain: true,
  938. draggable: true
  939. });
  940. }
  941. else {
  942. this.groupEditorWindow.remove(this.groupEditorFrame, true);
  943. this.groupEditorFrame = null;
  944. }
  945.  
  946. var url = this.appRoot + "/Component/GroupSetup?enrollmentId=" + enrollmentId + '&setid=' + setId;
  947. if (params != null) {
  948. for (prop in params) {
  949. url += '&' + prop + '=' + params[prop];
  950. }
  951. }
  952.  
  953. this.groupEditorFrame = new Ext.Panel({
  954. xtype: 'panel',
  955. layout: 'fit',
  956. //autoScroll: true,
  957. monitorResize: true,
  958. id: 'hdGroupEditFrame',
  959. html: '<iframe class="x-panel-body page_color default_font" style="width:100%;height:100%;" frameborder="0" src="' + url + '" title="' + this.I18N.GroupSetupFrame + '"></iframe>'
  960. });
  961. this.groupEditorWindow.add(this.groupEditorFrame);
  962.  
  963. this.fireEvent('jswindowopening');
  964. this.fireEvent('groupsetupopening');
  965. this.groupEditorWindow.show();
  966. this.groupEditorWindow.setTitle(title);
  967.  
  968. this.resizeGroupEditWindow();
  969. Ext.EventManager.onWindowResize(this.resizeGroupEditWindow, this);
  970. },
  971.  
  972. sendEmail: function (enrollmentId) {
  973. var height = Math.min(400, screen.height);
  974. var width = Math.min(600, screen.width);
  975. var features = 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,height=' + height + ',width=' + width;
  976. var contextQuery = '';
  977. var newWindow = window.open(this.appRoot + "/Learn/Email.aspx?appendcontext=1&enrollmentid=" + enrollmentId + contextQuery, "", features);
  978. newWindow.focus();
  979. return false;
  980. },
  981.  
  982. launchConferencing: function () {
  983. var height = Math.min(600, screen.height);
  984. var width = Math.min(800, screen.width);
  985. var features = 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,height=' + height + ',width=' + width;
  986. var newWindow = window.open(this.appRoot + "/CommCenter", "communications_center", features);
  987. newWindow.focus();
  988. return false;
  989. },
  990.  
  991. fireEvent: function () {
  992. var args, name;
  993. name = arguments[0], args = 2 <= arguments.length ? [].slice.call(arguments, 1) : [];
  994. // Allow component hosted in an iframe to listen to the messages
  995. if (window.parent && (window !== window.parent)) {
  996. window.parent.postMessage({ eventName: name, args: args }, '*');
  997. }
  998. FrameApi.superclass.fireEvent.apply(this, arguments);
  999. }
  1000. });
  1001.  
  1002. FRAME_API = new FrameApi({
  1003. appVersion: '2016.4.1326',
  1004. appVersionMode: 'Latest',
  1005. authenticated: true,
  1006. appRoot: '',
  1007. frameRoot: '/Frame',
  1008. resourceRoot: '/Resource/2199893',
  1009. frameResourceRoot: '/Frame/Resource/2199893',
  1010. adminUrl: '/Admin/Admin.ashx',
  1011. domainId: '2199893',
  1012. domainName: 'Cary High School',
  1013. userId: '5390010',
  1014. proxyUserId: '5390010',
  1015. proxyUsername: '',
  1016. proxyUserspace: '',
  1017. isProxy: false,
  1018. userspace: 'wcps6429-caryhs-ccl',
  1019. username: '1266784',
  1020. userDisplay: 'Cory McKeel',
  1021. rights: 4398046642176,
  1022. roles: [{ entityType: 'D', name: 'Administrator', privileges: 17454747029344},{ entityType: 'D', name: 'Registrar', privileges: 17402922665760},{ entityType: 'D', name: 'Teacher - Author', privileges: 8319082628864},{ entityType: 'D', name: 'Teacher', privileges: 7767992698624},{ entityType: 'C', name: 'Administrator', privileges: 4950739255296},{ entityType: 'C', name: 'Teacher - Author', privileges: 4950738731008},{ entityType: 'C', name: 'Teacher', privileges: 4950738468864},{ entityType: 'C', name: 'Student', privileges: 131073},{ entityType: 'S', name: 'Administrator', privileges: 4950739255296},{ entityType: 'S', name: 'Teacher - Author', privileges: 4950738731008},{ entityType: 'S', name: 'Teacher', privileges: 4950201597952},{ entityType: 'S', name: 'Student', privileges: 131073}],
  1023. isAdmin: false,
  1024. canConference: false,
  1025. canProxy: false,
  1026. canTeachACourse: false,
  1027. currentEnrollment: null,
  1028. helpRoot: '/Docs/',
  1029. homeLabel: 'Home',
  1030. hideObjectives: false,
  1031. hideSections: true,
  1032. menuEntries: [],
  1033. catalogEntries: [],
  1034. enrollments: [{id: '5390012',courseEnrollment: false,domainId: '2199893',enrollmentStatus: 9,enrollmentStart: '2014-09-09 00:00:00',enrollmentEnd: '2025-03-04 23:59:00',rights: 131073,sectionRights: 0,courseRights: 131073,currentUser: true,userId: '5390010',userFirstName: '',userLastName: '',courseId: '5337368',courseTitle: 'Cary High Algebra II - Part 1',courseDisplay: 'Cary High Algebra II - Part 1',courseReference: '',courseType: 'Range',courseDays: 365,isTeacher: false,isStudent: true,isTestStudent: false,canEdit: false,canConference: false,canReportGrades: false},{id: '5390015',courseEnrollment: false,domainId: '2199893',enrollmentStatus: 9,enrollmentStart: '2014-09-09 00:00:00',enrollmentEnd: '2024-08-20 23:59:00',rights: 131073,sectionRights: 0,courseRights: 131073,currentUser: true,userId: '5390010',userFirstName: '',userLastName: '',courseId: '2723493',courseTitle: 'Cary High Algebra II - Part 2',courseDisplay: 'Cary High Algebra II - Part 2',courseReference: '',courseType: 'Range',courseDays: 365,isTeacher: false,isStudent: true,isTestStudent: false,canEdit: false,canConference: false,canReportGrades: false},{id: '9258098',courseEnrollment: false,domainId: '2199893',enrollmentStatus: 1,enrollmentStart: '2016-01-19 19:00:00',enrollmentEnd: '2025-04-27 23:59:00',rights: 131073,sectionRights: 0,courseRights: 131073,currentUser: true,userId: '5390010',userFirstName: '',userLastName: '',courseId: '5838146',courseTitle: 'CHS Math III - Loughridge/Dunphy (2015 - 2016)',courseDisplay: 'CHS Math III - Loughridge/Dunphy (2015 - 2016)',courseReference: '',courseType: 'Range',courseDays: 365,isTeacher: false,isStudent: true,isTestStudent: false,canEdit: false,canConference: false,canReportGrades: false}],
  1035. showBeforeUnloadPrompts: true,
  1036.  
  1037. viewAda: false,
  1038. showMobileViewMenuItem: false,
  1039. mobileViewEnabled: false,
  1040. noforceRelogin: true,
  1041. dlaptoken: '~66jUAAAAAAAV5eAAWFO_qA.MInmoxKrWxVKVpdNk9fWiB',
  1042. isSSO: false,
  1043. dlapUrl: '//dlap.gradpoint.com',
  1044. absoluteAppRoot: 'https://wcps6429-caryhs-ccl.gradpoint.com',
  1045.  
  1046. objectiveOptions: {
  1047. setowner: '',
  1048. lowgrade: '',
  1049. highgrade: ''
  1050. },
  1051.  
  1052. // Strings
  1053. I18N : {
  1054. ItemViewerFrame: 'Item Viewer Frame',
  1055. ItemEditorFrame: 'Item Editor Frame',
  1056. GroupSetupFrame: 'Group Setup Frame',
  1057. notLoggedIn: 'You are no longer logged in.\u003cbr /\u003ePlease click {0} now.',
  1058. notConnected: 'You have been disconnected.\u003cbr /\u003ePlease connect and click {0}.',
  1059. login: 'Login',
  1060. unknownError: 'Unknown error.',
  1061. passwordRequired:'Password is required',
  1062. connectionErrorMessage:'You have lost your connection. Please log in again so that you can resume your last session and not lose your work.\u003cbr/\u003e',
  1063. loginAsDifferentUser:'Login As a Different User'
  1064. }
  1065. });
  1066. Ext.onReady(function() {
  1067. if (typeof (Ext.QuickTips) != 'undefined') {
  1068. Ext.QuickTips.init();
  1069. }
  1070. var parentApi = FRAME_API.findParentApi(window);
  1071. if(parentApi != null) {
  1072. FRAME_API = parentApi;
  1073. }
  1074. else {
  1075. FRAME_API.init(15);
  1076. }
  1077. });
  1078. </script>
  1079.  
  1080. <style type="text/css">
  1081. html, body
  1082. {
  1083. overflow: hidden;
  1084. }
  1085.  
  1086. #frame-prev-link
  1087. {
  1088. float: left;
  1089. margin-left: 8px;
  1090. margin-right: 2px;
  1091. background: url(/Images/nav_back_normal.gif) no-repeat;
  1092. height: 30px;
  1093. width: 24px;
  1094. cursor:pointer;
  1095. background-position: 4px 2px;
  1096. }
  1097.  
  1098. #frame-next-link
  1099. {
  1100. float: left;
  1101. margin-right: 4px;
  1102. background: url(/Images/nav_next_normal.gif) no-repeat;
  1103. height: 30px;
  1104. width: 24px;
  1105. cursor:pointer;
  1106. background-position: 4px 2px;
  1107. }
  1108.  
  1109. #frame-header-border
  1110. {
  1111. position: absolute;
  1112. top: 97px;
  1113. height: 2px;
  1114. left: 0px;
  1115. right: 0px;
  1116. }
  1117.  
  1118. </style>
  1119. </head>
  1120. <body class="page_color default_font">
  1121. <div class="global_header">
  1122. <div class="top_header">
  1123. <div class="top_left_header no-print"></div>
  1124. <div id="frame-top-right-header" class="top_right_header no-print"></div>
  1125. <div id="frame-top-header-buttons" class="top_header_buttons no-print">
  1126. <div id="h-home-btn" style="display:none;" class="top_header_button">
  1127. <div class="top_header_button_img top_header_home_button" ext:qtip="Home"></div>
  1128. </div>
  1129. <div id="h-course-btn" style="display:none;position:relative;" class="top_header_button">
  1130. <div class="top_header_button_img top_header_courses_button" ext:qtip="Courses"></div>
  1131. <div id="h-course-btn-dropdown" class="sub_header_dropdown" style="position:absolute;right:2px;bottom:2px;"></div>
  1132. </div>
  1133. <div id="h-catalog-btn" style="display:none;" class="top_header_button">
  1134. <div class="top_header_button_img top_header_catalog_button" ext:qtip="Catalog"></div>
  1135. </div>
  1136. <div id="h-admin-btn" style="display:none;" class="top_header_button">
  1137. <div class="top_header_button_img top_header_admin_button" ext:qtip="Administration"></div>
  1138. </div>
  1139. </div>
  1140. </div>
  1141. <div class="sub_header">
  1142. <div id="sh-home" style="display:none">
  1143. <div class="sub_header_list"></div>
  1144. <div id="frame-view-home" class="sub_header_list">
  1145. <a class="no_underline_link" href="javascript:void(0)" onclick="return false;">
  1146. <div id="h-home-link" class="no_underline_link"></div>
  1147. </a>
  1148. </div>
  1149. <div id="frame-calendar" class="sub_header_list">
  1150. <a class="no_underline_link" href="javascript:void(0)" onclick="return false;">
  1151. <div class="no_underline_link">Calendar</div>
  1152. </a>
  1153. </div>
  1154. <div id="frame-teachacourse" class="sub_header_list" style="display:none">
  1155. <a class="no_underline_link" href="javascript:void(0)" onclick="return false;">
  1156. <div class="no_underline_link">Teach a Course</div>
  1157. </a>
  1158. </div>
  1159. </div>
  1160. <div id="sh-courses" style="display:none">
  1161. <div id="frame-view-course" class="sub_header_list" style="display:none">
  1162. <a class="no_underline_link" href="javascript:void(0)" onclick="return false;">
  1163. <div class="no_underline_link">View</div>
  1164. </a>
  1165. </div>
  1166. <div id="frame-view-syllabus" class="sub_header_list" style="display:none">
  1167. <a class="no_underline_link" href="javascript:void(0)" onclick="return false;">
  1168. <div class="no_underline_link">Syllabus</div>
  1169. </a>
  1170. </div>
  1171. <div id="frame-view-gradebook" class="sub_header_list" style="display:none">
  1172. <a class="no_underline_link" href="javascript:void(0)" onclick="return false;">
  1173. <div class="no_underline_link">Gradebook</div>
  1174. </a>
  1175. </div>
  1176. <div id="frame-view-grades" class="sub_header_list" style="display:none">
  1177. <a class="no_underline_link" href="javascript:void(0)" onclick="return false;">
  1178. <div class="no_underline_link">Grades</div>
  1179. </a>
  1180. </div>
  1181.  
  1182. <div id="frame-view-objectives" class="sub_header_list" style="display:none">
  1183. <a class="no_underline_link" href="javascript:void(0)" onclick="return false;">
  1184. <div class="no_underline_link">Objectives</div>
  1185. </a>
  1186. </div>
  1187. <div id="frame-view-testanalytics" class="sub_header_list" style="display:none">
  1188. <a class="no_underline_link" href="javascript:void(0)" onclick="return false;">
  1189. <div class="no_underline_link">Test Analytics</div>
  1190. </a>
  1191. </div>
  1192. <div id="frame-view-activity" class="sub_header_list" style="display:none">
  1193. <a class="no_underline_link" href="javascript:void(0)" onclick="return false;">
  1194. <div class="no_underline_link">Activity</div>
  1195. </a>
  1196. </div>
  1197. <div id="frame-view-finalgrades" class="sub_header_list" style="display:none">
  1198. <a class="no_underline_link" href="javascript:void(0)" onclick="return false;">
  1199. <div class="no_underline_link">Final Grades</div>
  1200. </a>
  1201. </div>
  1202. </div>
  1203. <div id="sh-common" style="display:none">
  1204. <div id="frame-communicate" class="sub_header_list" style="display:none">
  1205. <a class="no_underline_link" href="javascript:void(0)" onclick="return false;">
  1206. <div class="no_underline_link">Communicate</div>
  1207. <div class="sub_header_dropdown"></div>
  1208. </a>
  1209. </div>
  1210. </div>
  1211. <div id="sh-catalog" style="display:none">
  1212. </div>
  1213. <div id="sh-admin" style="display:none">
  1214. <div id="frame-admin-dashboard" class="sub_header_list">
  1215. <a class="no_underline_link" href="javascript:void(0)" onclick="return false;">
  1216. Dashboard
  1217. </a>
  1218. </div>
  1219. <div id="frame-admin-domaindetail" class="sub_header_list">
  1220. <a class="no_underline_link" href="javascript:void(0)" onclick="return false;">
  1221. Administration
  1222. </a>
  1223. </div>
  1224. <div id="frame-admin-users" class="sub_header_list">
  1225. <a class="no_underline_link" href="javascript:void(0)" onclick="return false;">
  1226. Users
  1227. </a>
  1228. </div>
  1229. <div id="frame-admin-courses" class="sub_header_list">
  1230. <a class="no_underline_link" href="javascript:void(0)" onclick="return false;">
  1231. Courses
  1232. </a>
  1233. </div>
  1234. </div>
  1235. <div id="gp-reports-home-tab" class="sub_header_list" style="display:none">
  1236. <a class="no_underline_link" href="javascript:void(0)" onclick="return false;">
  1237. <div class="no_underline_link">Reports</div>
  1238. </a>
  1239. </div>
  1240. <div id="gp-resources-home-tab" class="sub_header_list" style="display:none">
  1241. <a class="no_underline_link" href="javascript:void(0)" onclick="return false;">
  1242. <div class="no_underline_link">Resources</div>
  1243. </a>
  1244. </div>
  1245. <div id="gp-tools" class="sub_header_list" style="display:none">
  1246. <a class="no_underline_link" href="javascript:void(0)" onclick="return false;">
  1247. <div class="no_underline_link">Tools</div>
  1248. <div class="sub_header_dropdown"></div>
  1249. </a>
  1250. </div>
  1251.  
  1252. <div class="sub_header_user">
  1253. <a id="frame-account" class="no_underline_link" href="javascript:void(0)" onclick="return false;">
  1254. <div id="userDropdown" class="no_underline_link"></div>
  1255. <div class="sub_header_dropdown">
  1256. </div>
  1257. </a>
  1258. <a id="frame-logout" class="no_underline_link" style="margin-left: 4px" href="javascript:void(0);" onclick="return false;">
  1259. Log Out
  1260. </a>
  1261. </div>
  1262. </div>
  1263. <div id="hdPageHeader">
  1264. <div class="page_header">
  1265. <span id="hdPageTitle" class="page_title"></span><span id="hdPageTitleSeparator" style="display: none;" class="page_title_separator">:&nbsp;</span><span id="hdCourseTitle" class="course_title"></span><span id="hdCourseSeparator" style="display: none;" class="course_separator">&nbsp;-&nbsp;</span><span id="hdSectionTitle" class="section_title"></span>
  1266. </div>
  1267. <div class="header_top_right">
  1268. <span id="headerTopRight" style="float:left">
  1269. <div id="frame-edit-link" class="hover_link" style="display: none; float: left; margin-top: 4px"><a class="hover_link" href="javascript:void(0)" onclick="return false;">Edit</a></div>
  1270. <div id="frame-prev-link" ext:qtip="Previous" style="display:none;float:left"></div>
  1271. <div id="frame-next-link" ext:qtip="Next" style="display:none;float:left"></div>
  1272. </span>
  1273. <div id="hdHelp" style="float:left">
  1274. <div class="help_button" ext:qtip='Help'>
  1275. </div>
  1276. </div>
  1277. </div>
  1278. </div>
  1279. <div id="frame-header-border" class="default_border no-print" style="border-top-width:0px;border-left-width:0px;border-right-width:0px;"></div>
  1280. </div>
  1281. <div class="main_content">
  1282.  
  1283. <style>
  1284. /* Make sure these are in this file and that these styles are after all included stylesheets
  1285. or you'll need to change getStylesOnPage*/
  1286. .course_tree_FrameContent .x-tree-col-first {
  1287. }
  1288.  
  1289. .course_tree_FrameContent .x-tree-node-el {
  1290. }
  1291. .peer-review-grid-row-border
  1292. {
  1293. border-width: 0px 0px 1px 0px;
  1294. }
  1295. .peer-review-grid-row-selected .x-grid3-cell-inner
  1296. {
  1297. font-weight:bold;
  1298. }
  1299. .x-tree-grade > div
  1300. {
  1301. width: auto !important;
  1302. }
  1303. .x-tree-grade
  1304. {
  1305. margin-left:0px !important;
  1306. }
  1307. </style>
  1308. <script src="/Scripts/svgweb-20110203/svg.js" data-path="/Scripts/svgweb-20100409"></script><script type="text/javascript" language="javascript">var tinyMCEPreInit = {suffix: '',query: '',base: '/Scripts/tiny_mce-3.5.3'};</script><script type="text/javascript" language="javascript" src="/Scripts/tiny_mce-3.5.3/tiny_mce.js"></script><script type="text/javascript" language="javascript">Ext.ux.TinyMCE.tinymcePlugins = '';Ext.ux.TinyMCE.initTinyMCE({language: 'en', strict_loading_mode: true});var tinymce_base = {theme : 'advanced',language: 'en',skin: 'bh',bh_app_root: '',bh_absolute_app_root: 'https://wcps6429-caryhs-ccl.gradpoint.com',bh_courselink_searchurl: '',theme_advanced_buttons1 : '',theme_advanced_buttons2 : '',theme_advanced_buttons3 : '',theme_advanced_buttons4 : '',theme_advanced_toolbar_location : 'top',theme_advanced_toolbar_align : 'left',theme_advanced_source_editor_height: 400,theme_advanced_source_editor_width: 650,plugin_preview_height: 400,plugin_preview_width: 650,apply_source_formatting: false,gecko_spellcheck: true,convert_fonts_to_spans: true,content_css: '/Scripts/tiny_mce-3.5.3/themes/advanced/skins/bh/content.css',body_class: 'default_font content',forced_root_block: 'div',font_size_style_values: '8pt,10pt,12pt,14pt,18pt,24pt,36pt',theme_advanced_resizing : false,theme_advanced_statusbar_location : 'none',flash_video_player_url: '',flash_video_player_absvideourl: false,media_strict: false,media_types: 'video=mp4,m4v,ogv,webm;silverlight=xap;flash=swf,flv,mp3;shockwave=dcr;quicktime=mov,qt,mpg,mpeg;shockwave=dcr;windowsmedia=avi,wmv,wm,asf,asx,wmx,wvx;realmedia=rm,ra,ram;java=jar;audio=ogg,oga',media_dialog_defaults: { audio_controls: true, video_controls: true },extended_valid_elements : 'a:math,#div[*],video[*],audio[*],style[type],link[!rel<stylesheet|type|href],b/strong,i/em,a[name|href|target|title|onclick],img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name|style],hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style],script[type|src],iframe[src|width|height|name|align|style|frameborder|allowfullscreen],applet[align<bottom?left?middle?right?top|alt|archive|class|code|codebase|height|hspace|id|name|object|style|title|vspace|width],param[id|name|type|value|valuetype<DATA?OBJECT?REF],track[default|kind|label|src|srclang]'};var tinymce_basic = Ext.apply({}, {plugins: 'safari,advlink,math,paste',theme_advanced_buttons1 : 'fontselect,fontsizeselect,|,bold,italic,underline,|,forecolor,backcolor,|,justifyleft,justifycenter,justifyright,|,link,math,|,bullist,numlist'}, tinymce_base);var tinymce_basic_with_links = Ext.apply({}, {plugins: 'safari,advlink,math,courselink,paste',theme_advanced_buttons1 : 'fontselect,fontsizeselect,|,bold,italic,underline,|,forecolor,backcolor,|,justifyleft,justifycenter,justifyright,|,courselink,link,math,|,bullist,numlist'}, tinymce_base);var tinymce_basic_with_links_nomath = Ext.apply({}, {plugins: 'safari,advlink,courselink,paste',theme_advanced_buttons1 : 'fontselect,fontsizeselect,|,bold,italic,underline,|,forecolor,backcolor,|,justifyleft,justifycenter,justifyright,|,courselink,link,|,bullist,numlist'}, tinymce_base);var tinymce_basic_with_images = Ext.apply({}, {plugins: 'safari,advimage,advlink,math,courselink,paste',theme_advanced_buttons1 : 'fontselect,fontsizeselect,|,bold,italic,underline,|,forecolor,backcolor,|,justifyleft,justifycenter,justifyright,|,courselink,link,image,math,|,bullist,numlist'}, tinymce_base);var tinymce_basic_with_images_forum = Ext.apply({}, {plugins: 'safari,advimage,advlink,math,courselink,paste',theme_advanced_buttons1 : 'fontselect,fontsizeselect,|,bold,italic,underline,|,forecolor,backcolor,|,justifyleft,justifycenter,justifyright,|,courselink,link,image,math,|,bullist,numlist'}, tinymce_base);var tinymce_basic_with_images_nocourse = Ext.apply({}, {plugins: 'safari,advimage,advlink,math,paste',theme_advanced_buttons1 : 'fontselect,fontsizeselect,|,bold,italic,underline,|,forecolor,backcolor,|,justifyleft,justifycenter,justifyright,|,link,image,math,|,bullist,numlist'}, tinymce_base);var tinymce_basic_with_images_twoline = Ext.apply({}, {plugins: 'safari,advimage,advlink,math,courselink,paste',theme_advanced_buttons1 : 'fontselect,fontsizeselect,|,justifyleft,justifycenter,justifyright,|,bullist,numlist',theme_advanced_buttons2 : 'bold,italic,underline,|,forecolor,backcolor,|,courselink,link,image,math'}, tinymce_base);var tinymce_extended = Ext.apply({}, {plugins: 'safari,advimage,advlink,media,preview,fullscreen,math,courselink,filelink,paste,table,style',theme_advanced_buttons1 : 'fontselect,fontsizeselect,bold,italic,underline,|,forecolor,backcolor,styleprops',theme_advanced_buttons2 : 'justifyleft,justifycenter,justifyright,|,indent,outdent,|,bullist,numlist,|,image,media,math,|,courselink,filelink,link,anchor,hr',theme_advanced_buttons3 : 'table,row_props,cell_props,row_before,row_after,delete_row,col_before,col_after,delete_col,split_cells,merge_cells,|,preview,fullscreen,code'}, tinymce_base);var tinymce_extended_wide = Ext.apply({}, {plugins: 'safari,advimage,advlink,media,preview,fullscreen,math,courselink,filelink,paste,table,style',theme_advanced_buttons1 : 'fontselect,fontsizeselect,bold,italic,underline,|,justifyleft,justifycenter,justifyright,indent,outdent,bullist,numlist,|,forecolor,backcolor,styleprops',theme_advanced_buttons2 : 'image,media,math,|,courselink,filelink,link,anchor,hr,|,table,row_props,cell_props,row_before,row_after,delete_row,col_before,col_after,delete_col,split_cells,merge_cells,|,preview,fullscreen,code'}, tinymce_base);tinyMCE.addI18n('en.courselink',{desc : 'Insert/edit course link'});tinyMCE.addI18n('en.filelink',{desc : 'Insert/edit file link',frame : 'Upload File Frame'});tinyMCE.addI18n('en.math',{desc : 'Insert/edit equation'});tinyMCE.addI18n('en.math_dlg',{title : 'Insert/edit equation',preview : 'Preview',refresh : 'Refresh',equation : 'Equation',format : 'Format',ascii_math : 'ASCII Math',latex : 'LaTeX',mathml : 'MathML',insert_symbol : 'Insert Symbol',symbol_instructions : 'Click the symbol to insert:',equation_text : 'Text',equation_over : 'Over',equation_under : 'Under'});</script><script type="text/javascript" src="/Scripts/MediaLoader_vv1D19A9336C1DE00.js"></script><script type="text/javascript" src="/Scripts/Player_vv1D19A9336C1DE00.js"></script><script type="text/javascript" src="/Scripts/BoilerPlate_vv1D19A9336C1DE00.js"></script>
  1309.  
  1310. <div id="player_FrameContent" class="default_font page_color" style="position:absolute; top:0px; bottom:0px; left:0px; right:0px;"></div>
  1311. <div style="display:none;">
  1312.  
  1313. <div id="footer_FrameContent" >
  1314. <div id="dropboxStatusAndButtons_FrameContent" class="dropbox_status_and_buttons color_light" style="display:none;">
  1315. <table cellpadding="0" cellspacing="0">
  1316. <tr>
  1317. <td width="100%"><div class="color_light dropbox_status" id="dropboxStatus_FrameContent"></div></td>
  1318. <td style="vertical-align:top;"><div class="dropboxButton" id="dropboxSurvey_FrameContent" ></div></td>
  1319. <td style="vertical-align:top;"><div class="dropboxButton" id="dropboxRubric_FrameContent" ></div></td>
  1320. <td style="vertical-align:top;"><div class="dropboxButton dropboxCompleteButton" id="dropboxCompleted_FrameContent" ></div></td>
  1321. <td style="vertical-align:top;"><div class="dropboxButton" id="dropboxOpenSplit_FrameContent"></div></td>
  1322. <td style="vertical-align:top;"><div class="dropboxButton" id="dropboxOpen_FrameContent"></div></td>
  1323. <td style="vertical-align:top;"><div class="dropboxButton" id="dropboxSaveProgress_FrameContent"></div></td>
  1324. <td style="vertical-align:top;"><div class="dropboxButton" id="dropboxSubmit_FrameContent"></div></td>
  1325. <td style="vertical-align:top;"><div class="dropboxButton" id="dropboxExamStart_FrameContent"></div></td>
  1326. <td style="vertical-align:top;"><div class="dropboxButton" id="dropboxExamPrint_FrameContent"></div></td>
  1327. <td style="vertical-align:top;"><div class="dropboxButton" id="dropboxScoSave_FrameContent"></div></td>
  1328. <td style="vertical-align:top;"><div class="dropboxButton dropboxScoCompleteButton" id="dropboxScoSaveComplete_FrameContent"></div></td>
  1329. <td style="vertical-align:top;">
  1330. <div id="dropboxScoreBox_FrameContent" class="dropboxScoreBox">
  1331. <div id="dropboxScore_FrameContent" ></div>
  1332. </div>
  1333. </td>
  1334. <td style="vertical-align:top;"><div class="dropboxButton" id="dropboxDetails_FrameContent"></div></td>
  1335. <td style="vertical-align:top;"><div class="dropboxButton dropboxReviewPeersButton" id="dropboxPeerReview_FrameContent"></div></td>
  1336. </tr>
  1337. </table>
  1338. <label id="footerLabelSizer_FrameContent" class="x-form-item-label" style="display:none;" ></label>
  1339. </div>
  1340. </div>
  1341.  
  1342. <div id="content_FrameContent" class="page_color default_font">
  1343. <iframe id="contentBody_FrameContent" name="contentBody_FrameContent" title="Course Content API Frame" class="x-panel-body page_color default_font" style="frameBorder:0;width:100%;height:100%;" frameborder="0" src="about:blank" allowfullscreen></iframe>
  1344. </div><!-- Custom CSS and Libs -->
  1345. </div>
  1346.  
  1347. <script type="text/javascript">
  1348. var playerPanel_FrameContent = null;
  1349.  
  1350. Ext.onReady(function() {
  1351. Ext.useShims = true;
  1352. Ext.QuickTips.init();
  1353.  
  1354. var panel = new PlayerPanel({
  1355. playerId: 'FrameContent',
  1356. //Start DF49 – CSS class for the grade status footer.
  1357. isDiscussionBoard:false,
  1358. isTeacher:false,
  1359. //End.
  1360. appRoot: '',
  1361. absoluteFrameRoot: 'https://wcps6429-caryhs-ccl.gradpoint.com/Frame',
  1362. courseId: "5838146",
  1363. sectionId: "",
  1364. enrollmentId: "9258098",
  1365. extraUriData: "",
  1366. courseName: "CHS Math III - Loughridge/Dunphy (2015 - 2016)",
  1367. sectionName: "",
  1368.  
  1369. courseTitle: "CHS Math III - Loughridge/Dunphy (2015 - 2016)",// course-section combined
  1370. sectionTitle: "",
  1371. userDisplayName: "Cory McKeel",
  1372. initialUrl: "/Content/Template.aspx?enrollmentid=9258098&itemid=3217pre",
  1373. prohibitedExts: [],
  1374. componentType: 'courseplayer',
  1375. showEmailLink: false,
  1376. showToc: true,
  1377. showNavNext: true,
  1378. showNavPrev: true,
  1379. showAuthorLink: false,
  1380. showHeader: true,
  1381. hasHeader: false,
  1382. showAdornments: true,
  1383. showRatings: true,
  1384. bhVars: {
  1385. domainId: '2199893',
  1386. domainName: 'Cary High School',
  1387. userSpace: 'wcps6429-caryhs-ccl',
  1388. courseName: 'CHS Math III - Loughridge/Dunphy (2015 - 2016)',
  1389. sectionName: '',
  1390. userId: '5390010',
  1391. userName: '1266784',
  1392. userFirst: 'Cory',
  1393. userLast: 'McKeel',
  1394. userRights: '131073',
  1395. enrollmentFirst: 'Cory',
  1396. enrollmentLast: 'McKeel',
  1397. enrollmentUser: '1266784',
  1398. enrollmentRights: '131073'
  1399. },
  1400. documentRoot: '/Resource/5390010/',
  1401. /* Localizable strings */
  1402. loadingCourseContentMessage: 'Loading course content. Please wait.',
  1403. loadingMessage: 'Loading ...',
  1404. rubricHeaderText: 'Grading criteria for \'{0}\'',
  1405. detailsHeaderText: 'Grading for \'{0}\' - {1}',
  1406. confirmSubmitAssignmentText : 'Are you sure that you want to submit this assignment?',
  1407. completedButtonString: 'Mark this activity complete',
  1408. submitAssignmentText : 'To submit your assignment, choose \'{0}\' and click OK.',
  1409. submitAssignmentTitle : 'Submit Your Assignment',
  1410. saveAssignmentText : 'To save your progress, choose \'{0}\' and click OK.',
  1411. saveAssignmentTitle : 'Save Your Progress',
  1412. errorTitle : 'Error',
  1413. submitWrongAssignmentTypeText : 'To submit this assignment you must choose a file of type \'{0}\'. You chose a file of type \'{1}\'.',
  1414. submitBlankAssignmentTypeText : 'You cannot submit a blank assignment.',
  1415. saveBlankAssignmentTypeText : 'You cannot save a blank assignment.',
  1416. savedAssignmentTitle : 'Saved Your Assignment',
  1417. submittedAssignmentTitle : 'Submitted Your Assignment',
  1418. submittedAssignmentText : 'Successfully submitted your assignment.',
  1419. savedAssignmentText : 'Successfully saved your assignment.',
  1420. serverErrorString: 'Server Error',
  1421. failedSubmittingAssignmentString: 'Failed to submit your assignment!',
  1422. failedSavingAssignmentString: 'Failed to save your assignment!',
  1423. errorWithMessageString: 'ERROR:{0}',
  1424. assignmentSubmitPanelHeader: 'Work for \'{0}\'',
  1425. assignmentAttachmentLabel: 'Attachment',
  1426. assignmentAttachmentsLabel: 'Attachments',
  1427. assignmentURLLabel: 'Web-site address',
  1428. exampleURL: 'Example: http://www.myschool.edu/',
  1429. assignmentCommentsLabel: 'Comments',
  1430. uploadFileMessage: 'Upload file',
  1431. uploadingFileProgressMessage: 'Uploading your file to the server.',
  1432. uploadingFileMessage: 'Uploading...',
  1433. uploadingFileCompleteTitle: 'Upload complete',
  1434. uploadingFileCompleteMessage: 'Finished uploading your file to the server',
  1435. failedUploadingAssignmentString: 'Failed to upload your assignment',
  1436. failedToLoadItemString: 'Failed to load course content. (status:{0}, url:{1})',
  1437. failedLoadingRubricString: 'Failed to load the rubric.',
  1438. failedLoadingGradeDetailsString: 'Failed to load the score details.',
  1439. failedLoadingPeerReviewListString: 'Failed to load peer review list.',
  1440. clickToRetryString: 'Click here to retry.',
  1441. scoSaveCompleteButtonString: 'Save and Close',
  1442. detailsButtonString: 'Details',
  1443. submitButtonString: 'Submit',
  1444. openButtonString: 'Open',
  1445. rubricButtonString: 'Rubric',
  1446. surveyButtonString: 'Survey',
  1447. saveButtonString: 'Save',
  1448. saveProgressString: 'Save your progress',
  1449. saveNotSubmitString: 'Save does not submit your assignment',
  1450. openLatestString: 'Open Saved',
  1451. openLatestTipString: 'Open your saved document for this assignment',
  1452. openSubmittedString: 'Open Submitted',
  1453. openSubmittedTipString: 'Open the document that you submitted for this assignment',
  1454. openOriginalString: 'Open Original',
  1455. openOriginalTipString: 'Open the template document for this assignment',
  1456. useFileWithDateString: 'Use: {0} - saved on {1}',
  1457. useFileString: 'Use: {0}',
  1458. changeFileString: 'Change',
  1459. submittedDateString: 'Submitted: {0}',
  1460. progressSavedString: 'Progress saved: {0}',
  1461. noProgressString: 'No saved progress',
  1462. wantToSubmitWithDateString: 'Do you want to submit {0}, saved on: {1}?',
  1463. wantToSubmitString: 'Do you want to submit {0}?',
  1464. deletePermanentlyConfirmString: 'This will delete {0} permanently and save your progress. Is this what you want to do?',
  1465. submittingDotDotDotString: 'Submitting ...',
  1466. submittingYourAssignmentString: 'Submitting your assignment...',
  1467. deletingAndSavingString: 'Deleting \"{0}\" and saving your progress...',
  1468. savingDotDotDotString: 'Saving...',
  1469. savingYourProgressString: 'Saving your progress...',
  1470. doneSaving: 'Done saving',
  1471. scoSaveError: 'Error: {0}\u003cbr/\u003ePlease try to save again.',
  1472. deleteAndSaveSuccessString: 'Successfully deleted {0} and saved your progress',
  1473. refreshString: 'Refresh',
  1474. closeString: 'Close',
  1475. showExcusedString: 'Show excused items',
  1476. attachmentsLabel: 'Attachments',
  1477. groupSetupString: 'Group Setup',
  1478. saveTitleString: 'Save',
  1479. saveMessageString: 'Successfully saved your data.',
  1480. unknownErrorString: 'Unknown error.',
  1481. _AddAttachment: 'Add attachment',
  1482. _SendMail: 'Send Mail',
  1483. _Edit: 'Edit',
  1484. _Delete: 'Delete',
  1485. _Print: 'Print',
  1486. _PrintStudent: 'Student',
  1487. _PrintTeacher: 'Teacher',
  1488. _PrintBoth: 'Both',
  1489. _Confirm: 'Confirm',
  1490. _InvalidAddress: 'The web-site address must start with \'http://\' or \'https://\'',
  1491. _InvalidAddressCaption: 'Invalid Address',
  1492. _InstructorNote: 'Instructor Note',
  1493. _InstructorNoteFrame: 'Instructor Note Frame',
  1494. _MissingAddress: 'You must specify an address after \'http://\' or \'https://\'',
  1495. _ModifiedFromOriginal: 'Modified from original',
  1496. _GetContentUrl: 'Copy URL for this content to the clipboard',
  1497. _ContentUrlTitle: 'Content URL',
  1498. _ContentUrlInstructions: 'Select the URL below and either press Ctrl+C on your keyboard or right click and choose \"Copy\" from the menu to copy it to the clipboard',
  1499. _Configure: 'Display Options',
  1500. _ShowScores: 'Show scores',
  1501. _SubmitProhibitedFileType: 'The system administrator has prohibited uploading files of type \'{0}\'.',
  1502. _ReviewPeers: 'Review Peers',
  1503. _Rate1Star: 'Click to rate this activity with 1 star',
  1504. _RateNStars: 'Click to rate this activity with {0} stars',
  1505. _AverageRating: 'Average: {0}',
  1506. _Next: 'Next',
  1507. _Previous: 'Previous',
  1508. _ChooseGoogleDoc: 'Choose Google Document',
  1509. _GoogleErrorAuthorize: 'Error Authorizing',
  1510. _GoogleSelectDocument: 'Select a document'
  1511.  
  1512.  
  1513. ,CourseItems: [{id:"3196",text:"01:Systems of Equations",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eStatus:&amp;nbsp;&lt;/td\u003e&lt;td\u003eCompleted&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",children:[{id:"3196pre",iconCls:"icon-unknown",text:"01:Pretest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003c/div\u003e",leaf:true},{id:"alg2gsys",iconCls:"icon-assignment",text:"Graphing Systems of Equations",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e90%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e90%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"alg2asys",iconCls:"icon-assignment",text:"Solving Systems Algebraically",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e90%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e90%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"alg2syin",iconCls:"icon-assignment",text:"Systems of Inequalities",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e80%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e80%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"alg2gr3d",iconCls:"icon-assignment",text:"Graphs in Three Dimensions",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e100%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e100%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"alg2sys3",iconCls:"icon-assignment",text:"Systems with Three Variables",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e60%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e60%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"3196post",iconCls:"icon-unknown",text:"01:Posttest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e80%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e80%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true}]},{id:"3197",text:"02:Quadratic Functions",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eStatus:&amp;nbsp;&lt;/td\u003e&lt;td\u003eCompleted&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",children:[{id:"3197pre",iconCls:"icon-unknown",text:"02:Pretest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003c/div\u003e",leaf:true},{id:"alg2fac1",iconCls:"icon-assignment",text:"Factoring Quadratics I",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e70%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e70%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"alg2fac2",iconCls:"icon-assignment",text:"Factoring Quadratics II",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e60%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e60%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"alg2queq",iconCls:"icon-assignment",text:"Quadratic Equations",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e70%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e70%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"3197post",iconCls:"icon-unknown",text:"02:Posttest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e93%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e93.33%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true}]},{id:"3198",text:"03:Complex Numbers",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eStatus:&amp;nbsp;&lt;/td\u003e&lt;td\u003eCompleted&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",children:[{id:"3198pre",iconCls:"icon-unknown",text:"03:Pretest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003c/div\u003e",leaf:true},{id:"alg2copx",iconCls:"icon-assignment",text:"Complex Numbers",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e60%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e60%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"alg2como",iconCls:"icon-assignment",text:"Operations with Complex Numbers",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e70%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e70%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"alg2comp",iconCls:"icon-assignment",text:"Completing the Square",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e60%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e60%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"alg2quad",iconCls:"icon-assignment",text:"The Quadratic Formula",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e60%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e60%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"pcalcomz",iconCls:"icon-assignment",text:"Complex Zeros",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e70%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e70%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"3198post",iconCls:"icon-unknown",text:"03:Posttest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"failing-score\" style=\"font-weight:normal\"\u003e68%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e68%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true}]},{id:"3200",text:"05:Polynomials",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eStatus:&amp;nbsp;&lt;/td\u003e&lt;td\u003eCompleted&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",children:[{id:"3200pre",iconCls:"icon-unknown",text:"05:Pretest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003c/div\u003e",leaf:true},{id:"pcalpoly",iconCls:"icon-assignment",text:"Global Behavior",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e70%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e70%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"pcalgpol",iconCls:"icon-assignment",text:"Local Behavior",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e80%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e80%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"alg2polf",iconCls:"icon-assignment",text:"Polynomials and Linear Factors",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e80%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e80%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"alg2divp",iconCls:"icon-assignment",text:"Dividing Polynomials",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e60%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e60%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"alg2pole",iconCls:"icon-assignment",text:"Solving Polynomial Equations",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e60%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e60%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"pcalzero",iconCls:"icon-assignment",text:"Real Zeros",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e60%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e60%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"3200post",iconCls:"icon-unknown",text:"05:Posttest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"failing-score\" style=\"font-weight:normal\"\u003e66%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e66.66%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true}]},{id:"3201",text:"06:Rational and Radical Equations",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eStatus:&amp;nbsp;&lt;/td\u003e&lt;td\u003eCompleted&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",children:[{id:"3201pre",iconCls:"icon-unknown",text:"06:Pretest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003c/div\u003e",leaf:true},{id:"alg2inva",iconCls:"icon-assignment",text:"Inverse Variation",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e80%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e80%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"alg2rat",iconCls:"icon-assignment",text:"Rational Functions ",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e60%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e60%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"alg2rex",iconCls:"icon-assignment",text:"Rational Expressions",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e70%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e70%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"alg2cora",iconCls:"icon-assignment",text:"Combining Rational Expressions",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e60%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e60%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"alg2sora",iconCls:"icon-assignment",text:"Solving Rational Equations",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e70%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e70%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"alg2rad",iconCls:"icon-assignment",text:"Radical Equations",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e60%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e60%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"3201post",iconCls:"icon-unknown",text:"06:Posttest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e76%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e76.66%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true}]},{id:"3202",text:"07:Exponential and Logarithmic Equations",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eStatus:&amp;nbsp;&lt;/td\u003e&lt;td\u003eCompleted&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",children:[{id:"3202pre",iconCls:"icon-unknown",text:"07:Pretest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003c/div\u003e",leaf:true},{id:"alg2expo",iconCls:"icon-assignment",text:"Exponential Functions",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e60%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e60%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"alg2log",iconCls:"icon-assignment",text:"Logarithmic Functions as Inverses ",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e90%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e90%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"alg2logp",iconCls:"icon-assignment",text:"Properties of Logarithms",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e70%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e70%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"alg2exeq",iconCls:"icon-assignment",text:"Exponential Equations",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e60%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e60%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"alg2loge",iconCls:"icon-assignment",text:"Logarithmic Equations",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e80%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e80%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"3202post",iconCls:"icon-unknown",text:"07:Posttest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e76%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e76%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true}]},{id:"3203",text:"08:Sequences and Series",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eStatus:&amp;nbsp;&lt;/td\u003e&lt;td\u003eCompleted&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",children:[{id:"3203pre",iconCls:"icon-unknown",text:"08:Pretest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003c/div\u003e",leaf:true},{id:"alg2aseq",iconCls:"icon-assignment",text:"Arithmetic Sequences",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e100%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e100%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"alg2gseq",iconCls:"icon-assignment",text:"Geometric Sequences",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e60%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e60%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"alg2gser",iconCls:"icon-assignment",text:"Geometric Series",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e60%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e60%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"3203post",iconCls:"icon-unknown",text:"08:Posttest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e86%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e86.66%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true}]},{id:"3205",text:"10:Trigonometric Functions",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eStatus:&amp;nbsp;&lt;/td\u003e&lt;td\u003eCompleted&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",children:[{id:"3205pre",iconCls:"icon-unknown",text:"10:Pretest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003c/div\u003e",leaf:true},{id:"pcalradn",iconCls:"icon-assignment",text:"Radians and Degrees",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e70%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e70%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"pcalunit",iconCls:"icon-assignment",text:"The Unit Circle",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e70%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e70%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"pcalsinc",iconCls:"icon-assignment",text:"Graphs of Sine and Cosine",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e70%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e70%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"pcaltide",iconCls:"icon-assignment",text:"Verifying Identities",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e80%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e80%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"3205post",iconCls:"icon-unknown",text:"10:Posttest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"failing-score\" style=\"font-weight:normal\"\u003e65%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e65%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true}]},{id:"VGCZN",text:"Review Test Part 1",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eStatus:&amp;nbsp;&lt;/td\u003e&lt;td\u003eCompleted&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",children:[{id:"VBBN7",iconCls:"icon-unknown",text:"Review Test Part 1",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e80%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e80.55%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true}]},{id:"3207",text:"12:Parallel and Perpendicular Lines",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eStatus:&amp;nbsp;&lt;/td\u003e&lt;td\u003eCompleted&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",children:[{id:"3207pre",iconCls:"icon-unknown",text:"12:Pretest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003c/div\u003e",leaf:true},{id:"geoppara",iconCls:"icon-assignment",text:"Proving Lines Parallel",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e100%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e100%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"3207post",iconCls:"icon-unknown",text:"12:Posttest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e88%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e88%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true}]},{id:"3209",text:"14:Triangles",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eStatus:&amp;nbsp;&lt;/td\u003e&lt;td\u003eCompleted&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",children:[{id:"3209pre",iconCls:"icon-unknown",text:"14:Pretest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003c/div\u003e",leaf:true},{id:"3209post",iconCls:"icon-unknown",text:"14:Posttest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e80%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e80%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true}]},{id:"3210",text:"15:Quadrilaterals",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eStatus:&amp;nbsp;&lt;/td\u003e&lt;td\u003eCompleted&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",children:[{id:"3210pre",iconCls:"icon-unknown",text:"15:Pretest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003c/div\u003e",leaf:true}]},{id:"3212",text:"17:Proportions and Similarity",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eStatus:&amp;nbsp;&lt;/td\u003e&lt;td\u003eCompleted&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",children:[{id:"3212pre",iconCls:"icon-unknown",text:"17:Pretest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003c/div\u003e",leaf:true},{id:"georatpro",iconCls:"icon-assignment",text:"Ratios and Proportions",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e70%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e70%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"geosimtr",iconCls:"icon-assignment",text:"Similarity in Right Triangles",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e70%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e70%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"3212post",iconCls:"icon-unknown",text:"17:Posttest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e84%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e84%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true}]},{id:"3213",text:"18:Area and Perimeter",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eStatus:&amp;nbsp;&lt;/td\u003e&lt;td\u003eCompleted&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",children:[{id:"3213pre",iconCls:"icon-unknown",text:"18:Pretest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003c/div\u003e",leaf:true},{id:"geocircar",iconCls:"icon-assignment",text:"Circles and Arcs",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e60%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e60%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"geoareac",iconCls:"icon-assignment",text:"Areas of Circles and Sectors",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e60%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e60%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"3213post",iconCls:"icon-unknown",text:"18:Posttest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"failing-score\" style=\"font-weight:normal\"\u003e61%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e61.66%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true}]},{id:"3214",text:"19:Circles and Parabolas",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eStatus:&amp;nbsp;&lt;/td\u003e&lt;td\u003eCompleted&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",children:[{id:"3214pre",iconCls:"icon-unknown",text:"19:Pretest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003c/div\u003e",leaf:true},{id:"geochord",iconCls:"icon-assignment",text:"Chords and Arcs",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e100%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e100%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"geoinscr",iconCls:"icon-assignment",text:"Inscribed Angles",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e70%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e70%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"geoangsg",iconCls:"icon-assignment",text:"Angle Measures and Segment Lengths",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e70%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e70%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"3214post",iconCls:"icon-unknown",text:"19:Posttest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"failing-score\" style=\"font-weight:normal\"\u003e60%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e60%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true}]},{id:"3215",text:"20:Statistical Thinking",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eStatus:&amp;nbsp;&lt;/td\u003e&lt;td\u003eCompleted&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",children:[{id:"3215pre",iconCls:"icon-unknown",text:"20:Pretest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cimg src=\"/Images/s.gif\" alt=\"Completed\" title=\"\" ext:qtip=\"Completed\" class=\'gradebook_check_image\'/\u003e\u003c/div\u003e",leaf:true},{id:"stadata",iconCls:"icon-assignment",text:"Types of Data",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e60%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e60%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"stacritic",iconCls:"icon-assignment",text:"Critical Thinking",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e70%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e70%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"stasample",iconCls:"icon-assignment",text:"Collecting Sample Data",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e70%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e70%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true},{id:"3215post",iconCls:"icon-unknown",text:"20:Posttest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan class=\"passing-score\" style=\"font-weight:normal\"\u003e75%\u003c/span\u003e\u003cdiv class=\"gbg-tip\" ext:qtip=\"&lt;table\u003e&lt;tr\u003e&lt;td class=&#39;b&#39;\u003eScore:&amp;nbsp;&lt;/td\u003e&lt;td\u003e75%&lt;/td\u003e&lt;/tr\u003e&lt;/table\u003e\"\u003e\u003c/div\u003e\u003c/div\u003e",leaf:true}]},{id:"3217",text:"22:The Normal Distribution",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan\u003e&nbsp;\u003c/span\u003e\u003c/div\u003e",children:[{id:"3217pre",iconCls:"icon-unknown",text:"22:Pretest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan\u003e&nbsp;\u003c/span\u003e\u003c/div\u003e",leaf:true},{id:"stanormal",iconCls:"icon-assignment",text:"The Standard Normal Distribution",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan\u003e&nbsp;\u003c/span\u003e\u003c/div\u003e",leaf:true},{id:"standist",iconCls:"icon-assignment",text:"Applications",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan\u003e&nbsp;\u003c/span\u003e\u003c/div\u003e",leaf:true},{id:"staestim",iconCls:"icon-assignment",text:"Sampling Distributions",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan\u003e&nbsp;\u003c/span\u003e\u003c/div\u003e",leaf:true},{id:"stalimit",iconCls:"icon-assignment",text:"The Central Limit Theorem",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan\u003e&nbsp;\u003c/span\u003e\u003c/div\u003e",leaf:true},{id:"stapopul",iconCls:"icon-assignment",text:"Population Proportion",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan\u003e&nbsp;\u003c/span\u003e\u003c/div\u003e",leaf:true},{id:"3217post",iconCls:"icon-unknown",text:"22:Posttest",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan\u003e&nbsp;\u003c/span\u003e\u003c/div\u003e",leaf:true}]},{id:"430rmodule",text:"Review Test Part 2",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan\u003e&nbsp;\u003c/span\u003e\u003c/div\u003e",children:[{id:"430review",iconCls:"icon-unknown",text:"Review Test Part 2",gradeHtml:"\u003cdiv class=\" gbg-in-ct\" style=\"width:70px;\"\u003e\u003cspan\u003e&nbsp;\u003c/span\u003e\u003c/div\u003e",leaf:true}]}],
  1514.  
  1515. isTeacher: false,
  1516. showExcusedCheckbox: true,
  1517. showExcused: false,
  1518. showScores: true
  1519.  
  1520.  
  1521. ,googleIntEnabled: false
  1522.  
  1523.  
  1524. });
  1525.  
  1526. playerPanel_FrameContent = panel;
  1527.  
  1528. /* Customize the ext yes/no text */
  1529. Ext.MessageBox.buttonText.yes = 'Yes';
  1530. Ext.MessageBox.buttonText.no = 'No';
  1531. Ext.MessageBox.buttonText.ok = 'OK';
  1532. Ext.MessageBox.buttonText.cancel = 'Cancel';
  1533.  
  1534.  
  1535. ////////////////////////////////////////////////////////////
  1536. // API Implementation
  1537. ////////////////////////////////////////////////////////////
  1538. function apiHost()
  1539. {
  1540. this.navToItem = panel.navToItem.createDelegate(panel);
  1541. this.navPrev = panel.navPrev.createDelegate(panel);
  1542. this.navNext = panel.navNext.createDelegate(panel);
  1543. this.navToExternal = panel.navToExternal.createDelegate(panel);
  1544. this.navExit = panel.navExit.createDelegate(panel);
  1545. this.enterItem = panel.enterItem.createDelegate(panel);
  1546. this.leaveItem = panel.leaveItem.createDelegate(panel);
  1547. this.setItemInfoJson = panel.setItemInfoJson.createDelegate(panel);
  1548. this.getSectionSummary = panel.getSectionSummary.createDelegate(panel);
  1549. this.setLoaded = panel.setLoaded.createDelegate(panel);
  1550.  
  1551. this.LMSInitialize = panel.LMSInitialize.createDelegate(panel);
  1552. this.LMSFinish = panel.LMSFinish.createDelegate(panel);
  1553. this.LMSGetValue = panel.LMSGetValue.createDelegate(panel);
  1554. this.LMSSetValue = panel.LMSSetValue.createDelegate(panel);
  1555. this.LMSCommit = panel.LMSCommit.createDelegate(panel);
  1556. this.LMSGetLastError = panel.LMSGetLastError.createDelegate(panel);
  1557. this.LMSGetErrorString = panel.LMSGetErrorString.createDelegate(panel);
  1558. this.LMSGetDiagnostic = panel.LMSGetDiagnostic.createDelegate(panel);
  1559.  
  1560. this.Initialize = panel.Initialize.createDelegate(panel);
  1561. this.Terminate = panel.Terminate.createDelegate(panel);
  1562. this.GetValue = panel.GetValue.createDelegate(panel);
  1563. this.SetValue = panel.SetValue.createDelegate(panel);
  1564. this.Commit = panel.Commit.createDelegate(panel);
  1565. this.GetLastError = panel.GetLastError.createDelegate(panel);
  1566. this.GetErrorString = panel.GetErrorString.createDelegate(panel);
  1567. this.GetDiagnostic = panel.GetDiagnostic.createDelegate(panel);
  1568. }
  1569.  
  1570. // These things are global and will not work with multiple player components on the same page (unless they are included in an iFrame
  1571. goCourseApiHost = new apiHost();
  1572. API = goCourseApiHost;
  1573. API_1484_11 = goCourseApiHost;
  1574.  
  1575.  
  1576.  
  1577. (function() {
  1578. window.frames['contentBody_FrameContent'].location.replace(panel.initialUrl);
  1579. }).defer(500);
  1580. });
  1581.  
  1582. // These things are global and will not work with multiple player components on the same page (unless they are included in an iFrame
  1583. function setItem(newGradingItem) {
  1584. return playerPanel_FrameContent.setItem(newGradingItem);
  1585. }
  1586. function getItem() {
  1587. return playerPanel_FrameContent.getItem();
  1588. }
  1589. function saveItem() {
  1590. return playerPanel_FrameContent.saveItem();
  1591. }
  1592. function setItemPanel(newPanel) {
  1593. return playerPanel_FrameContent.setItemPanel(newPanel);
  1594. }
  1595. function closeItem() {
  1596. return playerPanel_FrameContent.closeItem();
  1597. }
  1598. function itemSaving(item) {
  1599. return playerPanel_FrameContent.itemSaving(item);
  1600. }
  1601. function itemSaved(xmlNode) {
  1602. return playerPanel_FrameContent.itemSaved(xmlNode);
  1603. }
  1604. function configureGroupSetup(sectionId) {
  1605. return playerPanel_FrameContent.configureGroupSetup(sectionId);
  1606. }
  1607. function closeWindows(refresh) {
  1608. return playerPanel_FrameContent.closeWindows(refresh);
  1609. }
  1610.  
  1611. //This is used by the exam review page. We need to figure out a way to make this refresh happen without a global function
  1612. function recordItemTimeSpent() {
  1613. return playerPanel_FrameContent.recordItemTimeSpent();
  1614. }
  1615.  
  1616. var DropboxType={SingleDocument:0,DocumentTemplate:1,MultipleDocuments:2,NotesOnly:3,Url:4,AudioRecording:5};
  1617. var CompletionTrigger={Minutes:0,Submission:1,PassingScore:2,NotSet:-1};
  1618.  
  1619.  
  1620. </script>
  1621.  
  1622. </div>
  1623.  
  1624. <script type="text/javascript">
  1625. var jstz=function(){var b=function(a){a=-a.getTimezoneOffset();return null!==a?a:0},c=function(){return b(new Date(2010,0,1,0,0,0,0))},f=function(){return b(new Date(2010,5,1,0,0,0,0))},e=function(){var a=c(),d=f(),b=c()-f();return new jstz.TimeZone(jstz.olson.timezones[0>b?a+",1":0<b?d+",1,s":a+",0"])};return{determine_timezone:function(){"undefined"!==typeof console&&console.log("jstz.determine_timezone() is deprecated and will be removed in an upcoming version. Please use jstz.determine() instead.");
  1626. return e()},determine:e,date_is_dst:function(a){var d=5<a.getMonth()?f():c(),a=b(a);return 0!==d-a}}}();jstz.TimeZone=function(b){var c=null,c=b;"undefined"!==typeof jstz.olson.ambiguity_list[c]&&function(){for(var b=jstz.olson.ambiguity_list[c],e=b.length,a=0,d=b[0];a<e;a+=1)if(d=b[a],jstz.date_is_dst(jstz.olson.dst_start_dates[d])){c=d;break}}();return{name:function(){return c}}};jstz.olson={};
  1627. jstz.olson.timezones={"-720,0":"Etc/GMT+12","-660,0":"Pacific/Pago_Pago","-600,1":"America/Adak","-600,0":"Pacific/Honolulu","-570,0":"Pacific/Marquesas","-540,0":"Pacific/Gambier","-540,1":"America/Anchorage","-480,1":"America/Los_Angeles","-480,0":"Pacific/Pitcairn","-420,0":"America/Phoenix","-420,1":"America/Denver","-360,0":"America/Guatemala","-360,1":"America/Chicago","-360,1,s":"Pacific/Easter","-300,0":"America/Bogota","-300,1":"America/New_York","-270,0":"America/Caracas","-240,1":"America/Halifax",
  1628. "-240,0":"America/Santo_Domingo","-240,1,s":"America/Asuncion","-210,1":"America/St_Johns","-180,1":"America/Godthab","-180,0":"America/Argentina/Buenos_Aires","-180,1,s":"America/Montevideo","-120,0":"America/Noronha","-120,1":"Etc/GMT+2","-60,1":"Atlantic/Azores","-60,0":"Atlantic/Cape_Verde","0,0":"Etc/UTC","0,1":"Europe/London","60,1":"Europe/Berlin","60,0":"Africa/Lagos","60,1,s":"Africa/Windhoek","120,1":"Asia/Beirut","120,0":"Africa/Johannesburg","180,1":"Europe/Moscow","180,0":"Asia/Baghdad",
  1629. "210,1":"Asia/Tehran","240,0":"Asia/Dubai","240,1":"Asia/Yerevan","270,0":"Asia/Kabul","300,1":"Asia/Yekaterinburg","300,0":"Asia/Karachi","330,0":"Asia/Kolkata","345,0":"Asia/Kathmandu","360,0":"Asia/Dhaka","360,1":"Asia/Omsk","390,0":"Asia/Rangoon","420,1":"Asia/Krasnoyarsk","420,0":"Asia/Jakarta","480,0":"Asia/Shanghai","480,1":"Asia/Irkutsk","525,0":"Australia/Eucla","525,1,s":"Australia/Eucla","540,1":"Asia/Yakutsk","540,0":"Asia/Tokyo","570,0":"Australia/Darwin","570,1,s":"Australia/Adelaide",
  1630. "600,0":"Australia/Brisbane","600,1":"Asia/Vladivostok","600,1,s":"Australia/Sydney","630,1,s":"Australia/Lord_Howe","660,1":"Asia/Kamchatka","660,0":"Pacific/Noumea","690,0":"Pacific/Norfolk","720,1,s":"Pacific/Auckland","720,0":"Pacific/Tarawa","765,1,s":"Pacific/Chatham","780,0":"Pacific/Tongatapu","780,1,s":"Pacific/Apia","840,0":"Pacific/Kiritimati"};
  1631. jstz.olson.dst_start_dates={"America/Denver":new Date(2011,2,13,3,0,0,0),"America/Mazatlan":new Date(2011,3,3,3,0,0,0),"America/Chicago":new Date(2011,2,13,3,0,0,0),"America/Mexico_City":new Date(2011,3,3,3,0,0,0),"Atlantic/Stanley":new Date(2011,8,4,7,0,0,0),"America/Asuncion":new Date(2011,9,2,3,0,0,0),"America/Santiago":new Date(2011,9,9,3,0,0,0),"America/Campo_Grande":new Date(2011,9,16,5,0,0,0),"America/Montevideo":new Date(2011,9,2,3,0,0,0),"America/Sao_Paulo":new Date(2011,9,16,5,0,0,0),"America/Los_Angeles":new Date(2011,
  1632. 2,13,8,0,0,0),"America/Santa_Isabel":new Date(2011,3,5,8,0,0,0),"America/Havana":new Date(2011,2,13,2,0,0,0),"America/New_York":new Date(2011,2,13,7,0,0,0),"Asia/Gaza":new Date(2011,2,26,23,0,0,0),"Asia/Beirut":new Date(2011,2,27,1,0,0,0),"Europe/Minsk":new Date(2011,2,27,2,0,0,0),"Europe/Helsinki":new Date(2011,2,27,4,0,0,0),"Europe/Istanbul":new Date(2011,2,28,5,0,0,0),"Asia/Damascus":new Date(2011,3,1,2,0,0,0),"Asia/Jerusalem":new Date(2011,3,1,6,0,0,0),"Africa/Cairo":new Date(2010,3,30,4,0,0,
  1633. 0),"Asia/Yerevan":new Date(2011,2,27,4,0,0,0),"Asia/Baku":new Date(2011,2,27,8,0,0,0),"Pacific/Auckland":new Date(2011,8,26,7,0,0,0),"Pacific/Fiji":new Date(2010,11,29,23,0,0,0),"America/Halifax":new Date(2011,2,13,6,0,0,0),"America/Goose_Bay":new Date(2011,2,13,2,1,0,0),"America/Miquelon":new Date(2011,2,13,5,0,0,0),"America/Godthab":new Date(2011,2,27,1,0,0,0)};
  1634. jstz.olson.ambiguity_list={"America/Denver":["America/Denver","America/Mazatlan"],"America/Chicago":["America/Chicago","America/Mexico_City"],"America/Asuncion":["Atlantic/Stanley","America/Asuncion","America/Santiago","America/Campo_Grande"],"America/Montevideo":["America/Montevideo","America/Sao_Paulo"],"Asia/Beirut":"Asia/Gaza Asia/Beirut Europe/Minsk Europe/Helsinki Europe/Istanbul Asia/Damascus Asia/Jerusalem Africa/Cairo".split(" "),"Asia/Yerevan":["Asia/Yerevan","Asia/Baku"],"Pacific/Auckland":["Pacific/Auckland",
  1635. "Pacific/Fiji"],"America/Los_Angeles":["America/Los_Angeles","America/Santa_Isabel"],"America/New_York":["America/Havana","America/New_York"],"America/Halifax":["America/Goose_Bay","America/Halifax"],"America/Godthab":["America/Miquelon","America/Godthab"]};
  1636. </script>
  1637.  
  1638. <script type="text/javascript">
  1639. // this is the source from frame.js
  1640. FrameMethods = {
  1641. gp_host: "https://www.pearsonmaterial.com",
  1642. currentEnrollmentId: '',
  1643. isTestStudent: false,
  1644.  
  1645. init: function(config) {
  1646. Ext.QuickTips.init();
  1647. Ext.apply(this, config);
  1648. this.getDomainType();
  1649. //Update the user display name
  1650. Ext.fly('userDropdown').update(FRAME_API.userDisplay);
  1651. Ext.fly('h-home-link').update(FRAME_API.homeLabel);
  1652.  
  1653. //Update the version tooltip for the logo
  1654. // this.versionTooltip = new Ext.ToolTip({
  1655. // title: 'BrainHoney',
  1656. // target: 'frame-top-right-header',
  1657. // html: FRAME_API.appVersion,
  1658. // mouseOffset: [-150, -20],
  1659. // showDelay: 3000
  1660. // });
  1661.  
  1662. Ext.fly('frame-top-right-header').on('dblclick', function() {
  1663. this.showPageDetails();
  1664. }, this);
  1665.  
  1666. //Hook up events for links
  1667. Ext.fly('h-home-btn').on('click', function() { this.launchHome() }, this);
  1668. Ext.fly('h-course-btn').on('click', this.showCoursesMenu, this);
  1669. Ext.fly('h-catalog-btn').on('click', function() {
  1670. if(!Ext.isEmpty(FRAME_API.catalogEntries)) {
  1671. window.location = FRAME_API.frameRoot + '/Component/CatalogHost?catalog=' + encodeURIComponent(FRAME_API.catalogEntries[0].url) + '&name=' + encodeURIComponent(FRAME_API.catalogEntries[0].name);
  1672. }
  1673. }, this);
  1674. Ext.fly('h-admin-btn').on('click', function() {
  1675. window.location = FRAME_API.frameRoot + '/Component/AdminDomainDetail?domainid=' + FRAME_API.domainId;
  1676. }, this);
  1677.  
  1678. Ext.fly('frame-view-home').on('click', function() { this.launchHome() }, this);
  1679. Ext.fly('frame-view-syllabus').on('click', function() { this.launchSyllabus() }, this);
  1680. Ext.fly('frame-view-course').on('click', function() { this.launchCourseViewer() }, this);
  1681. Ext.fly('frame-view-grades').on('click', function() { this.launchGrades() }, this);
  1682. Ext.fly('frame-view-gradebook').on('click', function() { this.launchGradebook() }, this);
  1683. Ext.fly('frame-view-finalgrades').on('click', function() { this.launchFinalGrades() }, this);
  1684. Ext.fly('frame-view-objectives').on('click', function() { this.launchObjectiveSummary() }, this);
  1685. Ext.fly('frame-view-activity').on('click', function () { this.launchActivity() }, this);
  1686. Ext.fly('gp-resources-home-tab').on('click', function() { this.launchGpResources() }, this);
  1687. Ext.fly('gp-reports-home-tab').on('click', function() { this.launchGpReports() }, this);
  1688.  
  1689.  
  1690. Ext.fly('frame-view-syllabus').setVisibilityMode(Ext.Element.DISPLAY);
  1691. Ext.fly('frame-view-course').setVisibilityMode(Ext.Element.DISPLAY);
  1692. Ext.fly('frame-view-grades').setVisibilityMode(Ext.Element.DISPLAY);
  1693. Ext.fly('frame-view-gradebook').setVisibilityMode(Ext.Element.DISPLAY);
  1694. Ext.fly('frame-view-finalgrades').setVisibilityMode(Ext.Element.DISPLAY);
  1695. Ext.fly('frame-view-objectives').setVisibilityMode(Ext.Element.DISPLAY);
  1696. Ext.fly('frame-view-activity').setVisibilityMode(Ext.Element.DISPLAY);
  1697.  
  1698. if (ref = Ext.fly('frame-view-testanalytics')) {
  1699. ref.on('click', function () { this.launchTestAnalytics() }, this);
  1700. ref.setVisibilityMode(Ext.Element.DISPLAY);
  1701. }
  1702.  
  1703. Ext.fly('h-catalog-btn').setVisibilityMode(Ext.Element.DISPLAY);
  1704. Ext.fly('h-admin-btn').setVisibilityMode(Ext.Element.DISPLAY);
  1705.  
  1706. Ext.fly('gp-reports-home-tab').setVisible(false);
  1707. Ext.fly('gp-resources-home-tab').setVisible(true);
  1708.  
  1709. /*Removed the gp-tools condition*/
  1710.  
  1711. Ext.fly('h-home-btn').setVisible(true);
  1712. if(!Ext.isEmpty(FRAME_API.enrollments)) {
  1713. Ext.fly('h-course-btn').setVisible(true);
  1714. }
  1715. else {
  1716. Ext.fly('h-course-btn-dropdown').setVisibilityMode(Ext.Element.DISPLAY);
  1717. Ext.fly('h-course-btn-dropdown').setVisible(false);
  1718. }
  1719. if(!Ext.isEmpty(FRAME_API.catalogEntries)) {
  1720. Ext.fly('h-catalog-btn').setVisible(true);
  1721. }
  1722.  
  1723. // get enrollments and determine the enrollment rights
  1724. var enrollments = FRAME_API.enrollments;
  1725. var studentEnrollment = false;
  1726. var nonStudentEnrollment = false;
  1727. for(var i=0; i<enrollments.length; i++) {
  1728. var enrollment = enrollments[i];
  1729. if(!Ext.isEmpty(enrollment.id) && enrollment.isStudent) {
  1730. studentEnrollment = true;
  1731. }
  1732. if(!Ext.isEmpty(enrollment.id) && (enrollment.canEdit || enrollment.isTeacher || enrollment.canReportGrades || FRAME_API.hasRight(Privileges.ReportCourse, enrollment.courseRights))) {
  1733. nonStudentEnrollment = true;
  1734. }
  1735. }
  1736.  
  1737. /* loop through all enrollments
  1738. turn off reports if all enrollments are student enrollments OR
  1739. there are no enrollments and no admin, teach a course permissions
  1740.  
  1741. alert ("student: " + studentEnrollment +", non-student: " + nonStudentEnrollment + ", teach a course: " + FRAME_API.canTeachACourse + ", admin: " + FRAME_API.isAdmin + ", user id: " + FRAME_API.userId);
  1742. */
  1743.  
  1744. if (studentEnrollment || (enrollments.length == 0 && !FRAME_API.isAdmin && !FRAME_API.canTeachACourse)){
  1745. Ext.fly('gp-reports-home-tab').setVisible(false);
  1746. Ext.fly('gp-reports-home-tab').setStyle('display', 'none');
  1747. Ext.fly('gp-tools').setVisible(false);
  1748. Ext.fly('gp-tools').setStyle('display', 'none');
  1749. }
  1750.  
  1751. if (FRAME_API.hasRight(Privileges.ControlDomain, FRAME_API.rights) || FRAME_API.contentState.type == 'syllabus' || FRAME_API.canTeachACourse) {
  1752. Ext.fly('gp-tools').setVisible(true);
  1753. }
  1754.  
  1755. // turn on reports if there is ateleast one non student enrollment or admin or teach a course permissions
  1756. if ((FRAME_API.isAdmin || FRAME_API.canTeachACourse || nonStudentEnrollment || FRAME_API.canProxy) && (FRAME_API.rights != '0' && FRAME_API.rights != '131072')) {
  1757. Ext.fly('gp-reports-home-tab').setVisible(true);
  1758. }
  1759.  
  1760. if(FRAME_API.isAdmin) {
  1761. Ext.fly('h-admin-btn').setVisible(true);
  1762. }
  1763.  
  1764. Ext.fly('frame-admin-dashboard').on('click', function() {
  1765. var domainId = this.getAdminDomainId();
  1766. window.location = FRAME_API.frameRoot + '/Component/AdminDomainDashboard?domainid=' + domainId;
  1767. }, this);
  1768. Ext.fly('frame-admin-domaindetail').on('click', function() {
  1769. var domainId = this.getAdminDomainId();
  1770. window.location = FRAME_API.frameRoot + '/Component/AdminDomainDetail?domainid=' + domainId;
  1771. }, this);
  1772. Ext.fly('frame-admin-users').on('click', function() {
  1773. var domainId = this.getAdminDomainId();
  1774. window.location = FRAME_API.frameRoot + '/Component/AdminUsers?domainid=' + domainId;
  1775. }, this);
  1776. Ext.fly('frame-admin-courses').on('click', function() {
  1777. var domainId = this.getAdminDomainId();
  1778. window.location = FRAME_API.frameRoot + '/Component/AdminCourses?domainid=' + domainId;
  1779. }, this);
  1780.  
  1781. if(FRAME_API.isProxy) {
  1782. Ext.fly('frame-logout').update(this._Unproxy);
  1783. }
  1784. Ext.fly('frame-logout').on('click', function() {
  1785. if(FRAME_API.isProxy) {
  1786. FRAME_API.unproxy();
  1787. }
  1788. else {
  1789. FRAME_API.logout();
  1790. }
  1791. }, this);
  1792. Ext.fly('hdHelp').on('click', function() {
  1793. FRAME_API.launchHelp();
  1794. }, this);
  1795. Ext.fly('frame-account').on('click', this.showAccountMenu, this);
  1796. Ext.fly('frame-teachacourse').on('click', this.launchTeachACourse, this);
  1797. Ext.fly('frame-calendar').on('click', this.launchCalendar, this);
  1798. Ext.fly('frame-communicate').on('click', this.showCommunicateMenu, this);
  1799. Ext.fly('gp-tools').on('click', this.showToolsMenu, this);
  1800.  
  1801. if(FRAME_API.canTeachACourse) {
  1802. Ext.fly('frame-teachacourse').setStyle('display', '');
  1803. }
  1804.  
  1805. // Add menuitems
  1806. for (var i=0;i < FRAME_API.menuEntries.length;i++)
  1807. {
  1808. var entry = FRAME_API.menuEntries[i];
  1809.  
  1810. var target = '';
  1811. switch (entry.type)
  1812. {
  1813. case 'Home': target = 'sh-home'; break;
  1814. case 'Course': target = 'sh-courses'; break;
  1815. case 'Admin': target = 'sh-admin'; break;
  1816. case 'Top': target = 'frame-top-header-buttons'; break;
  1817. }
  1818.  
  1819. if (entry.type == 'Top') {
  1820. // Create Top menu with the given icon.
  1821. var entryId = entry.id;
  1822. var menuDiv = Ext.DomHelper.append(target, {
  1823. tag: 'div',
  1824. id: 'h-' + entryId + '-btn',
  1825. cls: 'top_header_button',
  1826. children: [{
  1827. tag: 'div',
  1828. cls: 'top_header_button_img custom_top_header_' + entryId,
  1829. 'ext:qtip': entry.text,
  1830. 'data-label': entry.text
  1831. }]
  1832. });
  1833. var icon = this.getIconPath(entry);
  1834. if (icon) {
  1835. Ext.fly(menuDiv).set({ 'style': 'background-image:url(' + icon + ');background-position:50% 50%;background-repeat:no-repeat no-repeat;' });
  1836. }
  1837. Ext.fly(menuDiv).on('click', this.launchCustomMenuItem.createDelegate(this, [
  1838. entry.url, entry.target, entry.features
  1839. ]));
  1840. Ext.fly('h-' + entryId + '-btn').setVisibilityMode(Ext.Element.DISPLAY);
  1841.  
  1842. // Check for submenus for top menu, if any create submenus under top menu.
  1843. if (entry.submenus.length > 0) {
  1844. var subMenu = Ext.DomHelper.append('frame-sub-header', {
  1845. tag: 'div',
  1846. id: 'sh-' + entryId,
  1847. style: 'display:none'
  1848. });
  1849.  
  1850. for (var s = 0; s < entry.submenus.length; s++) {
  1851. this.addSubmenu(entry.submenus[s], subMenu);
  1852. }
  1853. }
  1854. }
  1855.  
  1856. if (!Ext.isEmpty(target))
  1857. {
  1858. var menu = {
  1859. tag: 'div',
  1860. cls: 'sub_header_list',
  1861. children: [{
  1862. tag: 'a',
  1863. cls: 'no_underline_link',
  1864. href: 'javascript:void(0)',
  1865. html: entry.text
  1866. }]
  1867. };
  1868. var div;
  1869. if(entry.type == 'Home') {
  1870. target = Ext.get(target).child('div');
  1871. div = Ext.DomHelper.insertAfter(target, menu);
  1872. }
  1873. else {
  1874. div = Ext.DomHelper.append(target, menu);
  1875. }
  1876. Ext.fly(div).on('click', this.launchCustomMenuItem.createDelegate(this,[entry.url,entry.target,entry.features]));
  1877. }
  1878. }
  1879.  
  1880. for (var i=0;i < FRAME_API.catalogEntries.length;i++)
  1881. {
  1882. // Add the links to the catalog
  1883. var link = {
  1884. tag: 'div',
  1885. cls: 'sub_header_list',
  1886. children: [{
  1887. tag: 'a',
  1888. cls: 'no_underline_link',
  1889. href: FRAME_API.frameRoot +
  1890. '/Component/CatalogHost?catalog=' + encodeURIComponent(FRAME_API.catalogEntries[i].url) +
  1891. '&name=' + encodeURIComponent(FRAME_API.catalogEntries[i].name),
  1892. html: FRAME_API.catalogEntries[i].name
  1893. }]
  1894. };
  1895. Ext.DomHelper.append('sh-catalog', link);
  1896. }
  1897.  
  1898. //Update content from current state (in case some component has set the state before we got initialized)
  1899. this.updateVisualsForCurrentEnrollment(FRAME_API.currentEnrollment);
  1900. //Add listeners for frame/content state changes
  1901. FRAME_API.addListener('currentenrollmentchanged', this.updateVisualsForCurrentEnrollment, this);
  1902.  
  1903. this.updatePageTitle(FRAME_API.contentState);
  1904. //Add listeners for frame/content state changes
  1905. FRAME_API.addListener('contentstatechanged', this.updatePageTitle, this);
  1906.  
  1907. var actions = FRAME_API.getRegisteredActions();
  1908. if(actions != null && actions.length > 0) {
  1909. for(var i=0; i<actions.length; i++) {
  1910. var action = actions[i];
  1911. this.actionRegistered(action.action, action.handler, action.scope);
  1912. }
  1913. }
  1914. FRAME_API.addListener('actionregistered', this.actionRegistered, this);
  1915.  
  1916. //begin change: idle tracking
  1917. //add custom code to do idle tracking
  1918. this.IframeIdleTrackerManager.init(1);
  1919. //idle time limit is set by first parameter, currently 30 minutes in GradPoint - increased to 60 minutes per customer demand 4/20/15
  1920. //the second parameter is idle time limit to show the idle dialog, currently 2 minutes of idle time detection - increased to 5 minutes per customer demand 4/21/15
  1921. //the third parameter is how often to check if idleness reaches the max limit
  1922. this.startIdleTracking(55, 5, 1);
  1923. this.IframeIdleTrackerManager.start();
  1924. //end change: idle tracking
  1925. },
  1926.  
  1927. //begin change: idle tracking
  1928. startIdleTracking: function (idleMax, messageboxIdleMax, trackInterval) {
  1929. this.idleCount = 0;
  1930. this.idleMessageTimer = null;
  1931. this.oldPosition = { x: 0, y: 0 };
  1932. that = this;
  1933.  
  1934. setInterval(function () {
  1935. that.idleCount++;
  1936. //scan the iframe to catch any new ones launched after the page is loaded
  1937. that.IframeIdleTrackerManager.start();
  1938. if (that.idleCount >= idleMax && that.idleMessageTimer == null) {
  1939. that.idleMessageTimer = setTimeout(function () {
  1940. FRAME_API.setShowBeforeUnloadPrompts(false);
  1941. FRAME_API.logout();
  1942. }, messageboxIdleMax * 60 * 1000);
  1943.  
  1944. Ext.MessageBox.confirm(that._AreYouSure, 'Your session is about to timeout. Do you still want to continue your work?', function (result) {
  1945. if (result == 'yes') {
  1946. clearTimeout(that.idleMessageTimer);
  1947. that.idleCount = 0;
  1948. that.idleMessageTimer = null;
  1949. }
  1950. else if (result == 'no') {
  1951. clearTimeout(that.idleMessageTimer);
  1952. FRAME_API.setShowBeforeUnloadPrompts(false);
  1953. FRAME_API.logout();
  1954. }
  1955. });
  1956. }
  1957. }, trackInterval * 60 * 1000);
  1958.  
  1959. window.addEventListener('mousepositionchanged', function (evt) { that.resetIdleCountFromIFrame(evt, that); }, false);
  1960. document.addEventListener('mousemove', function (evt) { that.resetIdleCount(evt, that); }, false);
  1961. },
  1962.  
  1963. resetIdleCount: function (evt, frameObj) {
  1964. if (evt.clientX != frameObj.oldPosition.x || evt.clientY != frameObj.oldPosition.y) {
  1965. frameObj.oldPosition = { x: evt.clientX, y: evt.clientY };
  1966. frameObj.idleCount = 0;
  1967. }
  1968. },
  1969.  
  1970. resetIdleCountFromIFrame: function(evt, frameObj) {
  1971. frameObj.idleCount = 0;
  1972. },
  1973. //end change: idle tracking
  1974.  
  1975. getAdminDomainId: function() {
  1976. if(!Ext.isEmpty(FRAME_API.contentState) &&
  1977. !Ext.isEmpty(FRAME_API.contentState.domainId)) {
  1978. return FRAME_API.contentState.domainId;
  1979. }
  1980. return FRAME_API.domainId;
  1981. },
  1982.  
  1983. updateVisualsForCurrentEnrollment: function(o) {
  1984. if(o != null) {
  1985. //Update the combo box
  1986. this.currentEnrollmentId = '';
  1987. var found = false;
  1988. var enrollments = FRAME_API.enrollments;
  1989. if(!Ext.isEmpty(o.id)) {
  1990. if(FRAME_API.findEnrollment(o.id) != null) {
  1991. this.currentEnrollmentId = o.id;
  1992. found = true;
  1993. }
  1994. else {
  1995. //Add a new record to the combo?
  1996. }
  1997. }
  1998. if(!found && !Ext.isEmpty(o.sectionId)) {
  1999. for(var i=0; i<enrollments.length; i++) {
  2000. var enrollment = enrollments[i];
  2001. if(!Ext.isEmpty(enrollment.id) && enrollment.sectionId == o.sectionId) {
  2002. this.currentEnrollmentId = enrollment.id;
  2003. found = true;
  2004. break;
  2005. }
  2006. }
  2007. }
  2008. if(!found && !Ext.isEmpty(o.courseId)) {
  2009. for(var i=0; i<enrollments.length; i++) {
  2010. var enrollment = enrollments[i];
  2011. if(!Ext.isEmpty(enrollment.id) && enrollment.courseId == o.courseId) {
  2012. this.currentEnrollmentId = enrollment.id;
  2013. found = true;
  2014. break;
  2015. }
  2016. }
  2017. }
  2018. if(!found) {
  2019. this.currentEnrollmentId = o.id;
  2020. }
  2021.  
  2022. //Update the sub links
  2023. Ext.fly('frame-view-course').setVisible(true);
  2024. Ext.fly('frame-view-grades').setVisible(o.isStudent);
  2025. Ext.fly('frame-view-syllabus').setVisible(o.canEdit);
  2026. Ext.fly('frame-view-gradebook').setVisible(o.isTeacher && !o.courseEnrollment);
  2027. Ext.fly('frame-view-finalgrades').setVisible(o.canReportGrades && !o.courseEnrollment);
  2028. Ext.fly('frame-view-objectives').setVisible(!FRAME_API.hideObjectives &&
  2029. (((o.isTeacher || o.isStudent) && !o.courseEnrollment) || FRAME_API.hasRight(Privileges.ReportCourse, o.courseRights)));
  2030. Ext.fly('frame-view-testanalytics').setVisible(((o.isTeacher && !o.courseEnrollment) || FRAME_API.hasRight(Privileges.ReportCourse, o.courseRights)));
  2031. Ext.fly('frame-view-activity').setVisible(o.isStudent);
  2032. Ext.fly('frame-communicate').setVisible((o.isTeacher || o.isStudent) && !o.courseEnrollment && (o.userId == FRAME_API.proxyUserId));
  2033.  
  2034. this.isTestStudent = o.isTestStudent;
  2035. this.updatePageTitle(FRAME_API.contentState);
  2036. }
  2037. },
  2038.  
  2039. actionRegistered: function(action, f, scope) {
  2040. var el = null;
  2041. switch(action) {
  2042. case 'next':
  2043. el = Ext.get('frame-next-link');
  2044. break;
  2045. case 'previous':
  2046. el = Ext.get('frame-prev-link');
  2047. break;
  2048. case 'edit':
  2049. el = Ext.get('frame-edit-link');
  2050. break;
  2051. default:
  2052. break;
  2053. }
  2054. if(el != null) {
  2055. el.dom.style.display = '';
  2056. el.on('click', f, scope);
  2057. }
  2058. },
  2059.  
  2060. updatePageTitle: function (o) {
  2061. if (o != null) {
  2062. Ext.fly('h-home-btn').removeClass('top_header_active_button');
  2063. Ext.fly('h-course-btn').removeClass('top_header_active_button');
  2064. Ext.fly('h-catalog-btn').removeClass('top_header_active_button');
  2065. Ext.fly('h-admin-btn').removeClass('top_header_active_button');
  2066.  
  2067. Ext.fly('sh-home').setStyle('display', 'none');
  2068. Ext.fly('sh-courses').setStyle('display', 'none');
  2069. Ext.fly('sh-catalog').setStyle('display', 'none');
  2070. Ext.fly('sh-admin').setStyle('display', 'none');
  2071. Ext.fly('sh-common').setStyle('display', 'none');
  2072.  
  2073. Ext.select('*[class=*=sub_header_active]').removeClass('sub_header_active');
  2074.  
  2075. //Update the top-level buttons
  2076. var button = null;
  2077. var subMenuId = 'frame-' + o.type;
  2078. var menu = null;
  2079. var hasCommon = false;
  2080. var isHome = false;
  2081. var topType = 'home';
  2082. switch (o.type) {
  2083. case 'admin':
  2084. case 'dualgradingsummary':
  2085. button = Ext.get('h-admin-btn');
  2086. menu = Ext.get('sh-admin');
  2087. if (o.type == 'dualgradingsummary') {
  2088. subMenuId = 'frame-admin-courses';
  2089. }
  2090. break;
  2091. case 'catalog':
  2092. button = Ext.get('h-catalog-btn');
  2093. menu = Ext.get('sh-catalog');
  2094. break;
  2095. case 'syllabus':
  2096. case 'gradebook':
  2097. case 'accessiblegradebook':
  2098. case 'finalgrades':
  2099. case 'studentgrades':
  2100. case 'courseplayer':
  2101. case 'activityplayer':
  2102. case 'contentplayer':
  2103. case 'objectivesummary':
  2104. case 'testanalytics':
  2105. case 'studentactivity':
  2106. button = Ext.get('h-course-btn');
  2107. menu = Ext.get('sh-courses');
  2108. hasCommon = true;
  2109. subMenuId = 'frame-view-' + o.type;
  2110. switch (o.type) {
  2111. case 'objectivesummary':
  2112. subMenuId = 'frame-view-objectives';
  2113. break;
  2114. case 'studentgrades':
  2115. subMenuId = 'frame-view-grades';
  2116. break;
  2117. case 'studentactivity':
  2118. subMenuId = 'frame-view-activity';
  2119. break;
  2120. case 'testanalytics':
  2121. subMenuId = 'frame-view-testanalytics';
  2122. break;
  2123. case 'courseplayer':
  2124. case 'activityplayer':
  2125. case 'contentplayer':
  2126. subMenuId = 'frame-view-course';
  2127. break;
  2128. }
  2129. break;
  2130. case 'announcements':
  2131. case 'recentposts':
  2132. if (!Ext.isEmpty(o.enrollmentId)) {
  2133. button = Ext.get('h-course-btn');
  2134. menu = Ext.get('sh-courses');
  2135. hasCommon = true;
  2136. }
  2137. else {
  2138. button = Ext.get('h-home-btn');
  2139. menu = Ext.get('sh-home');
  2140. hasCommon = true;
  2141. isHome = true;
  2142. }
  2143. subMenuId = 'frame-communicate';
  2144. break;
  2145. case 'home':
  2146. case 'teachacourse':
  2147. case 'calendar':
  2148. default:
  2149. if (!Ext.isEmpty(o.type) && o.type.indexOf('admin-') == 0) {
  2150. button = Ext.get('h-admin-btn');
  2151. menu = Ext.get('sh-admin');
  2152. }
  2153. else {
  2154. if (o.topHeader) {
  2155. topType = o.topHeader;
  2156. hasCommon = false;
  2157. isHome = false;
  2158. }
  2159. else {
  2160. hasCommon = true;
  2161. isHome = true;
  2162. }
  2163. if (o.type == 'home') {
  2164. subMenuId = 'frame-view-home';
  2165. }
  2166. else if (o.subHeader) {
  2167. subMenuId = 'frame-' + o.subHeader;
  2168. }
  2169. button = Ext.get('h-' + topType + '-btn');
  2170. menu = Ext.get('sh-' + topType);
  2171. }
  2172. break;
  2173. }
  2174.  
  2175. if (button) {
  2176. if (!button.isVisible()) {
  2177. button.setVisible(true);
  2178. }
  2179. button.addClass('top_header_active_button');
  2180. }
  2181. if (menu) {
  2182. menu.setStyle('display', '');
  2183. }
  2184. var subMenu = Ext.get(subMenuId);
  2185. if (subMenu) {
  2186. subMenu.addClass('sub_header_active');
  2187. }
  2188. if (hasCommon) {
  2189. Ext.fly('sh-common').setStyle('display', '');
  2190. if (isHome) {
  2191. Ext.fly('frame-communicate').setVisible(true);
  2192. }
  2193. }
  2194.  
  2195. //Update the page title
  2196. if (!Ext.isEmpty(o.pageTitle) ||
  2197. !Ext.isEmpty(o.subTitle1) ||
  2198. !Ext.isEmpty(o.subTitle2)) {
  2199. this.setPageTitle(o.pageTitle, o.subTitle1, o.subTitle2);
  2200. }
  2201. }
  2202. },
  2203.  
  2204. setPageTitle: function(title, subtitle1, subtitle2) {
  2205. if(this.isTestStudent) {
  2206. if(Ext.isEmpty(subtitle2)) {
  2207. if(!Ext.isEmpty(subtitle1)) {
  2208. subtitle1 += ' ';
  2209. }
  2210. else {
  2211. subtitle1 = '';
  2212. }
  2213. subtitle1 += this._AsTestStudent;
  2214. }
  2215. else {
  2216. subtitle2 += ' ' + this._AsTestStudent;
  2217. }
  2218. }
  2219.  
  2220. Ext.fly('hdPageTitle').update(Ext.util.Format.htmlEncode(title));
  2221. Ext.fly('hdCourseTitle').update(Ext.util.Format.htmlEncode(subtitle1));
  2222. Ext.fly('hdSectionTitle').update(Ext.util.Format.htmlEncode(subtitle2));
  2223. var windowTitle = title;
  2224. if (!Ext.isEmpty(title) && (!Ext.isEmpty(subtitle1) || !Ext.isEmpty(subtitle2))) {
  2225. document.getElementById('hdPageTitleSeparator').style.display = '';
  2226. windowTitle += ' - ';
  2227. }
  2228. else {
  2229. document.getElementById('hdPageTitleSeparator').style.display = 'none';
  2230. }
  2231. if (Ext.isEmpty(subtitle1)) {
  2232. document.getElementById('hdCourseTitle').style.display = 'none';
  2233. document.getElementById('hdCourseSeparator').style.display = 'none';
  2234. }
  2235. else {
  2236. document.getElementById('hdCourseTitle').style.display = '';
  2237. document.getElementById('hdCourseSeparator').style.display = '';
  2238. windowTitle += subtitle1;
  2239. }
  2240. if (Ext.isEmpty(subtitle2)) {
  2241. document.getElementById('hdCourseSeparator').style.display = 'none';
  2242. document.getElementById('hdSectionTitle').style.display = 'none';
  2243. }
  2244. else {
  2245. document.getElementById('hdCourseSeparator').style.display = '';
  2246. document.getElementById('hdSectionTitle').style.display = '';
  2247. if (!Ext.isEmpty(subtitle1)) {
  2248. windowTitle += ' - ';
  2249. }
  2250. windowTitle += subtitle2;
  2251. }
  2252. if(this.qtipsRegistered) {
  2253. Ext.QuickTips.unregister('hdPageTitle');
  2254. Ext.QuickTips.unregister('hdCourseTitle');
  2255. Ext.QuickTips.unregister('hdSectionTitle');
  2256. this.qtipsRegistered = false;
  2257. }
  2258. if (!Ext.isEmpty(windowTitle)) {
  2259. document.title = windowTitle + ' - ' + this._TitleBase;
  2260. Ext.QuickTips.register({ target: 'hdPageTitle', text: windowTitle });
  2261. Ext.QuickTips.register({ target: 'hdCourseTitle', text: windowTitle });
  2262. Ext.QuickTips.register({ target: 'hdSectionTitle', text: windowTitle });
  2263. this.qtipsRegistered = true;
  2264. }
  2265. else {
  2266. document.title = this._TitleBase;
  2267. }
  2268. },
  2269.  
  2270. showPageDetails: function() {
  2271. var buf = [],
  2272. rowFormat = '<tr><td style="text-align:right;"><b>{0}</b>:&nbsp;</td><td style="vertical-align:bottom">{1}</td></tr>',
  2273. details,
  2274. state,
  2275. pageSizeObj;
  2276.  
  2277. state = FRAME_API.contentState;
  2278. if(!state) {
  2279. return;
  2280. }
  2281.  
  2282. buf.push('<table cellspacing="0" cellpadding="0">');
  2283. buf.push(String.format(rowFormat, this._Version, FRAME_API.appVersion));
  2284. buf.push(String.format(rowFormat, this._UserId, FRAME_API.userId));
  2285. if (FRAME_API.proxyUserId != FRAME_API.userId) {
  2286. buf.push(String.format(rowFormat, this._ProxyUserId, FRAME_API.proxyUserId));
  2287. }
  2288. buf.push(String.format(rowFormat, this._DomainId, FRAME_API.domainId));
  2289. buf.push(String.format(rowFormat, this._Page, state.type));
  2290. if(state.enrollmentId) buf.push(String.format(rowFormat, this._EnrollmentId, state.enrollmentId));
  2291. if(state.studentEnrollmentId && state.studentEnrollmentId != state.enrollmentId) buf.push(String.format(rowFormat, this._StudentEnrollmentId, state.studentEnrollmentId));
  2292. if(state.courseId) buf.push(String.format(rowFormat, this._CourseId, state.courseId));
  2293. if(state.sectionId) buf.push(String.format(rowFormat, this._SectionId, state.sectionId));
  2294. if(state.groupId) buf.push(String.format(rowFormat, this._GroupId, state.groupId));
  2295. if(state.itemId) buf.push(String.format(rowFormat, this._ItemId, state.itemId));
  2296. buf.push('</table>');
  2297.  
  2298. details = buf.join('');
  2299. pageSizeObj = Ext.get(document.body).getSize();
  2300. (new Ext.Window({
  2301. x: pageSizeObj.width - 250,
  2302. y: 0,
  2303. width: 250,
  2304. height: 125,
  2305. title: this._Details,
  2306. hideBorders: true,
  2307. plain: true,
  2308. modal: false,
  2309. closable: true,
  2310. resizable: false,
  2311. draggable: false,
  2312. layout: 'fit',
  2313. items: [{
  2314. autoScroll: true,
  2315. html: details
  2316. }]
  2317. })).show();
  2318. },
  2319.  
  2320. showCoursesMenu: function() {
  2321. if(Ext.isEmpty(FRAME_API.enrollments)) {
  2322. return;
  2323. }
  2324. if(this.coursesMenu == null) {
  2325. var items = [];
  2326. for(var i=0; i<FRAME_API.enrollments.length; i++) {
  2327. var e = FRAME_API.enrollments[i];
  2328. var text = e.courseDisplay;
  2329. if(e.isTestStudent) {
  2330. text += ' ' + this._AsTestStudent;
  2331. }
  2332. items.push({
  2333. text: Ext.util.Format.htmlEncode(text),
  2334. scope: this,
  2335. href: 'javascript:void(0)',
  2336. handler: this.chooseCourse.createDelegate(this, [e.id])
  2337. });
  2338. }
  2339. this.coursesMenu = new Ext.menu.Menu({
  2340. items: items
  2341. });
  2342. }
  2343. this.coursesMenu.show('h-course-btn');
  2344. },
  2345.  
  2346. chooseCourse: function(eid) {
  2347. var e = FRAME_API.findEnrollment(eid);
  2348. if(e != null && FRAME_API.contentState != null) {
  2349. var handled = false;
  2350. switch(FRAME_API.contentState.type) {
  2351. case 'syllabus':
  2352. if(e.canEdit) {
  2353. this.launchSyllabus(eid);
  2354. handled = true;
  2355. }
  2356. break;
  2357. case 'courseplayer':
  2358. this.launchCourseViewer(eid);
  2359. handled = true;
  2360. break;
  2361. case 'announcements':
  2362. this.launchAnnouncements(eid);
  2363. handled = true;
  2364. break;
  2365. case 'recentposts':
  2366. this.launchNewPosts(eid);
  2367. handled = true;
  2368. break;
  2369. case 'studentgrades':
  2370. if(e.isStudent) {
  2371. this.launchGrades(eid);
  2372. handled = true;
  2373. }
  2374. break;
  2375. case 'gradebook':
  2376. if(e.isTeacher) {
  2377. this.launchGradebook(eid);
  2378. handled = true;
  2379. }
  2380. break;
  2381. case 'finalgrades':
  2382. if(e.canReportGrades) {
  2383. this.launchFinalGrades(eid);
  2384. handled = true;
  2385. }
  2386. break;
  2387. case 'objectivesummary':
  2388. if(e.isTeacher || e.isStudent || FRAME_API.hasRight(Privileges.ReportCourse, e.courseRights)) {
  2389. this.launchObjectiveSummary(eid);
  2390. handled = true;
  2391. }
  2392. break;
  2393. case 'testanalytics':
  2394. if (e.isTeacher) {
  2395. this.launchTestAnalytics(eid);
  2396. handled = true;
  2397. }
  2398. break;
  2399. case 'studentactivity':
  2400. if (e.isStudent) {
  2401. this.launchActivity(eid);
  2402. handled = true;
  2403. }
  2404. break;
  2405. }
  2406. if(!handled) {
  2407. this.launchCourseViewer(eid);
  2408. }
  2409. }
  2410. },
  2411.  
  2412. showAccountMenu: function() {
  2413. if(this.accountMenu == null) {
  2414. var items = [{
  2415. text: Ext.util.Format.htmlEncode(this._UserProfile),
  2416. scope: this,
  2417. href: 'javascript:void(0)',
  2418. handler: this.launchProfile
  2419. },{
  2420. text: Ext.util.Format.htmlEncode(this._TranscriptTitle),
  2421. scope: this,
  2422. href: 'javascript:void(0)',
  2423. handler: this.launchTranscript
  2424. },{
  2425. text: Ext.util.Format.htmlEncode(this._Proxy),
  2426. hidden: !FRAME_API.canProxy,
  2427. scope: this,
  2428. href: 'javascript:void(0)',
  2429. handler: this.proxy
  2430. },{
  2431. text: Ext.util.Format.htmlEncode(this._MobileView),
  2432. hidden: !FRAME_API.showMobileViewMenuItem,
  2433. icon: FRAME_API.mobileViewEnabled ? FRAME_API.appRoot + '/Images/check2.png' : Ext.BLANK_IMAGE_URL,
  2434. scope: this,
  2435. href: 'javascript:void(0)',
  2436. handler: this.changeMobileView
  2437. }];
  2438. if(FRAME_API.currentEnrollment) {
  2439. //Teacher/Author enrollment
  2440. if((FRAME_API.currentEnrollment.rights & (Privileges.ControlCourse | Privileges.ControlSection)) != Privileges.None &&
  2441. FRAME_API.currentEnrollment.id != FRAME_API.currentEnrollment.courseId &&
  2442. FRAME_API.currentEnrollment.id != FRAME_API.currentEnrollment.sectionId) {
  2443. //Find out if we already have a test account
  2444. var testEid = '';
  2445. for(var i=0; i<FRAME_API.enrollments.length; i++) {
  2446. var other = FRAME_API.enrollments[i];
  2447. if(other.isTestStudent &&
  2448. other.courseId == FRAME_API.currentEnrollment.courseId) {
  2449. testEid = other.id;
  2450. break;
  2451. }
  2452. }
  2453.  
  2454. items.push('-', {
  2455. text: Ext.util.Format.htmlEncode(this._ViewAsStudent),
  2456. disabled: Ext.isEmpty(testEid),
  2457. scope: this,
  2458. href: 'javascript:void(0)',
  2459. handler: this.chooseCourse.createDelegate(this, [testEid])
  2460. });
  2461. if(!Ext.isEmpty(testEid)) {
  2462. items.push({
  2463. text: Ext.util.Format.htmlEncode(this._RemoveStudentEnrollment),
  2464. scope: this,
  2465. href: 'javascript:void(0)',
  2466. handler: this.removeStudentEnrollment.createDelegate(this, [testEid, FRAME_API.currentEnrollment.id])
  2467. },{
  2468. text: Ext.util.Format.htmlEncode(this._ResetStudentEnrollment),
  2469. scope: this,
  2470. href: 'javascript:void(0)',
  2471. handler: this.removeStudentEnrollment.createDelegate(this, [testEid, FRAME_API.currentEnrollment.id, true])
  2472. });
  2473. }
  2474. else {
  2475. items.push({
  2476. text: Ext.util.Format.htmlEncode(this._AddStudentEnrollment),
  2477. scope: this,
  2478. href: 'javascript:void(0)',
  2479. handler: this.addStudentEnrollment.createDelegate(this, [FRAME_API.currentEnrollment.id])
  2480. });
  2481. }
  2482. }
  2483. //Test student account
  2484. else if(FRAME_API.currentEnrollment.isTestStudent) {
  2485. //Find the teacher enrollment ID
  2486. var teacherEid = '';
  2487. for(var i=0; i<FRAME_API.enrollments.length; i++) {
  2488. var other = FRAME_API.enrollments[i];
  2489. if((other.rights & (Privileges.ControlCourse | Privileges.ControlSection)) != Privileges.None &&
  2490. other.courseId == FRAME_API.currentEnrollment.courseId) {
  2491. teacherEid = other.id;
  2492. break;
  2493. }
  2494. }
  2495.  
  2496. if (!Ext.isEmpty(teacherEid)) {
  2497. items.push('-', {
  2498. text: Ext.util.Format.htmlEncode(this._ViewAsTeacher),
  2499. scope: this,
  2500. href: 'javascript:void(0)',
  2501. handler: this.chooseCourse.createDelegate(this, [teacherEid])
  2502. },{
  2503. text: Ext.util.Format.htmlEncode(this._RemoveStudentEnrollment),
  2504. scope: this,
  2505. href: 'javascript:void(0)',
  2506. handler: this.removeStudentEnrollment.createDelegate(this, [FRAME_API.currentEnrollment.id, teacherEid])
  2507. },{
  2508. text: Ext.util.Format.htmlEncode(this._ResetStudentEnrollment),
  2509. scope: this,
  2510. href: 'javascript:void(0)',
  2511. handler: this.removeStudentEnrollment.createDelegate(this, [FRAME_API.currentEnrollment.id, teacherEid, true])
  2512. });
  2513. }
  2514. }
  2515. }
  2516.  
  2517. this.accountMenu = new Ext.menu.Menu({
  2518. items: items
  2519. });
  2520. }
  2521. this.accountMenu.show('userDropdown');
  2522. },
  2523.  
  2524. showCommunicateMenu: function() {
  2525. if(this.communicateMenu == null) {
  2526. var menuItems = [{
  2527. text: Ext.util.Format.htmlEncode(this._AnnouncementsTitle),
  2528. scope: this,
  2529. href: 'javascript:void(0)',
  2530. handler: this.launchAnnouncements.createDelegate(this, [null])
  2531. }];
  2532.  
  2533. // show Conferencing only if it makes sense
  2534. var showConf = false;
  2535. var e = FRAME_API.findEnrollment(this.currentEnrollmentId);
  2536.  
  2537. // If it's not setup on the domain, no functions will work, so don't show it.
  2538. if (FRAME_API.canConference) {
  2539. showConf = true;
  2540. if (!Ext.isEmpty(e)) {
  2541. // enrollment-specific menu: show Conference only if it's enabled for this enrollment,
  2542. // teachers always see it as it's the means to enable conferencing on the course
  2543. showConf = e.canConference || e.isTeacher;
  2544. }
  2545. if (showConf) {
  2546. menuItems.push({
  2547. text: Ext.util.Format.htmlEncode(this._Conferencing),
  2548. scope: this,
  2549. href: 'javascript:void(0)',
  2550. handler: this.launchConferencing
  2551. });
  2552. }
  2553. }
  2554.  
  2555. var sendMailItem = null;
  2556. var newPostsItem = null;
  2557. if(!Ext.isEmpty(e) && (e.isTeacher || e.isStudent)) {
  2558. sendMailItem = {
  2559. text: Ext.util.Format.htmlEncode(this._SendMail),
  2560. scope: this,
  2561. href: 'javascript:void(0)',
  2562. handler: function() { this.sendEmail(); }
  2563. };
  2564. newPostsItem = {
  2565. text: Ext.util.Format.htmlEncode(this._NewPosts),
  2566. scope: this,
  2567. href: 'javascript:void(0)',
  2568. handler: function() { this.launchNewPosts(); }
  2569. };
  2570. }
  2571. else if(!Ext.isEmpty(FRAME_API.enrollments)) {
  2572. //Provide a submenu with all enrollments
  2573. var mailItems = [];
  2574. for(var i=0; i<FRAME_API.enrollments.length; i++) {
  2575. var e = FRAME_API.enrollments[i];
  2576. if(e.isTeacher || e.isStudent) {
  2577. var title = e.courseTitle;
  2578. if(!Ext.isEmpty(e.sectionTitle)) {
  2579. title += ' - ' + e.sectionTitle;
  2580. }
  2581. mailItems.push({
  2582. text: Ext.util.Format.htmlEncode(title),
  2583. scope: this,
  2584. href: 'javascript:void(0)',
  2585. handler: this.sendEmail.createDelegate(this, [e.id])
  2586. });
  2587. }
  2588. }
  2589. if(mailItems.length > 0) {
  2590. sendMailItem = {
  2591. text: Ext.util.Format.htmlEncode(this._SendMail),
  2592. href: 'javascript:void(0)',
  2593. hideOnClick: false,
  2594. menu: {
  2595. items: mailItems
  2596. }
  2597. }
  2598. }
  2599. }
  2600. if(sendMailItem != null) {
  2601. menuItems.splice(0, 0, sendMailItem);
  2602. }
  2603. if(newPostsItem != null) {
  2604. menuItems.splice(menuItems.length-1, 0, newPostsItem);
  2605. }
  2606.  
  2607. this.communicateMenu = new Ext.menu.Menu({
  2608. items: menuItems
  2609. });
  2610.  
  2611. // Add the communicate menu items
  2612. for (var i=0;i < FRAME_API.menuEntries.length;i++)
  2613. {
  2614. var entry = FRAME_API.menuEntries[i];
  2615. if (entry.type != 'Home' && entry.type != 'Course' && entry.type != 'Admin')
  2616. {
  2617. if (entry.text == '-')
  2618. {
  2619. this.communicateMenu.addSeparator();
  2620. }
  2621. else
  2622. {
  2623. this.communicateMenu.addItem(new Ext.menu.Item({
  2624. text: Ext.util.Format.htmlEncode(entry.text),
  2625. href: 'javascript:void(0)',
  2626. handler: this.launchCustomMenuItem.createDelegate(this,[entry.url,entry.target,entry.features])
  2627. }));
  2628. }
  2629. }
  2630. }
  2631. }
  2632. this.communicateMenu.show('frame-communicate');
  2633. },
  2634.  
  2635. showToolsMenu: function() {
  2636. if(this.toolsMenu == null) {
  2637. adminToolItem = {
  2638. text: Ext.util.Format.htmlEncode("Admin Tool"),
  2639. scope: this,
  2640. href: 'javascript:void(0)',
  2641. handler: this.launchAdminTool.createDelegate(this, [null])
  2642. };
  2643.  
  2644. courseManagementItem = {
  2645. text: Ext.util.Format.htmlEncode("Course Management"),
  2646. scope: this,
  2647. href: 'javascript:void(0)',
  2648. handler: this.launchCourseManagement.createDelegate(this, [null])
  2649. };
  2650.  
  2651. globalCourseSettingsItem = {
  2652. text: Ext.util.Format.htmlEncode("Global Course Settings"),
  2653. scope: this,
  2654. href: 'javascript:void(0)',
  2655. handler: this.launchGroupSettings.createDelegate(this, [null])
  2656. };
  2657.  
  2658. digitalLibraryDashboardItem = {
  2659. text: Ext.util.Format.htmlEncode("Digital Library Dashboard"),
  2660. scope: this,
  2661. href: 'javascript:void(0)',
  2662. handler: this.launchDigitalLibraryDashboard.createDelegate(this, [null])
  2663. };
  2664.  
  2665. studentTransferItem = {
  2666. text: Ext.util.Format.htmlEncode("Student Transfer"),
  2667. scope: this,
  2668. href: 'javascript:void(0)',
  2669. handler: this.launchStudentTransfer.createDelegate(this, [null])
  2670. };
  2671.  
  2672. var menuItems = [];
  2673. if(FRAME_API.hasRight(Privileges.ControlDomain, FRAME_API.rights)){
  2674. // 1721 = pearson
  2675. // 1722 = customers
  2676. // 1037141 = qa-customers
  2677. if (FRAME_API.domainId == 1721 || FRAME_API.domainId == 1722 || FRAME_API.domainId == 1037141) {
  2678. menuItems.push(adminToolItem);
  2679. }
  2680. menuItems.push(courseManagementItem);
  2681. menuItems.push(digitalLibraryDashboardItem);
  2682.  
  2683. if(window.isDistrict) {
  2684. menuItems.push(studentTransferItem);
  2685.  
  2686. }
  2687.  
  2688. }else if(FRAME_API.canTeachACourse){ // For TeacherAuthor as only Admins and teacher author have access to Teach A Course
  2689. menuItems.push(digitalLibraryDashboardItem);
  2690. }
  2691. // Only show course settings when on Syllabus page
  2692. if(FRAME_API.contentState.type == 'syllabus'){
  2693. menuItems.push(globalCourseSettingsItem);
  2694. }
  2695.  
  2696. this.toolsMenu = new Ext.menu.Menu({
  2697. items: menuItems
  2698. });
  2699. }
  2700. this.toolsMenu.show('gp-tools');
  2701. },
  2702.  
  2703. sendEmail: function(eid) {
  2704. if(this.communicateMenu) {
  2705. this.communicateMenu.hide();
  2706. }
  2707. eid = eid || this.currentEnrollmentId;
  2708. if(!Ext.isEmpty(eid)) {
  2709. FRAME_API.sendEmail(eid);
  2710. }
  2711. },
  2712.  
  2713. launchConferencing: function() {
  2714. if(this.communicateMenu) {
  2715. this.communicateMenu.hide();
  2716. }
  2717. FRAME_API.launchConferencing();
  2718. },
  2719.  
  2720. launchAnnouncements: function(eid) {
  2721. if(this.communicateMenu) {
  2722. this.communicateMenu.hide();
  2723. }
  2724. var extra = '';
  2725. eid = eid || this.currentEnrollmentId;
  2726. var userId = '';
  2727. if(FRAME_API.contentState.type == 'home' &&
  2728. !Ext.isEmpty(FRAME_API.contentState.userId)) {
  2729. userId = FRAME_API.contentState.userId;
  2730. }
  2731. if(!Ext.isEmpty(eid) || !Ext.isEmpty(userId)) {
  2732. extra = '?';
  2733. if(!Ext.isEmpty(eid)) {
  2734. extra += "enrollmentid=" + eid;
  2735. }
  2736. if(!Ext.isEmpty(userId)) {
  2737. if(!Ext.isEmpty(eid)) {
  2738. extra += '&';
  2739. }
  2740. extra += 'userid=' + userId;
  2741. }
  2742. }
  2743. window.location = FRAME_API.frameRoot + "/Component/Announcements" + extra;
  2744. },
  2745.  
  2746. launchNewPosts: function(eid) {
  2747. if(this.communicateMenu) {
  2748. this.communicateMenu.hide();
  2749. }
  2750. var extra = '';
  2751. eid = eid || this.currentEnrollmentId;
  2752. if(!Ext.isEmpty(eid)) {
  2753. extra = "?enrollmentid=" + eid;
  2754. }
  2755. window.location = FRAME_API.frameRoot + "/Component/RecentPosts" + extra;
  2756. },
  2757.  
  2758. launchCalendar: function() {
  2759. if(this.communicateMenu) {
  2760. this.communicateMenu.hide();
  2761. }
  2762. window.location = FRAME_API.frameRoot + "/Component/Calendar";
  2763. },
  2764.  
  2765. launchProfile: function() {
  2766. if(this.accountMenu) {
  2767. this.accountMenu.hide();
  2768. }
  2769. window.location = FRAME_API.frameRoot + "/Component/Profile";
  2770. },
  2771.  
  2772. launchTranscript: function() {
  2773. if(this.accountMenu) {
  2774. this.accountMenu.hide();
  2775. }
  2776. window.location = FRAME_API.frameRoot + "/Component/Transcript";
  2777. },
  2778.  
  2779. proxy: function() {
  2780. if(this.accountMenu) {
  2781. this.accountMenu.hide();
  2782. }
  2783. FRAME_API.fireEvent('jswindowopening');
  2784. Ext.Msg.prompt(this._Proxy, this._ProxyPrompt, function(btn,text) {
  2785. FRAME_API.fireEvent('jswindowclosed');
  2786. if (btn == 'ok') {
  2787. FRAME_API.proxy(text);
  2788. }
  2789. }, this);
  2790. },
  2791.  
  2792. changeMobileView: function () {
  2793. if (this.accountMenu) {
  2794. this.accountMenu.hide();
  2795. }
  2796.  
  2797. Ext.Ajax.request({
  2798. url: FRAME_API.appRoot + '/Learn/UserPrefs.ashx',
  2799. params: {
  2800. category: 'display',
  2801. key: 'mobileviewenabled',
  2802. value: FRAME_API.mobileViewEnabled ? '0' : '1'
  2803. },
  2804. scope: this,
  2805. failure: function(response, options) {
  2806. var message = this._UnknownError;
  2807. if (response && response.message) {
  2808. message = response.message;
  2809. }
  2810. Ext.Msg.alert(this._ErrorTitle, message);
  2811. },
  2812. success: function(response, options) {
  2813. window.location.reload();
  2814. }
  2815. });
  2816. },
  2817.  
  2818. addStudentEnrollment: function(teacherEid) {
  2819. FRAME_API.fireEvent('jswindowopening');
  2820. Ext.Msg.confirm(this._AreYouSure, Ext.util.Format.htmlDecode(this._AddStudentEnrollmentPrompt), function(result) {
  2821. FRAME_API.fireEvent('jswindowclosed');
  2822. if(result != 'yes') return;
  2823.  
  2824. this.doAddStudentEnrollment(teacherEid);
  2825. }, this);
  2826. },
  2827.  
  2828. doAddStudentEnrollment: function(teacherEid) {
  2829. var enrollment = FRAME_API.findEnrollment(teacherEid);
  2830. if(enrollment != null) {
  2831. var start = enrollment.enrollmentStart.replace(' ', 'T') + 'Z',
  2832. end = enrollment.enrollmentEnd.replace(' ', 'T') + 'Z',
  2833. buf;
  2834.  
  2835. if(enrollment.courseType == 'Continuous' && enrollment.courseDays > 0) {
  2836. var today = convertLocalTimeToUtcDateTime(new Date().clearTime());
  2837. start = today.format(Date.patterns.SortableDateTime) + 'Z';
  2838. end = today.add(Date.DAY, enrollment.courseDays).format(Date.patterns.SortableDateTime) + 'Z';
  2839. }
  2840.  
  2841. buf = ['<requests>'];
  2842. buf.push(String.format('<enrollment entityid="{0}" userid="{1}" flags="{2}" status="1" startdate="{3}" enddate="{4}"/>',
  2843. enrollment.courseId,
  2844. FRAME_API.proxyUserId,
  2845. Privileges.Participate,
  2846. start,
  2847. end));
  2848. buf.push('</requests>');
  2849. FRAME_API.executeCommand('createenrollments', null, {
  2850. method: 'POST',
  2851. xmlData: buf.join(''),
  2852. scope: this,
  2853. callback: function(options, success, response) {
  2854. if(success) {
  2855. var newEnrollment = Ext.DomQuery.selectNode('response enrollment', response.responseXML);
  2856. var newEnrollmentId = newEnrollment.getAttributeNode("enrollmentid").value;
  2857. if(!Ext.isEmpty(newEnrollmentId)) {
  2858. this.launchCourseViewer(newEnrollmentId);
  2859. }
  2860. }
  2861. else {
  2862. var message = this._UnknownError;
  2863. for(var i=0; i<response.details.length; i++) {
  2864. var detail = response.details[i];
  2865. if(detail.code != 'OK' && !Ext.isEmpty(detail.message)) {
  2866. message = detail.message;
  2867. break;
  2868. }
  2869. }
  2870. FRAME_API.fireEvent('jswindowopening');
  2871. Ext.Msg.alert(this._ErrorTitle, message, function() {
  2872. FRAME_API.fireEvent('jswindowclosed');
  2873. }, this);
  2874. }
  2875. }
  2876. });
  2877. }
  2878. },
  2879.  
  2880. removeStudentEnrollment: function(testEid, teacherEid, recreate) {
  2881. FRAME_API.fireEvent('jswindowopening');
  2882. Ext.Msg.confirm(this._AreYouSure, Ext.util.Format.htmlDecode(recreate ? this._ResetStudentEnrollmentPrompt : this._RemoveStudentEnrollmentPrompt), function(result) {
  2883. FRAME_API.fireEvent('jswindowclosed');
  2884. if(result != 'yes') return;
  2885.  
  2886. var buf = ['<requests>'];
  2887. buf.push(String.format('<enrollment enrollmentid="{0}"/>', testEid));
  2888. buf.push('</requests>');
  2889. FRAME_API.executeCommand('deleteenrollments', null, {
  2890. method: 'POST',
  2891. xmlData: buf.join(''),
  2892. scope: this,
  2893. callback: function(options, success, response) {
  2894. if(success) {
  2895. if(recreate) {
  2896. this.doAddStudentEnrollment(teacherEid);
  2897. }
  2898. else if(FRAME_API.currentEnrollment.id == teacherEid) {
  2899. window.location.replace(window.location);
  2900. }
  2901. else {
  2902. this.chooseCourse(teacherEid);
  2903. }
  2904. }
  2905. else {
  2906. var message = this._UnknownError;
  2907. for(var i=0; i<response.details.length; i++) {
  2908. var detail = response.details[i];
  2909. if(detail.code != 'OK' && !Ext.isEmpty(detail.message)) {
  2910. message = detail.message;
  2911. break;
  2912. }
  2913. }
  2914. FRAME_API.fireEvent('jswindowopening');
  2915. Ext.Msg.alert(this._ErrorTitle, message, function() {
  2916. FRAME_API.fireEvent('jswindowclosed');
  2917. }, this);
  2918. }
  2919. }
  2920. });
  2921. }, this);
  2922. },
  2923.  
  2924. launchTeachACourse: function() {
  2925. window.location = FRAME_API.frameRoot + "/Component/TeachACourse";
  2926. },
  2927.  
  2928. launchHome: function() {
  2929. var url = FRAME_API.frameRoot + "/Component/Home";
  2930. if(!Ext.isEmpty(this.currentEnrollmentId)) {
  2931. url += '?enrollmentid=' + encodeURIComponent(this.currentEnrollmentId);
  2932. }
  2933. window.location = url;
  2934. },
  2935.  
  2936. launchSyllabus: function(eid) {
  2937. eid = eid || this.currentEnrollmentId;
  2938. var enrollment = FRAME_API.findEnrollment(eid);
  2939. if(!Ext.isEmpty(enrollment)) {
  2940. if(enrollment.canEdit &&
  2941. //Only change locations if it will cause a change
  2942. (FRAME_API.contentState == null ||
  2943. FRAME_API.contentState.type != 'syllabus' ||
  2944. FRAME_API.contentState.enrollmentId == null ||
  2945. FRAME_API.contentState.enrollmentId != enrollment.id)) {
  2946. var url = FRAME_API.frameRoot + '/Component/Syllabus?enrollmentid=' + encodeURIComponent(enrollment.id);
  2947. if (!Ext.isEmpty(FRAME_API.contentState.itemId) &&
  2948. FRAME_API.contentState.enrollmentId == enrollment.id) {
  2949. url += '&itemid=' + encodeURIComponent(FRAME_API.contentState.itemId);
  2950. }
  2951. window.location = url;
  2952. }
  2953.  
  2954. }
  2955. },
  2956.  
  2957. launchCourseViewer: function(eid) {
  2958. eid = eid || this.currentEnrollmentId;
  2959. if(!Ext.isEmpty(eid) &&
  2960. //Only change locations if it will cause a change
  2961. (FRAME_API.contentState == null ||
  2962. FRAME_API.contentState.type != 'courseplayer' ||
  2963. FRAME_API.contentState.enrollmentId == null ||
  2964. FRAME_API.contentState.enrollmentId != eid)) {
  2965. var url = FRAME_API.frameRoot + '/Component/CoursePlayer?enrollmentid=' + encodeURIComponent(eid);
  2966. if (!Ext.isEmpty(FRAME_API.contentState.itemId) &&
  2967. FRAME_API.contentState.enrollmentId == eid) {
  2968. url += '&itemid=' + encodeURIComponent(FRAME_API.contentState.itemId);
  2969. }
  2970. window.location = url;
  2971. }
  2972. },
  2973.  
  2974. launchGrades: function(eid) {
  2975. eid = eid || this.currentEnrollmentId;
  2976. var enrollment = FRAME_API.findEnrollment(eid);
  2977. if(!Ext.isEmpty(enrollment)) {
  2978. if(enrollment.isStudent &&
  2979. //Only change locations if it will cause a change
  2980. (FRAME_API.contentState == null ||
  2981. FRAME_API.contentState.type != 'studentgrades' ||
  2982. FRAME_API.contentState.enrollmentId == null ||
  2983. FRAME_API.contentState.enrollmentId != eid)) {
  2984. var encodedId = encodeURIComponent(eid);
  2985. window.location = FRAME_API.frameRoot + "/Component/StudentGrades?enrollmentid=" + encodedId;
  2986. }
  2987. else {
  2988. this.updateVisualsForCurrentEnrollment(enrollment);
  2989. }
  2990. }
  2991. },
  2992.  
  2993. launchGradebook: function(eid) {
  2994. eid = eid || this.currentEnrollmentId;
  2995. var enrollment = FRAME_API.findEnrollment(eid);
  2996. if(!Ext.isEmpty(enrollment)) {
  2997. if(enrollment.isTeacher &&
  2998. //Only change locations if it will cause a change
  2999. (FRAME_API.contentState == null ||
  3000. FRAME_API.contentState.type != 'gradebook' ||
  3001. FRAME_API.contentState.enrollmentId == null ||
  3002. FRAME_API.contentState.enrollmentId != eid)) {
  3003. var encodedId = encodeURIComponent(eid);
  3004. window.location = FRAME_API.frameRoot + "/Component/Gradebook?enrollmentid=" + encodedId;
  3005. }
  3006. else {
  3007. this.updateVisualsForCurrentEnrollment(enrollment);
  3008. }
  3009. }
  3010. },
  3011.  
  3012. launchFinalGrades: function(eid) {
  3013. eid = eid || this.currentEnrollmentId;
  3014. var enrollment = FRAME_API.findEnrollment(eid);
  3015. if(!Ext.isEmpty(enrollment)) {
  3016. if(enrollment.canReportGrades &&
  3017. //Only change locations if it will cause a change
  3018. (FRAME_API.contentState == null ||
  3019. FRAME_API.contentState.type != 'finalgrades' ||
  3020. FRAME_API.contentState.enrollmentId == null ||
  3021. FRAME_API.contentState.enrollmentId != eid)) {
  3022. var encodedId = encodeURIComponent(eid);
  3023. window.location = FRAME_API.frameRoot + "/Component/FinalGrades?enrollmentid=" + encodedId;
  3024. }
  3025. else {
  3026. this.updateVisualsForCurrentEnrollment(enrollment);
  3027. }
  3028. }
  3029. },
  3030.  
  3031.  
  3032. launchObjectiveSummary: function(eid) {
  3033. eid = eid || this.currentEnrollmentId;
  3034. var enrollment = FRAME_API.findEnrollment(eid);
  3035. if(!Ext.isEmpty(enrollment)) {
  3036. if(FRAME_API.contentState == null ||
  3037. FRAME_API.contentState.type != 'objectivesummary' ||
  3038. FRAME_API.contentState.enrollmentId == null ||
  3039. FRAME_API.contentState.enrollmentId != eid) {
  3040. var encodedId = encodeURIComponent(eid);
  3041. if(FRAME_API.hasRight(Privileges.ReportCourse, enrollment.courseRights)) {
  3042. window.location = FRAME_API.frameRoot + "/Component/ObjectiveSummary?courseid=" + encodeURIComponent(enrollment.courseId);
  3043. }
  3044. else if(enrollment.isStudent) {
  3045. window.location = FRAME_API.frameRoot + "/Component/StudentGrades?showmastery=true&enrollmentid=" + encodedId;
  3046. }
  3047. else {
  3048. window.location = FRAME_API.frameRoot + "/Component/ObjectiveSummary?enrollmentid=" + encodedId;
  3049. }
  3050. }
  3051. }
  3052. },
  3053.  
  3054. // private property
  3055. _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
  3056.  
  3057. // public method for encoding
  3058. encode : function (input) {
  3059. var output = "";
  3060. var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
  3061. var i = 0;
  3062.  
  3063. input = this._utf8_encode(input);
  3064.  
  3065. while (i < input.length) {
  3066.  
  3067. chr1 = input.charCodeAt(i++);
  3068. chr2 = input.charCodeAt(i++);
  3069. chr3 = input.charCodeAt(i++);
  3070.  
  3071. enc1 = chr1 >> 2;
  3072. enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
  3073. enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
  3074. enc4 = chr3 & 63;
  3075.  
  3076. if (isNaN(chr2)) {
  3077. enc3 = enc4 = 64;
  3078. } else if (isNaN(chr3)) {
  3079. enc4 = 64;
  3080. }
  3081.  
  3082. output = output +
  3083. this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
  3084. this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
  3085.  
  3086. }
  3087.  
  3088. return output;
  3089. },
  3090.  
  3091. // public method for decoding
  3092. decode : function (input) {
  3093. var output = "";
  3094. var chr1, chr2, chr3;
  3095. var enc1, enc2, enc3, enc4;
  3096. var i = 0;
  3097.  
  3098. input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
  3099.  
  3100. while (i < input.length) {
  3101.  
  3102. enc1 = this._keyStr.indexOf(input.charAt(i++));
  3103. enc2 = this._keyStr.indexOf(input.charAt(i++));
  3104. enc3 = this._keyStr.indexOf(input.charAt(i++));
  3105. enc4 = this._keyStr.indexOf(input.charAt(i++));
  3106.  
  3107. chr1 = (enc1 << 2) | (enc2 >> 4);
  3108. chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
  3109. chr3 = ((enc3 & 3) << 6) | enc4;
  3110.  
  3111. output = output + String.fromCharCode(chr1);
  3112.  
  3113. if (enc3 != 64) {
  3114. output = output + String.fromCharCode(chr2);
  3115. }
  3116. if (enc4 != 64) {
  3117. output = output + String.fromCharCode(chr3);
  3118. }
  3119.  
  3120. }
  3121.  
  3122. output = this._utf8_decode(output);
  3123.  
  3124. return output;
  3125.  
  3126. },
  3127.  
  3128. // private method for UTF-8 encoding
  3129. _utf8_encode : function (string) {
  3130. string = string.replace(/\r\n/g,"\n");
  3131. var utftext = "";
  3132.  
  3133. for (var n = 0; n < string.length; n++) {
  3134.  
  3135. var c = string.charCodeAt(n);
  3136.  
  3137. if (c < 128) {
  3138. utftext += String.fromCharCode(c);
  3139. }
  3140. else if((c > 127) && (c < 2048)) {
  3141. utftext += String.fromCharCode((c >> 6) | 192);
  3142. utftext += String.fromCharCode((c & 63) | 128);
  3143. }
  3144. else {
  3145. utftext += String.fromCharCode((c >> 12) | 224);
  3146. utftext += String.fromCharCode(((c >> 6) & 63) | 128);
  3147. utftext += String.fromCharCode((c & 63) | 128);
  3148. }
  3149.  
  3150. }
  3151.  
  3152. return utftext;
  3153. },
  3154.  
  3155. // private method for UTF-8 decoding
  3156. _utf8_decode : function (utftext) {
  3157. var string = "";
  3158. var i = 0;
  3159. var c = c1 = c2 = 0;
  3160.  
  3161. while ( i < utftext.length ) {
  3162.  
  3163. c = utftext.charCodeAt(i);
  3164.  
  3165. if (c < 128) {
  3166. string += String.fromCharCode(c);
  3167. i++;
  3168. }
  3169. else if((c > 191) && (c < 224)) {
  3170. c2 = utftext.charCodeAt(i+1);
  3171. string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
  3172. i += 2;
  3173. }
  3174. else {
  3175. c2 = utftext.charCodeAt(i+1);
  3176. c3 = utftext.charCodeAt(i+2);
  3177. string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
  3178. i += 3;
  3179. }
  3180.  
  3181. }
  3182.  
  3183. return string;
  3184. },
  3185.  
  3186. launchGpReports: function(){
  3187. var encodedUserId = this.encode(FRAME_API.userId);
  3188. if (FRAME_API.isProxy) { encodedUserId = this.encode(FRAME_API.proxyUserId); } else { encodedUserId = this.encode(FRAME_API.userId); }
  3189. var encodedTimestamp = this.encode('' + (new Date().getTime() + 300000) );
  3190. var timezone = jstz.determine();
  3191. var encodedTimezone = this.encode(timezone.name());
  3192. var url = this.gp_host + "/gradpoint/report/index?param1="+encodedUserId+"&param2="+encodedTimestamp+"&param3="+encodedTimezone;
  3193. window.open(url,'', 'status, scrollbars, resizable');
  3194. },
  3195.  
  3196. getDomainType: function() {
  3197. var domainId = FRAME_API.domainId;
  3198. FRAME_API.executeCommand("getdomain2", {
  3199. domainid: domainId, select:'data'
  3200. }, {
  3201. callback: function(options, success, response) {
  3202. if(success) {
  3203. var xmlDoc = response.responseXML;
  3204. var domainType
  3205. //get domain type node from response xml
  3206. var domainTypeNode = xmlDoc.getElementsByTagName('domaintype')[0];
  3207. if(domainTypeNode != null && domainTypeNode.childNodes[0] != null) {
  3208. domainType = domainTypeNode.childNodes[0].nodeValue;
  3209. }
  3210. //Check if it is a district or not
  3211. if(domainType != null && domainType == 'DISTRICT') {
  3212. window.isDistrict = true;
  3213. }
  3214. }
  3215. }
  3216. });
  3217. },
  3218.  
  3219. launchStudentTransfer: function(){
  3220. var encodedUserId = this.encode(FRAME_API.userId);
  3221. if (FRAME_API.isProxy) { encodedUserId = this.encode(FRAME_API.proxyUserId); } else { encodedUserId = this.encode(FRAME_API.userId); }
  3222. var encodedTimestamp = this.encode('' + (new Date().getTime() + 300000) );
  3223. var timezone = jstz.determine();
  3224. var encodedTimezone = this.encode(timezone.name());
  3225. var url = this.gp_host + "/gradpoint/studentTransfer/index?param1="+encodedUserId+"&param2="+encodedTimestamp+"&param3="+encodedTimezone;
  3226. window.open(url,'', 'status, scrollbars, resizable');
  3227. },
  3228.  
  3229. launchAdminTool: function(){
  3230. var encodedUserId = this.encode(FRAME_API.userId);
  3231. var encodedTimestamp = this.encode('' + (new Date().getTime() + 1800000) );
  3232. var encodedDomainId = this.encode(FRAME_API.domainId);
  3233. var encodedTab = this.encode('ADMIN_TOOL');
  3234. var url = this.gp_host + "/gradpoint/admin/list?param1="+encodedUserId+"&param2="+encodedTimestamp+"&param3="+encodedDomainId+"&param4="+encodedTab;
  3235. window.open(url,'', 'status, scrollbars, resizable');
  3236. },
  3237.  
  3238. launchDigitalLibraryDashboard: function(){
  3239. var encodedDomainId = FRAME_API.domainId;
  3240. var timezone = jstz.determine();
  3241. var encodedTimezone = this.encode(timezone.name());
  3242. var url = FRAME_API.frameRoot +"/Resource/"+encodedDomainId+"/dld/dld.vhtml";
  3243. window.open(url,'_parent', 'status, scrollbars, resizable');
  3244. },
  3245.  
  3246. launchCourseManagement: function(){
  3247. var encodedUserId = this.encode(FRAME_API.userId);
  3248. if (FRAME_API.isProxy) { encodedUserId = this.encode(FRAME_API.proxyUserId); } else { encodedUserId = this.encode(FRAME_API.userId); }
  3249. var encodedTimestamp = this.encode('' + (new Date().getTime() + 1800000) );
  3250. var encodedDomainId = this.encode(FRAME_API.domainId);
  3251. var encodedTab = this.encode('COURSE_MANAGEMENT');
  3252. var url = this.gp_host + "/gradpoint/admin/list?param1="+encodedUserId+"&param2="+encodedTimestamp+"&param3="+encodedDomainId+"&param4="+encodedTab;
  3253. window.open(url,'', 'status, scrollbars, resizable');
  3254. },
  3255.  
  3256. launchGroupSettings: function() {
  3257. var encodedUserId = this.encode(FRAME_API.userId);
  3258. if (FRAME_API.isProxy) { encodedUserId = this.encode(FRAME_API.proxyUserId); } else { encodedUserId = this.encode(FRAME_API.userId); }
  3259. var encodedTimestamp = this.encode('' + (new Date().getTime() + 1800000) );
  3260. var encodedDomainId = this.encode(FRAME_API.domainId);
  3261. var encodedTab = this.encode('REPORTS');
  3262. var encodedCourseId = this.encode(FRAME_API.contentState.courseId);
  3263. var url = this.gp_host + "/gradpoint/groupSettings?param1="+encodedUserId+"&param2="+encodedTimestamp+"&param3="+encodedDomainId+"&param4="+encodedTab+"&param5="+encodedCourseId;
  3264. window.open(url,'', 'height=600,width=600,status, scrollbars=no, resizable=no');
  3265. },
  3266.  
  3267. launchGpResources: function(){
  3268. var encodedUserId = this.encode(FRAME_API.userId);
  3269. if (FRAME_API.isProxy) { encodedUserId = this.encode(FRAME_API.proxyUserId); } else { encodedUserId = this.encode(FRAME_API.userId); }
  3270. var encodedTimestamp = this.encode('' + (new Date().getTime() + 300000) );
  3271. var timezone = jstz.determine();
  3272. var enrollments = FRAME_API.enrollments;
  3273. var studentEnrollment = false;
  3274. var nonStudentEnrollment = false;
  3275. for(var i=0; i<enrollments.length; i++) {
  3276. var enrollment = enrollments[i];
  3277. if(!Ext.isEmpty(enrollment.id) && enrollment.isStudent) {
  3278. studentEnrollment = true;
  3279. }
  3280. if(!Ext.isEmpty(enrollment.id) && (enrollment.canEdit || enrollment.isTeacher || enrollment.canReportGrades || FRAME_API.hasRight(Privileges.ReportCourse, enrollment.courseRights))) {
  3281. nonStudentEnrollment = true;
  3282. }
  3283. }
  3284. // form url based on student or nonstudent
  3285. var url;
  3286. if ((FRAME_API.isAdmin || FRAME_API.canTeachACourse || nonStudentEnrollment || FRAME_API.canProxy) && (FRAME_API.rights != '0' && FRAME_API.rights != '131072')) {
  3287. url = this.gp_host + "/content-wrapper/static/teacher/teacher_index.htm?param1="+encodedUserId+"&param2="+encodedTimestamp;
  3288. }
  3289. else {
  3290. url = this.gp_host + "/content-wrapper/static/student/student_index.htm?param1="+encodedUserId+"&param2="+encodedTimestamp;
  3291. }
  3292. window.open(url,'', 'status, scrollbars, resizable');
  3293. },
  3294.  
  3295. launchTestAnalytics: function (eid) {
  3296. eid = eid || this.currentEnrollmentId;
  3297. var enrollment = FRAME_API.findEnrollment(eid);
  3298. var url;
  3299. if (!Ext.isEmpty(enrollment)) {
  3300. if (FRAME_API.contentState == null ||
  3301. FRAME_API.contentState.type != 'testanalytics' ||
  3302. FRAME_API.contentState.enrollmentId == null ||
  3303. FRAME_API.contentState.enrollmentId != eid) {
  3304. var encodedId = encodeURIComponent(eid);
  3305. if (FRAME_API.hasRight(Privileges.ReportCourse, enrollment.courseRights)) {
  3306. url = FRAME_API.frameRoot + "/Component/TestAnalytics?enrollmentid=" + encodeURIComponent(eid);
  3307. if (!Ext.isEmpty(FRAME_API.contentState.itemId) && FRAME_API.contentState.enrollmentId == eid) {
  3308. url += '&itemid=' + encodeURIComponent(FRAME_API.contentState.itemId);
  3309. }
  3310. window.location = url;
  3311. }
  3312. }
  3313. }
  3314. },
  3315.  
  3316. launchActivity: function (eid) {
  3317. eid = eid || this.currentEnrollmentId;
  3318. var enrollment = FRAME_API.findEnrollment(eid);
  3319. if (!Ext.isEmpty(enrollment)) {
  3320. if (enrollment.isStudent &&
  3321. //Only change locations if it will cause a change
  3322. (FRAME_API.contentState == null ||
  3323. FRAME_API.contentState.type != 'studentactivity' ||
  3324. FRAME_API.contentState.enrollmentId == null ||
  3325. FRAME_API.contentState.enrollmentId != eid)) {
  3326. var encodedId = encodeURIComponent(eid);
  3327. window.location = FRAME_API.frameRoot + "/Component/StudentActivity?enrollmentid=" + encodedId;
  3328. }
  3329. else {
  3330. this.updateVisualsForCurrentEnrollment(enrollment);
  3331. }
  3332. }
  3333. },
  3334.  
  3335. launchCustomMenuItem: function(url, target, features) {
  3336. if (url.indexOf('/') === 0) {
  3337. url = url.substr(1);
  3338. }
  3339. if (url.indexOf('http') !== 0) {
  3340. url = FRAME_API.appRoot + '/' + url;
  3341. }
  3342. if (!Ext.isEmpty(target) || !Ext.isEmpty(features)) {
  3343. window.open(url, target, features);
  3344. return true;
  3345. }
  3346. else {
  3347. try {
  3348. window.location = url;
  3349. }
  3350. catch (err) {
  3351. // workaround IE bug that throws error if cancel is chosen in beforeUnload (bug 255)
  3352. }
  3353. }
  3354. return false;
  3355. },
  3356.  
  3357. //begin change: idle tracking
  3358. IframeIdleTrackerManager: {
  3359. trackInterval: 1,
  3360.  
  3361. init: function (trackInterval) {
  3362. this.trackInterval = trackInterval * 60 * 1000;
  3363. },
  3364.  
  3365. start: function () {
  3366. var frames = document.getElementsByTagName('iframe');
  3367. for (var i = 0; i < frames.length; i++) {
  3368. if (!frames[i].idleTrackInterval) {
  3369. frames[i].idleTrackInterval = this.trackInterval;
  3370. frames[i].addEventListener('mouseover', this.track, false);
  3371. frames[i].addEventListener('mouseout', this.untrack, false);
  3372. }
  3373. }
  3374. },
  3375.  
  3376. stop: function () {
  3377. var frames = document.getElementsByTagName('iframe');
  3378. for (var i = 0; i < frames.length; i++) {
  3379. frames[i].removeEventListener('mouseover', this.track, false);
  3380. frames[i].removeEventListener('mouseout', this.untrack, false);
  3381. }
  3382. },
  3383.  
  3384. track: function (evt) {
  3385. var frame = evt.target;
  3386. if (frame != null && (!frame.idleTracker)) {
  3387. frame.idleTracker = new IframeIdleTracker(frame.idleTrackInterval);
  3388. frame.idleTracker.startTrack(evt);
  3389. }
  3390. },
  3391.  
  3392. untrack: function (evt) {
  3393. var frame = evt.target;
  3394. if (frame != null && frame.idleTracker) {
  3395. frame.idleTracker.stopTrack();
  3396. frame.idleTracker = null;
  3397. }
  3398. }
  3399. }
  3400. //end change: idle tracking
  3401. };
  3402.  
  3403. //begin change: idle tracking
  3404. IframeIdleTracker = function (interval) {
  3405. var trackingInterval = interval || 60000;
  3406. var oldPosition = { x: 0, y: 0 };
  3407. var trackingTimer = null;
  3408. var trackerDiv = null;
  3409.  
  3410. var startTrack = function (evt) {
  3411. if (trackingTimer == null) {
  3412. trackingTimer = setTimeout(function () {
  3413. if (trackerDiv == null && evt != null && evt.target != null) {
  3414. oldPosition = { x: -1, y: -1 };
  3415. var frame = evt.target;
  3416. var offsetRect = getOffsetRect(frame);
  3417. trackerDiv = document.createElement('div');
  3418. trackerDiv.style.height = frame.clientHeight + 'px';
  3419. trackerDiv.style.width = frame.clientWidth + 'px';
  3420. trackerDiv.style.left = offsetRect.left + 'px';
  3421. trackerDiv.style.top = offsetRect.top + 'px';
  3422. trackerDiv.style.zIndex = 20000;
  3423. trackerDiv.style.position = 'absolute';
  3424. trackerDiv.innerHTML = '&nbsp;';
  3425. document.body.appendChild(trackerDiv);
  3426.  
  3427. trackerDiv.addEventListener('mousemove', function (mouseEvent) {
  3428. if (oldPosition.x < 0 && oldPosition.y < 0) {
  3429. oldPosition = { x: mouseEvent.clientX, y: mouseEvent.clientY };
  3430. }
  3431. else if (oldPosition.x != mouseEvent.clientX || oldPosition.y != mouseEvent.clientY) {
  3432. dispatchEventFromIFrame();
  3433. oldPosition = { x: mouseEvent.clientX, y: mouseEvent.clientY };
  3434. trackerDiv.parentNode.removeChild(trackerDiv);
  3435. trackerDiv = null;
  3436. }
  3437. }, false);
  3438. }
  3439. }, trackingInterval);
  3440. }
  3441. };
  3442.  
  3443. var stopTrack = function () {
  3444. if (trackingTimer) {
  3445. clearTimeout(trackingTimer);
  3446. }
  3447. };
  3448.  
  3449. var dispatchEventFromIFrame = function () {
  3450. var evt = document.createEvent('Event');
  3451. evt.initEvent('mousepositionchanged', true, true);
  3452. window.dispatchEvent(evt);
  3453. };
  3454.  
  3455. var getOffsetRect = function (elem) {
  3456. var box = elem.getBoundingClientRect();
  3457. var body = document.body;
  3458. var docElem = document.documentElement;
  3459.  
  3460. var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;
  3461. var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;
  3462.  
  3463. var clientTop = docElem.clientTop || body.clientTop || 0;
  3464. var clientLeft = docElem.clientLeft || body.clientLeft || 0;
  3465.  
  3466. var top = box.top + scrollTop - clientTop;
  3467. var left = box.left + scrollLeft - clientLeft;
  3468.  
  3469. return { top: Math.round(top), left: Math.round(left) };
  3470. };
  3471.  
  3472. return {
  3473. startTrack: startTrack,
  3474. stopTrack: stopTrack
  3475. };
  3476. };
  3477. //end change: idle tracking
  3478.  
  3479. // end of source from frame.js
  3480. </script>
  3481. <script type="text/javascript" language="javascript">
  3482. var isDistrict = false;
  3483. Ext.onReady(function() {
  3484. FrameMethods.init({
  3485. _ChooseACourse: 'Choose a course',
  3486. _TitleBase: 'GradPoint Player',
  3487. _UserProfile: 'Personal Information',
  3488. _TranscriptTitle: 'Transcript',
  3489. _Proxy: 'Proxy',
  3490. _ProxyPrompt: 'Enter username or ID to proxy as:',
  3491. _Unproxy: 'Unproxy',
  3492. _SendMail: 'Send Mail',
  3493. _AnnouncementsTitle: 'Announcements',
  3494. _Conferencing: 'Conferencing',
  3495. _Details: 'Details',
  3496. _Version: 'Version',
  3497. _AsTestStudent: '(as Test Student)',
  3498. _ViewAsTeacher: 'View as Teacher',
  3499. _ViewAsStudent: 'View as Student',
  3500. _AddStudentEnrollment: 'Add Student Enrollment',
  3501. _RemoveStudentEnrollment: 'Remove Student Enrollment',
  3502. _ResetStudentEnrollment: 'Reset Student Enrollment',
  3503. _AddStudentEnrollmentPrompt: 'This operation will add a test student enrollment to this course. To remove it in the future, choose &quot;Remove Student Enrollment&quot; from this menu.&lt;br/&gt;&lt;br/&gt;Do you want to create a test student enrollment now?',
  3504. _RemoveStudentEnrollmentPrompt: 'Are you sure you want to delete this test student enrollment along with all associated grades and data?',
  3505. _ResetStudentEnrollmentPrompt: 'Are you sure you want to remove all grades and data associated with this test student enrollment?',
  3506. _AreYouSure: 'Are You Sure?',
  3507. _ErrorTitle: 'Error',
  3508. _UnknownError: 'Unknown error.',
  3509. _Page: 'Page',
  3510. _ProxyUserId: 'Proxy User ID',
  3511. _UserId: 'User ID',
  3512. _DomainId: 'Domain ID',
  3513. _EnrollmentId: 'Enrollment ID',
  3514. _StudentEnrollmentId: 'Student Enrollment ID',
  3515. _CourseId: 'Course ID',
  3516. _SectionId: 'Section ID',
  3517. _GroupId: 'Group ID',
  3518. _ItemId: 'Item ID',
  3519. _NewPosts: 'New Posts',
  3520. _MobileView: 'Mobile View'
  3521. });
  3522. });
  3523. </script>
  3524.  
  3525. </body>
  3526. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement