var PERIOD_HISTORICAL=1;
var PERIOD_INTRADAY=2;
var PERIOD_INTRADAY_10D=3;

var PERIODICITY_INTRA_TICK =0;
var PERIODICITY_INTRA_1MIN =1;
var PERIODICITY_INTRA_5MIN =2;
var PERIODICITY_INTRA_15MIN =3;
var PERIODICITY_INTRA_30MIN =4;
var PERIODICITY_INTRA_1HRS =5;

var SEGMENT_CM = "CM";
var SEGMENT_CD = "CD";
var SEGMENT_FO = "FO";
var SEGMENT_INDEX = "OI";
var SEGMENT_IRF = "IRF";

var DT_LINE=1;
var DT_BAR=2;
var DT_OHLC=3;
var DT_CANDLE=4;

var GT_PRICE = 1;
var GT_VOLUME = 2;
var GT_SMA = 3;
var GT_EMA = 4;
var GT_BBANDS = 5;
var GT_MFI = 6;
var GT_MACD = 7;
var GT_RSI = 8;
var GT_ROC = 9;
var GT_WILLIAM = 10;
var GT_STOCHASTIC = 11;
var GT_OI = 12;
var GT_PSAR = 13;
var GT_RBI = 14;
var GT_COMPARE = 15;
var GT_ABSCOMPARE = 16;
var GT_TRENDLINE = 17;

var GT_DISPLAYORDER=[GT_PRICE,GT_VOLUME,GT_OI,GT_SMA,GT_EMA,GT_BBANDS,GT_MFI,GT_RSI,GT_ROC,GT_MACD,GT_WILLIAM,GT_STOCHASTIC,GT_PSAR];

var GROUP_PRICE=1;
var GROUP_VOLUME=2;
var GROUP_PERCENTAGE=3;
var GROUP_MACD=4;
var GROUP_PERCENTAGE_NEGATIVE=5;
var GROUP_OI=6;
var GROUP_COMPARE=7;

var AN_PIVOT=1;
var AN_FIB_RET=2;
var AN_MARKER=3;
var AN_TRENDLINE=4;

var DISPLAY_TYPES=["","line","column","ohlc","candlestick"];
var ANNOTATIONS=["","Pivot Points","Fibonacci Retracements","Marker","Trendline"];
var ANNOTATIONS_HELP=["","pivot.html","fibonacciretracements.html","","trendline.html"];
var ANNOTATIONS_DESC=["","Click on the chart to select the pivot point date.","Click on the chart twice to identify the trend start and end dates.","Click on the chart to select the marker date.","Click on the chart twice to identify the trend start point and end point."];

var GRAPH_TYPES=[null,new GraphMetaData(GT_PRICE,"Price","Price Graph",[1,3,4],[[["Color","0000ff"]],[["Up Color","0000ff"],["Down Color","ff0000"]],[["Up Color","0000ff"],["Down Color","ff0000"]]],[],false,GROUP_PRICE,"price.html",false),
new GraphMetaData(GT_VOLUME,"Vol","Volume Graph",[2],[[["Color","0000ff"]]],[],false,GROUP_VOLUME,"volume.html",false),
new GraphMetaData(GT_SMA,"SMA","Simple Moving Average",[1],[[["Color","288003"]]],[["Period",2,true,null,1,null,"5"]],true,GROUP_PRICE,"sma.html",true),
new GraphMetaData(GT_EMA,"EMA","Exponential Moving Average",[1],[[["Color","804545"]]],[["Period",2,true,null,1,null,"5"]],true,GROUP_PRICE,"ema.html",true),
new GraphMetaData(GT_BBANDS,"BBands","Bollinger Bands",[1],[[["Upper","804545"],["Lower","804545"]]],[["Period",2,true,null,1,null,"5"],["Deviation",2,true,null,1,null,"2"]],true,GROUP_PRICE,"bbands.html",true),
new GraphMetaData(GT_MFI,"MFI","Money Flow Index",[1],[[["Color","288003"]]],[["Period",2,true,null,1,null,"14"]],true,GROUP_PERCENTAGE,"mfi.html",true),
new GraphMetaData(GT_MACD,"MACD","Moving Average Convergence Divergence",[1],[[["MACD Color","288003"],["Signal Color","288003"],["Divergence Color","288003"]]],[["Slow Period",2,true,null,1,null,"26"],["Fast Period",2,true,null,1,null,"12"],["Signal Period",2,true,null,1,null,"9"]],true,GROUP_MACD,"macd.html",true),
new GraphMetaData(GT_RSI,"RSI","Relative Strength Index",[1],[[["Color","288003"]]],[["Period",2,true,null,1,null,"14"]],true,GROUP_PERCENTAGE,"rsi.html",true),
new GraphMetaData(GT_ROC,"ROC","Rate of Change",[1],[[["Color","288003"]]],[["Period",2,true,null,1,null,"12"]],true,GROUP_PERCENTAGE,"roc.html",true),
new GraphMetaData(GT_WILLIAM,"William%R","William%R",[1],[[["Color","288003"]]],[["Period",2,true,null,1,null,"14"]],true,GROUP_PERCENTAGE_NEGATIVE,"william.html",true),
new GraphMetaData(GT_STOCHASTIC,"FullStochastic","Full Stochastic Oscillator",[1],[[["%K Color","288003"],["%D Color","288003"]]],[["%K(Fast) Period",2,true,null,1,null,"14"],["%K(Full) Period",2,true,null,1,null,"3"],["%D(Full) Period",2,true,null,1,null,"3"]],true,GROUP_PERCENTAGE,"stochastic.html",true),
new GraphMetaData(GT_OI,"OI","Open Interest",[2],[[["Color","0000ff"]]],[],true,GROUP_OI,"oi.html",false),
new GraphMetaData(GT_PSAR,"PSAR","Parabolic Stop and Reversal",[1],[[["Color","288003"]]],[["Initial Acc. Factor",3,true,null,1,null,"0.02"],["Incremental Acc. Factor",3,true,null,1,null,"0.02"],["Maximum Acc. Factor",3,true,null,1,null,"0.20"]],true,GROUP_PRICE,"psar.html",true),
new GraphMetaData(GT_RBI,"RBI","RBI Reference Rates",[1],[[["Color","288003"]]],[],true,GROUP_PRICE,"rbi.html",false),
new GraphMetaData(GT_COMPARE,"COMPARE","compare",[1],[[["Color","288003"]]],[],true,GROUP_COMPARE,"compare.html",false),
new GraphMetaData(GT_ABSCOMPARE,"ABSCOMPARE","abscompare",[1],[[["Color","288003"]]],[],true,GT_ABSCOMPARE,"abscompare.html",false),
new GraphMetaData(GT_TRENDLINE,"TRENDLINE","trendline",[1],[[["Color","288003"]]],[],true,GT_TRENDLINE,"trendline.html",false)
]

