// JavaScript Document
var chart_draw_area = null;
var x = null;   //aktualni x pozice kurzoru 
var y = null;  //aktualni y pozice kurzoru
//var canvas_width = 477.0; //sirka obrazku, na ktery se bude kreslit
//var canvas_height = 300.0; //vyska            -||-
//var chart_x_margin = 56.0; //odsazeni obrazku na ktery se kresli od leveho okraje divu
//var chart_y_margin = 4.0;  // odsazeni od horniho okraje
var chart_mouse_down = false; //bylo stisknuto mysitko
var chart_first_x = -1;   //hodnota x-ove souradnice po stisknuti mysitka
var chart_actual_x = -1;    //aktualni hodnota x-ove souradnice pri drzeni mysitka a popojizdeni 
var chart_last_x = null;
var chart_global_x = null;
var chart_global_y = null;
var body_mouse_move_count = 0;
var submitted = false;

//inicializace, nastaveni hlavniho divu a fontu
function ChartInit() {
  chart_draw_area = new jsGraphics("mainCanvas");

  chart_draw_area.setFont("Arial", "10px",  Font.PLAIN);

}
function BodyMouseMove() {
  if (chart_draw_area == null) return;
  
  if (body_mouse_move_count++ > 3) {
     chart_draw_area.clear();
  }
}

//overeni, zda je kurzor nad grafem, pres ktery se ma kreslit
function CheckMouseInCanvas(mx, my) {
  return (
    !(mx > igraph.chart_x_margin+16 + igraph.canvas_width ||
    mx < igraph.chart_x_margin-20 ||
    my < igraph.chart_y_margin ||
    my > igraph.chart_y_margin + igraph.canvas_height)
  );
}

function CheckMouseInLoadingArea(lx){
  return(lx>igraph.chart_x_margin-21 && lx<igraph.chart_x_margin);
}
function CheckMouseInTerminatingArea(lx){
  return(lx<igraph.canvas_width+igraph.chart_x_margin+21 && lx>igraph.canvas_width+igraph.chart_x_margin);
}

//kresli ramecek po stisknuti mysitka - pouzito pri zvetsovani
function ChartDrawFrame(x, y, w, h) {
  chart_draw_area.setColor("blue");

  chart_draw_area.drawLine(x + w, y, x + w, y + h - 1); //svisla cara

  chart_draw_area.setColor("blue");
  chart_draw_area.setStroke(1);
  if ( w < 0 )
  {
    chart_draw_area.fillRect(x + w, y - 3, -w + 1, 3);  //vodorovna nahore
    chart_draw_area.fillRect(x + w, y + h - 3, -w + 1, 3);  //vodorovna dole
  }
  else
  {
    chart_draw_area.fillRect(x, y - 3, w + 1, 3);  //vodorovna nahore
    chart_draw_area.fillRect(x, y + h - 3, w + 1, 3);  //vodorovna dole
  }

  chart_draw_area.setColor("black");
}

function getGlobalPosition(object) {
 var posLeft = 0;
 var posTop  = 0;

 while (object)
 {
  posLeft += object.offsetLeft;
  posTop  += object.offsetTop;
  object = object.offsetParent;
 }

 return {x:posLeft, y:posTop};
}

function getMousePos( event ){
 if (chart_global_x == null || chart_global_y) {
  var pos = getGlobalPosition(document.getElementById('mainCanvas'));
  chart_global_x = pos.x;
  chart_global_y = pos.y;
 }

 if(event.pageX && event.pageY)
 {
  return {x:event.pageX - chart_global_x, y:event.pageY - chart_global_y };
 }
 else
 {
  return { x:(event.clientX + document.body.scrollLeft - chart_global_x),
           y:(event.clientY + document.body.scrollTop - chart_global_y) };
 }
}

