/***
 * ajax_graph2.js  (require prototype.js)
 *
 *      IRI Ubiteq, Co. 2007.05.10
 ***/

var dragFlag = false;
var sheet0 = 0;
var requestNum = 2;
var async = 0;
var mx = 0;
var my = 0;
var offsetX = 0;
var offsetY = 0;
var offsetBarX = 0;
var scaleHash = $H({daily:"d", weekly:"w", monthly:"m"});
var n = 0;
var target = '../Ajax/ajax_get_finance.rbx';
var financeData = new Array();

var chartWidth = 400;  // value display area
var chartHeight = 200; // value display area
var sheetWidth = 350;  // chart sheet width
var valueSheetHeight = 400;
var volumeSheetHeight = 85;
var volumeLabelHeight = 15;
var scaleSheetWidth = 55;
var barWidth = 7;

var smallValue = 0;
var largeValue = 0;
var intervalValue = 0;
var largeVolume = 0;
var intervalVolume = 0;

function init() {
  Event.observe($('value-sheet0'), "mousemove", moveChart, true);
  Event.observe($('value-sheet1'), "mousemove", moveChart, true);
  Event.observe($('value-sheet2'), "mousemove", moveChart, true);
  Event.observe($('volume-sheet0'), "mousemove", moveChart, true);
  Event.observe($('volume-sheet1'), "mousemove", moveChart, true);
  Event.observe($('volume-sheet2'), "mousemove", moveChart, true);
  Event.observe($('yellow1'), "mousemove", moveChart, true);
  Event.observe($('yellow2'), "mousemove", moveChart, true);
  Event.observe($('value-sheet0'), "mouseup", upChart, true);
  Event.observe($('value-sheet1'), "mouseup", upChart, true);
  Event.observe($('value-sheet2'), "mouseup", upChart, true);
  Event.observe($('volume-sheet0'), "mouseup", upChart, true);
  Event.observe($('volume-sheet1'), "mouseup", upChart, true);
  Event.observe($('volume-sheet2'), "mouseup", upChart, true);
  Event.observe($('yellow1'), "mouseup", upChart, true);
  Event.observe($('yellow2'), "mouseup", upChart, true);
  Event.observe($('value-sheet0'), "mousedown", clickChart, true);
  Event.observe($('value-sheet1'), "mousedown", clickChart, true);
  Event.observe($('value-sheet2'), "mousedown", clickChart, true);
  
  drawDefault();
  setSheetLocationDefault();
  
  var ua = navigator.userAgent;
  if (ua.match(/.*Netscape.*/)) {
    alert('This browser is not supported.');
  }
}

function clickChart() {
  dragFlag = true;
  var str = 'value-sheet'+sheet0;
  offsetX = mx - parseInt($(str).style.left);
  offsetY = my - parseInt($(str).style.top);
  offsetBarX = mx - parseInt($('yellow1').style.left);
  $('value').style.cursor = 'move';
  $('volume').style.cursor = 'move';
}

function upChart(event) {
  $('value').style.cursor = 'default';
  $('volume').style.cursor = 'default';
  dragFlag = false;
  var str = 'value-sheet'+sheet0;
  var pos = parseInt($(str).style.left);
  var yy = parseInt($(str).style.top);
  if (pos > chartWidth + 100) {
    createLeftSheet(sheet0 + 3, pos - (sheetWidth * 3), yy);
  }
  if ((pos < sheetWidth - 100) && (sheet0 > 0)) {
    createRightSheet(sheet0 - 1, pos + sheetWidth, yy);
  }
}

