gl_heatmap_buffer = [];
gl_heatmap_img = null;
gl_heatmap_timer = null;
gl_heatmap_counter = 0;
gl_heatmap_buttons = [
    ["images/g_icon_p5.png", "#00CF95", "images/g_icon_m5.png", 0],
    ["images/g_icon_p1.png", "#1582D8", "images/g_icon_m1.png", 1],
    ["images/g_icon_p4.png", "#28D600", "images/g_icon_m4.png", 3],
    ["images/g_icon_p3.png", "#DABF00", "images/g_icon_m3.png", 5],
    ["images/g_icon_p2.png", "#E12200", "images/g_icon_m2.png", 7]
];
gl_heatmap_date = {};
gl_heatmap_date.from = null;
gl_heatmap_date.to = null;

function altKeyCheck(e)
{
  var keyID = (window.event) ? event.keyCode : e.keyCode;
  var altKey = (window.event) ? event.altKey : e.altKey;
  var ctrlKey = (window.event) ? event.ctrlKey : e.ctrlKey;
  var shiftKey = (window.event) ? event.shiftKey : e.shiftKey;
  
  // keyID == 0 for Mac Firefox
  if (  (((keyID == 88) || (keyID == 900)) && (altKey == true)) ||
        ctrlKey && shiftKey && ((keyID == 88) || (keyID == 900)) )
  {
    if ($('window_heatmap').style.display == "block")
      $('window_heatmap').style.display = "none";
    else
    {
      $('window_heatmap').style.display = "block";
      $('window_heatmap').innerHTML = '';
      xajax_heatmap_stats_clicks($('page').innerHTML, gl_heatmap_date.from, gl_heatmap_date.to);
    }
  }
}

function change_date_heatmap(from, to)
{
  gl_heatmap_date.from = from;
  gl_heatmap_date.to = to;
  xajax_heatmap_stats_clicks($('page').innerHTML, gl_heatmap_date.from, gl_heatmap_date.to);
}

/*
addLinkTracking = function(){
  if (!document.getElementsByTagName) return false;
  
  links = document.getElementsByTagName('a');
  for (var i = 0; i < links.length; i++) {
    me.addEvent( links[i], 'mousedown', me.recordClick, false );
    if (! links[i].getAttribute('id') ) {
      links[i].setAttribute('id','link_' + i);
    }
  }

  inputs = document.getElementsByTagName('input');
  for (var i = 0; i < inputs.length; i++) {
    type = inputs[i].getAttribute('type');
    if ( type == 'submit' || type == 'button' ){
    me.addEvent( inputs[i], 'mousedown', me.recordClick, false );
    if (! inputs[i].getAttribute('id') ){
      inputs[i].setAttribute('id','button_' + i);
    }
  }
}
*/
function boutonEnfonce(e)
{
  if (gl_heatmap_timer == null)
    gl_heatmap_timer = setTimeout("heatmap_sendBuffer()", 6000);
  if (gl_heatmap_buffer.length < 8)
  {
    var tmp = pointeurXY(e);

    if ($(tmp.id) && $(tmp.id).onclick)
    {
      tmp.entity = encodeURIComponent(document.location.href);
      tmp.referrer = encodeURIComponent(document.referrer);
      tmp.href = encodeURIComponent($(tmp.id).getAttribute('href'));
      tmp.onclick = encodeURIComponent($(tmp.id).getAttribute('onclick'));
    }
    else
      tmp.id = '';

    tmp.x = tmp.x - $('wrapper').offsetLeft;
    tmp.y = tmp.y - $('wrapper').offsetTop;
    var str = '';
    for (var o in tmp)
      str += o + ':' + tmp[o] + ' ';
    gl_heatmap_buffer.push(str);
  }
  else
  {
    // He is spamming my heatmap :(
  }
  return (true);
}

function pointeurXY(e) {
  var gk = (window.Event) ? 1 : 0; // navigateurs Gecko ou IE
  var de = (!document.documentElement.clientWidth) ? document.body : document.documentElement // IE6
  sx = (gk) ? pageXOffset : de.scrollLeft //scroll h
  sy = (gk) ? pageYOffset : de.scrollTop //scroll v
  x = (gk) ? e.pageX : event.clientX + sx; //curseur x
  y = (gk) ? e.pageY : event.clientY + sy; //curseur y
  try {
    var id = (gk && e.originalTarget) ? e.originalTarget.id : event.srcElement.id;
  }
  catch (e)
  {
    var id = '';// Bug with FF in the DOM event while someone click in an input
  }

  return {'x' : x, 'y' : y, 'page' : $('page').innerHTML, 'id' : id};
}