function findValidPosition(date, currentPos) {
  var maxPos = igraph.canvas_width + igraph.chart_x_margin;
  var minPos = igraph.chart_x_margin;

  var rightDistance = null;
  var leftDistance = null;
  for (var pos = currentPos + 1; pos <= maxPos; pos++)
  {
    if ( date[pos-1] != date[pos] )
    {
      rightDistance = pos - currentPos;
      break;
    }
  }

  for (var pos = currentPos - 1; minPos <= pos; pos--)
  {
    if ( date[pos] != date[pos+1] )
    {
      leftDistance = currentPos - pos - 1;
      break;
    }
  }

  if ( leftDistance == null )
  {
    leftDistance = currentPos - minPos;
  }

  if ( leftDistance == null )
  {
    return (currentPos + rightDistance);
  }
  else if ( rightDistance == null )
  {
    return (currentPos - leftDistance);
  }
  else
  {
    if ( leftDistance < rightDistance )
    {
      return (currentPos - leftDistance);
    }
    else
    {
      return (currentPos + rightDistance);
    }
  }
}

//kresleni cary a hodnot grafu 
function ChartDraw(event, values,date,was_submitted){
if (chart_draw_area == null) return;
if (submitted || was_submitted) return;
  chart_draw_area.setFont("Arial", "10px",  Font.PLAIN);

var mousePos = getMousePos(event);
x = mousePos.x;
y = mousePos.y;

if (x == 0 || y == 0) return;
chart_draw_area.clear();

chart_draw_area.setColor("black");
chart_draw_area.setStroke(1);


if (!(CheckMouseInCanvas(x,y))) {
chart_mouse_down=false;
return;
}

if(CheckMouseInLoadingArea(x)) {
x_axis= igraph.chart_x_margin;
} 
else if(CheckMouseInTerminatingArea(x)){
x_axis = igraph.canvas_width+igraph.chart_x_margin;
}
else {

x_axis = x;

}

x_axis = findValidPosition(date, x_axis);
if(date[x_axis]!='' && values[x_axis]!=''){
chart_draw_area.drawLine(x_axis,5,x_axis,igraph.canvas_height);    //samotna cara zobrazujici pozici v grafu
re = /[\u00a0\s]/;
first_value=values[igraph.chart_x_margin].replace(re ,'').replace(re ,'').replace(re ,'').replace(re ,'').replace(',','.');
actual_value=values[x_axis].replace(re ,'').replace(re ,'').replace(re ,'').replace(re ,'').replace(',','.');
first_num=new Number(first_value);
actual_num=new Number(actual_value);
eval=Math.round(10000*(actual_num/first_num-1))/100;


if (!(x_axis+25>igraph.canvas_width)){
chart_draw_area.setColor("white");
chart_draw_area.fillRect(x_axis+5,igraph.canvas_height-15,58,13);  // bily obdelnicek pod datumy 
chart_draw_area.fillRect(x_axis+5,7,95	,12);    //bile obdelnicky pod hodnotama, aby byly hodn. citelne
chart_draw_area.setColor("black");
chart_draw_area.drawString(date[x_axis], x_axis+10, igraph.canvas_height-15); // datumy
chart_draw_area.drawString(values[x_axis],x_axis+10,7); 		           // hodnoty grafu1
if(eval>=0) {chart_draw_area.setColor("green")} else {chart_draw_area.setColor("red");}
chart_draw_area.drawString("("+eval+"%)", x_axis+60,7);

if(chart_mouse_down && chart_actual_x>0){      ///kdyz bylo stisknute a uvolnene mysitko, vykresli ramecek podle kteryho se bude zvetsovat
first_x = x_axis;
ChartDrawFrame(first_x,igraph.chart_y_margin,chart_first_x-first_x,igraph.canvas_height);
chart_draw_area.setColor("white");
chart_draw_area.fillRect(x_axis+5,20,43,15);


if(x_axis>chart_first_x){
value1=values[x_axis].replace(re ,'').replace(re ,'').replace(re ,'').replace(re ,'').replace(',','.');
value2=values[chart_first_x].replace(re ,'').replace(re ,'').replace(re ,'').replace(re ,'').replace(',','.');
} else {
value1=values[chart_first_x].replace(re ,'').replace(re ,'').replace(re ,'').replace(re ,'').replace(',','.');
value2=values[x_axis].replace(re ,'').replace(re ,'').replace(re ,'').replace(re ,'').replace(',','.');
}
num1=new Number(value1);
num2=new Number(value2);
perform=Math.round(10000*(num1/num2-1))/100;
if(perform>=0) {chart_draw_area.setColor("green")} else {chart_draw_area.setColor("red");}
chart_draw_area.drawString(perform+"%",x_axis+10,20);                                               //vykonnost pri zoomovani
}



}
else {
chart_draw_area.setColor("white");
chart_draw_area.fillRect(x_axis-62,igraph.canvas_height-15,58,12); // bily obdelnicek pod datumy 
chart_draw_area.fillRect(x_axis-105,7,88,12);    //bile obdelnicky pod hodnotama, aby byly hodn. citelne
chart_draw_area.setColor("black");
chart_draw_area.drawString(date[x_axis], x_axis-60, igraph.canvas_height-15); // datumy
chart_draw_area.drawString(values[x_axis],x_axis-98,7); // hodnoty grafu1
if(eval>=0) {chart_draw_area.setColor("green")} else {chart_draw_area.setColor("red");}
chart_draw_area.drawString("("+eval+"%)", x_axis-47,7);

if(chart_mouse_down && chart_actual_x>0){      ///kdyz bylo stisknute a uvolnene mysitko, vykresli ramecek podle kteryho se bude zvetsovat
first_x = x_axis;
ChartDrawFrame(first_x,igraph.chart_y_margin,chart_first_x-first_x,igraph.canvas_height);
chart_draw_area.setColor("white");
chart_draw_area.fillRect(x_axis-45,20,41,15);


if(x_axis>chart_first_x){
value1=values[x_axis].replace(re ,'').replace(re ,'').replace(re ,'').replace(re ,'').replace(',','.');
value2=values[chart_first_x].replace(re ,'').replace(re ,'').replace(re ,'').replace(re ,'').replace(',','.');
} else {
value1=values[chart_first_x].replace(re ,'').replace(re ,'').replace(re ,'').replace(re ,'').replace(',','.');
value2=values[x_axis].replace(re ,'').replace(re ,'').replace(re ,'').replace(re ,'').replace(',','.');
}
num1=new Number(value1);
num2=new Number(value2);
perform=Math.round(10000*(num1/num2-1))/100;
if(perform>=0) {chart_draw_area.setColor("green")} else {chart_draw_area.setColor("red");}
chart_draw_area.drawString(perform+"%",x_axis-43,20);
}

}
}


chart_draw_area.paint();
chart_actual_x = x_axis;
  if (!chart_mouse_down) {   //nastaveni x pozice kurzoru pri uvolneni mysitka
    
    chart_first_x = x_axis;
  }


}

