var IE = document.all?true:false;
if (!IE) 
	document.captureEvents(Event.MOUSEMOVE)
else{
	var iebody=(document.compatMode && 
			document.compatMode != 'BackCompat') ? 
				document.documentElement : document.body;
}

var data = new Array();				//stock data
var dataindex = new Array();		//x-coord for data
var dataindex_point = new Array();	//middle x-coord of each bar/candle
var jg_vertical = new Array();		//for vertical line

var tempX = 0;		//temp mouse x
var tempY = 0;		//temp mouse y
var pageX = 0;
var pageY = 0;
var xoffset = 3;	//offset for chart
var yoffset;		//not used yet

var data_min;	//max x on chart
var data_max;	//min x on chart
var chartcount;	//# of charts

var priceOffsetTop = 31;	//line offset for price chart
var priceOffsetBot = 426;   //line offset for price chart
var indiOffsetTop = 6;		//line offset for indi chart
var indiOffsetBot = 126;	//line offset for indi chart
	
var datalist = new Array();  //for data innerHTML
var datacount = 0;			//number of data to show
var prev_xline = 0;
var offsetx = 12;	//move to right so tip is better visible
//var offsetx = 0;
var offsety =  8;	
var tip = "";		
var imgID = "";		//store id of mouse over
	
//signal value determined by chart pgm
//add 2 to signal since...
//-2 = - pivot
//-1 = - powershift
// 0 = no signal
// 1 = + powershift
// 2 = + pivot
var psignal = new Array();
psignal[0] = "<Br>Down Pivot";
psignal[1] = "<Br>Down PowerShift";
psignal[2] = "";
psignal[3] = "<Br>Up PowerShift";
psignal[4] = "<Br>Up Pivot";

function keycheck(e)
{
var keynum;
var keychar;
var numcheck;
	if(window.event) // IE
	{
	keynum = e.keyCode;
	}
	else if(e.which) // Netscape/Firefox/Opera
	{
	keynum = e.which;
	}
	
	alert(keynum);
	//keychar = String.fromCharCode(keynum);
	//numcheck = /\d/;
}

function createVert(count){	//create vertical line object
	chartcount = count;
	if(count>0){
		for(var i=0;i<count;i++){	//one for each chart
			jg_vertical[i] = new jsGraphics("myCanvas" + (i + 1));//myCanvas is the layer where the line is drawn";
			jg_vertical[i].setColor("#339982");//set color of the tracker
			jg_vertical[i].setStroke(1);  //set width of line
		}
	}
}

function setLength(len){	//vert line offset based on chart length
	if((len>=5 && len<=9) || len==3)
		xoffset = 2;
}

function getPosition(img){		//get coord and data
	imgID = img;
	$(img).onmousemove = getPosData;
	$(img).onmouseout = clearToolTip;
}

function getPosData(e){
	getMouseXY(e);
	showData();
}

function getMouseXY(e) {
	if (IE) { //if browser is IE
		
		/* tempX and tempY are xy positions within image */
		tempX = event.offsetX;
		tempY = event.offsetY;
	
		/* pageX and pageY are xy positions within whole page */
		//pageX = event.clientX + iebody.scrollLeft + offsetx;
		//pageY = event.clientY + iebody.scrollTop + offsety;
		
		pageX = event.clientX;
		pageY = event.clientY;
	}
	else {  //if browser is NS
		var elem = $(imgID);
		if(window.opera){
			tempX = e.x - elem.offsetLeft;
			tempY = e.y - elem.offsetTop;
		}else{
			// finds the absolute position of the object
			tempX = e.layerX - elem.offsetLeft;
			tempY = e.layerY - elem.offsetTop;
		}
		
		pageX = e.clientX + window.pageXOffset + offsetx;
		pageY = e.clientY + window.pageYOffset + offsety;

	}
}