function heatmap_sendBuffer()
{
  if (gl_heatmap_buffer.length)
  {
    xajax_heatmap(gl_heatmap_buffer);
    gl_heatmap_buffer = [];
  }
  gl_heatmap_timer = setTimeout("heatmap_sendBuffer()", 6000);
}

function show_heatmap()
{
  if ( ($('overlay').style.display == "block") || gl_heatmap_date.from == null || gl_heatmap_date.to == null)
    return ;

	var tmp = screen_size();
	var windowWidth = tmp[0];
  var windowHeight = tmp[1];
	var pageWidth = tmp[2];
  var pageHeight = tmp[3];

  var load = document.createElement('div');
  load.className = "loading";
  load.innerHTML = "Loading ....";
  $('overlay').innerHTML = '';
  $('overlay').appendChild(load);

  show_overlay(pageHeight, pageWidth, "hide_overlay");
	xajax_heatmap_dump(pageWidth, pageHeight, $('page').innerHTML, gl_heatmap_date.from, gl_heatmap_date.to);
}

/* Called by xajax_heatmap_dump */
function heatmap_image(path, rx, ry)
{
  photo = new Image();
  photo.src = path;

  if (gl_heatmap_img == path)
  {
    photo.width = rx;
    photo.height = ry;
    $('overlay').innerHTML = '';
    $('overlay').appendChild(photo);
  }
  else
  {
    photo.onload = function()
    {
      if ($('overlay').style.display != "block")
        return ;
      gl_heatmap_img = path;
      photo.width = rx;
      photo.height = ry;
      $('overlay').innerHTML = '';
      $('overlay').appendChild(photo);
    }
  }
}



function show_heatmap_stats()
{
  if ($('overlay').style.display == "block")
    return ;

  var tmp = screen_size();
  var load = document.createElement('div');
  load.className = "loading";
  load.innerHTML = "Loading ....";
  $('overlay').innerHTML = '';
  $('overlay').appendChild(load);
  show_overlay(tmp[3], tmp[2], "heatmap_hide_stats");

  xajax_heatmap_stats(gl_heatmap_date.from, gl_heatmap_date.to);
}

/* Called by heatmap_stats */
function heatmap_stats(str)
{
  if ($('overlay').style.display != "block")
    return ;

  $('overlay').innerHTML = '';
  var str = str.toString();
  var tab = str.split(',');
  for (var i = 0; i < tab.length; i++)
  {
    var val = tab[i].split(':');
    if ($(val[0]))
      heatmap_trace_stats(val[0], val[1], val[2]);
  }
}

function heatmap_hide_stats()
{
  var tab = getElementsByClassName('heatmap_img');
  for (var i in tab)
    if (typeof(tab[i]) == "object")
      document.body.removeChild(tab[i]);

  var tab = getElementsByClassName('heatmap_trace');
  for (var i in tab)
    if (typeof(tab[i]) == "object")
      document.body.removeChild(tab[i]);

  var tab = getElementsByClassName('heatmap_stats');
  for (var i in tab)
    if (typeof(tab[i]) == "object")
      document.body.removeChild(tab[i]);

  hide_overlay();
}

function getAbsolutePos(obj, container)
{
  var rec = 0;
  var decX = 0;
  var decY = 0;

  while (rec < 15 && obj && obj.id != container)
  {
    //alert(obj.id);
    rec++;
    decX += obj.offsetLeft;
    decY += obj.offsetTop;
    obj = obj.offsetParent;
  }
  return ([decX, decY]);
}