function moveChart(event) {
  mx = Event.pointerX(event);
  my = Event.pointerY(event);

// Bar display
  if (!dragFlag) {
    var str = 'value-sheet'+sheet0;
    var pos = parseInt($(str).style.left);
    var divx = parseInt($('value').offsetLeft);
    var diff = pos + sheetWidth + divx - mx;
    n = Math.floor(diff / barWidth) + 1;
    $('yellow1').style.left = (pos + sheetWidth - (barWidth * n)) + 'px';
    $('yellow2').style.left = (pos + sheetWidth - (barWidth * n)) + 'px';
    displayBarInfo();
  }
//  $('debug').innerHTML = sheet0;

// move sheet
  if (!dragFlag) return;
//  $('debug').innerHTML = mx - offsetX;
  if (my - offsetY > 0) my = offsetY;
  if (my - offsetY < chartHeight - valueSheetHeight) my = offsetY + chartHeight - valueSheetHeight;
  setSheetLocation(sheet0, mx - offsetX, my - offsetY);
  $('yellow1').style.left = (mx - offsetBarX) + 'px';
  $('yellow2').style.left = (mx - offsetBarX) + 'px';
  return false;
}

function overChart(event) {
  $('yellow1').style.visibility = "visible";
  $('yellow2').style.visibility = "visible";
}

function outChart(event) {
  $('yellow1').style.visibility = "hidden";
  $('yellow2').style.visibility = "hidden";
}

function wheelChart(event) {
  var delta = 0;
  if (event.wheelDelta) {
    delta = event.wheelDelta/120;
    if (window.opera) {
      delta = -delta;
    }
  } else if (event.detail) {
    delta = -event.detail/3;
  }

  if (delta < 0) {
    /** down **/
    wheelDownChart();
  } else {
    /** up **/
    wheelUpChart();
  }
}

function wheelDownChart() {
  var scaleSize = parseInt($('scale-label').value);
  if (scaleSize != 3) {
    if (scaleSize == 1) {
      $('scale-label').value = "2";
    } else if (scaleSize == 2) {
      $('scale-label').value = "3";
    }
    requestImage();
  }
}

function wheelUpChart() {
  var scaleSize = parseInt($('scale-label').value);
  if (scaleSize != 1) {
    if (scaleSize == 3) {
      $('scale-label').value = "2";
    } else if (scaleSize == 2) {
      $('scale-label').value = "1";
    }
    requestImage();
  }
}

function displayChart(id) {
  var vae = 'value-sheet'+id;
  var voe = 'volume-sheet'+id;
  drawValueSheet($(vae), id);
  drawVolumeSheet($(voe), id);
}

function displayAllChart() {
  displayTitle();
  calcRange();
  drawScaleSheet($('scale-sheet'));
  drawScaleVolumeSheet($('scale-volume-sheet'));
  drawValueSheet($('value-sheet0'), 0);
  drawVolumeSheet($('volume-sheet0'), 0);
  drawValueSheet($('value-sheet1'), 1);
  drawVolumeSheet($('volume-sheet1'), 1);
  drawValueSheet($('value-sheet2'), 2);
  drawVolumeSheet($('volume-sheet2'), 2);
}

function redraw() {
  if (dragFlag) {
    upChart();
  }

  var str = 'value-sheet'+sheet0;
  var x = parseInt($(str).style.left);
  var y = parseInt($(str).style.top);

  if (financeData.length > 3) {

    deleteSheet();

    drawDefault();
    displayTitle();
    calcRange();
    drawScaleSheet($('scale-sheet'));
    drawScaleVolumeSheet($('scale-volume-sheet'));
    drawValueSheet($('value-sheet0'), 0);
    drawVolumeSheet($('volume-sheet0'), 0);
    drawValueSheet($('value-sheet1'), 1);
    drawVolumeSheet($('volume-sheet1'), 1);
    drawValueSheet($('value-sheet2'), 2);
    drawVolumeSheet($('volume-sheet2'), 2);

    for (var i = 3; i < sheet0 + 3; i++) {
      var va = 'value-sheet'+i;
      var vo = 'volume-sheet'+i;
      var vae = createValueSheet(va, chartWidth, y);
      drawValueSheetDefault(vae, 0);
      var voe = createVolumeSheet(vo, chartWidth);
      drawVolumeSheetDefault(voe, 0);
      if (financeData[i]) {
        drawValueSheet(vae, i);
        drawVolumeSheet(voe, i);
      }

      Event.observe(vae, "mousemove", moveChart, true);
      Event.observe(voe, "mousemove", moveChart, true);
      Event.observe(vae, "mouseup", upChart, true);
      Event.observe(voe, "mouseup", upChart, true);
      Event.observe(vae, "mousedown", clickChart, true);
      Event.observe(voe, "mousedown", clickChart, true);
	}
  }
  setSheetLocation(sheet0, x, chartHeight - valueSheetHeight);
}