function showData(){
	var xline;
	
	//get data from array based on x
	if(tempX>data_max){
		tempX = data_max;
	}else if(tempX<data_min){
		tempX = data_min;
	}
	
	if(data[dataindex[tempX]]){
		//x-coord for line
		xline = dataindex_point[dataindex[tempX]];
		tip = data[dataindex[tempX]]["date"];
		tip += psignal[(+data[dataindex[tempX]]["psignal"])+2];
		
		if(chartcount>0 && xline != prev_xline){
			//update new value
			setValues(tempX);
	
			//save current line position
			prev_xline = xline;
			
			//draw new lines,add offset so line in middle
			drawlines(xline - xoffset);
			
			//showdate as tooltip
			showtooltip(tip);
		}
	}
	return false;
}

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;
}

function drawlines(xline){
	//draw new lines
	jg_vertical[0].clear();  //clears old line
	jg_vertical[0].drawLine(xline,priceOffsetTop,xline,priceOffsetBot);  //send coord for new line
	jg_vertical[0].paint();  //draw new line
	
	for(var i =1;i<chartcount;i++){
		jg_vertical[i].clear();
		jg_vertical[i].drawLine(xline,indiOffsetTop,xline,indiOffsetBot);
		jg_vertical[i].paint();
		
	}
}

function setValues(x){	//update the value of each chart
	var d1 = dataindex;
	var d2 = datalist;
	
	var tempval;
	
	var expect = [];
	var expect = ["Signal: Sell","Alert: Sell","","Alert: Buy","Signal: Buy"];
	
	for(var i=0;i<datacount;i++){
		
		tempval = data[d1[x]][d2[i][1]];
		
		/* format certain items */
		if(datalist[i][0] == "s_vol" || datalist[i][0] == "s_vol2" || datalist[i][0] == "s_avgvol" || datalist[i][0] == "s_nvol" || datalist[i][0] == "s_nvol2"){
			tempval = addCommas(Math.round(tempval));
		}
			
		if(datalist[i][0] == "s_expect2"){
			tempval = expect[tempval*1+2];
		}
		/* end format */
	
		$(datalist[i][0]).innerHTML =  tempval;
	}

}