function heatmap_trace_stats(id, percent, clicks)
{
  if (!$(id))
    return ;
  gl_heatmap_counter++;

  tmp = getAbsolutePos($(id), "body");
  var decX = tmp[0];
  var decY = tmp[1];
  var id_color = 0;

  for (var j = 0; j < gl_heatmap_buttons.length; j++)
    if (percent > gl_heatmap_buttons[j][3])
      id_color = j;

  var img = document.createElement('img');
  img.className = "heatmap_img";
  img.id_color = id_color;

  img.id = "heatmap_img_" + gl_heatmap_counter;
  img.src = gl_heatmap_buttons[id_color][0];
  img.style.top = (decY + ($(id).offsetHeight / 2) - 12) + "px";
  img.style.left = (decX - 30) + "px";
  img.onclick = function() { trace_stats_progress(img.id); }
  img.onmouseover = function() { trace_stats_hover(img.id); }
  img.onmouseout = function() { trace_stats_hover(img.id); }
  document.body.appendChild(img);

  var trace = document.createElement('div');
  trace.className = "heatmap_trace";
  trace.id = "heatmap_trace_" + gl_heatmap_counter;
  trace.style.top = (decY - 3) + "px";
  trace.style.left = (decX - 3) + "px";
  trace.style.height = $(id).offsetHeight + "px";
  trace.style.width = $(id).offsetWidth + "px";
  trace.style.borderColor = gl_heatmap_buttons[id_color][1];
  trace.style.borderStyle = "solid";
  trace.style.borderWidth = "0px";
  trace.onmouseover = function() { trace_stats_hover(img.id); }
  trace.onmouseout = function() { trace_stats_hover(img.id); }
  document.body.appendChild(trace);

  var stats = document.createElement('div');
  stats.className = "heatmap_stats";
  stats.id = "heatmap_stats_" + gl_heatmap_counter;
  stats.style.top = (decY + $(id).offsetHeight + 3) + "px";
  stats.style.left = (decX - 3) + "px";
  stats.style.display = "none";
  stats.style.borderColor = gl_heatmap_buttons[id_color][1];
  stats.style.borderStyle = "solid";
  stats.style.borderWidth = "3px";
  stats.style.background = "#ffffff";
  stats.onclick = function() { trace_stats_progress(img.id); }
  stats.innerHTML = percent + "% (" + clicks + " hits)<br />";

  var progress = document.createElement('img');
  progress.className = "percentImage";
  progress.src = "images/percentImage.png";
  progress.style.backgroundPosition = "-" + (123 - (percent * 123 / 100)) + "px 0px";
  stats.appendChild(progress);
  document.body.appendChild(stats);

  return (gl_heatmap_counter)
}

function trace_stats_hover(id)
{
  Expression = /heatmap_img_(.*)/;
  matches = id.match(Expression);
  if ($("heatmap_trace_" + matches[1]))
  {
    var bord = $("heatmap_trace_" + matches[1]).style.borderWidth;
    if (bord == "3px" || bord[0] == '3') // Bug IE and FF :(
      $("heatmap_trace_" + matches[1]).style.borderWidth = "0px";
    else
      $("heatmap_trace_" + matches[1]).style.borderWidth = "3px"; 
  }
}

function trace_stats_progress(id)
{
  Expression = /heatmap_img_(.*)/;
  matches = id.match(Expression);
  if ($("heatmap_stats_" + matches[1]))
  {
    if ($("heatmap_stats_" + matches[1]).style.display == "none")
    {
      $(id).src = gl_heatmap_buttons[$(id).id_color][2];
      $("heatmap_stats_" + matches[1]).style.display = "block";
    }
    else
    {
      $(id).src = gl_heatmap_buttons[$(id).id_color][0];
      $("heatmap_stats_" + matches[1]).style.display = "none";
    } 
  }
}



/* Statistiques Heatmap Clicks dans la wiindow */
function can_show_stats()
{
  var links = $('windows_heatmap_stats').getElementsByTagName('a');
  for (var i in links)
    if ($(links[i].innerHTML))
       links[i].style.display = 'block';
}

function show_stats(id, total, clicks)
{
  var num = heatmap_trace_stats(id, parseInt(clicks * 100 / total), clicks);
  trace_stats_hover('heatmap_img_' + num);
}


   function moveHandler(e){
      if (e == null) { e = window.event } 
      if (e.button<=1&&dragOK){
         $('window_heatmap').style.left = e.clientX - dragXoffset+'px';
         $('window_heatmap').style.top = e.clientY - dragYoffset+'px';
         return false;
      }
   }

   function cleanup(e) {
      document.onmousemove=null;
      document.onmouseup=null;
      dragOK = false;
   }

   function dragHandler(e){
      if (e == null) { e = window.event;}
      var target = e.target != null ? e.target : e.srcElement;
      dragOK=true;
      dragXoffset = e.clientX - parseInt($('window_heatmap').style.left);
      dragYoffset = e.clientY - parseInt($('window_heatmap').style.top);
      document.onmousemove = moveHandler;
      document.onmouseup = cleanup;
      return false;
   }
   
var dragOK = false;
var dragXoffset = 0;
var dragYoffset = 0;
