function Init(){ if(debug) { if(window.console) console.info("Init"); else alert("Init"); } //ContentBuffer Calls contentbuffer = new ContentBuffer(); serializer = new Serializer(); //Extract tickStats gblTickStatus = serializer.deserialize(unescape(statusData)); CreateWatchlists(watchListData); } //This takes the serialized data and builds the framework for each watchlist. function CreateWatchlists(serializedString) { if(debug) { if(window.console) console.info("CreateWatchlists"); else alert("CreateWatchlists"); } //headlines Div watchListsMod = document.getElementById("watchLists"); //Element.get("watchLists"); //De-serialize the watchListData and commit it back to global rawData = unescape(serializedString); if(rawData != "--") { watchListData = serializer.deserialize(rawData); } else { watchListData = new Array(); } if(watchListData.length == 0) { //First time hit ShowFirstWelcome(); } else { for(var x in watchListData) { //Iterate through all the watchLists. if(!isNaN(watchListData[x].wlID)) { //If good will always be a #! blnBadData = false; watchListDiv = Element.create("DIV", {title:watchListData[x].name, name: watchListData[x].name, id: "watchList" + watchListData[x].wlID, wlID: watchListData[x].wlID, viewMode: watchListData[x].viewMode, sortCol: watchListData[x].sortCol, sortOrd: watchListData[x].sortOrd}, "
Loading Watchlist...", watchListsMod); //Function Pointers watchListData[x].Load = LoadWatchlist; watchListData[x].Fill = FillWatchlist; watchListData[x].Load(); } else { blnBadData = true } } if(blnBadData) ShowFirstWelcome(); } } //Universal fill-my-watchlist function function LoadWatchlist() { //ContentBuffer Calls if(debug) { if(window.console) console.info("LoadWatchlist"); else alert("LoadWatchlist"); } //ContentBuffer Calls contentbuffer = new ContentBuffer(); serializer = new Serializer(); //Load in initial Content contentbuffer.load({ url: "resources/asp/getBufferedWatchlist.asp", method: "post", contentType: "text/javascript", postdata: { wlID: this.wlID, name: this.name, viewMode: this.viewMode, sortCol: this.sortCol, sortOrd: this.sortOrd, symbols: escape(serializer.serialize(this.symbols)) }, onload: this.Fill, context: this, debug: true }); } function ShowFirstWelcome() { if(debug) { if(window.console) console.info("ShowFirstWelcome"); else alert("ShowFirstWelcome"); } createWLLink = Element.create("A", {href:"javascript:void(0)", wlID: this.wlID}, [ Element.create("IMG", {src: "https://thomson.cache.wallst.com/img/btnCreateWatchlist.gif", style: "border: 0px none"}, false) ]); addEvent(createWLLink, "click", CreateNewWatchList); emtyDiv = Element.create("DIV", {id: "emptyWL"}, [ Element.create("DIV", {id: "wlWelcome", className: "shadowOuter"}, [ Element.create("DIV", {className: "shadowInner"}, [ Element.create("DIV", {id: "wlWelcomeContent"}, [ Element.create("B", false, "This Watchlist is empty. "), document.createTextNode("Click the Create Watchlist button to begin."), Element.create("BR", false, false), Element.create("DIV", {id: "imgDiv"}, createWLLink) ]) ]) ]) ], watchListsMod); } function CreateNewWatchList() { if(debug) { if(window.console) console.info("CreateNewWatchList"); else alert("CreateNewWatchList"); } //Draw Edit Form if(!Element.get("editWl")) OpenEditForm(); //Pre-fill values Element.get("wlID").value = watchListData.length; Element.get("name").value = "Watchlist"; //Future enh - typeable Element.get("viewMode").value = 0; Element.get("sortCol").value = ""; //Future ehn - Will be sortable Element.get("sortOrd").value = "A"; } //This actually fills in the watchlist tables function FillWatchlist(bufferReference) { if(debug) { if(window.console) console.info("FillWatchlist"); else alert("FillWatchlist"); } var wlData = serializer.deserialize(unescape(bufferReference.contentPackage.result)); //in case debugging is turned on - purge it from return data set if(wlData.length < 1) wlData = serializer.deserialize(unescape(bufferReference.contentPackage.result.substring(0, bufferReference.contentPackage.result.indexOf("Debug")))); //Make sure the welcome is gone if(Element.get("emptyWL")) { Element.remove(Element.get("emptyWL")); } else if(String(wlData.colTitles) == "undefined") { //One last check to make sure valid WL data has been received blnHasWatchLists = false; for(var x in watchListData) { currWatchList = Element.get("watchList" + watchListData[x].wlID); if(String(Element.get("watchList" + watchListData[x].wlID).innerHTML).length > 10) { blnHasWatchLists = true; break; } } if(!blnHasWatchLists) ShowFirstWelcome(); } //Assign pointer //watchList = Element.get("watchList" + this.wlID); watchList = document.createDocumentFragment(document.createElement("div")); //Add "Export" Link // Export Results
Element.create("BR", false, false, watchList) exportLink = Element.create("A", {href:"javascript:void(0)", wlID: this.wlID}, "Export Results", watchList); addEvent(exportLink, "click", ExportWatchlist); Element.create("BR", false, false, watchList) //Build Data table //Header Elements - Name and view selector tickTable = Element.create("TABLE", {className:"resultsTable"}, false, watchList); tickTableHd = Element.create("THEAD", {className:"resultsTableHead"}, false, tickTable); tickTableHdRowTop = Element.create("TR", false, false, tickTableHd); titleTh = Element.create("TH", {className:"screenResultsTitle", className:"titleTh", colSpan: String(wlData.colTitles.length - 4)}, wlData.name, tickTableHdRowTop); viewSelTh = Element.create("TH", {className:"screenResultsTitle", className:"viewSelTh", colSpan: "4"}, false, tickTableHdRowTop); viewForm = Element.create("FORM", {method: "post"}, false, viewSelTh); Element.create("LABEL", {"htmlfor": "viewMode" + this.wlID, "for": "viewMode" + this.wlID}, "Select Results View: ", viewForm); viewSel = Element.create("SELECT", {id: "viewMode" + this.wlID, name: "viewMode" + this.wlID}, false, viewForm); aryModes = wlData.viewModes.split("|"); for(var i in aryModes) { if(wlData.viewMode == i) Element.create("OPTION", {value: i, selected: "selected"}, aryModes[i],viewSel); else Element.create("OPTION", {value: i}, aryModes[i],viewSel); } addEvent(viewSel, "change", ChangeView); //Table Header Columns tickTableResultsHd = Element.create("THEAD", {className:"resultsHead"}, false, tickTable); tickTableHdRow = Element.create("TR", false, false, tickTableResultsHd); var sortColInd = 0; //Used to store the sorted column index for(var i in wlData.colTitles) { if(wlData.stockData.length > 0) styleText = (wlData.stockData[0].cell[i].align) ? "text-align:" + wlData.stockData[0].cell[i].align : ""; else styleText = ""; //Some are sortable, others are not if(!wlData.colTitles[i].sortCol) { //Unsortable Element.create("TH", {style:styleText}, wlData.colTitles[i].title, tickTableHdRow); } else { //Sortable if(wlData.sortCol == wlData.colTitles[i].sortCol) { //Append Sort dir gif //Highlight cell sortColInd = i; wlData.colTitles[i].sortOrd = (wlData.sortColOrd == "A") ? "D" : "A"; dirSortInd = Element.create("IMG", { src:"https://thomson.cache.wallst.com/img/sort" + wlData.colTitles[i].sortOrd + ".gif"}, false); } else { dirSortInd = document.createDocumentFragment(document.createTextNode("")); } wlColLink = Element.create("A", {href:"javascript:void(0)", sortBy: wlData.colTitles[i].sortCol, sortOrd: wlData.colTitles[i].sortOrd}, wlData.colTitles[i].title); addEvent(wlColLink, "click", SortWatchlist); Element.create("TH", {className: ((wlData.sortCol == wlData.colTitles[i].sortCol) ? "sort" : ""), style:styleText}, [wlColLink, dirSortInd], tickTableHdRow); } } tickTableBdy = Element.create("TBODY", {className:"resultsBody"}, false, tickTable); if(wlData.stockData.length > 0) { for(var x in wlData.stockData) { //Iterate through all the watchLists. tickTableRow = Element.create("TR", {className:((x % 2 == 0) ? "odd" : "even")}, false, tickTableBdy); for(var y in wlData.stockData[x].cell) { //Iterate through all the watchLists. styleText = (wlData.stockData[x].cell[y].align) ? "text-align:" + wlData.stockData[x].cell[y].align : ""; //Empty contents string cellCont = ""; for(var z in wlData.stockData[x].cell[y].data) { //Iterate through all the watchLists. cellCont += wlData.stockData[x].cell[y].data[z]; if(wlData.stockData[x].cell[y].data.length > 1 && z < wlData.stockData[x].cell[y].data.length - 1) { //if (/TSCompanyName/.test(wlData.colTitles[y].sortCol)) { //Exclude first col if (y == 0) { //Exclude first col cellCont += " "; } else { cellCont += " / "; } } } //Create & Append Cell Element.create("TD", {className: ((y == sortColInd) ? ((x % 2 == 0) ? "oddSort" : "evenSort") : ""), style: styleText}, cellCont, tickTableRow); } } } else { //No tickers! if(wlData.colTitles) { colSpanTxt = String(wlData.colTitles.length); } else { colSpanTxt = "1"; } cellCont = "
No symbols defined

"; tickTableBlankRow = Element.create("TR", false, false, tickTableBdy); tickTableEmptyTD = Element.create("TD", {colSpan: colSpanTxt}, cellCont, tickTableBlankRow); tickTableEmptyTD.style.textAlign = "center"; //Using Element's embedded style blows this thing up for some annoying reason! } //EditButton editWlLink = Element.create("A", {href:"javascript:void(0)", wlID: this.wlID}, [ Element.create("IMG", {src: "https://thomson.cache.wallst.com/img/btnEditWatchlist.gif", style: "border: 0px none"}, false) ]); addEvent(editWlLink, "click", EditWatchlist); //Tear Off Link tearOffLink = Element.create("A", {href:"javascript:void(0)", wlID: this.wlID}, [ Element.create("IMG", {src: "https://thomson.cache.wallst.com/img/tearoff.gif", style: "border: 0px none"}, false), document.createTextNode(" Tear Off") ]); addEvent(tearOffLink, "click", TearOff); //Footer options footerOpts = Element.create("DIV", {className: "footerOptDiv"}, [ Element.create("DIV", {className: "editWLDiv"}, editWlLink), Element.create("DIV", {className: "tearOffDiv"}, tearOffLink) ], watchList); //Append watchlist if(!Element.get("watchList" + this.wlID)) { watchListDiv = Element.create("DIV", {title:wlData.name, id: "watchList" + this.wlID, wlID: wlData.wlID, viewMode: wlData.viewMode, sortCol: wlData.sortCol, sortOrd: wlData.sortOrd}, watchList, watchListsMod); //Set as attributes watchListDiv.setAttribute("wlID", this.wlID); watchListDiv.setAttribute("name", wlData.name); watchListDiv.setAttribute("viewMode", wlData.viewMode); watchListDiv.setAttribute("sortCol",wlData.sortCol); watchListDiv.setAttribute("sortOrd", wlData.sortOrd); } else { Element.removeChildNodes(Element.get("watchList" + this.wlID)); Element.get("watchList" + this.wlID).appendChild(watchList); } } //Handles edit per-row blur lookups and en-masse validation on edit load function GetSymbols(lookupObj) { //ContentBuffer Calls if(debug) { if(window.console) console.info("GetSymbols"); else alert("GetSymbols"); } //ContentBuffer Calls contentbuffer = new ContentBuffer(); serializer = new Serializer(); //Load in initial Content activeCb = contentbuffer.load({ url: "resources/asp/getBufferedWatchlistLookups.asp", method: "post", contentType: "text/javascript", postdata: { wlID: lookupObj.wlID, name: lookupObj.name, viewMode: lookupObj.viewMode, sortCol: lookupObj.sortCol, sortOrd: lookupObj.sortOrd, symbols: escape(serializer.serialize(lookupObj.symbols)) }, onload: lookupObj.onloadHdr, context: lookupObj.context, debug: true }); } function OpenEditForm() { if(debug) { if(window.console) console.info("OpenEditForm"); else alert("OpenEditForm"); } //Reset focus holder activeRow = null; edWatchList = Element.create("DIV", {id: "editWl", className: "shadowOuter"}, false, false); edWlInner = Element.create("DIV", {className:"shadowInner"}, false, edWatchList); edWlCont = Element.create("DIV", {id:"editWlContent"}, false, edWlInner); edWlForm = Element.create("FORM", {method:"post", action:"javascript:void(0)", name: "wlEditForm", id: "wlEditForm"}, false, edWlCont); //addEvent(edWlForm, "submit", function(){return false}); //Append other watchlist related data to form Element.create("INPUT", {type:"hidden", id: "wlID", name: "wlID", value: ""}, false, edWlForm); Element.create("INPUT", {type:"hidden", id: "name", name: "name", value: ""}, false, edWlForm); Element.create("INPUT", {type:"hidden", id: "viewMode", name: "viewMode", value: ""}, false, edWlForm); Element.create("INPUT", {type:"hidden", id: "sortCol", name: "sortCol", value: ""}, false, edWlForm); Element.create("INPUT", {type:"hidden", id: "sortOrd", name: "sortOrd", value: ""}, false, edWlForm); closeImg = Element.create("IMG", {id: "editWlCloseBtn", src: "https://thomson.cache.wallst.com/img/btnClose.gif"}, false, edWlForm); addEvent(closeImg, "click", CloseEditWl); //This line will change for multi... perhaps Element.create("H1", false, "Edit Watchlist", edWlForm); edWlBody = Element.create("DIV", {id:"editWlBody"}, false, edWlForm); edWlBody.appendChild(document.createTextNode("Add, replace or remove symbols from your watchlist.")); edWlTbl = Element.create("TABLE", false, false, edWlBody); //Table head Element.create("THEAD", false, [ Element.create("TR", false, [ Element.create("TH", {className: "symbolCol"}, "Symbol"), Element.create("TH", {className: "compNameCol"}, "Company Name"), Element.create("TH", {className: "removeCol"}, "Remove") ]) ], edWlTbl); edWlTblBdy = Element.create("TBODY", false, false, edWlTbl); //For iterator here - will need to tell a global what field is currently selected for(var x = 0; x < 15; x++) { tickInp = Element.create("INPUT", {type:"text", size: "7", id: "ticker" + x, name: "ticker" + x, value: "", defaultValue: "", "tickerStatus": "good", tabindex: (x + 1)}, false, false); compClass = "compNameCol"; compName = ""; remImg = Element.create("IMG", {name: "remove", id: "remove", alt: "remove", src:"https://thomson.cache.wallst.com/img/btnDel.gif", value: x}, false, false); addEvent(remImg, "click", RemWlTick); tickInp.Remove = RemWlTick; addEvent(tickInp, "focus", EdWlTickFocus); addEvent(tickInp, "blur", EdWlTickBlur); addEvent(tickInp, "change", EdWlTickChange); Element.create("TR", false, [ Element.create("TD", {className: "symbolCol"}, tickInp), Element.create("TD", {className: compClass}, compName), Element.create("TD", {className: "removeCol"}, remImg) ], edWlTblBdy); } //Edit WL footer symLuLnk = Element.create("A", {href:"javascript:void(0)"}, "Symbol Lookup", false); addEvent(symLuLnk, "click", OpenSymLookup); updateFrmBtn = Element.create("INPUT", {type:"image", name: "update", id: "update", alt: "update", src:"https://thomson.cache.wallst.com/img/btnUpdate.gif"}, false, false); addEvent(updateFrmBtn, "click", UpdateWlClick); Element.create("DIV", {id: "editWLControls"}, [ Element.create("DIV", {id: "symLookup"}, symLuLnk), Element.create("DIV", {id: "updateBtn"}, updateFrmBtn) ], edWlCont); //Append To Document document.getElementById("watchLists").appendChild(edWatchList); //Throw focus Element.get("ticker0").focus(); } function FillEditForm(bufferReference) { if(debug) { if(window.console) console.info("FillEditForm"); else alert("FillEditForm"); } var wlData = serializer.deserialize(unescape(bufferReference.contentPackage.result)); //in case debugging is turned on - purge it from return data set if(wlData.length < 1) wlData = serializer.deserialize(unescape(bufferReference.contentPackage.result.substring(0, bufferReference.contentPackage.result.indexOf("Debug")))); editFrm = Element.get("wlEditForm"); //Set main form fields editFrm.wlID.value = wlData.wlID; editFrm.name.value = wlData.name; editFrm.viewMode.value = wlData.viewMode; editFrm.sortCol.value = wlData.sortCol; editFrm.sortOrd.value = wlData.sortOrd; defField = null; //For iterator here fill in all ticker data for(var x = 0; x < 15; x++) { frmField = Element.get("ticker" + x); row = frmField.parentNode.parentNode; if(x < wlData.symbols.length) { //Fill In Values frmField.value = wlData.symbols[x].dispTick.toUpperCase(); frmField.defaultValue = wlData.symbols[x].dispTick; frmField.className = gblTickStatus[wlData.symbols[x].tickerStatus].htmlClass; frmField.setAttribute("tickerStatus", gblTickStatus[wlData.symbols[x].tickerStatus].name); row.getElementsByTagName("TD")[1].className = (gblTickStatus[wlData.symbols[x].tickerStatus].htmlClass) ? gblTickStatus[wlData.symbols[x].tickerStatus].htmlClass : "compNameCol"; row.getElementsByTagName("TD")[1].innerHTML = (gblTickStatus[wlData.symbols[x].tickerStatus].htmlMsg) ? gblTickStatus[wlData.symbols[x].tickerStatus].htmlMsg : (wlData.symbols[x].compName.length > 25) ? wlData.symbols[x].compName.substring(0, 23) + "..." : wlData.symbols[x].compName; } else { //clear remaining fields if(defField == null) //Set default field defField = frmField; //Fill In Values frmField.value = ""; frmField.defaultValue = ""; frmField.className = ""; frmField.setAttribute("tickerStatus", "good"); row.getElementsByTagName("TD")[1].className = "compNameCol"; row.getElementsByTagName("TD")[1].innerHTML = ""; } } if(defField == null) //Still null - all fields filled - send them to first defField = Element.get("ticker0"); //Set focus defField.focus(); activeRow = defField; } function FillEditRow(bufferReference) { if(debug) { if(window.console) console.info("FillEditRow"); else alert("FillEditRow"); } var wlData = serializer.deserialize(unescape(bufferReference.contentPackage.result)); //in case debugging is turned on - purge it from return data set if(wlData.length < 1) wlData = serializer.deserialize(unescape(bufferReference.contentPackage.result.substring(0, bufferReference.contentPackage.result.indexOf("Debug")))); //Grab Form handle for data parsing editFrm = Element.get("wlEditForm"); row = this.parentNode.parentNode; //Fill In Values this.value = wlData.symbols[0].dispTick.toUpperCase(); this.defaultValue = wlData.symbols[0].dispTick.toUpperCase(); this.setAttribute("tickerStatus", gblTickStatus[wlData.symbols[0].tickerStatus].name); this.className = gblTickStatus[wlData.symbols[0].tickerStatus].htmlClass; row.getElementsByTagName("TD")[1].className = (gblTickStatus[wlData.symbols[0].tickerStatus].htmlClass) ? gblTickStatus[wlData.symbols[0].tickerStatus].htmlClass : "compNameCol"; if(gblTickStatus[wlData.symbols[0].tickerStatus].htmlMsg != false) { //error //this.defaultValue = ""; row.getElementsByTagName("TD")[1].innerHTML = gblTickStatus[wlData.symbols[0].tickerStatus].htmlMsg } else { row.getElementsByTagName("TD")[1].innerHTML = (wlData.symbols[0].compName.length > 25) ? wlData.symbols[0].compName.substring(0, 23) + "..." : wlData.symbols[0].compName; } } function CloseEditWl() { if(debug) { if(window.console) console.info("CloseEditWl"); else alert("CloseEditWl"); } //Abort previous request if(activeCb) activeCb.abort(); //Simply destroy the window and lookup Element.remove(Element.get("editWl")); //Remove Symbol Lookup if(Element.get("symLu")) { CloseSymLookup(); } } function CloseSymLookup() { if(debug) { if(window.console) console.info("CloseSymLookup"); else alert("CloseSymLookup"); } //UnHide Pull downs in IE WCH.Discard("symLu"); //Abort previous request if(activeCb) activeCb.abort(); if(Element.get("editWl")) { //Enable all fields of Edit WL for(var i = 0; i < 15; i++) { currField = document.getElementById("ticker" + i); currField.disabled = false; //Restore classes if(currField.getAttribute("tickerStatus") == "good") { currField.className = ""; } else { currField.className = "hasError"; } } } //Purge Floating div block Element.remove(Element.get("wlBlocker")); //Remove Symbol Lookup Element.remove(Element.get("symLu")); //Focus field activeRow.getElementsByTagName("TD")[0].getElementsByTagName("INPUT")[0].focus(); } function EdWlTickFocus(event) { if(debug) { if(window.console) console.info("EdWlTickFocus"); else alert("EdWlTickFocus"); } //Update global here frmField = getSrcElement(event); row = frmField.parentNode.parentNode; //Flag active row activeRow = row; //frmField.setAttribute("tickerStatus", gblTickStatus["dirty"].name); } function EdWlTickChange(event) { if(debug) { if(window.console) console.info("EdWlTickChange"); else alert("EdWlTickChange"); } //Make sure field is "dirty" frmField = getSrcElement(event); if(frmField.value != "") //In case of a manual blanking frmField.setAttribute("tickerStatus", gblTickStatus["dirty"].name); } function EdWlTickBlur(event) { if(debug) { if(window.console) console.info("EdWlTickBlur"); else alert("EdWlTickBlur"); } if(!event) { //function manually called - no event frmField = activeRow.getElementsByTagName("TD")[0].getElementsByTagName("INPUT")[0]; } else { frmField = getSrcElement(event); } row = frmField.parentNode.parentNode; //Abort previous request //if(activeCb) //activeCb.abort(); if(frmField.value != frmField.defaultValue && frmField.value != "") { //User changed field - make AJAX Call //console.info("Cstatus: " + frmField.getAttribute("tickerStatus")) frmField.setAttribute("tickerStatus", gblTickStatus["dirty"].name); frmField.className = gblTickStatus["dirty"].htmlClass; row.getElementsByTagName("TD")[1].innerHTML = gblTickStatus["dirty"].htmlMsg; //Create Request Object var wlLine = { onloadHdr: FillEditRow, context: frmField, name: null, wlID: null, viewMode: null, sortCol: null, sortOrd: null, symbols: frmField.value } //Set field as "dirty" & Fill In Values //Hand to loader function GetSymbols(wlLine); } else if(frmField.value == "") { frmField.Remove(); } else if(frmField.value == frmField.defaultValue) { //Preserve Error if(frmField.className != gblTickStatus["invalid"].htmlClass) { //tickerStatus changed to dirty on focus //Flag Good frmField.setAttribute("tickerStatus", gblTickStatus["good"].name); frmField.className = gblTickStatus[frmField.getAttribute("tickerStatus")].htmlClass; } } } function RemWlTick(event) { if(debug) { if(window.console) console.info("RemWlTick"); else alert("RemWlTick"); } if(event) { //Blank the row remBtn = getSrcElement(event); //Grab Row tickerRow = remBtn.parentNode.parentNode; } else { tickerRow = this.parentNode.parentNode; } //Reset to default-like appearance formField = tickerRow.getElementsByTagName("TD")[0].getElementsByTagName("INPUT")[0]; formField.value = ""; formField.setAttribute("tickerStatus", "good"); formField.className = ""; formField.defaultValue = ""; compField = tickerRow.getElementsByTagName("TD")[1]; compField.className = "compNameCol"; compField.innerHTML = ""; } function UpdateWlClick() { if(debug) { if(window.console) console.info("UpdateWlClick"); else alert("UpdateWlClick"); } //Abort previous request //activeCb.abort(); //Grab Form handle for data parsing var editFrm = Element.get("wlEditForm"); var currField = null; var blnHasError = false; var blnHasDirt = false; var blnHasChanged = false; var blnIsDup = false; var aryStockSyms = new Array(); var oldWatchList = watchListData[editFrm.wlID.value]; var aryTickerVals = new Array(); if(oldWatchList) { //Check non-stock related form fields if(editFrm.name.value != oldWatchList.name) { //Name Change blnHasChanged = true; } } else { blnHasChanged = true; } //Check form fields for(var i = 0; i < 15; i++) { currField = document.getElementById("ticker" + i); blnIsDup = false; if(/inactive|invalid/.test(currField.getAttribute("tickerStatus"))) { //Bad entry still present //blnHasError = true; //hasError is designed to create a hard-stop disabled to allow passive filter blnHasChanged = true; //break; } else { if(currField.getAttribute("tickerStatus") == "dirty") { blnHasDirt = true; } if(currField.value != currField.defaultValue) { blnHasChanged = true; } //Check for change if(oldWatchList) { if(i < oldWatchList.symbols.length && !blnHasChanged) { if(oldWatchList.symbols[i].dispTick != currField.value) { blnHasChanged = true; } } } if(currField.value != "") { if(oldWatchList) { if(i >= oldWatchList.symbols.length) { //New symbol added blnHasChanged = true; } } //Check for duplicates for(var x in aryTickerVals) { if(currField.value == aryTickerVals[x]) { blnIsDup = true; break; } } if(!blnIsDup) { aryTickerVals.push(currField.value); aryStockSyms.push({ dispTick: currField.value, compName: currField.parentNode.parentNode.getElementsByTagName("TD")[1].innerHTML, tickerStatus: currField.getAttribute("tickerStatus") }); } else { blnHasChanged = true; } } } } if(!blnHasError && blnHasChanged) { //Re-validate && parse in fields again var wlEdit = { onloadHdr: FillEditForm, context: watchListData[editFrm.wlID.value], name: editFrm.name.value, wlID: editFrm.wlID.value, viewMode: editFrm.viewMode.value, sortCol: editFrm.sortCol.value, sortOrd: editFrm.sortOrd.value, symbols: aryStockSyms } //Commit back to local storage - will be overwritten with a validated data set by UpdateListStore if(!watchListData[editFrm.wlID.value]) { //New if(watchListData.length == 0) //Starting fresh watchListData = new Array(); watchListData.push(wlEdit); } else { watchListData[editFrm.wlID.value] = wlEdit; } //Set up function pointers watchListData[editFrm.wlID.value].Save = SaveWatchListBuffer; if(blnHasDirt) { if(window.console && debug) console.info("UpdateWlClick:Dirty"); //Abort previous request activeCb.abort(); //Set function context for final check wlEdit.onloadHdr = UpdateResubmit; //Hand to loader function GetSymbols(wlEdit); } else { if(window.console && debug) console.info("UpdateWlClick:Clean"); wlEdit.onloadHdr = UpdateListStore; //LoadWatchlist; //going back to loadwatchList var wlIDFld = Element.get("watchList" + editFrm.wlID.value); var wlIDVal = editFrm.wlID.value; CloseEditWl(); //Purge old if(wlIDFld) { Element.removeChildNodes(wlIDFld); } watchListData[wlIDVal].Save(); } } else if(!blnHasChanged && !blnHasError) { //no changes - just close if(window.console && debug) console.info("UpdateWlClick:NC"); CloseEditWl(); } } function UpdateResubmit(bufferReference) { if(debug) { if(window.console) console.info("UpdateResubmit"); else alert("UpdateResubmit"); } var wlData = serializer.deserialize(unescape(bufferReference.contentPackage.result)); //in case debugging is turned on - purge it from return data set if(wlData.length < 1) wlData = serializer.deserialize(unescape(bufferReference.contentPackage.result.substring(0, bufferReference.contentPackage.result.indexOf("Debug")))); //Re-fill form FillEditForm(bufferReference); //Re-iterate through the data and submit again if all clean /* Removed to allow even bad data to be passed through - just simply filtered blnIsClean = true; for(var x in wlData.symbols) { if(gblTickStatus[wlData.symbols[x].tickerStatus].name != "good") { blnIsClean = false; break; } } */ //if(blnIsClean) { UpdateWlClick(); //} } function ClearEditForm(editFrm) { if(debug) { if(window.console) console.info("ClearEditForm"); else alert("ClearEditForm"); } currField = null; blnHasError = false; blnHasDirt = false; //Commit back to buffer for(var i = 0; i < 15; i++) { currField = document.getElementById("ticker" + i); //Grab Row row = currField.parentNode.parentNode; //Reset currField.value = ""; currField.defaultValue = ""; currField.className = ""; currField.setAttribute("tickerStatus", "good"); row.getElementsByTagName("TD")[1].className = "compNameCol"; row.getElementsByTagName("TD")[1].innerHTML = ""; } } function SaveWatchListBuffer() { if(debug) { if(window.console) console.info("SaveWatchListBuffer"); else alert("SaveWatchListBuffer"); } //ContentBuffer Calls contentbuffer = new ContentBuffer(); serializer = new Serializer(); //Load in initial Content activeCb = contentbuffer.load({ url: "resources/asp/saveBufferedWatchlist.asp", method: "post", contentType: "text/javascript", postdata: { wlID: this.wlID, name: this.name, viewMode: this.viewMode, sortCol: this.sortCol, sortOrd: this.sortOrd, symbols: escape(serializer.serialize(this.symbols)) }, onload: this.onloadHdr, context: this.context, debug: true }); } function UpdateListStore(bufferReference) { if(debug) { if(window.console) console.info("UpdateListStore"); else alert("UpdateListStore"); } var wlData = serializer.deserialize(unescape(bufferReference.contentPackage.result)); //in case debugging is turned on - purge it from return data set if(wlData.length < 1) wlData = serializer.deserialize(unescape(bufferReference.contentPackage.result.substring(0, bufferReference.contentPackage.result.indexOf("