﻿//------------------------------------------------------------
var symbolString = "";
var predefGroup = false;
var breadthSymbols="$NYAD,$NYHL,$NAAD,$NAHL,$AMAD,$AMHL";
var symIndexes="|OEX|NDX|XAU|XOI|RUT|TYX|SOX|BKX|XBD|DOT|IIX|VIX|MID|SML|VLE|DAX|XAX|XAL|AUX|BTK|CEX|CRX|CWX|XCI|DDX|HWI|RXP|RXH|IUX|XEF|XNG|NWX|OSX|DRG|RLX|XTC|UTY|GTX|GKX|GJX|GYX|GVX|";
var symCompq="|COMPQ|NASD|$NASD|COMP|$COMP|NASDAQ|$COMPX|COMPX|$IXIC|IXIC|";
var symIndu="|INDU|DJIA|DJI|$DJIA|$DJI|";
var symTran="|TRAN|DJTA|$DJTA|";
var symUtil="|UTIL|DJUA|$DJUA|";
var symSpx="|SPX|SP500|$SP500|S&P|S&P500|$S&P500|";
var symNya="|NYA|NYSE|$NYSE|";
//var writeMyself=false;//declare before .js loaded
//------------------------------------------------------------
//------------------------------------------------------------
function getGroup()
{
  if (predefGroup) return predefGroup;
  var s=(location.search)?location.search.substring(1):"";
  if (!s) return false;
  s=unescape(s.toUpperCase());
  s=s.replace(/[^\w\[\]]/g,"");
  if(s.charAt(0) == '[' && typeof(predefGroups[s.substr(1,s.length-2)])!="undefined") {
    predefGroup = predefGroups[s.substr(1,s.length-2)];
    return predefGroup;
  }
  return false;
}
function getSymbols()
{
//?$NYAD,$NYHL,$NAAD,$NAHL,$AMAD,$AMHL|D|E12,26,9
  if (symbolString) return symbolString;
  var s=(location.search)?location.search.substring(1):"";
  if (!s) s="$INDU";
  s=unescape(s.toUpperCase());
  s=s.replace(/[^\w\.\,\:\-\/\(\)\$\+\&\^\\\!]/g,"");
  if(s.charAt(0) == '%') {
    s = '+' + s.substring(3);
  }
  if(s.charAt(s.length-1) == ','){
    s = s.substring(0,s.length-1)
  }
  var sym=s.split(",");
  for (var i=0;i<sym.length;i++) { sym[i]=adjustSymbol(sym[i]); }
  s=sym.join(",");
  symbolString=s;
  return symbolString;
}

function adjustSymbol(symbol)
{
  if (!symbol) return "$INDU";
  if (symIndexes.indexOf("|"+symbol+"|")>=0) return "$"+symbol;
  if (symbol.substr(0,1)==".") return "$"+symbol.substr(1);

  if (symCompq.indexOf("|"+symbol+"|")>=0) return "$COMPQ";
  if (symIndu.indexOf("|"+symbol+"|")>=0) return "$INDU";
  if (symTran.indexOf("|"+symbol+"|")>=0) return "$TRAN";
  if (symUtil.indexOf("|"+symbol+"|")>=0) return "$UTIL";
  if (symSpx.indexOf("|"+symbol+"|")>=0) return "$SPX";
  if (symNya.indexOf("|"+symbol+"|")>=0) return "$NYA";

  if (symbol=="AMEX") return "$XAX";
  if (symbol=="BRKA") return "BRK/A";
  if (symbol=="BRKB") return "BRK/B";
  if (symbol=="RTNA") return "RTN/A";
  if (symbol=="TSE") return "$TSE";

  // replace weird characters
  symbol = symbol.replace(/\^/g, "$");
  symbol = symbol.replace(/\\\\/g, "/");
  symbol = symbol.replace(/\.(a|b)/ig, "/$1");

  return symbol;
}

function changeTitle()
{
  var group=getGroup();
  var symbols=(group)?"":getSymbols();
  var sym=symbols.split(",");
  if (sym.length>10 && !group) {
    sym=sym.slice(0,10);
    symbols=sym.join(",");
  }
  if (!document.title) return;
  var title=(group)?group.title:symbols;
  if (title) document.title=document.title.replace(/PerfChart/,title+": PerfChart");
  if (!document.getElementsByTagName) return;
  var hs=document.getElementsByTagName("h2");
  for (var i=0;i<hs.length;i++)
  {
    if (hs.item(i).innerHTML.match(/^PerfChart/)){
      if (title) hs.item(i).innerHTML=hs.item(i).innerHTML.replace(/^PerfChart/,"PerfChart: "+title);
      break;
    }
  }
}

function setFields()
{
  if (!document.getElementById) return;
  var s=getSymbols();
  var group=getGroup();
  var sym=[];
  if (group){
    for (var i in group.symbols) {sym.push(i);}
  }
  if (s && sym.length==0) sym=s.split(",");
  if (sym.length>10 && !group) sym=sym.slice(0,10);
  var f=document.getElementById("perfform");
  var symbols=sym.join(",");
  if (!symbols || !f) return;
  if (f["symbols"]) f["symbols"].value=symbols;
  if ($("#perfautosuggest .searchbox") && $("#perfautosuggest .searchbox").get().length>=1){
    $("#perfautosuggest .searchbox").attr("value",symbols);
  }  
}