//obsluha stisknuti mysitka
function ChartMouseDown(event) {
 chart_mouse_down = true;
 ex = getMousePos(event).x;
}

//obsluha uvolneni mysitka
function ChartMouseUp(event,date) {
    if (!chart_mouse_down) return;
	chart_mouse_down = false;



//odeslani formulare po zoomu  - zprovoznit po integraci do stranek
var mousePos = getMousePos(event);
x = mousePos.x;
y = mousePos.y;

chart_last_x = chart_actual_x;


   if ((chart_last_x >= 0) && CheckMouseInCanvas(chart_last_x, y)) {
      if (chart_last_x == chart_first_x) return; 
     document.FundForm.Period.value = "CUSTOM";
     if(chart_first_x<chart_last_x){
     document.FundForm.PeriodFrom.value = date[chart_first_x];
     document.FundForm.PeriodTo.value = date[chart_last_x];
     } else {
		document.FundForm.PeriodFrom.value=date[chart_last_x];
		document.FundForm.PeriodTo.value=date[chart_first_x];
       }
     if(checkPeriodDate()){
        document.FundForm.submit();
	chart_draw_area.drawImage("images/wait.gif", 250,100,32,32);
	chart_draw_area.setFont("arial","18px",Font.BOLD);
	chart_draw_area.setColor("white");
	chart_draw_area.fillRect(205,140,145,21);
	chart_draw_area.setColor("black");
	chart_draw_area.drawString("Zpracovávám...", 210,140);
	chart_draw_area.paint();
	submitted = true;
     }
   }
}
function ChartClear(){
	chart_draw_area.clear();
}
