// Native replacement for prototype's Position.cumulativeOffset (offset relative // to the document). Returns [left, top]. function neCumulativeOffset(element) { var valueT = 0, valueL = 0; do { valueT += element.offsetTop || 0; valueL += element.offsetLeft || 0; element = element.offsetParent; } while (element); return [valueL, valueT]; } // Native replacement for prototype's Form.focusFirstElement/activate. Focuses // the lowest positive tabIndex if the form uses them, otherwise the first // enabled, non-hidden control. Never throws: this runs in the middle of // makeEditable(), which still has to start the state/autosave/lock timers. function neFocusFirstElement(form) { try { if (!form) return; var candidates = []; var controls = form.querySelectorAll('input, select, textarea'); for (var i = 0; i < controls.length; i++) { if (controls[i].type == 'hidden' || controls[i].disabled) continue; candidates.push(controls[i]); } if (candidates.length == 0) return; var element = null; for (var i = 0; i < candidates.length; i++) { if (!candidates[i].hasAttribute('tabIndex')) continue; if (candidates[i].tabIndex < 0) continue; if (!element || candidates[i].tabIndex < element.tabIndex) element = candidates[i]; } if (!element) element = candidates[0]; element.focus(); if (element.select) element.select(); } catch(e) {} } var doctype = "story"; var docsolo = ""; var appTitle = ""; var bgColor = ""; var bgColorCousin = "#000000"; var today = "10/23/2026"; var tomorrow = "10/24/2026"; var monday = "10/26/2026"; var tuesday = "10/27/2026"; var wednesday = "10/28/2026"; var thursday = "10/29/2026"; var friday = "10/30/2026"; var saturday = "10/24/2026"; var sunday = "10/25/2026"; var docChanged = false; var assignmentChanged = false; var storyChanged = false; var disableSave = false; var UIstatus = ""; var hasAutoSave = false; var autosaveRecovery = false; var formEnabled = false; var activeTab = "assignment"; var activeVersionTab = "assignment"; var activeEditor = ""; var timerShowButtons; var timerClearBanner; var timerSetBanner; var timerRestoreBanner; var timerDetectChanges; var timerCheck; var originalAssignmentValues = {}; var originalEditorContents = {}; var virginElements = {}; var lastAutoSaveContents = {}; var tempDiv; var currentBannerStyle = {}; var currentBannerText = ""; var changedFields = {}; var locks = {}; var requestedLocks = {}; var activeLocks = []; var multiSelectButtonName = ""; var displayedPriorVersion = 0; var accessKeyHelp = ""; var suppressMessage = false; var needToFix = {slug: false, pubdate: false, length: false}; var assignmentElementActive = {}; var missingFields = {}; var missingRequiredDenseUserTally = {}; function checkCalKeys(e, elem) { var keyval = e.keyCode; if (keyval != 32 && (keyval < 65 || keyval > 90)) { return true; } var char = String.fromCharCode(keyval).toLowerCase(); var val = elem.value.toLowerCase(); if (keyval == 32) { document.getElementById(elem.id + "Cal").onclick(); return false; } else if (char == "d") { elem.value = today; } else if (char == "t") { elem.value = tomorrow; } else if (char == "m") { elem.value = monday; } else if (val == tomorrow && char == "u") { elem.value = tuesday; } else if (char == "w") { elem.value = wednesday; } else if (char == "h") { elem.value = thursday; } else if (char == "f") { elem.value = friday; } else if (char == "a") { elem.value = saturday; } else if (char == "u") { elem.value = sunday; } else { return true; } if (e.preventDefault) { e.preventDefault(); e.stopPropagation(); } else { e.returnValue = false; e.cancelBubble = true; } return false; } function setCloseBlocker(on) { if (on) { window.onbeforeunload = ConfirmClose; } else { window.onbeforeunload = null; } } function ConfirmClose() { return "CLICK THE 'CANCEL' BUTTON or you'll lose any unsaved changes that you've made."; } function initx() { if (document.getElementById("formLoaded")) { formInit(); } } function reInitForm() { formInit(); handleChanges(); } function formInit() { initForm(); tempDiv = document.getElementById("tempDiv"); setDefaults(); showRequired(); showAllChosen(); } function setDefaults() { if (document.getElementById("pubdate")) { getDOW(document.getElementById("pubdate").value, "pubdateDOW") } if (BrowserDetect.OS == "Mac") { multiSelectButtonName = "Command/Apple"; accessKeyHelp = "Ctrl"; } else { multiSelectButtonName = "Ctrl"; accessKeyHelp = "Alt"; } for (var entry in requiredFields) { missingFields[entry] = false; } for (var entry in requiredFields) { missingRequiredDenseUserTally[entry] = 0; } //var tmpArray = document.querySelectorAll(".panelButton"); //tmpArray.forEach(function(elem) { // elem.title = accessKeyHelp + elem.title; //}); buildInstructions(); hideAllEditors(); } function showRequired() { for (var entry in requiredFields) { if (missingRequired(entry, false)) { if (document.getElementById(entry).classList.contains('textarea') || document.getElementById(entry).classList.contains('text')) { document.getElementById(entry).value = "(required)"; } } } } function showAllChosen() { showChosen("creators", "showCreators", true, ", ", false); showChosen("editors","showEditors", true, ", ", false); showChosen("cats","showCats", true, ", ", false); showChosen("topics","showTopics", true, ", ", false); } function showChosen(sourceID, displayID, useOption, delimiter, showHelp) { var useOption = (useOption == null) ? false : useOption; var delimiter = (delimiter == null) ? ", " : delimiter; var showHelp = (showHelp == null) ? true : showHelp; if (document.getElementById(sourceID)) { var listitem = document.getElementById(sourceID); var textForDisplay = ""; var moreText = ""; for(i=0; i < listitem.options.length; i++){ var listentry = listitem.options[i]; if (listentry.selected){ if (useOption) { moreText = listentry.text.replace( /[<>]/g, ""); } else { moreText = listentry.value; } if (textForDisplay == ""){ textForDisplay = moreText; }else{ textForDisplay = textForDisplay + delimiter + moreText; } } } if (textForDisplay == "") { textForDisplay = "none chosen"; } else if (showHelp) { showInstruct(listitem, multiSelectInstruct); showHelp = false; } if (document.getElementById(displayID).innerHTML != textForDisplay) { document.getElementById(displayID).innerHTML = textForDisplay; } edit(listitem, showHelp, false); } } function adjustWidth() { if (document.all) { if (docsolo != "yes") { if (BrowserDetect.browser == "Explorer") { if (BrowserDetect.version < 7) { document.body.style.marginRight = "20px"; } } } } } function nav(dir) { if (dir == "newer") { try { top.storylist.moveFocus("up", 10); } catch(e) { // do nothing } } else if (dir == "older") { try { top.storylist.moveFocus("down", 10); } catch(e) { // do nothing } } return false; } function showSent(mode) { var sentText = document.getElementById("sendHistory"); if (mode == "show") { sentText.style.display = ""; } else { sentText.style.display = "none"; } } function refreshGrid() { for (var j = 0; j < topwin.gridWindows.length; j++) { if (topwin.gridWindows[j].document) { topwin.gridWindows[j].manualRefresh(true); } } } function showTab(elem) { if (elem) { dataHaveChanged(true); var id = elem.id; if (id == "showAssignmentInfo") { activeTab = "assignment"; hideEverything(); $j("#assignmentBlock").show(); $j("#stateColumn").show(); document.getElementById("popupZone").ondblclick = function(){tryToMakeEditable();}; } else if (id == "showStoryBody") { if (document.getElementById("HistoryID").value == 0) { alert("You can't start writing a story until you've saved the required assignment info."); return; } else { activeTab = "body"; hideEverything(); $j("#storyBodyBlock").show(); } } else if (id == "showStoryElements") { if (document.getElementById("HistoryID").value == 0) { alert("You can't create story elements until you've saved the required assignment info."); return; } else { activeTab = "elements"; hideEverything(); $j("#topBar").show(); $j("#storyElementBlock").show(); $j("#topElementPicker").show(); } } else if (id == "showFiles") { if (document.getElementById("HistoryID").value == 0) { alert("You can't upload files until you've saved the required assignment info."); return; } else { activeTab = "files"; hideEverything(); $j("#fileBlock").show(); } } else if (id == "showPackage") { activeTab = "package"; hideEverything(); $j("#packageBlock").show(); } else if (id == "showVersions") { activeTab = "versions"; getVersionList(); hideEverything(); $j("#topBar").show(); if (document.getElementById("versionData").innerHTML != "") { $j("#versionTabBar").show(); } $j("#versionBlock").show(); $j("#versionPicker").show(); } else if (id == "showVersionAssignmentInfo") { activeVersionTab = "assignment"; hideEverythingVersion(); $j("#versionAssignmentBlock").show(); } else if (id == "showVersionStoryBody") { activeVersionTab = "body"; hideEverythingVersion(); $j("#versionStoryBodyBlock").show(); } else if (id == "showVersionStoryElements") { activeVersionTab = "elements"; hideEverythingVersion(); $j("#versionStoryElementBlock").show(); } else if (id == "showVersionChanges") { activeVersionTab = "changes"; hideEverythingVersion(); $j("#versionChangesBlock").show(); } var tmpArray = elem.parentNode.querySelectorAll('.tab'); tmpArray.forEach(function(element) { element.classList.remove("tabSelected"); }); elem.classList.add("tabSelected"); setUI(true); } } function MCEinit_full() { tinyMCE.init({ mode: "exact", elements: "", theme: "advanced", content_css: "/tpext/stylesheets/editorFull_css.php", plugins: "print,searchreplace,table", nonbreaking_force_tab: true, gecko_spellcheck: true, theme_advanced_toolbar_location: "top", theme_advanced_toolbar_align: "left", theme_advanced_buttons1: "bold,italic,strikethrough,separator,undo,redo,separator,search,replace,separator,bullist,numlist,separator,print", theme_advanced_buttons2: "tablecontrols", theme_advanced_buttons3: "", handle_event_callback : "handleEventsMCE", cleanup: true, cleanup_on_startup: true, button_tile_map: true, debug: false }); } function MCEinit_basic() { tinyMCE.init({ mode: "exact", elements: "", theme: "advanced", content_css: "/tpext/stylesheets/editorBasic_css.php", plugins: "print,searchreplace,table", nonbreaking_force_tab: true, gecko_spellcheck: true, theme_advanced_toolbar_location: "top", theme_advanced_toolbar_align: "left", theme_advanced_buttons1: "bold,italic,strikethrough,separator,undo,redo,separator,search,replace,separator,bullist,numlist,separator,print", theme_advanced_buttons2: "", theme_advanced_buttons3: "", handle_event_callback : "handleEventsMCE", cleanup: true, cleanup_on_startup: true, button_tile_map: true, debug: false }); } function getAllAssignmentValues() { var values = {}; var formData = neSerializeHash("#itemform"); for (var entry in formData){ if (entry.indexOf("Assignment") == 0) { if (formData[entry] == "(required)") { values[entry] = ""; } else { values[entry] = formData[entry]; } } } return values; } function getAllEditorContents() { var contents = {}; var tmpArray = document.querySelectorAll(".rtEditor"); tmpArray.forEach(function(elem) { if (!virginElements[elem.id]) { contents[elem.id] = getEditorContents(elem.id); } }); return contents; } function createAssignmentElement(elem) { var elementType = elem.value; if (elementType != "-1") { hideAllMCEeditors(); elem.selectedIndex=0; assignmentElementsUsed[elementType]++; var blockName = "elementBlock_" + elementType; var block = document.getElementById(blockName); $j(block).show(); var elementName = "element_" + elementType + assignmentElementsUsed[elementType]; var elementLabel = ""; var elementSpacer = ""; if (assignmentElementsUsed[elementType] > 1) { elementSpacer = "
"; } var elementButtons = elementSpacer + "delete elementstop editinglose changes"; var elementHTML = "
"; var elementAll = "
" + elementButtons + elementLabel + elementHTML + "
"; block.insertAdjacentHTML('beforeend', elementAll); originalEditorContents[elementName] = ""; virginElements[elementName] = true; adjustEditors(false); // scroll to editor and show var editor = document.getElementById(elementName); var editorPos = neCumulativeOffset(editor); var editorTop = editorPos[1]; window.scrollTo(0, editorTop - 120); tryToShowEditor(elementName,'basic'); } } function removeAssignmentElement(elementID, elementType) { hideEditor(elementID); assignmentElementsUsed[elementType]--; if (assignmentElementsUsed[elementType] == 0) { $j(document.getElementById(elementID).parentNode.parentNode).hide(); } document.getElementById(elementID).parentNode.innerHTML = ""; locks[elementID] = false; if (document.getElementById("IDstory").value > 0) { URL = "assignment.php"; $j.ajax(URL, { type: "get", data: {action: "removeElement", HistoryID: document.getElementById("HistoryID").value, elementID: elementID}, dataType: "xml", complete: processProtoReqSuccess, error: processProtoReqFailure }); } } function getVersionList() { if (document.getElementById("HistoryID").value > 0) { displayedPriorVersion = document.getElementById("versionPicker").value; $j("#versionPicker").html(""); document.getElementById("versionPicker").disabled = true; URL = "assignment.php"; $j.ajax(URL, { type: "get", data: {action: "sendVersionList", HistoryID: document.getElementById("HistoryID").value}, dataType: "xml", complete: processProtoReqSuccess, error: processProtoReqFailure }); } } function resetVersionList() { var versions = document.getElementById("versionPicker").options; for (i=0; i < versions.length; i++) { if (versions[i].value == displayedPriorVersion) { document.getElementById("versionPicker").selectedIndex = i; break; } } } function showVersion(elem) { var vassignmentID = elem.value; if (vassignmentID > 0) { URL = "assignment.php"; $j.ajax(URL, { type: "get", data: {action: "showPriorVersion", vAssignmentID: vassignmentID}, dataType: "xml", complete: processProtoReqSuccess, error: processProtoReqFailure }); } } function hideAllMCEeditors(trackState, hideDiv) { var trackState = (trackState == null) ? true : trackState; var hideDiv = (hideDiv == null) ? false : hideDiv; var fieldname; for (var n in tinyMCE.instances){ var instance=tinyMCE.instances[n]; if (tinyMCE.isInstance(instance)) { fieldname = instance.formTargetElementId; hideEditor(fieldname, trackState); if (hideDiv) { $j("#" + fieldname).hide(); } } } } function hideAllEditors(trackState) { var trackState = (trackState == null) ? true : trackState; var tmpArray = document.querySelectorAll(".rtEditor"); tmpArray.forEach(function(elem) { hideEditor(elem.id, trackState); }); } function restoreAllEditors(restoreEditable) { var restoreEditable = (restoreEditable == null) ? true : restoreEditable; for (var entry in assignmentElementActive){ if (assignmentElementActive[entry] && restoreEditable) { showEditor(entry, assignmentElementInitMode[entry]); } else { if (document.getElementById(entry)) { $j("#" + entry).show(); } } } focusActiveEditor(); } function focusActiveEditor() { if (activeEditor != "") { window.focus(); tinyMCE.execCommand("mceFocus", false, activeEditor); } } function initActionsAllEditors() { for (var n in tinyMCE.instances){ var instance=tinyMCE.instances[n]; if (tinyMCE.isInstance(instance)) { fieldname = instance.formTargetElementId; initEditorActions(fieldname); } } } function initEditorActions(fieldname) { $j("#" + fieldname + "_" + "action2").hide(); $j("#" + fieldname + "_" + "action1").show(); if (document.getElementById(fieldname + "_" + "action3")) { if (getEditorContents(fieldname) == "") { $j("#" + fieldname + "_" + "action3").show(); } } } function editmodeEditorActions(fieldname) { $j("#" + fieldname + "_" + "action1").hide(); if (document.getElementById(fieldname + "_" + "action3")) { $j("#" + fieldname + "_" + "action3").hide(); } $j("#" + fieldname + "_" + "action2").show(); } function setEditorActions(fieldname) { if (dataHaveChanged(false, fieldname)) { editmodeEditorActions(fieldname); } else { initEditorActions(fieldname); } } function tryToShowEditor(fieldname, mode) { var mode = (mode == null) ? "basic" : mode; assignmentElementInitMode[fieldname] = mode; requestLock(fieldname); } function showEditor(fieldname, mode, trackState) { var mode = (mode == null) ? "basic" : mode; var trackState = (trackState == null) ? true : trackState; // abort if editor already exists var editor = tinyMCE.getInstanceById(fieldname); if (editor) { return; } if (document.getElementById(fieldname)) { if (document.getElementById(fieldname).innerHTML == "(double-click to edit)") { $j("#" + fieldname).html(""); } eval("MCEinit_" + mode + "()"); tinyMCE.execCommand("mceAddControl",false,fieldname); setEditorActions(fieldname); if (trackState) { assignmentElementActive[fieldname] = true; } } } function debug(prefix){ alert(prefix + ":\n" + Object.keys(originalEditorContents) + "\n" + Object.values(originalEditorContents)); } function hideEditor(fieldname, trackState, unlock) { var trackState = (trackState == null) ? true : trackState; var unlock = (unlock == null) ? true : unlock; var editor = tinyMCE.getInstanceById(fieldname); if (editor) { tinyMCE.execCommand("mceRemoveControl",false,fieldname); $j("#" + fieldname + "_" + "action1").hide(); $j("#" + fieldname + "_" + "action2").hide(); if (document.getElementById(fieldname + "_" + "action3")) { $j("#" + fieldname + "_" + "action3").hide(); } if (trackState) { assignmentElementActive[fieldname] = false; } if (unlock) { removeLocks(fieldname); } } if (document.getElementById(fieldname)) { if (document.getElementById(fieldname).innerHTML == "") { $j("#" + fieldname).html("(double-click to edit)"); } } } function setEditorContents(fieldname, text) { var editor = tinyMCE.getInstanceById(fieldname); if (editor) { editor.execCommand("mceSetContent",false,text); } } function getEditorContents(fieldname) { var editorText = ""; var editor = tinyMCE.getInstanceById(fieldname); if (editor) { //editor.execCommand("mceCleanup", false); tempDiv.innerHTML = tinyMCE.getContent(editor.editorId); editorText = tempDiv.innerHTML; } else { editorText = document.getElementById(fieldname).innerHTML; } if (editorText == "(double-click to edit)") { editorText = ""; } return editorText; } function adjustEditors(restore) { var restore = (restore == null) ? true : restore; hideAllMCEeditors(false, true); var dataStart = neCumulativeOffset(document.getElementById("assignmentBody")); var dataTop = dataStart[1]; var windowSize = getWindowSize(); var newWidthStoryDiv = (windowSize[0] - 17) + "px"; var newWidthStoryMCE = (windowSize[0] - 27) + "px"; var newWidthElementDiv = (windowSize[0] - 45) + "px"; var newWidthElementMCE = (windowSize[0] - 55) + "px"; var newStoryHeight = (windowSize[1] - (dataTop*2.6)) + "px"; var newElementHeight = "70px"; var editor = document.getElementById("StoryBody"); if (editor) { editor.style.height = newStoryHeight; editor.style.width = newWidthStoryDiv; } var editor = tinyMCE.getInstanceById("StoryBody"); if (editor) { var editorFrame = document.getElementById(editor.editorId); editorFrame.style.height = newHeight; editorFrame.style.width = newWidthStoryMCE; } if (document.getElementById("storyElementBlock")) { var tmpArray = document.getElementById("storyElementBlock").querySelectorAll('.elementEditor'); tmpArray.forEach(function(elem) { elem.style.height = newElementHeight; elem.style.width = newWidthElementDiv; var editor = tinyMCE.getInstanceById(elem.id); if (editor) { var editorFrame = document.getElementById(editor.editorId); editorFrame.style.height = newElementHeight; editorFrame.style.width = newWidthElementMCE; } }); } setTimeout("restoreAllEditors(" + restore.toString() + ");", 100); } function getWindowSize() { var tmpArray = new Array(); tmpArray[0] = innerWidth || document.documentElement.offsetWidth; tmpArray[1] = innerHeight || document.documentElement.offsetHeight; return tmpArray; } function enableContextMenu() { //document.getElementById("popupZone").oncontextmenu = popupMenu; } function disableContextMenu() { //document.getElementById("popupZone").oncontextmenu = null; //hideContextMenu(); } function registerFieldEdit(fieldID) { if (changedFields[fieldID]) { changedFields[fieldID]++; } else { changedFields[fieldID] = 1; } } function showReadOnlyBanner() { //clearStateIndicator(); //$j("#stateBanner").css({fontSize: "large", fontWeight: "bold", color: "#000000"}).html("Read Only").show(); //$j("#stateColumn").css({backgroundColor: "#000000"}); } function doubleClickForm() { if (pageEditable) { if (!formEnabled) { if (reloadOnEdit) { reloadForm(); } else { switchMode(true); } } } } function reloadForm() { // forces reload of any altered data before entering edit mode setCloseBlocker(false); var url = window.location.href; url = url.replace(/action=read/g, "action=edit"); if (url == window.location.href) { window.location.reload(true); } else { window.location.assign(url); } } function switchMode(editMode) { if (editMode) { tryToMakeEditable(); } else { makeReadOnly(); } } function tryToMakeEditable() { if (!formEnabled) { requestLock(); } } function makeEditable() { var form = document.getElementById("itemform"); if (document.getElementById("approvalButtons")) $j("#approvalButtons").show(); if (document.getElementById("editLink")) $j("#editLink").hide(); if (document.getElementById("mainLink")) $j("#mainLink").hide(); if (document.getElementById("cancelLink")) $j("#cancelLink").hide(); if (document.getElementById("saveLink")) $j("#saveLink").show(); if (document.getElementById("justSaveLink")) $j("#justSaveLink").show(); if (document.getElementById("cancelLink2")) $j("#cancelLink2").hide(); if (document.getElementById("saveMoreLink")) $j("#saveMoreLink").show(); if (document.getElementById("DocElem").value != "gamestat") { $j(form).find(":input").prop("disabled", false); } formEnabled = true; stateCheckPriorSerializedData = $j("#itemform").serialize(); if (document.getElementById("WasAutoSave")) { if (document.getElementById("WasAutoSave").value == "yes") { stateCheckPriorSerializedData = ""; } } autoSavePriorSerializedData = stateCheckPriorSerializedData; neFocusFirstElement(form); checkState(); initStateCheckTimer(); if (doAutoSave) { initAutoSaveTimer(); } if (doLockChecks) { initLockCheckTimer(); } } function makeReadOnly(unlock) { var unlock = (unlock == null) ? false : unlock; var form = document.getElementById("itemform"); if (document.getElementById("approvalButtons")) $j("#approvalButtons").hide(); if (document.getElementById("editLink")) $j("#editLink").show(); if (document.getElementById("mainLink")) $j("#mainLink").show(); if (document.getElementById("cancelLink")) $j("#cancelLink").hide(); if (document.getElementById("saveLink")) $j("#saveLink").hide(); if (document.getElementById("justSaveLink")) $j("#justSaveLink").hide(); if (document.getElementById("cancelLink2")) $j("#cancelLink2").hide(); if (document.getElementById("saveMoreLink")) $j("#saveMoreLink").hide(); formEnabled = false; $j(form).find(":input").prop("disabled", true); setCloseBlocker(false); if (unlock) { removeLock(); removeAutoSave(); } } function tryToResetEditor(id) { if (confirm("Are you sure you want to lose all of your unsaved changes to this item?")) { resetEditor(id); removeLocks(id); handleChanges(); } } function resetEditor(id, unlock) { var unlock = (unlock == null) ? true : unlock; hideEditor(id, true, unlock); $j("#" + id).html(originalEditorContents[id]); hideEditor(id, true, unlock); } function resetForm(verify, everything) { var verify = (verify == null) ? false : verify; var everything = (everything == null) ? false : everything; if (verify) { if (autosaveRecovery) { clearChangeTracking(); window.close(); } else { dataHaveChanged(true); if (docChanged) { var msg = "Are you sure you want to do this?\n\n"; if (everything && assignmentChanged && storyChanged) { msg += "You will lose ALL of the changes you've made on the assignment form and in the text editors."; } else if (assignmentChanged) { msg += "You will lose all of the changes you've made on the assignment form."; } else if (everything && storyChanged) { msg += "You will lose all of the changes you've made in the text editors."; } if (!confirm(msg)) { return; } } } } if (everything) { for (var entry in originalEditorContents) { resetEditor(entry, false); } removeLocks(getLockNames()); } if (document.getElementById("ID").value == 0) { document.getElementById("itemform").reset(); clearChangeTracking(); showRequired(); setUI(); } else { URL = "assignment.php"; $j.ajax(URL, { type: "get", data: {action: "loadAssignment", HistoryID: document.getElementById("HistoryID").value}, dataType: "xml", complete: processProtoReqSuccess, error: processProtoReqFailure }); } } function clearChangeTracking(resetEditorTracking) { var resetEditorTracking = (resetEditorTracking == null) ? true : resetEditorTracking; docChanged = false; assignmentChanged = false; storyChanged = false; setCloseBlocker(false); changedFields = {}; if (resetEditorTracking) { originalEditorContents = getAllEditorContents(); } } function clearStateIndicator() { //clearTimeout(timerClearBanner); //$j("#stateBanner").html("").hide(); //$j("#stateColumn").css({backgroundColor: "transparent", borderLeft: "2px solid transparent"}); } function setUI(force) { return; var force = (force == null) ? false : force; var tempUIstatus = activeTab.toString() + assignmentChanged.toString() + storyChanged.toString() + formEnabled.toString() + autosaveRecovery.toString(); if (tempUIstatus != UIstatus || force) { UIstatus = tempUIstatus; if (docChanged) { setCloseBlocker(true); } else { clearStateIndicator(); clearChangeTracking(false); } if (docChanged || autosaveRecovery) { setUIForEdit(); } else if (activeTab == "assignment" && !formEnabled) { setUIForReadOnly(); } else { setUIForStart(); } $j("#buttonPanelSet1").show(); $j("#buttonPanelSet2").show(); } } function hideAllButtons() { return; $j("#buttonSubmit").hide(); $j("#rcSubmit").hide(); $j("#buttonResetForm").hide(); $j("#rcResetForm").hide(); $j("#buttonMakeReadOnly").hide(); $j("#rcMakeReadOnly").hide(); $j("#buttonMakeEditable").hide(); $j("#rcMakeEditable").hide(); } function showSubmitButtons() { $j("#buttonSubmit").show(); $j("#rcSubmit").show(); } function showMakeEditableButtons() { return; $j("#buttonMakeEditable").show(); $j("#rcMakeEditable").show(); } function showMakeReadOnlyButtons() { $j("#buttonMakeReadOnly").show(); $j("#rcMakeReadOnly").show(); } function enableButtons() { //document.getElementById("buttonMakeEditable").disabled = false; //document.getElementById("buttonMakeReadOnly").disabled = false; //document.getElementById("popupZone").ondblclick = function(){tryToMakeEditable();}; } function setUIForStart() { if (!docChanged) { $j("#buttonSubmitClose").html("Close"); $j("#rcSubmitClose").html("Close"); } hideAllButtons(); if (activeTab == "assignment") { showMakeReadOnlyButtons(); setTimeout("enableButtons();", 500); } else { if (docChanged) { showSubmitButtons(); } } } function setUIForEdit() { $j("#buttonSubmitClose").html("Save and Close"); $j("#rcSubmitClose").html("Save and Close"); hideAllButtons(); showChangeBanner(); if (activeTab == "assignment") { if (assignmentChanged || autosaveRecovery) { showSubmitButtons(); $j("#buttonResetForm").show(); $j("#rcResetForm").show(); } else { showMakeReadOnlyButtons(); setTimeout("enableButtons();", 100); } } else if (activeTab == "body" || activeTab == "elements") { if (storyChanged || autosaveRecovery) { showSubmitButtons(); } } } function setUIForReadOnly() { hideAllButtons(); if (activeTab == "assignment") { showMakeEditableButtons(); setTimeout("enableButtons();", 500); showReadOnlyBanner(); } } function dimButtonPanel(elem) { // hides but doesn't disable buttons if behind instructions clearTimeout(timerShowButtons); if ($j(elem).is(':visible')) { var scrollAmount = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0; var panelPos = neCumulativeOffset(document.getElementById("buttonPanelSet2")); var panelBottom = document.getElementById("buttonPanelSet2").offsetHeight + panelPos[1]; var instructPos = neCumulativeOffset(elem); var instructTop = instructPos[1] - scrollAmount; if (instructTop < panelBottom) { //$j("#buttonPanelSet2").css({zIndex: "-100"}); } else { restoreButtonPanel(); } } } function restoreButtonPanel() { // restores buttons if previously behind instructions // (on timer to avoid flickering of buttons between fields) clearTimeout(timerShowButtons); timerShowButtons = setTimeout("displayButtonPanel();", 100); } function displayButtonPanel() { if (document.getElementById("buttonPanelSet2")) $j("#buttonPanelSet2").css({zIndex: "2500"}); } function getInstructBlock(elem) { try { elemNode = elem.parentNode.parentNode; while (elemNode.nodeName != "LI") { elemNode = elemNode.parentNode; } var tmpArray = elemNode.querySelectorAll('.instruct'); return tmpArray[0]; } catch(e) { if (document.getElementById("statEntryHelp")) { return document.getElementById("statEntryHelp"); } } } function getInstructText(elemID) { try { text = eval(elemID + "Instruct"); } catch(e) { text = ""; } return text; } function scrollToBlock(elem) { // scroll to block if not visible var fieldDivPos = neCumulativeOffset(elem.parentNode); //var titleTop = neCumulativeOffset(document.getElementById("assignmentBody")); //window.scrollTo(fieldDivPos[0], fieldDivPos[1] - (titleTop[1] + 10)); } function showInstruct(elem, msgText, display) { var msgText = (msgText == null) ? getInstructText(elem.id) : msgText; var display = (display == null) ? 0: display; var msgBlock = getInstructBlock(elem); if (msgBlock) { if (missingFields[elem.id]) { // recheck whether field is still missing if (missingRequired(elem.id, false)) { scrollToBlock(elem); dimButtonPanel(msgBlock); return; } } if (display == 1) { msgBlock.classList.add("warning"); elem.parentNode.classList.add("error"); scrollToBlock(elem); } else { msgBlock.classList.remove("warning"); elem.parentNode.classList.remove("error"); } if (msgText == "" || display == -1) { $j(msgBlock).html("").hide(); restoreButtonPanel(); } else { $j(msgBlock).html(msgText).show(); dimButtonPanel(msgBlock); } } } function showInstructMCE(elemID, msgText, display) { var msgText = (msgText == null) ? getInstructText(elemID) : msgText; var display = (display == null) ? 0: display; var msgBlock = document.getElementById("topMsgBar"); if (display == 1) { msgBlock.classList.add("warning"); } else { msgBlock.classList.remove("warning"); } if (msgText == "" || display == -1) { $j("#topBar").hide(); $j(msgBlock).html("").hide(); } else { $j("#topBar").show(); $j(msgBlock).html(msgText).show(); } } function handleEventsMCE(e) { if (e.type == "keyup") { var editor = tinyMCE.selectedInstance; registerFieldEdit(editor.formTargetElementId); editMCE(editor); } else if (e.type == "focus") { var editor = tinyMCE.selectedInstance; activeEditor = editor.formTargetElementId; } return true; } function editMCE(inst, displayInstruct) { var displayInstruct = (displayInstruct == null) ? true : displayInstruct; var elemID = inst.formTargetElementId; checkForChanges(elemID); if (activeEditor != elemID) { activeEditor = elemID; setEditorActions(elemID); if (displayInstruct) { var contents = tinyMCE.getContent(inst.editorId); if (contents.trim() == "" || true) { showInstructMCE(elemID); } else { showInstructMCE(elemID, "", -1); } } } } function edit(elem, displayInstruct, checkChanges) { var displayInstruct = (displayInstruct == null) ? true : displayInstruct; var checkChanges = (checkChanges == null) ? true : checkChanges; activeEditor = ""; if (checkChanges) { checkForChanges(); } if (elem.value == "(required)") { elem.value = ""; } if (elem.id == "slug") { if (checkSlug()) { return; } } else if (elem.id == "pubdate") { checkPubDate(); return; } else if (elem.id == "length") { if (checkLength()) { return; } } if (displayInstruct) { if (elem.value.trim() == "") { showInstruct(elem); } else { showInstruct(elem, "", -1); } } } function stripMe(elem, illegalChars) { var illegalChars = (illegalChars == null) ? false: illegalChars; elem.value = elem.value.trim(); if (illegalChars) { elem.value = elem.value.replace( /[^-a-zA-Z0-9_.]/g, ""); } } function checkSlug() { stripMe(document.getElementById("slug"), true); var slug = document.getElementById("slug").value; if (slug.length > 0) { URL = "assignment.php"; $j.ajax(URL, { type: "get", data: {action: "checkSlug", slug: slug, TypeID: document.getElementById("TypeID").value, ID: document.getElementById("ID").value}, dataType: "xml", complete: processProtoReqSuccess, error: processProtoReqFailure }); return true; } return false; } function checkPubDate() { var pubdate = document.getElementById("pubdate").value; var testDate = new Date(pubdate); if (testDate) { if (testDate.getFullYear() >= 2000) { if (document.getElementById("ID").value == 0) { URL = "assignment.php"; $j.ajax(URL, { type: "get", data: {action: "checkPubDate", pubdate: pubdate}, dataType: "xml", complete: processProtoReqSuccess, error: processProtoReqFailure }); } else { needToFix["pubdate"] = false; } showInstruct(document.getElementById("pubdate"), "", -1); return; } } needToFix["pubdate"] = true; showInstruct(document.getElementById("pubdate")); return false; } function checkLength() { var lengthval = document.getElementById("length").value; if (lengthval.length > 0) { URL = "assignment.php"; $j.ajax(URL, { type: "get", data: {action: "checkLength", length: lengthval, TypeID: document.getElementById("TypeID").value, ID: document.getElementById("ID").value}, dataType: "xml", complete: processProtoReqSuccess, error: processProtoReqFailure }); return true; } return false; } function missingRequired(id, showMsg) { var showMsg = (showMsg == null) ? true : showMsg; if (document.getElementById(id).value.trim() == "" || document.getElementById(id).value.trim() == "(required)") { if (showMsg) { document.getElementById(id).focus(); showInstruct(document.getElementById(id), "You are required to enter " + requiredFields[id] + ".", 1); missingFields[id] = true; missingRequiredDenseUserTally[id]++; if (missingRequiredDenseUserTally[id] > 1) { alert("You can't save this item until you enter " + requiredFields[id] + "."); } } return true; } else { missingFields[id] = false; return false; } } function basicClose() { cancelAllTimers(); if (formEnabled) { if (document.getElementById("DocID")) { // Unlock straight from this window: sendBeacon is same-origin to this // popup (like the getLock request) and survives the window closing, so // we no longer relay through opener.top.header -- that cross-frame hop // threw a SecurityError when the popup and frameset were on different // origins, leaving the lock behind for every item type. beaconPost("ajax/lock.php", {action: "unlock", DocID: document.getElementById("DocID").value, DocElem: document.getElementById("DocElem").value}); } } } function requestLock(options) { var options = (options == null) ? "" : options; var msg = ""; if (document.getElementById("DocID")) { $j.ajax("ajax/lock.php", { type: "get", data: {action: "getLock", options: options, DocID: document.getElementById("DocID").value, DocElem: document.getElementById("DocElem").value}, dataType: "html", success: function(data, textStatus, transport){ var response = transport.responseText || ""; if (response != "") { if (response == "granted") { makeEditable(); } else { if (response.indexOf("?") == 0) { response = response.substring(1); } alert(response); } } }, error: function(){ alert('Error requesting edit lock.'); } }); } else { makeEditable(); } } function removeLock() { if (document.getElementById("DocID")) { noresponseAjax("ajax/lock.php", {action: "unlock", DocID: document.getElementById("DocID").value, DocElem: document.getElementById("DocElem").value}); } } function removeAutoSave() { if (doAutoSave) { noresponseAjax("ajax/clearDraft.php", {GameID: document.getElementById("GameID").value, TeamID: document.getElementById("TeamID").value}); } } function removeLocks() { } function getLockNames() { var lockList = new Array(); for (var entry in locks) { if (locks[entry]) { lockList[lockList.length] = entry; } } return lockList.join(","); } function banner(text, displaySeconds, size, weight, color) { var displaySeconds = (displaySeconds == null) ? 0 : displaySeconds; var size = (size == null) ? "large" : size; var weight = (weight == null) ? "normal" : weight; var color = (color == null) ? "" : color; currentBannerStyle = {fontSize: $j("#stateBanner").css("fontSize"), fontWeight: $j("#stateBanner").css("fontWeight"), color: $j("#stateBanner").css("color")}; currentBannerText = document.getElementById("stateBanner").innerHTML; clearTimeout(timerClearBanner); clearTimeout(timerSetBanner); $j("#stateBanner").css({fontSize: size, fontWeight: weight, color: color}).html(text).show(); if (displaySeconds > 0) { clearTimeout(timerRestoreBanner); timerRestoreBanner = setTimeout("restoreBanner();", displaySeconds*1000); } } function setBanner(text, displaySeconds, size, weight, color) { // displays banner after brief pause to allow other stuff to wrap up var size = (size == null) ? "large" : size; var weight = (weight == null) ? "normal" : weight; var color = (color == null) ? "" : color; clearTimeout(timerClearBanner); clearTimeout(timerSetBanner); timerSetTimer = setTimeout("banner(\"" + text + "\"," + displaySeconds + ",'" + size + "','" + weight + "','" + color + "');", 200); } function restoreBanner() { clearTimeout(timerRestoreBanner); $j("#stateBanner").css(currentBannerStyle).html(currentBannerText).show(); } function showChangeBanner() { if (docChanged) { clearStateIndicator(); $j("#stateBanner").css({fontSize: "large", fontWeight: "lighter", color: "#000000"}).html("unsaved changes").show(); $j("#stateColumn").css({borderLeft: "2px dotted #000000"}); } } function checkForChanges(elementID) { var elementID = (elementID == null) ? "" : elementID; clearTimeout(timerDetectChanges); if (storyChanged && (activeTab == "body" || activeTab == "elements")) { delay = 1000; } else { delay = 200; } timerDetectChanges = setTimeout("handleChanges('" + elementID + "');", delay); } function handleChanges(elementID) { var elementID = (elementID == null) ? "" : elementID; clearTimeout(timerDetectChanges); dataHaveChanged(true, elementID); setUI(); } function dataHaveChanged(fullcheck, elementID) { var fullcheck = (fullcheck == null) ? false : fullcheck; var elementID = (elementID == null) ? "" : elementID; if (elementID != "") { var elementChanged = false; var elementText = getEditorContents(elementID).toString(); if (originalEditorContents[elementID]) { if (originalEditorContents[elementID].toString() != elementText) { elementChanged = true; } } else { if (elementText != "") { elementChanged = true; } } if (fullcheck) { if (elementChanged) { storyChanged = true; editmodeEditorActions(elementID); } else { initEditorActions(elementID); if (storyChanged) { handleChanges(); } } } else { return elementChanged; } } else { var tempAssignmentChanged = false; var tempStoryChanged = false; var assignmentValues = getAllAssignmentValues(); for (var entry in assignmentValues) { if (originalAssignmentValues[entry]) { if (originalAssignmentValues[entry].toString() != assignmentValues[entry].toString()) { if (fullcheck) { tempAssignmentChanged = true; break; } else { return true; } } } else { if (assignmentValues[entry].toString() != "") { if (fullcheck) { tempAssignmentChanged = true; break; } else { return true; } } } } var editorContents = getAllEditorContents(); for (var entry in editorContents) { if (originalEditorContents[entry]) { if (originalEditorContents[entry] != editorContents[entry]) { if (fullcheck) { tempStoryChanged = true; break; } else { return true; } } } else { if (editorContents[entry] != "") { if (fullcheck) { tempStoryChanged = true; break; } else { return true; } } } } assignmentChanged = tempAssignmentChanged; storyChanged = tempStoryChanged; } docChanged = (assignmentChanged || storyChanged); return false; } function submitItem() { for (var entry in requiredFields) { if (missingRequired(entry)) { return; } } for (var entry in needToFix) { if (needToFix[entry]) { var tmpText = ""; if (requiredFields[entry]) { tmpText = requiredFields[entry]; } else { tmpText = "the " + entry; } resetChecker(false); alert("You can't save this item until you fix the problem with " + tmpText + "."); resetChecker(true); document.getElementById(entry).focus(); return; } } setCloseBlocker(false); document.itemform.submit(); } function submitForm(close) { var close = (close == null) ? false : close; if (disableSave) { alert("You cannot save this version because the assignment has changed since you were editing it.\n\nYou can only examine the data and copy it elsewhere."); return; } var hasAssignmentData = false; var hasStoryData = false; resetChecker(true); topwin.logoutRequested = false; if (docChanged || autosaveRecovery) { for (var entry in requiredFields) { if (missingRequired(entry)) { return; } } for (var entry in needToFix) { if (needToFix[entry]) { showTab(document.getElementById("showAssignmentInfo")); var tmpText = ""; if (requiredFields[entry]) { tmpText = requiredFields[entry]; } else { tmpText = "the " + entry; } resetChecker(false); alert("You can't save this assignment until you fix the problem with " + tmpText + "."); resetChecker(true); document.getElementById(entry).focus(); return; } } resetChecker(false); var formData = {}; if (autosaveRecovery) { originalAssignmentValues = {}; originalEditorContents = {}; } // find assignment fields that have changed var assignmentValues = getAllAssignmentValues(); for (var entry in assignmentValues) { if (originalAssignmentValues[entry]) { if (originalAssignmentValues[entry].toString() != assignmentValues[entry].toString()) { formData[entry] = assignmentValues[entry]; hasAssignmentData = true; } } else { if (assignmentValues[entry].toString() != "") { formData[entry] = assignmentValues[entry]; hasAssignmentData = true; } } } // find text-editor fields that have changed var editorContents = getAllEditorContents(); for (var entry in editorContents) { if (originalEditorContents[entry]) { if (originalEditorContents[entry] != editorContents[entry] || editorContents[entry] == "") { formData[entry] = editorContents[entry]; hasStoryData = true; } } else { formData[entry] = editorContents[entry]; hasStoryData = true; } } if (hasStoryData && hasAssignmentData) { formData["scope"] = "all"; } else if (hasStoryData) { formData["scope"] = "story"; } else if (hasAssignmentData) { formData["scope"] = "assignment"; } else { abortSubmit(); focusActiveEditor(); return; } var tmpArray = new Array(); for (var entry in changedFields) { tmpArray[tmpArray.length] = entry + ":" + changedFields[entry]; } changedFieldText = tmpArray.join(","); if (changedFieldText != "") { formData["AssignmentModifications"] = formData["scope"] + ":-1," + changedFieldText; } formData["action"] = "save"; formData["ID"] = document.getElementById("ID").value; formData["HistoryID"] = document.getElementById("HistoryID").value; formData["IDstory"] = document.getElementById("IDstory").value; formData["MicroTimeStamp"] = document.getElementById("MicroTimeStamp").value; formData["TypeID"] = document.getElementById("TypeID").value; formData["windowClose"] = close.toString(); $j("#buttonPanel").hide(); document.getElementById("popupZone").ondblclick = null; formEnabled = false; $j("#itemform").find(":input").prop("disabled", true); clearTimeout(timerClearBanner); $j("#stateBanner").css({fontSize: "large", fontWeight: "bold", color: ""}).html("saving...").show(); URL = "assignment.php"; $j.ajax(URL, { type: "post", data: formData, dataType: "xml", complete: processProtoReqSuccess, error: processProtoReqFailure }); resetChecker(true); } else { if (close) { closeMe(); } else { abortSubmit(); } } } function abortSubmit() { resetChecker(true); clearTimeout(timerClearBanner); $j("#stateBanner").css({fontSize: "large", fontWeight: "bold", color: "#000000"}).html("(no changes)").show(); timerClearBanner = setTimeout("clearStateIndicator();", 3000); } function closeMe(msg) { var msg = (msg == null || msg == "") ? "You must either save or undo your changes before you can close this assignment." : msg; dataHaveChanged(true); if (docChanged) { alert(msg); return false; } else { setCloseBlocker(false); } clearTimeout(timerCheck); if (docsolo == "yes") { window.close(); } else { $j("#enchilada").hide(); document.getElementById("HistoryID").value = 0; document.getElementById("ID").value = 0; document.getElementById("IDstory").value = 0; return true; } } function resetChecker(restart) { var restart = (restart == null) ? true : restart; clearTimeout(timerCheck); if (restart) { timerCheck = setTimeout('checker();', topwin.refreshInterval*1000); } } function checker(){ resetChecker(false); if (docChanged) { var formData = {}; if (formEnabled) { var assignmentValues = getAllAssignmentValues(); } else { var assignmentValues = originalAssignmentValues; } for (var entry in assignmentValues) { formData[entry] = assignmentValues[entry]; } var editorContents = getAllEditorContents(); for (var entry in editorContents) { formData[entry] = editorContents[entry]; } formData["action"] = "autosave"; formData["MicroTimeStamp"] = document.getElementById("MicroTimeStamp").value; formData["ID"] = document.getElementById("ID").value; formData["HistoryID"] = document.getElementById("HistoryID").value; formData["IDstory"] = document.getElementById("IDstory").value; formData["TypeID"] = document.getElementById("TypeID").value; var tmpLocks = new Array(); for (var entry in locks) { if (locks[entry]) { tmpLocks[tmpLocks.length] = entry; } } formData["ActiveLocks"] = tmpLocks.join(","); var sendAutoUpdate = false; for (var entry in formData) { if (lastAutoSaveContents[entry]) { if (lastAutoSaveContents[entry].toString() != formData[entry].toString()) { sendAutoUpdate = true; break; } } else { if (formData[entry].toString() != "") { sendAutoUpdate = true; break; } } } if (sendAutoUpdate) { lastAutoSaveContents = formData; URL = "assignment.php"; $j.ajax(URL, { type: "post", data: formData, dataType: "xml", complete: processProtoReqSuccess, error: processProtoReqFailure }); hasAutoSave = true; } } if (document.getElementById("HistoryID").value > 0) { var tmpArrayLocks = new Array(); for (var entry in requestedLocks) { if (requestedLocks[entry]) { tmpArrayLocks[tmpArrayLocks.length] = entry; } } URL = "assignment.php"; $j.ajax(URL, { type: "get", data: {action: "checkForUpdates", ID: document.getElementById("ID").value, HistoryID: document.getElementById("HistoryID").value, IDstory: document.getElementById("IDstory").value, locksToCheck: tmpArrayLocks.join(",")}, dataType: "xml", complete: processProtoReqSuccess, error: processProtoReqFailure }); } resetChecker(true); } function processReqFailure(statusText, status) { alert("Unable to retrieve data from server: " + statusText + " (" + status + ")"); } function processProtoReqFailure(statusText, status) { alert("Unable to retrieve data from server: " + statusText + " (" + status + ")"); } function processProtoReqSuccess(protoreq) { processReq(protoreq.responseXML); } function processReq(responseXML) { resetChecker(false); var items = responseXML.getElementsByTagName("item"); var itemid = 0; var itemdata = ""; var itemflag = 0; for (var i = 0; i < items.length; i++) { itemid = getElementTextNS("", "itemid", items[i], 0); itemdata = getElementTextNS("", "itemdata", items[i], 0); itemflag = getElementTextNS("", "itemflag", items[i], 0); } resetChecker(true); } function updateAllStats() { var sumSection = summaryRules["Section"]; var itemNodes = document.getElementsByClassName("EntrySection"+sumSection+" playerEntryText"); var found=false; awayTeamScore=0; homeTeamScore=0; for(j=0; j < itemNodes.length; j++) { if(itemNodes[j].value != "") { //alert(itemNodes[j].value); //alert('Please click the "Just Save" button to create the player record for '+itemNodes[j].value+'.\n\nThen click the "Update row" button again to update the stats.'); validateAndSubmit(false,true); //break; return; } } var itemNodes = document.getElementsByClassName('EntrySection'+sumSection+' updateButton'); clearStats(); for(var i = 1; i < sectionRowCount[sumSection]; i++) { if(window.updatePlayLength) updatePlayLength(i); updateRowPlayerStats(i,false); updateComputedStats('Player'); updateRowTeamStats(i,false); updateComputedStats('Team'); } validateAndSubmit(false); // Put the focus back up in the summary section on the next entry nextField = 'Sec'+sumSection+'_Team_'+ sectionRowCount[sumSection]; setTimeout("document.getElementById(nextField).focus();",2000); } function updateRowStats(node) { updateRowPlayerStats(node,true); updateRowTeamStats(node,true); // Put the focus back up in the summary section on the next entry var sumSection = summaryRules["Section"]; nextField = 'Sec'+sumSection+'_Team_'+ sectionRowCount[sumSection]; setTimeout("document.getElementById(nextField).focus();",500); } function updateRowPlayerStats(row,compute) { //var row = node.id.substr(Math.abs(node.id.lastIndexOf("_"))+1); var sumSection = summaryRules["Section"]; var sumTeamField = 'Sec'+sumSection+'_Team_' + row; var sumTeamID = document.getElementById(sumTeamField).value; var sumPlayType = document.getElementById('Sec'+sumSection+'_SummaryPlayType_'+row).value; if(document.getElementById('Sec'+sumSection+'_SummaryPAT_'+row)) var sumPAT = document.getElementById('Sec'+sumSection+'_SummaryPAT_'+row).value; var rowCount; for(ruleType in summaryRules) { if(ruleType == 'Section') continue; var sumFieldName = 'Sec'+sumSection+'_'+ruleType+'_'+row; var sumFieldVal = document.getElementById(sumFieldName).value; var playTypes = summaryRules[ruleType]; for(var playType in playTypes) { if(sumFieldVal == playType) { var statTypes = playTypes[playType]; for (statType in statTypes) { var sumFields = statTypes[statType]; for (var sumField in sumFields) { sourceField = sumFields[sumField]; sec = sourceField.Section; if(statType == 'Player') { rowCount = sectionRowCount[sec]; var playerField = 'Sec'+sumSection+'_'+sumField+'_' + row; var playerID = document.getElementById(playerField).value; if(playerID) { var itemNodes = document.getElementsByClassName("EntrySection"+sec+" playerSelect"); var found=false; for(j=0; j < itemNodes.length; j++) { if(itemNodes[j].value == playerID) { for(var targetField in sourceField.Fields) { if (sourceField.Fields.hasOwnProperty(targetField)) { //myTargetField = indField.Fields[targetField]; targetFields = sourceField.Fields[targetField]; if(isNaN(targetFields.Increment)) { myField = 'Sec'+sumSection+'_'+targetFields.Increment+'_'+row; if(document.getElementById(myField).type == 'checkbox' && !document.getElementById(myField).checked) increment = 0; else increment = document.getElementById(myField).value; } else increment = targetFields.Increment; if(increment == '') increment=0; myField = "Sec"+sec+"_"+targetFields.TargetField+"_"+j; myObj = document.getElementById(myField); if(myObj) { if(myObj.value == '') myObj.value=0; myObj.value = parseInt(myObj.value) + parseInt(increment); // if there is an onchange event and compute flag is true, recalculate the computed fields if (myObj.onchange && compute) myObj.onchange(); //reCalcFields(myObj,'Team',targetFields.TargetField,'Team--Total'+targetFields.TargetField,'0'); found = true; } } } } } if(!found) { playerNum = 'Sec'+sec+'_Team_' + rowCount; objTeam = document.getElementById(playerNum); //Loop thru the options for(k=0; k < objTeam.options.length; k++) { if(sumTeamID == objTeam.options[k].value) { objTeam.options[k].selected = true; break; } } playerNum = 'Sec'+sec+'_Player_' + rowCount; objPlayer = document.getElementById(playerNum); updatePlayerRow(objTeam,sec,'player',false); for(k=0; k < objPlayer.options.length; k++) { if(playerID == objPlayer.options[k].value) { objPlayer.options[k].selected = true; break; } } for (var targetField in sourceField.Fields) { if (sourceField.Fields.hasOwnProperty(targetField)) { //myTargetField = indField.Fields[targetField]; targetFields = sourceField.Fields[targetField]; if(isNaN(targetFields.Increment)) { myField = 'Sec'+sumSection+'_'+targetFields.Increment+'_'+row; if(document.getElementById(myField).type == 'checkbox' && !document.getElementById(myField).checked) increment = 0; else increment = document.getElementById(myField).value; } else increment = targetFields.Increment; if(increment == '') increment=0; var myField = 'Sec'+sec+'_'+targetFields.TargetField+'_'+rowCount; myObj = document.getElementById(myField); if(myObj) { if(myObj.value == '') myObj.value=0; myObj.value = parseInt(increment); // if there is an onchange event and compute flag is true, recalculate the computed fields if (myObj.onchange && compute) myObj.onchange(); } } } } } // end if(playerID) } // end if(type == 'Player') } // end for(sumField in sumFields) } //end for(statType in statTypes) } // end if(playType) } // end for(playType in playTypes) } //end for(ruleType in summaryRules) } function updateRowTeamStats(row,compute) { var sumSection = summaryRules["Section"]; var sumTeamField = 'Sec'+sumSection+'_Team_' + row; var sumTeamID = document.getElementById(sumTeamField).value; var sumPlayType = document.getElementById('Sec'+sumSection+'_SummaryPlayType_'+row).value; if(document.getElementById('Sec'+sumSection+'_SummaryQuarter_'+row)) { var sumQtr = document.getElementById('Sec'+sumSection+'_SummaryQuarter_'+row).value; sumQtr = jQuery.trim(sumQtr); sumQtr = sumQtr.toUpperCase(); } if(document.getElementById('Sec'+sumSection+'_SummaryResultInScore_'+row)) var sumScore = document.getElementById('Sec'+sumSection+'_SummaryResultInScore_'+row); if(document.getElementById('Sec'+sumSection+'_SummaryPAT_'+row)) var sumPAT = document.getElementById('Sec'+sumSection+'_SummaryPAT_'+row).value; if(sumScore && sumScore.checked) var scored = true; var rowCount; for(ruleType in summaryRules) { if(ruleType == 'Section') continue; var playTypes = summaryRules[ruleType]; var sumFieldName = 'Sec'+sumSection+'_'+ruleType+'_'+row; var sumFieldVal = document.getElementById(sumFieldName).value; for(var playType in playTypes) { if(sumFieldVal == playType) { var statTypes = playTypes[playType]; for (statType in statTypes) { var sumFields = statTypes[statType]; for (var sumField in sumFields) { sourceField = sumFields[sumField]; sec = sourceField.Section; if(statType == 'Team' || statType == 'Opponent' || statType == 'Summary') { rowCount = sectionRowCount[sec]; for(var targetField in sourceField.Fields) { if (sourceField.Fields.hasOwnProperty(targetField)) { targetFields = sourceField.Fields[targetField]; //// start here increment = targetFields.Increment; if(isNaN(targetFields.Increment)) { myField = 'Sec'+sumSection+'_'+targetFields.Increment+'_'+row; if(document.getElementById(myField) != null) { // it's a form element if(document.getElementById(myField).type == 'checkbox' && !document.getElementById(myField).checked) increment = 0; else increment = document.getElementById(myField).value; } else { //if(sumTeamID == awayTeamID) // teamScore = awayTeamScore; //else // teamScore = homeTeamScore; if(typeof(eval(targetFields.Increment)) !== "undefined") { // it's a variable increment = eval(targetFields.Increment); //alert('increment='+increment); } } } else increment = targetFields.Increment; if(increment == '') increment=0; if(targetFields.TargetField == 'Points' && scored) { if(sumQtr == '1') targetFld = 'FirstQuarterPoints'; else if(sumQtr == '2') targetFld = 'SecondQuarterPoints'; else if(sumQtr == '3') targetFld = 'ThirdQuarterPoints'; else if(sumQtr == '4') targetFld = 'FourthQuarterPoints'; else if(sumQtr == 'OT1') targetFld = 'OvertimePoints'; else if(sumQtr == 'OT2') targetFld = 'Overtime2Points'; else if(sumQtr == 'OT3') targetFld = 'Overtime3Points'; else if(sumQtr == 'OT4') targetFld = 'Overtime4Points'; else targetFld = 'Points'; if(statType == 'Team') { if(sumTeamID == awayTeamID) { target = 'Team-Away-'+targetFld; awayTeamScore = awayTeamScore + increment; //alert(awayTeamScore); } else { target = 'Team-Home-'+targetFld; homeTeamScore = homeTeamScore + increment; } } else { // Add to Opponent's stats if(sumTeamID == homeTeamID) target = 'Team-Away-'+targetFld; else target = 'Team-Home-'+targetFld; } } else { if(statType == 'Summary') { // Add to summary stats //if(sumTeamID == awayTeamID) { target = 'Sec'+sumSection+'_'+targetFields.TargetField + '_' + row; //alert(myField); //} //else { //myField = 'Sec'+sumSection+'_'+targetFields.TargetField + row; //} } else { if(statType == 'Team') { if(sumTeamID == awayTeamID) target = 'Team-Away-'+targetFields.TargetField; else target = 'Team-Home-'+targetFields.TargetField; } else if(statType == 'Opponent') { // Add to Opponent's stats if(sumTeamID == homeTeamID) target = 'Team-Away-'+targetFields.TargetField; else target = 'Team-Home-'+targetFields.TargetField; } } } if(!targetFields.SourceField) { source = target; } else { source = 'Sec'+sumSection+'_'+targetFields.SourceField +'_'+row; } var origVal; if(document.getElementById(source) != null) { // it's a form element origVal = document.getElementById(source).value; } else { if(typeof(eval(targetFields.SourceField)) !== "undefined") { // it's a variable origVal = eval(targetFields.SourceField); } } //alert('source='+source+' origVal='+origVal); myObj = document.getElementById(target); if(myObj) { if(origVal == '' || isNaN(origVal)) origVal=0; myObj.value = parseInt(origVal) + parseInt(increment); // if there is an onchange event and compute flag is true, recalculate the computed fields if (myObj.onchange && compute) myObj.onchange(); } } // end if sourcefield.Fields.hasOwnProperty } // end for targetfield in sourcefield.field } // end if(type == 'Team') } // end for(sumField in sumFields) } //end for(statType in statTypes) } // end if(playType) } // end for(playType in playTypes) } // end for(ruletype in summaryRules) } function clearStats() { //var tables = ["Section4","Section6","Section9"]; var tables = updatedSections; for(t in tables) { table = tables[t]; var tableNode = document.getElementById(table); if(tableNode) { var itemNodes = tableNode.getElementsByTagName("input"); for(var node in itemNodes) { item = itemNodes[node]; if(item.type == 'text'){ item.value = ''; } } var itemNodes = tableNode.getElementsByTagName("div"); for(var node in itemNodes) { item = itemNodes[node]; item.innerHtml=''; } } } } function updateComputedStats(sectionType) { setTimeout(function () { $j.ajax("ajax/getComputedStats.php", {type: "POST", data: { sectionType: sectionType, sportID: document.getElementById('SportID').value, gameID: document.getElementById('GameID').value}, dataType: "html", success: function(data, textStatus, transport){ var response = transport.responseText || ""; if (response != "") { if (response.substring(0,2) == "[{") { var items = JSON.parse(response); for(var item in items) { var fieldsToChange = items[item]; //alert(row.TeamID); //var fieldsToChange = row[team]; if(sectionType == 'Team') { if (fieldsToChange["TeamID"] == awayTeamID) { teamID = "Away"; } else if (fieldsToChange["TeamID"] == homeTeamID) { teamID = "Home"; } } for (var field in fieldsToChange) { compFieldName = 'Team-'+teamID+'-'+field; //if(field == 'TotalYards') // alert(compFieldName+'='+fieldsToChange[field]); if (document.getElementById(compFieldName)) { document.getElementById(compFieldName).innerHTML = fieldsToChange[field]; } } } // end items } } else { } }, error: function(){ } }); },2000); } // This is a Dallas specific function to be included in their own .js file function updatePlayLength(row) { var sumSection = summaryRules["Section"]; var sumPlayType = document.getElementById('Sec'+sumSection+'_SummaryPlayType_'+row); var sumPlayLength = document.getElementById('Sec'+sumSection+'_SummaryPlayLength_'+row); var sumBallSpot = document.getElementById('Sec'+sumSection+'_SummaryBallSpot_'+row); var sumYardLine = document.getElementById('Sec'+sumSection+'_SummaryYardLine_'+row); var sumTeamField = 'Sec'+sumSection+'_Team_' + row; var sumTeamID = document.getElementById(sumTeamField).value; if(sumPlayLength && (sumPlayLength.value == '' || sumPlayLength.value == '0')) { if(sumBallSpot && sumBallSpot.value != '') { var strBallSpot = jQuery.trim(sumBallSpot.value); var bsTeamCode = strBallSpot.toUpperCase().replace(/[\d\.]/g,''); var ballSpot = strBallSpot.replace(/[^\d\.]/g,''); if(sumYardLine && sumYardLine.value != '') { var strYardLine = jQuery.trim(sumYardLine.value); var ylTeamCode = strYardLine.toUpperCase().replace(/[\d\.]/g,''); var yardLine = strYardLine.replace(/[^\d\.]/g,''); playType = jQuery.trim(sumPlayType.value); if(playType == 'field goal') { // This is hardcoded for Dallas - FG length is always line of scrimmage + 17 sumPlayLength.value = parseInt(yardLine) + 17; } else { if(sumTeamID == homeTeamID) teamCode = homeTeamCode; else teamCode = awayTeamCode; if(bsTeamCode == ylTeamCode) sumPlayLength.value = ballSpot - yardLine; else sumPlayLength.value = (50-ballSpot) + (50-yardLine); if(playType.substr(0,7) == 'penalty') sumPlayLength.value = Math.abs(sumPlayLength.value); else if(ylTeamCode == "" && bsTeamCode == teamCode) sumPlayLength.value = (sumPlayLength.value)*(-1); else if(bsTeamCode == "" && ylTeamCode != teamCode) sumPlayLength.value = (sumPlayLength.value)*(-1); else if(bsTeamCode == ylTeamCode && bsTeamCode != teamCode) sumPlayLength.value = (sumPlayLength.value)*(-1); else if(bsTeamCode != ylTeamCode && bsTeamCode == teamCode) sumPlayLength.value = (sumPlayLength.value)*(-1); } } } } }