function createDataList(){	//create array of data for mouse over change, to prevent invalid object errors
	var dlist = new Array();
	var dcount = 0;
	
	var len = 0;
	if(data)
		len = data.length;
	
	dlist[dcount++] = new Array('s_date','date');
	dlist[dcount++] = new Array('s_open','open');
	dlist[dcount++] = new Array('s_high','high');
	dlist[dcount++] = new Array('s_low','low');
	dlist[dcount++] = new Array('s_close','close');
	dlist[dcount++] = new Array('s_vol','volume');
	dlist[dcount++] = new Array('s_nvol','nvol');
	dlist[dcount++] = new Array('s_change','change');
	dlist[dcount++] = new Array('s_changeper','changeper');
	
	//if($('s_ma')) dlist[dcount++] = new Array('s_ma','ma');
	if($('s_ma')){
		dlist[dcount++] = new Array('s_ma','ma');
		//assign value to chartS
		if(len)
			$('s_ma').innerHTML = data[len-1]['ma'];
	}
	if($('s_upper')){ 
		dlist[dcount++] = new Array('s_upper','upper');
		if(len)
			$('s_upper').innerHTML = data[len-1]['upper'];
	}
	if($('s_lower')){
		dlist[dcount++] = new Array('s_lower','lower');
		if(len)
			$('s_lower').innerHTML = data[len-1]['lower'];
	}
	if($('s_ma1')){
		dlist[dcount++] = new Array('s_ma1','ma1');
		if(len)
			$('s_ma1').innerHTML = data[len-1]['ma1'];
	}
	if($('s_ma2')){
		dlist[dcount++] = new Array('s_ma2','ma2');
		if(len)
			$('s_ma2').innerHTML = data[len-1]['ma2'];
	}
	if($('s_ma3')){
		dlist[dcount++] = new Array('s_ma3','ma3');
		if(len)
			$('s_ma3').innerHTML = data[len-1]['ma3'];
	}
	if($('s_ma4')){
		dlist[dcount++] = new Array('s_ma4','ma4');
		if(len)
			$('s_ma4').innerHTML = data[len-1]['ma4'];
	}
	
	if($('s_perb')) dlist[dcount++] = new Array('s_perb','PERB');
	if($('s_bwdth1')) dlist[dcount++] = new Array('s_bwdth1','BWDTH1');
	if($('s_bwdth2')) dlist[dcount++] = new Array('s_bwdth2','BWDTH2');
	if($('s_bwdth3')) dlist[dcount++] = new Array('s_bwdth3','BWDTH3');
	
	if($('s_vwmacd1')) dlist[dcount++] = new Array('s_vwmacd1','VWMACD1');
	if($('s_vwmacd2')) dlist[dcount++] = new Array('s_vwmacd2','VWMACD2');
	if($('s_vwmacd3')) dlist[dcount++] = new Array('s_vwmacd3','VWMACD3');
	
	if($('s_normvol')) dlist[dcount++] = new Array('s_normvol','NORMVOL');
	if($('s_rmi')) dlist[dcount++] = new Array('s_rmi','RMI');
	if($('s_rsi')) dlist[dcount++] = new Array('s_rsi','RSI');
	
	if($('s_kd1')) dlist[dcount++] = new Array('s_kd1','KD1');
	if($('s_kd2')) dlist[dcount++] = new Array('s_kd2','KD2');
	if($('s_mtm1')) dlist[dcount++] = new Array('s_mtm1','MTM1');
	if($('s_mtm2')) dlist[dcount++] = new Array('s_mtm2','MTM2');
	if($('s_roc')) dlist[dcount++] = new Array('s_roc','ROC');
	if($('s_pos')) dlist[dcount++] = new Array('s_pos','POS');
	if($('s_vos')) dlist[dcount++] = new Array('s_vos','VOS');
	if($('s_cci')) dlist[dcount++] = new Array('s_cci','CCI');
	
	if($('s_vhf')) dlist[dcount++] = new Array('s_vhf','VHF');
	if($('s_uos')) dlist[dcount++] = new Array('s_uos','UOS');
	if($('s_wr')) dlist[dcount++] = new Array('s_wr','WR');
	if($('s_dmi1')) dlist[dcount++] = new Array('s_dmi1','DMI1');
	if($('s_dmi2')) dlist[dcount++] = new Array('s_dmi2','DMI2');
	if($('s_dmi3')) dlist[dcount++] = new Array('s_dmi3','DMI3');
	if($('s_macd1')) dlist[dcount++] = new Array('s_macd1','MACD1');
	if($('s_macd2')) dlist[dcount++] = new Array('s_macd2','MACD2');
	if($('s_macd3')) dlist[dcount++] = new Array('s_macd3','MACD3');
	
	if($('s_wsad')) dlist[dcount++] = new Array('s_wsad','WSAD');
	if($('s_qstk')) dlist[dcount++] = new Array('s_qstk','QSTK');
	if($('s_cmo')) dlist[dcount++] = new Array('s_cmo','CMO');
	if($('s_adosc')) dlist[dcount++] = new Array('s_adosc','ADOSC');
	if($('s_iiosc')) dlist[dcount++] = new Array('s_iiosc','IIOSC');
	
	if($('s_iaosc')) dlist[dcount++] = new Array('s_iaosc','IAOSC');
	if($('s_spvolp')) dlist[dcount++] = new Array('s_spvolp','SPVOLP');
	
	if($('s_psy')) dlist[dcount++] = new Array('s_psy','PSY');
	if($('s_expect1')) dlist[dcount++] = new Array('s_expect1','EXPECT1');
	if($('s_expect2')) dlist[dcount++] = new Array('s_expect2','EXPECT2');
	
	if($('s_conv')) dlist[dcount++] = new Array('s_conv','CONV');
	if($('s_chop')) dlist[dcount++] = new Array('s_chop','CHOP');
	if($('s_aroon1')) dlist[dcount++] = new Array('s_aroon1','AROON1');
	if($('s_aroon2')) dlist[dcount++] = new Array('s_aroon2','AROON2');
	if($('s_aroon3')) dlist[dcount++] = new Array('s_aroon3','AROON3');
	if($('s_mfi')) dlist[dcount++] = new Array('s_mfi','MFI');
	if($('s_dfa')) dlist[dcount++] = new Array('s_dfa','DFA');
	if($('s_rs')) dlist[dcount++] = new Array('s_rs','RS');
	if($('s_nrsi')) dlist[dcount++] = new Array('s_nrsi','NRSI');
	if($('s_vol2')) dlist[dcount++] = new Array('s_vol2','volume');
	
	if($('s_nvol2')) dlist[dcount++] = new Array('s_nvol2','nvol');
	if($('s_avgvol')) dlist[dcount++] = new Array('s_avgvol','avgvol');

	
	datalist = dlist;
	datacount = dcount;
}