function addDatasets()
{
  if (!document.getElementById) return;
  var group=getGroup();
  var ds=document.getElementById("scc-perf-datasets");
  if (!group || !ds) return;
  var symbols="";
  for (var i in group.symbols){ symbols+=i+","; }
  symbols=symbols.substr(0,symbols.length-1);
  var header="<h3>Datasets: <span>Click on any icon for other views of these datasets</span></h3>";
  var table="<table id=\"scc-perf-datasets\" summary=\"Links to datasets used in this perfchart\">";
  table+="<tr><td colspan=\"2\" class=\"scc-freecharts-linksrow\"><a href=\"/scripts/php/candleglance.php?"+symbols+"\"><img src=\"http://stockcharts.com/images/minilink_candleglance.gif\" alt=\"[]\" />&nbsp;CandleGlance</a></td></tr>";
  for (var i in group.symbols){
    table+="<tr><th>"+group.symbols[i]+"</th><td class=\"scc-freecharts-linksrow\"><a href=\"/h-sc/ui?s="+i+"\"><img src=\"/images/minilink_sc.gif\" alt=\"[]\" />&nbsp;SharpChart</a> | <a href=\"/charts/gallery.html?"+i+"\"><img src=\"/images/minilink_gallery.gif\" alt=\"[]\" />&nbsp;Gallery</a> | <a href=\"/webcgi/Pnf.asp?S="+i+"\"><img src=\"/images/minilink_pnf.gif\" alt=\"[]\" />&nbsp;P&amp;F&nbsp;Chart</a></td></tr>";
  }
  table+="</table>";
  ds.innerHTML+=header+table;
  ds.style.display="block";
}

function showExtras()
{
  if (!document.getElementById) return;
  var group=getGroup();
  if (!group) return;
  for (var i in group.extradivs){
    var div=document.getElementById(group.extradivs[i]);
    if (div) div.style.display="block";
  }
}
//------------------------------------------------------------
//------------------------------------------------------------
function goPerfChart() 
{
  if (!document.getElementById) return;
  var f=document.getElementById("perfform");
  if (!f) return;
  var s = new Array(10);
  var szOut="";
  if (f["symbols"]) szOut=f["symbols"].value;
  if ($("#perfautosuggest .searchbox") && $("#perfautosuggest .searchbox").get().length>=1){
    szOut=$("#perfautosuggest .searchbox").attr("value");
  }  
  szOut = szOut.replace(/ /g, "");
  window.location = "?" + szOut;
}
//------------------------------------------------------------
//------------------------------------------------------------
function generatePerfApplet()
{
  var group=getGroup();
  var symbols=(group)?"":getSymbols();
  var sym=symbols.split(",");
  if (sym.length>10 && !group) {
    sym=sym.slice(0,10);
    symbols=sym.join(",");
  }
  var src=(group)?group.src:"/d-sb/sb?cmd=perfex2&symbol="+symbols.toLowerCase();
  if (group){
    symbols="";
    for (var i in group.symbols) {symbols+=i+",";}
    symbols=symbols.substr(0,symbols.length-1);
  }
  if (/\{\{symbols\}\}/.test(src)) src=src.replace(/\{\{symbols\}\}/,symbols.toLowerCase());
  var range=(group)?group.range:"200";
  var compressed=(group)?group.compressed:"no";
  var extras=(group)?group.extrafields:"";
  var applet=
	'<object name="PerfChartApplet" width="620" height="440" '+
	' type="application/x-java-applet" '+
	' classid="java:com.stockcharts.perfcharts.CPerfApplet.class" '+
        ' archive="/classes/PerfCharts.jar" >'+
	'  <param name="archive" value="/classes/PerfCharts.jar" />'+//IE
	'  <param name="code" value="com.stockcharts.perfcharts.CPerfApplet.class" />'+//IE
	'  <param name="DataSource" value="http://stockcharts.com'+ src +'" />'+
	'  <param name="DateRange" value="'+ range +'" />'+
	'  <param name="StartDate" value="current" />'+
	'  <param name="IsDataCompressed" value="'+ compressed +'" />'+
	'  <param name="UseSCCFeatures" value="yes" />'+
        extras+
	'  <param name="SharpChartURL" value="http://stockcharts.com/h-sc/ui?s=<SYMBOL>" />'+
	'  <param name="PnFChartURL" value="http://stockcharts.com/webcgi/Pnf.asp?S=<SYMBOL>" />'+
	'  <param name="image" value="http://stockcharts.com/images/logo_perfcharts.gif" />'+
	'  You either do not have Java or have an older version of Java installed.  Please visit <a href="http://www.java.com/">Java.com</a> for an update or see our <a href="/support/javaSupport/javaOne.html">Java Troubleshooting page</a> for more information.'+
	'</object>';
  return applet;
}
function writePerfApplet()
{ 
  if (typeof(writeMyself)=="undefined") writeMyself=false;
  if (!document.getElementById) return;
  applet=generatePerfApplet();
  if (typeof(browserVersion)=="undefined") browserVersion="";
  if (browserVersion=="IE7")
  {
    applet=applet.replace(/(classid=["']?)([^\s"']+)/ig,'$1clsid:8AD9C840-044E-11D1-B3E9-00805F499D93');
  }
  if (/IE/.test(browserVersion) && browserVersion!="IE7")
  {
    var code="";
    var match=applet.match(/<param name=["']?code["']? value=["']?([^\s"']+)["']?[\s\/>]/i);
    if (match) code='code="'+match[1]+'"';
    applet=applet.replace(/<object/i,'<applet '+code);
    applet=applet.replace(/<\/object/i,'</applet');
    applet=applet.replace(/(classid|type)=[^\s]+/ig,'');
    applet=applet.replace(/<param name=["']?(archive|code)["']?[^>]+>/ig,'');
  }
  if (writeMyself) return applet;
  var div=document.getElementById("perfApplet");
  if (!div) return;
  div.innerHTML=applet;
}
function initPerfCharts()
{
  if (typeof(writeMyself)=="undefined") writeMyself=false;
  if (!writeMyself) writePerfApplet();
  changeTitle();
  setFields();
  addDatasets();
  showExtras();
}