function displayTitle() {
  var scaleSize = parseInt($('scale-label').value);
  var company = $F('company');
  var type = '';
  if (scaleSize == 1) {
    type = 'daily';
  } else if (scaleSize == 2) {
    type = 'weekly';
  } else {
    type = 'monthly';
  }
  $('code-title').innerHTML = company+' '+type;
  var sca = $('scale-label').value;
  $('link-scale-daily').style.color = 'blue';
  $('link-scale-weekly').style.color = 'blue';
  $('link-scale-monthly').style.color = 'blue';
  if (Number(sca) == 1) {
    $('link-scale-daily').style.color = 'red';
  } else if (Number(sca) == 2) {
    $('link-scale-weekly').style.color = 'red';
  } else if (Number(sca) == 3) {
    $('link-scale-monthly').style.color = 'red';
  }
  $('link-scale').style.visibility = 'visible';
}

function displayBarInfo() {
//$('debug').innerHTML = n;
  var sht = Math.floor((n - 1) / 50);
  var pos = (n - 1) % 50;
  var currentSheet = sheet0 + sht;
  if ((financeData.length > 0) && (pos >= 0)) {
//    	$('debug').innerHTML = 'cs:'+currentSheet+',pos:'+pos+',n;'+n+',sheet:'+sheet0+',finance:'+financeData[currentSheet][pos];
    if ((financeData[currentSheet]) && (financeData[currentSheet][pos])) {
      var col = financeData[currentSheet][pos];
      $('info-date').innerHTML = col[0];
      $('info-start').innerHTML = col[1];
      $('info-max').innerHTML = col[2];
      $('info-min').innerHTML = col[3];
      $('info-end').innerHTML = col[4];
      $('info-volume').innerHTML = col[5];
    } else {
      $('info-date').innerHTML = "";
      $('info-start').innerHTML = "";
      $('info-max').innerHTML = "";
      $('info-min').innerHTML = "";
      $('info-end').innerHTML = "";
      $('info-volume').innerHTML = "";
    }

  }
}

function requestTypeData(type) {
  if (dragFlag) {
    upChart();
  }

  $('scale-label').value = type;
  requestData('');
}

function requestData(date) {
  $('chart-error').style.visibility = "hidden";

  var sca = $('scale-label').value;
  if (!date) {
    requestNum = 2;
    reset();
  }
  var com = $F('company');
  if (!com) return;
  if (date.match(/^[0-9][0-9][0-9][0-9]\/[0-9]?[0-9]\/$/)) {
    date = date.concat("1");
  }
  var param = 'company=' + com + '&date=' + date + '&scale=' + sca;
//alert(param);
  $('chart-load').style.visibility = "visible";
  var ajaxConnect = new Ajax.Request( target,
                               { method: 'get',
                                 parameters: param,
                                 onSuccess: successImage,
                                 onFailure: failureImage,
                                 onComplete: completeImage });
}

function completeImage(response) {
//  $('chart-load').style.visibility = "hidden";
}