var xmlDoc;
var xmlDoc_resp;
function importXML(param)
{	
	var url = "/common/getxml.php?" + param;
	
	if(window.XMLHttpRequest) //not ie
	{	
		if(navigator.userAgent.indexOf("Firefox")!=-1 ){	//firefox -cross browser error
			xmlDoc = document.implementation.createDocument("", "", null);
			xmlDoc.async="true";
			xmlDoc.load(url);  //load xml file
			xmlDoc_resp = xmlDoc;
			xmlDoc.onload = storeData;
		}else{	//opera,safari
			xmlDoc = new XMLHttpRequest();	
			xmlDoc.onreadystatechange = function(){
				//if (xmlDoc.status==200 || xmlDoc.readyState==4 || xmlDoc.statusText=="complete"){ 
				if (xmlDoc.readyState==4){ 
					xmlDoc_resp = xmlDoc.responseXML;
					storeData();
				}
			}
			
			xmlDoc.open("GET", url, true);
	        xmlDoc.send(null);
		}
	}
	else if (window.ActiveXObject) //IE
	{
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async = "true"; 
		xmlDoc_resp = xmlDoc; 
		xmlDoc.onreadystatechange = function () {
			if (xmlDoc.readyState == 4){ 
				storeData();
			};
		};
	
		xmlDoc.load(url);
		
 	}
	else
	{
		alert('Error loading data');
		return;
	}
}

function sdata(){  //match node name from xml
//plot data
this.x1 = 0;
this.x2 = 0;
this.yo = 0;
this.yh = 0;
this.yl = 0;
this.yc = 0;

//price data
this.date = "";
this.open = 0;
this.high = 0;
this.low = 0;
this.close = 0;
this.volume = 0;
this.nvol = 0;

this.change = 0;
this.changeper = 0;

//price overlay data
this.psignal = 0;
this.ma = "";
this.upper = "";
this.lower = "";
this.ma1 = "";
this.ma2 = "";
this.ma3 = "";
this.ma4 = "";

//indicator data
this.PERB = "";
this.BWDTH1 = "";
this.BWDTH2 = "";
this.BWDTH3 = "";
this.avgvol = 0; 
this.NORMVOL = "";
this.RMI = "";
this.RSI = "";
this.KD1 = "";
this.KD2 = "";
this.MTM1 = "";
this.MTM2 = "";
this.ROC = "";
this.POS = "";
this.VOS = "";
this.CCI = "";
this.VHF = "";
this.UOS = "";
this.WR = "";
this.DMI1 = "";
this.DMI2 = "";
this.DMI3 = "";
this.MACD1 = "";
this.MACD2 = "";
this.MACD3 = "";
this.OBV1 = "";
this.OBV2 = "";
this.PVT1 = "";
this.PVT2 = "";
this.WSAD = "";
this.QSTK = "";
this.CMO = "";
this.ADLINE1 = "";
this.ADLINE2 = "";
this.ADOSC = "";
this.IILINE1 = "";
this.IILINE2 = "";
this.IIOSC = "";
this.SPVOL1 = "";
this.SPVOL2 = "";
this.SPVOLP = "";
this.IALINE1 = "";
this.IALINE2 = "";
this.IAOSC = "";
this.MFI = "";
this.VWMACD1 = "";
this.VWMACD2 = "";
this.VWMACD3 = "";
this.DFA = "";
this.RS = "";
this.NRSI = "";
}

