var intradayChart = {
  chart : null,
  type : 'area',
  /*fromdate : null,
  todate : null,*/
  container : null,
  lineWidth: 1,
  rowCount: 4,
  xAxisLabelHeight: 25,
  init : function(code, _rowCount, referrer){
    var self = this;
    self.rowCount = (_rowCount!=null) ? _rowCount : self.rowCount;
    $.getJSON('/?q=/'+lang+'/data/chart/intradayChart/code/'+code+'/referrer/'+referrer, function(data) {
      var data = self.decode(data);
      /*var target = (self.container==null)
        ? '#intradayChartContainer'
        : self.container;*/
      if(self.container==null)
        self.container = '#intradayChartContainer';
      $(self.container).highcharts('StockChart',self.getJSON(data), function (chart){
        self.chart = chart;
        self.drawBackground();
      });
    });
  },
  decode : function(data){
    return data;
  },
  colors : {line1 : "#4f7aa7", line2 : "#000000", bg1 : "#dbe4ed", bg2 : "#f2f2f2", font1 : "#000000"},
  getJSON : function(data){
    var self = this;

    var y_visible = true;
    var series = new Array();
    var total = data.mainData.length;
    if(total>0){
      /*var today = Highcharts.dateFormat('%Y-%m-%d', data.mainData[0].ts);
      var endTime = new Date(today+' 17:00:00 GMT').getTime();*/
      for (var i=0;i<total;i++){
        /*if (Highcharts.dateFormat('%H:%M', data.mainData[i].ts).indexOf('13:35')>-1) {}*/
        var arr = new Array();
        arr[0] = data.mainData[i].ts;
        arr[1] = data.mainData[i].last;
        series[i] = arr;
      };
    }else{
      y_visible = false;
    }

    var max = data.furtherData.max;
    var min = data.furtherData.min;
    var lastc = data.furtherData.lastc;
    if(min==lastc)  // offset lastc line
      min = min-((max-min)/((self.rowCount+2)*2));
    
    if(max==min){
      if(min<0.05){
        min = 0;
        max = 0.05;
      }else{
        max = max*1.5;
        min = min*0.5;
      }
    }
	
    return {
      chart : {
        type: self.type,
        useHTML: true,
        plotBorderWidth: 0,
        marginTop: 10,
        marginRight: (y_visible)?50:0,
        marginLeft: 0,
        marginBottom: self.xAxisLabelHeight,
        events: {
          redraw: function(event) {
            self.redraw();
          }
        }
      },
      plotOptions: {
        series: {
          grouping: false,
          connectNulls: true
        }
      },
      tooltip: {
        useHTML: true,
          formatter: function() {
            var position = this.points[0].point.index;
            var date = Highcharts.dateFormat('%Y-%m-%d', this.x);
            var time = Highcharts.dateFormat('%H:%M', this.x);
            var last = data.mainData[position].last;
            
            if(last*1==0)
              last = addcomma(last.toFixed(1));
            else if(last*1<1)    // cbbc, warrant
              last = addcomma(last.toFixed(3));
            else if(last*1<100)  // stock - small cap
              last = addcomma(last.toFixed(2));
            else if(last*1<1000) // stock - big cap
              last = addcomma(last.toFixed(2));
            else if(last*1>=1000)// index - hsi, hsce, n225
              last = addcomma(last.toFixed(0));
            
            var labelPrice = self.labels[lang].price;
            var html = '<div class="chart_tooltip">'+date+' '+time+'</b>';
            if(last!=null)
              html += '<br/>'+labelPrice+': '+ last+'';
            else
              html += '<br/>'+labelPrice+': - ';
			
            return html;
          },
      },
      rangeSelector : {
        inputEnabled:false,
        enabled: false
      },
      xAxis:[
      {
        type: 'datetime',
        gridLineWidth: 0,
        lineWidth: 0.5,
        tickWidth: 0,
        tickColor: '#ccc',
        lineColor: '#ccc',
        tickmarkPlacement: 'on',
        crosshair: false,
        labels: {
          x: 0,
          y: 17,
          style: {
            color: this.colors.font1,
            fontSize: '12px',
          },
          align: 'center',
          rotation: 0,
          formatter : function() {
            var curTime = Highcharts.dateFormat('%H:%M', this.value);
            if (curTime.indexOf('12:00')>-1||curTime.indexOf('09:00')>-1||curTime.indexOf('17:00')>-1)
              return '';
            else if (curTime.indexOf('13:00')>-1) 
              return '12/13';
            else
              return curTime;
          }
        },
        tickPositioner: function () {
          var positions = [];
          var msec = 60*60*1000;
          var lastday = 0;
          if(data.mainData.length>0){
            for (i=0;i<data.mainData.length;i++){
            var today = Math.floor(data.mainData[i].ts/msec)*msec;
            var value = Highcharts.dateFormat('%H:%M', data.mainData[i].ts);
            if (!(value.indexOf('12:')>-1||value.indexOf('09:')>-1||value.indexOf('17:00')>-1)) {             
              if (lastday != today){
                lastday = today;
                positions.push(data.mainData[i].ts);
              }
            }
          }
          }
          return positions;
        },
      }
      ],
      yAxis: [
        {
          title: {
            useHTML: false,
            text: "",         
          },
          labels:{
            enabled : y_visible,
            align:'right',
            x: 43,
            y: 5,
            formatter: function () {
              // return (this.isFirst)?"":this.value;
              if(this.value*1==0)
                return addcomma(this.value.toFixed(1));
              else if(this.value*1<1)    // cbbc, warrant
                return addcomma(this.value.toFixed(3));
              else if(this.value*1<100)  // stock - small cap
                return addcomma(this.value.toFixed(2));
              else if(this.value*1<1000) // stock - big cap
                return addcomma(this.value.toFixed(1));
              else if(this.value*1>=1000)// index - hsi, hsce, n225
                return addcomma(this.value.toFixed(0));
            },
            style: {
              color: this.colors.font1,
              fontSize: '12px',
            }
          },
          opposite: true,
          tickAmount : this.rowCount,
          // tickInterval: (this.rowCount<=4) ? (max-min)/(this.rowCount) : null, // if small than 4, highchart auto interval is not correct
          tickPixelInterval: $(self.container).height()/(this.rowCount+2),
          showFirstLabel: false,
          showFirstLabel: false,
          showLastLabel: true,
          gridLineDashStyle: 'Solid',
          gridLineWidth: 0,
          gridLineWidth: 0,
          minorGridLineWidth: 1,
		  max: max*1.01,
		  min: min*0.99,
          // 前收市价
          plotLines: [{
            value: lastc,
            width: 1,
            color: this.colors.line2,
            dashStyle: 'ShortDash',
            zIndex: 5,
            label: {
              //useHTML: true,
							//text: '<div style="width:50px;height:auto;background: #f8a140;color: #fff; text-align: center;">'+lastc+'</div>',	                                                                                               
              //text: lastc,
              align: 'right',
              x: 50,
              y: 5
            }
          }]
        }
      ],
      navigator : {
        enabled : false,
      },
      scrollbar : {
        enabled : false
      },
      series : [
        {
          data : series,
          useHTML: true,
          color: this.colors.line1,
          fillColor: this.colors.bg1,
          lineWidth: this.lineWidth,
        }
      ],
      exporting: {
        enabled: false
      }
    };
  },
  redraw: function(){
    var chart = this.chart;
    var self = this;

    /*var textbox = chart.yAxis[ 0 ].plotLinesAndBands[ 0 ].label;
    var box = textbox.getBBox();
    $("#drawPlotLinesRect").remove();
    $("#drawPlotLinesText").remove();   
    chart.renderer.rect(chart.plotWidth+10, box.y-4, 50,20, 0).attr({
        fill:  "#f8a140",
        'stroke-width': 0,
        id : 'drawPlotLinesRect',
        zIndex: 7,
      }).add(); 
    var label = chart.renderer.label(textbox.textStr, chart.plotWidth+5 , box.y-4, '', '' + '', '' + '')
      .css({
        color: "#fff",
        fontSize:'12px',
        width: box.width
      })
      .attr({           
        zIndex: 7,
        fill: "#f8a140",
        width: box.width,
        r: 0,
        id: 'drawPlotLinesText'
      })
      .add();
      label.attr({
        x: chart.plotWidth + chart.plotLeft + (50-label.width)/2
      });*/

    // 前收市价文字
    /*if(chart.yAxis[ 0 ].plotLinesAndBands.length>0){
      var textbox = chart.yAxis[ 0 ].plotLinesAndBands[ 0 ].svgElem.d;
      var value = chart.yAxis[ 0 ].plotLinesAndBands[ 0 ].options.value;
      var d = textbox.split(" ");
      $("#drawPlotLinesRect").remove();
      $("#drawPlotLinesText").remove();   
      chart.renderer.rect(chart.plotWidth+10, d[5]*1-10, 50,20, 0).attr({
          fill:  "#f8a140",
          'stroke-width': 0,
          id : 'drawPlotLinesRect',
          zIndex: 7,
        }).add(); 
      var label = chart.renderer.label(value, chart.plotWidth+5 , d[5]*1-10, '', '' + '', '' + '')
        .css({
          color: "#fff",
          fontSize:'12px',
          width: chart.plotRight 
        })
        .attr({           
          zIndex: 7,
          fill: "#f8a140",
          width: chart.plotRight,
          r: 0,
          id: 'drawPlotLinesText'
        })
        .add();
        label.attr({
          x: chart.plotWidth + chart.plotLeft + (50-label.width)/2
        });
    }*/

  },
  adddText: function(x,y,text,i, color){
    var chart = this.chart;
    /*$("#drawLegendRect"+i).remove();
    $("#drawLegendText"+i).remove();
      
    chart.renderer.rect(x, y, 25,8, 0).attr({
        fill: color,
        'stroke-width': 0,
        id : 'drawLegendRect'+i,
        zIndex: 5,
      }).add();
      
    chart.renderer.label(text, x+30, y-8, '', '' + '', '' + '')
      .css({
        color: color,
        fontSize:'15px'
      })
      .attr({           
        zIndex: 5,
        id: 'drawLegendText'+i,
      })
      .add();*/
  },
  drawBackground: function(){
    var chart = this.chart;
    var self = this;

    var offsetx = 0;
    var offsety = chart.chartHeight-self.xAxisLabelHeight-1;
    chart.renderer.rect(offsetx, offsety, chart.chartWidth, self.xAxisLabelHeight, 0).attr({
      fill: self.colors.bg2,
      zIndex: -1,
    }).add();

    self.redraw();
  },
  labels : {
    tc :{price : "價格"},
    sc :{price : "价格"},
    en :{price : "Price"},
  }
}