// general javascript routines

var WaitRule = null;
var qTabsCaps = new Array("Quote","Option Display","Composite"
   ,"Future","NASDAQ Level II","Historical Quotes","Time & Sales"
   ,"Fundamental","Morningstar");

// -----------------------------
// addClassRow(tableID,rowNum,className)
// -----------------------------

function addClassRow(tableID,rowNum,className)
   {
   var i;
   var tab = getOb(tableID)
   var rows = tab.getElementsByTagName("tr");

   rows[rowNum].className = className;
   }
   
// -----------------------------
// addCommas(nStr)
// -----------------------------

function addCommas(nStr)
   {
	 nStr += '';
	 x = nStr.split('.');
	 x1 = x[0];
	 x2 = x.length > 1 ? '.' + x[1] : '';
	 var rgx = /(\d+)(\d{3})/;

   while (rgx.test(x1))
      {
		  x1 = x1.replace(rgx, '$1' + ',' + '$2');
	    }
   return x1 + x2;
   }


// ------------------------------------------
// alignTableColumns(idData,idHead)
// ------------------------------------------

function alignTableColumns(idData,idHead)
   {
   var rData = document.getElementById(idData).rows.length - 1; // last row
   var rHead = document.getElementById(idHead).rows.length - 1;
   if (rHead < 0 || rData < 0)
      return; // error
      
   var t1 = document.getElementById(idData).rows[rData].cells;
   var t2 = document.getElementById(idHead).rows[rHead].cells;
   var i;
   var w;

   for (i=0;i<t1.length-1;i++) // do each column
      {
      t1[i].style.width = t2[i].style.width;
      }
   
   }

// -----------------------------
// alternateRows(tableID,n)
// -----------------------------

function alternateRows(tableID,n)
   {
   var i;
   var tab = getOb(tableID)
   var rows = tab.getElementsByTagName("tr");

   for(i=0; i<rows.length; i++)
      {          
      if (i % 2 == n)
         {
         rows[i].className = "shade";
         }
      }
   }

// -----------------------------
// alternateShade(tableID)
// -----------------------------

function alternateShade(tableID)
   {
   alternateRows(tableID,0);
   }
   
// -----------------------------
// clearWaitCursor()
// -----------------------------

function clearWaitCursor() 
   {
   document.body.style.cursor = "default" ;
/*
   if (WaitRule) 
      {
      var ss = WaitRule[0];
      var idx = WaitRule[1];
      if (ss.deleteRule) 
         { // DOM/GEcko
         ss.deleteRule(idx);
         } 
      else 
         { // IE
         ss.removeRule(idx);
         }
      WaitRule = null;
      }
*/
   }

// -----------------------------
// debug()
// -----------------------------

function debug()
   {
   debugger;
   var dummy = 1; // to get into debugger
   }   

// -----------------------------
// do3rdPartyPage()
// -----------------------------

function do3rdPartyPage(ticker)
   {
   top.quoteTicker = ticker;
   top.loadQuotesPage("3rdPartyDisplay");  
   }   

// -----------------------------
// doCompositePage()
// -----------------------------

function doCompositePage(ticker)
   {
// open composite display page window with passed ticker 
   top.quoteTicker = ticker;
   top.loadQuotesPage("CompositeDisplay");  
   }   

// -----------------------------
// doFundamentalPage()
// -----------------------------

function doFundamentalPage(ticker)
   {
   top.quoteTicker = ticker;
   top.loadQuotesPage("FundamentalDisplay");  
   }   

// -----------------------------
// doFutureDisplayPage()
// -----------------------------

function doFutureDisplayPage(ticker)
   {
// open future display page window with passed ticker 
   top.quoteTicker = ticker;
   top.loadQuotesPage("FutureDisplay"); 
   }   

// -----------------------------
// doHistoricalPage()
// -----------------------------

function doHistoricalPage(ticker)
   {
   top.quoteTicker = ticker;
   top.loadQuotesPage("HistoricalPrices");  
   }   