function GraphMetaData(pGraphType,pName,pDesc,pDisplayTypes,pColorParams,pGraphParams,pRemovable,pGraphGroup,pHelpFile,pLdb)
{
	var t=this;
	t.graphType=pGraphType;
	t.name=pName;
	t.desc=pDesc;
	t.displayTypes=pDisplayTypes;
	t.colorParams=pColorParams;
	t.graphParams=pGraphParams;
	t.removable=pRemovable;
	t.graphGroup=pGraphGroup;
	t.helpFile=pHelpFile;
	t.ldb=pLdb;
}
function ChartBean(pId,pHeight,pGroup)
{
var t=this;
t.id=pId;
t.height=pHeight;
t.group=pGroup;
}

function GraphBean(pId,pChartId,pGraphType,pDisplayType,pGraphColors,pGraphParams)
{
var t=this;

t.id=pId;
t.chartId=pChartId;
t.graphType=pGraphType;
t.displayType=pDisplayType;
t.graphColors=pGraphColors;
t.graphParams=pGraphParams;
t.key="";
t.serverParams=null;

t.getString=function getString(pDisp)
{
	lStr=t.id+"|"+t.graphType+"|"+pDisp;
	for (lGrPtr=0;(t.graphParams!=null)&&(lGrPtr<t.graphParams.length);lGrPtr++ )
	{
		lStr+="|"+t.graphParams[lGrPtr];
	}
	return lStr;
}
t.getTitleString=function getTitleString()
{
	lStr=GRAPH_TYPES[t.graphType].name+" "+t.key+"(";
	for (var lGrPtr=0;(t.graphParams!=null)&&(lGrPtr<t.graphParams.length);lGrPtr++ )
	{
		lStr+=t.graphParams[lGrPtr];
		if (lGrPtr<t.graphParams.length-1) lStr+=",";
	}
	lStr+=")";
	return lStr;
}
t.setKey=function setKey(pKey)
{
	t.key=pKey;
}

}

function AnnotationBean(pId,pType,pDate,pParams)
{
var t=this;
t.id=pId;
t.type=pType;
t.date=pDate;
t.params=pParams;

t.getTitleString=function getTitleString()
{
	return ANNOTATIONS[t.type]+"("+t.date+")";
}
}

function CorpAnnouncementBean(pId,pColor,pAlign,pLetter)
{
	var t=this;
	t.id=pId;
	t.color=pColor;
	t.align=pAlign;
	t.letter=pLetter;
}