function successImage(response) {
  $('chart-load').style.visibility = "hidden";
  var skip = 0;
  var data = new Array();
  var res = response.responseText
//  if (res.match(/^[0-9][0-9][0-9][0-9]\//)) {
//    alert(res);
    var lines = res.split(':');
//alert(lines);

    var cols = new Array();
        j = 0;
        cols[0] = lines[0];

    for (var i = 1; i < lines.length; i++) {
  //    var cols = lines[i].split(',');

        if (lines[i].indexOf("/") > 0 ) {

          if ( j >= 5 ) {
            tt = cols[5];
            cols[5] = cols[4];
            cols[4] = tt;
   // alert(cols);
            data.push(cols);
          var cols = new Array();
          }
          cols[0] = lines[i];
          j = 0;

        } else {
          j = j + 1;
          cols[j] = lines[i];
        }
    }


//alert(cols);
//alert(data);
    financeData.push(data);

    if (requestNum > 0) {
      requestNum--;
      if (data.length >= 51) {
        requestData(cols[0]);
      } else {
        skip = 1;
      }
    }
//  } else {
//    failureImage(response);
//  }

  if ((financeData.length == 3) || (skip)) {
    displayAllChart();
  }

  if (async > 0) {
    displayChart(async);
    async = 0;
  }

}

function failureImage(response) {
  $('chart-error').style.visibility = "visible";
}

function reset() {
  sheet0 = 0;
  deleteSheet();
  financeData = new Array();
  
  drawDefault();
  setSheetLocationDefault();
}

function deleteSheet() {
  var id = 3;
  var vae = 'value-sheet'+id;
  var voe = 'volume-sheet'+id;
  while($(vae) && $(voe)) {
    Event.stopObserving(vae, "mousemove", moveChart, true);
    Event.stopObserving(voe, "mousemove", moveChart, true);
    Event.stopObserving(vae, "mouseup", upChart, true);
    Event.stopObserving(voe, "mouseup", upChart, true);
    Event.stopObserving(vae, "mousedown", clickChart, true);
    Event.stopObserving(voe, "mousedown", clickChart, true);
    $('value').removeChild($(vae));
    $('volume').removeChild($(voe));
    id ++;
    vae = 'value-sheet'+id;
    voe = 'volume-sheet'+id;
  }
}

function drawDefault() {
  drawValueSheetDefault($('value-sheet0'), 1);
  drawValueSheetDefault($('value-sheet1'), 1);
  drawValueSheetDefault($('value-sheet2'), 1);
  drawVolumeSheetDefault($('volume-sheet0'), 1);
  drawVolumeSheetDefault($('volume-sheet1'), 1);
  drawVolumeSheetDefault($('volume-sheet2'), 1);
  drawScaleSheetDefault($('scale-sheet'));
  drawScaleVolumeSheetDefault($('scale-volume-sheet'));
}

function createLeftSheet(id, x, y) {
  sheet0 = Number(sheet0) + 1;
  var va = 'value-sheet'+id;
  var vo = 'volume-sheet'+id;

  if ((! $(va)) && (! $(vo))) {
    if ((financeData.length == id) && (financeData[id - 1][50])) {
      requestData(financeData[id - 1][50][0]);
      async = id;
    }
    
    var vae = createValueSheet(va, x, y);
    drawValueSheetDefault(vae, 0);

    var voe = createVolumeSheet(vo, x);
    drawVolumeSheetDefault(voe, 0);

    Event.observe(vae, "mousemove", moveChart, true);
    Event.observe(voe, "mousemove", moveChart, true);
    Event.observe(vae, "mouseup", upChart, true);
    Event.observe(voe, "mouseup", upChart, true);
    Event.observe(vae, "mousedown", clickChart, true);
    Event.observe(voe, "mousedown", clickChart, true);
  } else {
    $(va).style.left = x + 'px';
    $(va).style.top = y + 'px';
    $(vo).style.left = x + 'px';
  }
}

function createRightSheet(id, x, y) {
  sheet0 = Number(sheet0) - 1;
  var va = 'value-sheet'+id;
  var vo = 'volume-sheet'+id;

  $(va).style.left = x + 'px';
  $(va).style.top = y + 'px';
  $(vo).style.left = x + 'px';
}