// -----------------------------
// doNasdaqPage()
// -----------------------------

function doNasdaqPage(ticker)
   {
   top.quoteTicker = ticker;
   top.loadQuotesPage("NasdaqDisplay");  
   }   

// -----------------------------
// doOptionsCalculatorPage()
// -----------------------------

function doOptionsCalculatorPage(ticker)
   {
   top.quoteTicker = ticker;
   top.loadQuotesPage("OptionCalc"); 
   }   

// -----------------------------
// doOptionDisplayPage()
// -----------------------------

function doOptionDisplayPage(ticker)
   {
// open option display page window with passed ticker 
   qnav(0);
   top.quoteTicker = ticker;
   top.loadQuotesPage("OptionDisplay"); 
   }   

// -----------------------------
// doPage(c3)
// -----------------------------

function doPage(c3)
   {
   switch(c3)
      {
      default:break;
      
      case "OPC": qnav(4); top.loadQuotesPage("OptionCalc"); break; 
      case "OPD": qnav(1); top.loadQuotesPage("OptionDisplay"); break; 
      case "OPK": qnav(3); top.loadQuotesPage("OptrackDisplay"); break; 
      }
   }

// -----------------------------
// doQtabs(n)
// -----------------------------

function doQtabs(n)
   {
   var q = top.quoteTicker;
   
   switch(n)
      {
      default:break;
      
      case 0: doQuotePage(q); break;
      case 1: doOptionDisplayPage(q); break;
      case 2: doCompositePage(q); break;
      case 3: doFutureDisplayPage(q); break;
      case 4: doNasdaqPage(q); break;
      case 5: doHistoricalPage(q); break;
      case 6: doTimeAndSalesPage(q); break;
      case 7: doFundamentalPage(q); break;
      case 8: do3rdPartyPage(q); break;
      }
   }

// -----------------------------
// doQuotePage()
// -----------------------------

function doQuotePage(ticker)
   {
// open quote page window with passed ticker 
   qnav(0);
   top.quoteTicker = ticker;
   top.loadQuotesPage("Quote");  
   }   
   
// -----------------------------
// doTimeAndSalesPage()
// -----------------------------

function doTimeAndSalesPage(ticker)
   {
   top.quoteTicker = ticker;
   top.loadQuotesPage("Time_And_Sales");  
   }   

// -----------------------------
// fillQuoteStrip()
// -----------------------------

function fillQuoteStrip(objt)
   {
   var chan = objt.qq_change;
   var pct = objt.qq_pct;
   
   var chVal = chan + '<span id="cpct"> [' + pct + "%]</span>";
   putTop("qChange",chVal);
           
   if (chan < 0)
      top.document.getElementById("qChange").style.color="#ff0000";
   else if (chan > 0)
      top.document.getElementById("qChange").style.color="#00cc33";
   else
      top.document.getElementById("qChange").style.color="black";
	 top.document.getElementById("cpct").style.color=top.document.getElementById("qChange").style.color; 
	
   putTop("qSymbol",objt.qq_ticker);
   putTop("qMarket",objt.qq_mkt4); 
   putTop("qlast",objt.qq_last);
   putTop("qBid",objt.qq_bid);
   putTop("qAsk",objt.qq_ask);
   putTop("qHigh",objt.qq_high);
   putTop("qLow",objt.qq_low);
   putTop("qVolume",addCommas(objt.qq_volume));
   putTop("qCompany",objt.qq_dfname);   
   putTop("qtimeStamp",objt.qq_tradetime); // fix
   top.document.getElementById("qSymbolEntry").value = objt.qq_ticker;
   }

// -----------------------------
// getFilterName()
// -----------------------------

function getFilterName()
   {
   var a = top.filterName[top.opStrategyName];
   if (a == "" || a == undefined)
      a = "_DEFAULT_";
   return a;   
   }    

// -----------------------------
// getOb()
// -----------------------------

function getOb(id)
   {
   return (document.getElementById(id));
   }

