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("", luSearchOpts);
Element.create("LABEL", {id: "vehicle0Label", "htmlfor": "vehicle0", "for": "vehicle0"}, "Stocks", luSearchOpts);
//rad2 = Element.create("INPUT", {type:"radio", id: "vehicle1", name: "vehicle", value: "WSOD.MF"}, false, luSearchOpts);
Element.create("SPAN", false, "", luSearchOpts);
Element.create("LABEL", {id: "vehicle1Label", "htmlfor": "vehicle1", "for": "vehicle1"}, "Mutual Funds", luSearchOpts);
//rad3 = Element.create("INPUT", {type:"radio", id: "vehicle2", name: "vehicle", value: "IN"}, false, luSearchOpts);
//Element.create("SPAN", false, "", luSearchOpts);
//Element.create("LABEL", {id: "vehicle2Label", "htmlfor": "vehicle2", "for": "vehicle2"}, "Indices", luSearchOpts);
searchBtn = Element.create("INPUT", {type:"image", name: "searchBtn", id: "searchBtn", alt: "search", src:"https://thomson.cache.wallst.com/img/btnSearch.gif"}, false, luSearchOpts);
addEvent(searchBtn, "click", SymLookup);
luSearchResHead = Element.create("DIV", {className: "searchSectionNoLine", id: "searchResults"}, false, luBody);
//Element.create("H5", {id: ""}, "SEARCH RESULTS", luSearchResHead);
//Append To Document
document.getElementById("watchLists").appendChild(lookup);
//Hide Pull downs in IE
WCH.Apply("symLu", "screen", true);
//Set focus
searchField.focus();
}
function SymLookupBuffer(searchObj) {
if(debug) {
if(window.console)
console.info("SymLookupBuffer");
else
alert("SymLookupBuffer");
}
//ContentBuffer Calls
contentbuffer = new ContentBuffer();
serializer = new Serializer();
//Load in initial Content
activeCb = contentbuffer.load({
url: "resources/asp/getBufferedWatchlistSymLookups.asp",
method: "post",
contentType: "text/javascript",
postdata: {
search: escape(serializer.serialize(searchObj))
},
onload: FillLookupResults,
context: Element.get("searchResults"),
debug: true
});
}
function SymLookup() {
if(debug) {
if(window.console)
console.info("SymLookup");
else
alert("SymLookup");
}
//Abort previous request
if(activeCb)
activeCb.abort();
srchFld = Element.get("keyword");
//Get the search type
fndChecked = false
var i = 0;
while(!fndChecked) {
srchType = Element.get("vehicle" + i);
fndChecked = srchType.checked;
if(i > 3) {//ran over
srchType = Element.get("vehicle0");
break;
}
i++;
}
srchPage = Element.get("page");
sortOrd = Element.get("luSortOrd");
//alert(srchFld.value + "\n" + srchType.value);
if(srchFld.value != "") {
//Create Request Object
var searchObj = {
keywords: srchFld.value,
vehicle: srchType.value,
page: srchPage.value,
sortOrd: sortOrd.value
}
//Hand to loader function
SymLookupBuffer(searchObj);
}
}
function FillLookupResults(bufferReference) {
if(debug) {
if(window.console)
console.info("FillLookupResults");
else
alert("FillLookupResults");
}
var luData = serializer.deserialize(unescape(bufferReference.contentPackage.result));
//in case debugging is turned on - purge it from return data set
if(luData.length < 1)
luData = serializer.deserialize(unescape(bufferReference.contentPackage.result.substring(0, bufferReference.contentPackage.result.indexOf("