var overlayCBBCBars = {
	code : "",
	ctx: null,
	parentChart:null,
	data:null,
	last_ts:0,
	enabled: false,
	init : function(ucode,target,spread,callback){
		var self = this;
		this.enabled = true;
		this.spread=spread;
		//console.log("spread"+spread);
		$.getJSON('/'+lang+'/data/chart/overlayCBBCBars/ucode/'+ucode+'/spread/'+spread, function(_data) {			
			self.top = $("#underlying_chart .filter_area").position().top+$("#underlying_chart .filter_area").height();
			self.left = $("#underlyingChartContainer").position().left+64;
			//console.log(_data.mainData);
			if(_data.mainData){
				self.data = self.decode(_data.mainData);
				self.last_ts = _data.mainData[0].ts;
			}
			var container = $("#overlayCBBCBarsContainer");
			if (container.length==0){
				self.parentChart = (window[target.replace("Container","")])?window[target.replace("Container","")].chart:null;
				if (!self.parentChart){
					return;
				}
				
				$("#"+target).append("<div id='overlayCBBCBarsContainer' style='position: absolute;top:"+self.top+"px;left:"+self.left+"px'></div>");
				$("#"+target).find(".highcharts-container").css("z-index","1");
			}
			self.initCanvas();
		});
	},
	reset : function(target,callback){
		var self = this;
		if(self.data){
			this.enabled = true;
			var container = $("#overlayCBBCBarsContainer");
			self.top = $("#underlying_chart .filter_area").position().top+$("#underlying_chart .filter_area").height();
			self.left = $("#underlyingChartContainer").position().left+64;

			if (container.length==0){
				self.parentChart = (window[target.replace("Container","")])?window[target.replace("Container","")].chart:null;
				if (!self.parentChart){
					return;
				}
				$("#"+target).append("<div id='overlayCBBCBarsContainer' style='position: absolute;top:"+self.top+"px;left:"+self.left+"px'></div>");
				$("#"+target).find(".highcharts-container").css("z-index","1");
			}
			self.initCanvas();
			// toolTipMoved();
		}
	},
	setEnable : function(enable){
		this.enabled = enable;
		if (!enable && this.ctx){
			this.ctx.clearRect(0, 0, 1000, 1000);
		}
	},
	decode : function(_data){
		var data = {};
		for(var i=0; i<_data.length;i++){
			data[_data[i].ts] = _data[i].data.mainData;
		}
		return data;
	},
	labels : function (){
		return {
			tc :{
				bull : "牛證重貨區",
				bear : "熊證重貨區",
				futures: "相對期指張數: ",
				shares: "相關對沖股數: ",
				unit: "千股",
			},
			sc :{
				bull : "牛证重货区",
				bear : "熊证重货区",
				futures: "相对期指张数: ",
				shares: "相关对冲股数: ",
				unit: "千股",
			},
			en :{
				bull : "Highest Bull O/S",
				bear : "Highest Bear O/S",
				futures: "Equivalent no. of futures: ",
				shares: "Equivalent Number of Shares: ",
				unit: "K Shares",
			},
		};
	},
	initCanvas : function(rightsideonly){
		var _height = this.parentChart.yAxis[0].height+100;
		var _width = this.parentChart.yAxis[0].width;
		$("#overlayCBBCBarsContainer").html("<canvas id='overlayCBBCBarsCanvas' width='"+_width+"' height='"+_height+"'></canvas>");
		var canvas = document.getElementById("overlayCBBCBarsCanvas");
		this.ctx = canvas.getContext("2d");
		if (this.last_ts>0){
			this.drawBars(this.last_ts);
		}
		//this.drawBars(self.ts);
	},
	drawBars: function(ts){
		ts= this.last_ts;
		var ctx = this.ctx;
		if (!this.enabled){
			return;
		}
		
		var _font="10px Arial";
		var _y1=10;
		var _bear_x_pos=-1;

		if (ctx&&ts>0){
			ctx.clearRect(0, 0, 1000, 1000);
			//if (this.data[ts] && this.data[ts].length>0){
				var bull_max = bear_max = max = 0;
				var bull_checked = $("#cbbcband_bull:checked").length;
				var bear_checked = $("#cbbcband_bear:checked").length;
				// for (var i=0;i<this.data[ts].length;i++){
				// 	if (this.data[ts][i].ty=="bull"){
				// 		bull_max = Math.max(this.data[ts][i].d1,bull_max);
				// 	}else{
				// 		bear_max = Math.max(this.data[ts][i].d1,bear_max);
				// 	}
				// }
				for (var i=0;i<this.data[ts].length;i++){
					if (this.data[ts][i].ty=="bull"){
						bull_max = Math.max(this.data[ts][i].d1,bull_max);
					}else{
						bear_max = Math.max(this.data[ts][i].d1,bear_max);
					}
				}
				for (var i=0;i<this.data[ts].length;i++){
					max=(bull_max>bear_max)?bull_max:bear_max;
					var canDraw=0;
					var maxwidth = $("#overlayCBBCBarsContainer").width()/2;
					var d1a = this.data[ts][i].d1;
					var d1 = Math.floor((Math.abs(this.data[ts][i].d1)));
					var fr = this.data[ts][i].fr;
					var to = this.data[ts][i].to;
					
					var bullbear_x_pos=-1;
					var type = (this.spread>=100)?this.labels()[lang].futures:this.labels()[lang].shares;
					var unit = (this.spread>=100)?"":this.labels()[lang].unit;
					if (bull_checked==1&&this.data[ts][i].d1==bull_max&&this.data[ts][i].ty=="bull"){
						ctx.fillStyle = "#2d8f78";
						ctx.font = _font;
						ctx.fillText(this.labels()[lang].bull+type+fr+"-"+to+"("+d1+unit+")", bullbear_x_pos, _y1);
						//console.log("bull: d1a:"+d1a+"|||d1:"+d1+"|||o1:"+this.data[ts][i].o1);
						canDraw=1;
					}else if(bear_checked==1&&this.data[ts][i].d1==bear_max){
						if(bull_checked==1){
							//bullbear_x_pos=_bear_x_pos;
							_y1+=10;
						}						
						ctx.fillStyle = "#b4425d";
						ctx.font = _font;
						ctx.fillText(this.labels()[lang].bear+type+fr+"-"+to+"("+d1+unit+")", bullbear_x_pos, _y1);
						canDraw=1;
						//console.log("bear: d1a:"+d1a+"|||d1:"+d1+"|||o1:"+this.data[ts][i].o1);
					}
					if(canDraw==1){
						x=$("#overlayCBBCBarsContainer").width()-(this.data[ts][i].d1/max)*maxwidth;
						y=this.calculatePos(this.data[ts][i].to);

						if(y>=0&&y<=180){
							ctx.fillRect(x,y,(this.data[ts][i].d1/max)*maxwidth,this.calculatePos(this.data[ts][i].to)-this.calculatePos(this.data[ts][i].fr));
						}

						//ctx.fillRect(x,(55+this.init_top),(this.data[ts][i].d1/max)*maxwidth,this.calculatePos(this.data[ts][i].to)-this.calculatePos(this.data[ts][i].fr));
						//ctx.fillRect(x,(235+this.init_top),(this.data[ts][i].d1/max)*maxwidth,this.calculatePos(this.data[ts][i].to)-this.calculatePos(this.data[ts][i].fr));
					}
					//ctx.stroke();
				}
			//}
		}else{
			this.last_ts = ts;
		}
	},
	calculatePos : function(val){
		/*var settings = {
			chartHeight:this.parentChart.yAxis[0].height,
			chart_y:0,
		};
		var vSet = {
			maxPlot: this.parentChart.yAxis[0].max,
			row_Count: this.parentChart.yAxis[0].tickAmount-1,
			rowspace: this.parentChart.yAxis[0].tickInterval,
		};
		console.log(settings, vSet);
		*/
		//return calculatePos(val,settings,vSet);
		if(typeof this.parentChart.renderTo!= "object"){
			return;
		}
		// return this.parentChart.yAxis[0].toPixels(val)-this.init_top+3;
		// return this.parentChart.yAxis[0].toPixels(val)-this.top+6;
		return this.parentChart.yAxis[0].toPixels(val)+6;
	}
}