function createValueSheet(name, x, y) {
  var vae = document.createElement('div');
  vae.id = name;
  vae.style.position = 'absolute';
  vae.style.width = '350px';
  vae.style.height = '400px';
  vae.style.left = x + 'px';
  vae.style.top = y + 'px';
//  vae.onMousedown = 'clickChart(); return false;';
  $('value').appendChild(vae);
  return(vae);
}

function createVolumeSheet(name, x) {
  var voe = document.createElement('div');
  voe.id = name;
  voe.style.position = 'absolute';
  voe.style.width = '350px';
  voe.style.height = '85px';
  voe.style.left = x + 'px';
  voe.style.top = '0px';
  $('volume').appendChild(voe);
  return(voe);
}

function setSheetLocationDefault() {
  setSheetLocation(0, chartWidth - sheetWidth, chartHeight - valueSheetHeight);
}

function setSheetLocation(id, x, y) {
  var id1 = Number(id) + 1;
  var id2 = Number(id) + 2;
  var vas0 = 'value-sheet'+id;
  var vas1 = 'value-sheet'+id1;
  var vas2 = 'value-sheet'+id2;
  var vos0 = 'volume-sheet'+id;
  var vos1 = 'volume-sheet'+id1;
  var vos2 = 'volume-sheet'+id2;
  $(vas0).style.left = x + 'px';
  $(vas0).style.top = y + 'px';
  $(vas1).style.left = (x - (sheetWidth * 1)) + 'px';
  $(vas1).style.top = y + 'px';
  $(vas2).style.left = (x - (sheetWidth * 2)) + 'px';
  $(vas2).style.top = y + 'px';
  $(vos0).style.left = x + 'px';
  $(vos0).style.top = 0 + 'px';
  $(vos1).style.left = (x - (sheetWidth * 1)) + 'px';
  $(vos1).style.top = 0 + 'px';
  $(vos2).style.left = (x - (sheetWidth * 2)) + 'px';
  $(vos2).style.top = 0 + 'px';
  $('scale-sheet').style.left = 0 + 'px';
  $('scale-sheet').style.top = y + 'px';
}

function getPositionY(val) {
  var pos = Math.round(valueSheetHeight * (val - smallValue) / (intervalValue * 10));
  return(valueSheetHeight - pos);
}

function getPositionVolume(val) {
  var pos = Math.round((volumeSheetHeight - volumeLabelHeight) * val / (intervalVolume * 5));
  return(volumeSheetHeight - pos);
}

function drawValueSheetDefault(sheet, clear) {
  var can = new jsGraphics(sheet);
  if (clear) {
    can.setColor("#ffffff");
    can.fillRect(0, 0, sheetWidth, valueSheetHeight);
  }

  can.setColor("#000000");
  can.drawLine(0, 0, sheetWidth-1, 0);
  can.drawLine(0, valueSheetHeight-1, sheetWidth-1, valueSheetHeight-1);

  // vertical line
  can.setColor("#c8c8c8");
  var sx = sheetWidth - (barWidth * 10) + Math.floor(barWidth / 2);
  while (sx > 0) {
    can.drawLine(sx, 1, sx, valueSheetHeight-2);
    sx = sx - (barWidth * 10);
  }

  // horizonal line
  var iy = Math.floor(valueSheetHeight / 10);
  for (var i = 1; i < 10; i++) {
    var sy = valueSheetHeight - (iy * i);
    can.drawLine(0, sy, sheetWidth, sy);
  }

  can.paint();
}