function WorkBench()
{
var t=this;
t.charts=new Array();
t.graphs=new Array();
t.annotations=new Array();
t.corpAnnouncements=new Array();;
t.segment;

t.addChartBean=function addChartBean(pChartBean)
{
	if (pChartBean.id==null)
	{
		pChartBean.id=-1;
		for(lPtr=0;lPtr<t.charts.length;lPtr++)
		{
			if(t.charts[lPtr].id>pChartBean.id) pChartBean.id=t.charts[lPtr].id;
		}
		pChartBean.id++;
	}
	t.charts.push(pChartBean);
}
t.removeChartBean=function removeChartBean(pChartId)
{
	for(lPtr=0;lPtr<t.charts.length;lPtr++)
	{
		if(t.charts[lPtr].id==pChartId)
		{
			t.charts.splice(lPtr,1);
			break;
		}
	}
	//remove graphs
	for(lPtr=t.graphs.length-1;lPtr>=0;lPtr--)
	{
		if (t.graphs[lPtr].chartId==pChartId)
		{
			t.graphs.splice(lPtr,1);
		}
	}
}
t.getChartBean=function getChartBean(pChartId)
{
	lChart=null;
	for(lPtr=0;lPtr<t.charts.length;lPtr++)
	{
		if(t.charts[lPtr].id==pChartId)
		{
			lChart=t.charts[lPtr];
			break;
		}
	}
	return lChart;
}
t.addGraphBean=function addGraphBean(pGraphBean)
{
	if (pGraphBean.id==null)
	{
		pGraphBean.id=-1;
		for(lPtr=0;lPtr<t.graphs.length;lPtr++)
		{
			if(t.graphs[lPtr].id>pGraphBean.id) pGraphBean.id=t.graphs[lPtr].id;
		}
		pGraphBean.id++;
	}
	t.graphs.push(pGraphBean);
}
t.removeGraphBean=function removeGraphBean(pGraphId)
{
	lGraphBean=null;
	for(lPtr=0;lPtr<t.graphs.length;lPtr++)
	{
		if(t.graphs[lPtr].id==pGraphId)
		{
			lGraphBean=t.graphs[lPtr];
			t.graphs.splice(lPtr,1);
			break;
		}
	}
	// check if chart to be removed
	if (lGraphBean==null) return;
	lFound=false;
	for(lPtr=0;lPtr<t.graphs.length;lPtr++)
	{
		if(t.graphs[lPtr].chartId==lGraphBean.chartId)
		{
			lFound=true;
			break;
		}
	}
	if (!lFound)
	{
		t.removeChartBean(lGraphBean.chartId);
	}
}
t.getGraphBean=function getGraphBean(pGraphId)
{
	lGraph=null;
	for(lPtr=0;lPtr<t.graphs.length;lPtr++)
	{
		if(t.graphs[lPtr].id==pGraphId)
		{
			lGraph=t.graphs[lPtr];
			break;
		}
	}
	return lGraph;
}
t.getChartsForGroup=function getChartsForGroup(pGroupId)
{
	lList=new Array();
	for(lPtr=0;lPtr<t.charts.length;lPtr++)
	{
		if(t.charts[lPtr].group==pGroupId)
		{
			lList.push(lPtr+1);
		}
	}
	return lList;
}
t.removeEmptyCharts=function removeEmptyCharts()
{
	for(lPtr=t.charts.length-1;lPtr>=0;lPtr--)
	{
		lFound=false;
		for (lPtr1=0;lPtr1<t.graphs.length;lPtr1++)
		{
			if(t.charts[lPtr].id==t.graphs[lPtr1].chartId)
			{
				lFound=true;
				break;
			}
		}
		if (!lFound)
		{
			t.charts.splice(lPtr,1);
		}
	}
}
t.addAnnotationBean=function addAnnotationBean(pAnnotationBean)
{
	if (pAnnotationBean.id==null)
	{
		pAnnotationBean.id=-1;
		for(lPtr=0;lPtr<t.annotations.length;lPtr++)
		{
			if(t.annotations[lPtr].id>pAnnotationBean.id) pAnnotationBean.id=t.annotations[lPtr].id;
		}
		pAnnotationBean.id++;
	}
	t.annotations.push(pAnnotationBean);
}
t.removeAnnotationBean=function addAnnotationBean(pAnnotationId)
{
	for(lPtr=0;lPtr<t.annotations.length;lPtr++)
	{
		if(t.annotations[lPtr].id==pAnnotationId)
		{
			t.annotations.splice(lPtr,1);
			break;
		}
	}
}
t.getAnnotationBean=function getAnnotationBean(pAnnotationId)
{
	lAnnotation=null;
	for(lPtr=0;lPtr<t.annotations.length;lPtr++)
	{
		if(t.annotations[lPtr].id==pAnnotationId)
		{
			lAnnotation=t.annotations[lPtr];
			break;
		}
	}
	return lAnnotation;
}

t.setCorpAnnouncements=function setCorpAnnouncements(pCorpAnnouncements)
{
	t.corpAnnouncements = pCorpAnnouncements;

}
t.getCorpAnnouncements=function getCorpAnnouncements()
{
	return t.corpAnnouncements;
}

t.getCorpAnnouncementBean=function getCorpAnnouncementBean(pCatgoryId)
{
	var lCorpAnnouncement=null;
	for(var lPtr=0;lPtr<t.corpAnnouncements.length;lPtr++)
	{
		if(t.corpAnnouncements[lPtr].id==pCatgoryId)
		{
			lCorpAnnouncement=t.corpAnnouncements[lPtr];
			break;
		}
	}
	return lCorpAnnouncement;
}


}