// -----------------------------
// getTop()
// -----------------------------

function getTop(id)
   {
   return (top.document.getElementById(id));
   }

// -----------------------------
// getUserName()
// -----------------------------

function getUserName()
   {
   var a = top.userName;
   if (a == "" || a == undefined)
      a = "GUEST";
   return a;   
   }
   
// -----------------------------
// getTop()
// -----------------------------

function getTop(id) // for input boxes
   {
   var x = top.document.getElementById(id);
   var z = "";
   if (x != null)
      z = x.innerHTML;
   return z;
   }

// -----------------------------
// getVal()
// -----------------------------

function getVal(id) // for input boxes
   {
   var x = document.getElementById(id);
   var z = "";
   if (x != null)
      z = x.innerHTML;
   return z;
   }

// -----------------------------
// getValue()
// -----------------------------

function getValue(id) // for input boxes
   {
   var x = document.getElementById(id);
   var z = "";
   if (x != null)
      z = x.value;
   return z;
   }

// -----------------------------
// idBlock()
// -----------------------------

function idBlock(id,val)
   {
   var x = document.getElementById(id);
   x.style.display = val ? "block" : "none"; 
   }

// -----------------------------
// idNote()
// -----------------------------
function idNote(id,flag)
   {
   var note1=document.getElementById(id);
   note1.style.visibility = (flag) ? 'visible' : 'hidden';
   }
   

// -----------------------------
// idSelect()
// -----------------------------

function idSelect(idName)
   {
   var sid = document.getElementById(idName);
   sid.select();
   }

// -----------------------------
// lbFilterNames()
// -----------------------------

function lbFilterNames(strategy,id)
   {
   // updates a listbox of filter names

   string2lb(id,top.filterNames[strategy],"~");
   lbSelect (id,top.filterName[strategy]);
   }   
   
// -----------------------------
// lbSelect()
// -----------------------------

function lbSelect(lbid,val)
   {
   var i;
   var lb = document.getElementById(lbid);
   
   if (val == undefined || val == "")
      return; 
      
   lb.selectedIndex = -1; // deselect
   
   for (i=0; i<lb.length;i++)
      {
      if (val == lb.options[i].text) // found it
         {
         lb.selectedIndex = i;
         break;
         }
      }
      
   return;
   }   

// -----------------------------
// lbText()
// -----------------------------

function lbText(lbid)
   {
   var t = "";
   var lb = document.getElementById(lbid);
   
   if (lb.selectedIndex != -1 && lb.length > 0)
      t = lb.options[lb.selectedIndex].text;

   return t;
   }
   
// -----------------------------
// numTableRows()
// -----------------------------

function numTableRows(id)
   {
   var x = document.getElementById(id);
   return x.rows.length;
   }

// -----------------------------
// putTop()
// -----------------------------

function putTop(id,val)
   {
   top.document.getElementById(id).innerHTML = val;
   }

// -----------------------------
// putVal()
// -----------------------------

function putVal(id,val)
   {
   var x = document.getElementById(id);
   var v = val;
   if (val == undefined)
      v = "";
   if (x != null)
      x.innerHTML = v;
   }

// -----------------------------
// putValue()
// -----------------------------

  
function putValue(id,val)
   {
   var x = document.getElementById(id);
   if (x != null && val != undefined)
      x.value = val;
   }

// -----------------------------
// qnav() - adjust the quotes&research substrip
// -----------------------------

function qnav(m)
   {
   top.SubNavSelect(3,m,true);
   }

// -----------------------------
// qTabs() - display the row of command tabs
// -----------------------------