function drawValueSheet(sheet, id) {
  var can = new jsGraphics(sheet);
  var data = financeData[id];

  for (var i = 0; i < (data.length); i++) {
    if (i == 50) {
      break;
    }
    can.setColor("#0000ff");
    var sx = sheetWidth - (barWidth * (i + 1));
    var max = getPositionY(data[i][2]);
    var min = getPositionY(data[i][3]);
    can.drawLine(sx + 3, max, sx + 3, min);
    var stval = getPositionY(data[i][1]);
    var enval = getPositionY(data[i][4]);
    if (stval == enval) {
      can.fillRect(sx + 1, enval, 5, 1);
    } else if (stval > enval) {
      can.fillRect(sx + 1, enval, 5, stval - enval);
      if ((stval - enval) > 2) {
        can.setColor("#ffffff");
        can.fillRect(sx + 2, enval + 1, 3, stval - enval - 2);
      }
    } else {
      can.fillRect(sx + 1, stval, 5, enval - stval);
    }
  }

  can.paint();

//  Event.stopObserving(sheet, "mousemove", moveChart, true);
//  Event.stopObserving(sheet, "mouseup", upChart, true);
//  Event.observe(sheet, "mousemove", moveChart, true);
//  Event.observe(sheet, "mouseup", upChart, true);

}

function drawVolumeSheetDefault(sheet, clear) {
  var can = new jsGraphics(sheet);
  if (clear) {
    can.setColor("#ffffff");
    can.fillRect(0, 0, sheetWidth, volumeSheetHeight);
  }

  // label area
  can.setColor("#00ffff");
  can.fillRect(0, 0, sheetWidth, volumeLabelHeight);

  // black line
  can.setColor("#000000");
  can.drawLine(0, 0, sheetWidth-1, 0);
  can.drawLine(0, volumeSheetHeight-1, sheetWidth-1, volumeSheetHeight-1);
  can.drawLine(0, volumeLabelHeight, sheetWidth-1, volumeLabelHeight);

  // vertical line
  can.setColor("#c8c8c8");
  var sx = sheetWidth - (barWidth * 10) + Math.floor(barWidth / 2);
  while (sx > 0) {
    can.drawLine(sx, volumeLabelHeight+1, sx, volumeSheetHeight-2);
    sx = sx - (barWidth * 10);
  }

  // horizonal line
  var iy = Math.floor((volumeSheetHeight - volumeLabelHeight) / 5);
  for (var i = 1; i < 5; i++) {
    var sy = volumeSheetHeight - (iy * i);
    can.drawLine(0, sy, sheetWidth, sy);
  }

  can.paint();
}

function drawVolumeSheet(sheet, id) {
  var can = new jsGraphics(sheet);
  var data = financeData[id];

  for (var i = 0; i < (data.length); i++) {
    if (i == 50) {
      break;
    }
    var sx = sheetWidth - (barWidth * (i + 1)) + Math.floor(barWidth / 2);
    var yy = getPositionVolume(data[i][5]);
    can.setColor("#0000ff");
    can.drawLine(sx, yy, sx, volumeSheetHeight - 1);

    if (((i + 1) % 10) == 0) {
      can.setColor("#000000");
      can.setFont("arial", "10px", Font.PLAIN);
      can.drawString(data[i][0], sx - 2, 1);
    }
  }

  can.paint();

//  Event.stopObserving(sheet, "mousemove", moveChart, true);
//  Event.stopObserving(sheet, "mouseup", upChart, true);
//  Event.observe(sheet, "mousemove", moveChart, true);
//  Event.observe(sheet, "mouseup", upChart, true);

}

function drawScaleSheetDefault(sheet) {
  var can = new jsGraphics(sheet);
  can.setColor("#ffffff");
  can.fillRect(0, 0, scaleSheetWidth, valueSheetHeight);

  can.setColor("#000000");
  can.drawLine(0, 0, scaleSheetWidth-1, 0);
  can.drawLine(0, valueSheetHeight-1, scaleSheetWidth-1, valueSheetHeight-1);
  can.drawLine(scaleSheetWidth-1, 0, scaleSheetWidth-1, valueSheetHeight-1);

  // horizonal line
  can.setColor("#c8c8c8");
  var iy = Math.floor(valueSheetHeight / 10);
  for (var i = 1; i < 10; i++) {
    var sy = valueSheetHeight - (iy * i);
    can.drawLine(0, sy, scaleSheetWidth-2, sy);
  }

  can.paint();
}