function storeData()
{
	//var x = xmlDoc.getElementsByTagName('data');
	var x = xmlDoc_resp.getElementsByTagName('data');
	
	var rowdata = new sdata();
	var tdata = new Array();
	var tdataindex = new Array();
	var tdataindex_point = new Array();
	var c=0;
	var invalid = 134217728;	//xml pgm prints invalid data for offset

	for (i=0;i<x.length;i++)
	{
		
		for (j=0;j<x[i].childNodes.length;j++)
		{	
			if (x[i].childNodes[j].nodeType != 1) continue;
			
			var nodename = x[i].childNodes[j].nodeName;  //<name>
			var theData = x[i].childNodes[j].firstChild.nodeValue;  //value inside name
			
			if(theData == invalid)
				theData = "";
			
			rowdata[nodename] = theData;
		}
		
		rowdata.x1 = parseInt(rowdata.x1);  //convert to int
		rowdata.x2 = parseInt(rowdata.x2);  //convert to int
		
		//for(c=rowdata.x1;c<=rowdata.x2;c++){
		//	tdataindex[c] = i;	//any coord between x1 and x2 will show same data
		//}
		
		//for xGap = 1, the x1 is greater x2, set lower limit to x2 in this case and upper limit to x1
		if (rowdata.x1 <= rowdata.x2){
			for(c=rowdata.x1;c<=rowdata.x2;c++){
				tdataindex[c] = i;	//any coord between x1 and x2 will show same data
			}
		} else{
			xoffset = 2;  //move offset to right
			for(c=rowdata.x2;c<=rowdata.x1;c++){
				tdataindex[c] = i;	//any coord between x1 and x2 will show same data
			}
		}
		
		tdataindex_point[i] =  Math.floor((rowdata.x1 + rowdata.x2)/2);		//middle point is between x1 and x2					
		tdata[i] = new sdata();
	
		//put each rowdata into array
		for(var name in rowdata){
			tdata[i][name] = rowdata[name];
		}	
	}
	
	//get data only within chart
	if(tdata[0])
		data_min = parseInt(tdata[0].x1);
	
	if(tdata[(i-1)])
		data_max = parseInt(tdata[(i-1)].x1);
	
	data = tdata;
	
	dataindex = tdataindex;
	dataindex_point = tdataindex_point;
	
	//create innerHTML list
	createDataList();
}

function showtooltip(tip)
{
	var tooltip_date = $('tooltip');
	tooltip_date.style.left = pageX + 'px';
	tooltip_date.style.top = pageY + 'px';
	tooltip_date.style.display = 'block';
	
	tooltip_date.innerHTML = tip;

}

function clearToolTip(e)
{	
	
	var yTop = 0;
	var yBot = 126;
	if(imgID == 1){	//for mouseout, set chart y values
		yTop = 10;
		yBot = 445;
	}
	
	getMouseXY(e);
	
	if($('tooltip')){
		if(IE){
			if(tempX>=data_min && tempX<=data_max && tempY>=yTop && tempY<=yBot){
				return false;
			}
		}else if(tempX <= 1 || (tempX>=data_min && tempX<=data_max)){
			return false;
		}
		exit();
	}
}


function exit(){
	if($('tooltip')){
		$('tooltip').style.display = 'none';
	}
}