function qTabs(m)
   {
   var i;
   var n = qTabsCaps.length;
   var s;
   var ob;
   var width;
   
   document.write('<div><ul id="subNav">');
   
   for (i=0;i<n;i++)
      {
      s = '<li ';
      if (i == n-1) // last entry
         s += 'class="end" id="fini"';
      s += ' id="qtabs_' + i + '">';
      s += '<a ';
      if (i == m) // selected
         s += 'class="current"';
      s += 'href="javascript:doQtabs(' + i + ')">';
      s += qTabsCaps[i];
      s += '</a></li>';
      document.write(s);
      }

   document.write('</ul></div>');

   ob = document.getElementById("fini");
   width = ob.offsetLeft+ob.offsetWidth;
   
   ob = document.getElementById("subNav");
   ob.style.borderRight = 0;  
   ob.style.width = width + "px";
   }
   

// -----------------------------
// quoteStrip() - display the quote
// -----------------------------

function quoteStrip()
   {
   document.write('<div>');
   document.write('<table cellspacing="0" border="0" width="100%" class="tdc_quote">');
   document.write('<tr>');
   document.write('<td>Symbol</td>');
   document.write('<td>Last</td>');
   document.write('<td>Change</td>');
   document.write('<td>Bid</td>');
   document.write('<td>Ask</td>');
   document.write('<td>High</td>');
   document.write('<td>Low</td>');
   document.write('<td>Volume</td>');
   document.write('</tr>');

   document.write('<tr class="tdc_bold">');
   document.write('<td id="qq_ticker"></td>');
   document.write('<td id="qq_last"></td>');
   document.write('<td id="qq_change"></td>');
   document.write('<td id="qq_bid"></td>');
   document.write('<td id="qq_ask"></td>');
   document.write('<td id="qq_high"></td>');
   document.write('<td id="qq_low"></td>');
   document.write('<td id="qq_volume"></td>');
   document.write('</tr>');
   document.write('</table>');
   document.write('</div>');
   }

// -----------------------------
// rowVals()
// -----------------------------

function rowVals(tabid,rownum,numcols)
   {
   var arr = new Array();
   var tab = document.getElementById(tabid);
   var r = tab.rows[rownum];
   var n = numcols*rownum;
   var i;

   for (i=0; i<numcols;i++)
      {
      arr[i] = tab.cells[n+i].innerHTML;
      }   
   
   return arr;
   }
   
// -----------------------------
// setFilterName()
// -----------------------------

function setFilterName(val)
   {
   if (val != undefined && val != "")
      top.filterName[top.opStrategyName] = val;
   }    

// -----------------------------
// setToolTip()
// -----------------------------

function setToolTip(id,tip)
   {
   var elem = document.getElementById(id);
   elem.title = tip;
   }    

// -----------------------------
// setWaitCursor()
// -----------------------------

function setWaitCursor() 
   {
//   document.body.style.cursor = "wait" ; // use hourglass cursor                  
/*
   var ss = document.styleSheets[0];  
   var idx = (ss.rules||ss.cssRules).length;
   WaitRule = [ss,idx];
   if (ss.insertRule) 
      { // W3C DOM/Gecko
      ss.insertRule("* {cursor:wait;}",idx);
      }
   else 
      { // IE
      ss.addRule("*","cursor:wait;",idx);
      }
*/
   }

// -----------------------------
// string2lb()
// -----------------------------

function string2lb(lbid,str,delim)
// converts a string to listbox entries
   {
   if (str == undefined)
      return "";
   var t = lbText(lbid); // get old selection      
   var i;
   var arr = new Array();
   arr = str.split(delim);
   var lb=document.getElementById(lbid);
   lb.length=0;
   
   for (i=0;i<arr.length;i++)
      {
      if (arr[i] == "#" || arr[i] == "")
         continue; // special handling
      lb[lb.length]=new Option (arr[i],0);
      } 
 
   lbSelect(lbid,t);
   }
   
// -----------------------------
// string2object()
// -----------------------------

function string2object(str)
// converts a ajax string '{a:"123",bb:"x"}'  to object
   {
   var temp;
   eval ('temp=' + str);
   return temp;
   }
 
// needed by fees.html 
function MM_reloadPage(init) {  //reloads the window if NS4 resized
  		if (init==true) with (navigator) {
  			if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    			document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; 
    		}
    	} else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
    }
       