function drawScaleSheet(sheet) {
  var can = new jsGraphics(sheet);

  can.setColor("#000000");
  can.setFont("arial", "10px", Font.PLAIN);

  // horizonal line
  var iy = Math.floor(valueSheetHeight / 10);
  for (var i = 0; i < 10; i++) {
    var sy = valueSheetHeight - (iy * i) - 10;
    var str = smallValue + (intervalValue * i);
    can.drawStringRect(str, 0, sy, scaleSheetWidth-1, "right");
  }

  can.paint();

}

function drawScaleVolumeSheetDefault(sheet) {
  var can = new jsGraphics(sheet);
  can.setColor("#ffffff");
  can.fillRect(0, 0, scaleSheetWidth, volumeSheetHeight);

  // black line
  can.setColor("#000000");
  can.drawLine(0, 0, scaleSheetWidth-1, 0);
  can.drawLine(0, volumeSheetHeight-1, scaleSheetWidth-1, volumeSheetHeight-1);
  can.drawLine(0, volumeLabelHeight, scaleSheetWidth-1, volumeLabelHeight);
  can.drawLine(scaleSheetWidth-1, 0, scaleSheetWidth-1, volumeSheetHeight-1);

  // horizonal line
  can.setColor("#c8c8c8");
  var iy = Math.floor((volumeSheetHeight - volumeLabelHeight) / 5);
  for (var i = 1; i < 5; i++) {
    var sy = volumeSheetHeight - (iy * i);
    can.drawLine(0, sy, scaleSheetWidth-2, sy);
  }

  can.paint();
}

function drawScaleVolumeSheet(sheet) {
  var can = new jsGraphics(sheet);

  can.setColor("#000000");
  can.setFont("arial", "10px", Font.PLAIN);

  // horizonal line
  var iy = Math.floor((volumeSheetHeight - volumeLabelHeight) / 5);
  for (var i = 0; i < 5; i++) {
    var sy = volumeSheetHeight - (iy * i) - 10;
    var str = 0 + (intervalVolume * i);
    can.drawStringRect(str, 0, sy, scaleSheetWidth-1, "right");
  }

  can.paint();

}

function calcRange() {
  var maxValue = 0;
  var minValue = parseInt(financeData[0][0][2]);
  var maxVolume = 0;
  for (var i = 0; i < financeData.length; i++) {
    var data = financeData[i];
    for (var j = 0; j < data.length; j++) {
      if (maxValue < parseInt(data[j][2])) {
        maxValue = parseInt(data[j][2]);
      }
      if (minValue > parseInt(data[j][3])) {
        minValue = parseInt(data[j][3]);
      }
      if (maxVolume < parseInt(data[j][5])) {
        maxVolume = parseInt(data[j][5]);
      }
    }
  }
  var ran = range(minValue, 1, 100);
  var rem = Math.floor(minValue / ran / 5);
  smallValue = rem * ran * 5;
  var chk = Math.floor((maxValue - smallValue) / 4);
  var ran = range(chk, 1, 10);
  var rem = Math.floor(chk / ran);
  intervalValue = rem * ran;
  if (smallValue < intervalValue * 0.1) {
    smallValue = 0;
  }

  var chk = Math.floor(maxVolume / 4);
  var ran = range(chk, 1, 10);
  var rem = Math.floor(chk / ran);
  if (chk > (1.25 * ran)) {
    rem = rem + 1;
  }
  intervalVolume = rem * ran;
}

function range(val, n, boder) {
  var m = val / n;
  if (m > boder) {
    return(range(val, n * 10, boder));
  } else {
    return(n);
  }
}


