/** Code by www.labsmedia.com */
  var clickHeatGroup="";
  var clickHeatSite="";
  var clickHeatServer="";
  var clickHeatLastIframe=-1;
  var clickHeatTime=0;
  var clickHeatQuota=-1;
  var clickHeatBrowser="";
  var clickHeatDocument="";
  var clickHeatWait=500;
  var clickHeatLocalWait=0;
  var clickHeatDebug=(window.location.href.search(/debugclickheat/)!==-1);
  function showClickHeatDebug(a) {
    if (clickHeatDebug===true) {
      document.getElementById("clickHeatDebuggerSpan").innerHTML=a;
      document.getElementById("clickHeatDebuggerDiv").style.display="block"
    }
  }
  function catchClickHeat(l) {
    try {
      showClickHeatDebug("Gathering click data...");
      if (clickHeatQuota===0) {
        showClickHeatDebug("Click not logged: quota reached");
        return true
      }
      if (clickHeatGroup==="") {
        showClickHeatDebug("Click not logged: group name empty (clickHeatGroup)");
        return true
      }
      if (l===undefined) {
        l=window.event;
        c=l.button;
        element=l.srcElement
      } else {
        c=l.which;element=null
      }
      if (c===0) {
        showClickHeatDebug("Click not logged: no button pressed");
        return true
      }
      if (element!==null && element.tagName.toLowerCase()==="iframe") {
        if (element.sourceIndex===clickHeatLastIframe) {
          showClickHeatDebug("Click not logged: same iframe (a click on iframe opens a popup and popup is closed => iframe gets the focus again)");
          return true
        }
        clickHeatLastIframe = element.sourceIndex
      } else {
        clickHeatLastIframe=-1
      }
      var o=l.clientX;
      var n=l.clientY;
      var p=clickHeatDocument.clientWidth!==undefined ? clickHeatDocument.clientWidth : window.innerWidth;
      var k=clickHeatDocument.clientHeight!==undefined ? clickHeatDocument.clientHeight : window.innerHeight;
      var j=window.pageXOffset===undefined ? clickHeatDocument.scrollLeft:window.pageXOffset;
      var g=window.pageYOffset===undefined ? clickHeatDocument.scrollTop:window.pageYOffset;
      if (o>p || n>k) {
        showClickHeatDebug("Click not logged: out of document (should be a click on scrollbars)");
        return true
      }
      clickTime = new Date();
      if (clickTime.getTime()-clickHeatTime<1000) {
        showClickHeatDebug("Click not logged: at least 1 second between clicks");
        return true
      }
      clickHeatTime = clickTime.getTime();
      if (clickHeatQuota>0) {
        clickHeatQuota = clickHeatQuota-1
      }
      params = "s="+clickHeatSite+"&g="+clickHeatGroup+"&x="+(o+j)+"&y="+(n+g)+"&w="+p+"&b="+clickHeatBrowser+"&c="+c+"&random="+Date();
      showClickHeatDebug("Ready to send click data...");
      var m=false;
      if (clickHeatServer.substring(0,4)!=="http") {
        var d=false;
        try {
          d = new ActiveXObject("Msxml2.XMLHTTP")
        } catch (r) {
          try {
            d = new ActiveXObject("Microsoft.XMLHTTP")
          }
          catch (a) {
            d = null
          }
        }
        if (!d && typeof XMLHttpRequest!==undefined) {
          d = new XMLHttpRequest()
        }
        if (d) {
          if (clickHeatDebug===true) {
            d.onreadystatechange = function() {
              if (d.readyState===4) {
                if (d.status===200) {
                  showClickHeatDebug("Click recorded at "+clickHeatServer+" with the following parameters:<br />x = "+(o+j)+" ("+o+"px from left + "+j+"px of horizontal scrolling)<br />y = "+(n+g)+" ("+n+"px from top + "+g+"px of vertical scrolling)<br />width = "+p+"<br />browser = "+clickHeatBrowser+"<br />click = "+c+"<br />site = "+clickHeatSite+"<br />group = "+clickHeatGroup+"<br /><br />Server answer: "+d.responseText)
                } else {
                  if (d.status===404) {
                    showClickHeatDebug("click.php was not found at: "+(clickHeatServer!==""?clickHeatServer:"/clickheat/click.php")+" please set clickHeatServer value")
                  } else {
                    showClickHeatDebug("click.php returned a status code "+d.status+" with the following error: "+d.responseText)
                  }
                }
                clickHeatLocalWait=0
              }
            }
          }//alert(clickHeatServer+"?"+params);
          d.open("GET", clickHeatServer+"?"+params,true);
          d.setRequestHeader("Connection", "close");
          d.send(null);
          m=true
        }
      }
      if (m===false) {
        if (clickHeatDebug===true) {
          showClickHeatDebug("Click recorded at "+clickHeatServer+" with the following parameters:<br />x = "+(o+j)+" ("+o+"px from left + "+j+"px of horizontal scrolling)<br />y = "+(n+g)+" ("+n+"px from top + "+g+"px of vertical scrolling)<br />width = "+p+"<br />browser = "+clickHeatBrowser+"<br />click = "+c+"<br />site = "+clickHeatSite+"<br />group = "+clickHeatGroup+'<br /><br />Server answer:<br /><iframe src="'+clickHeatServer+"?"+params+'" width="700" height="60"></iframe>')
        } else {
          var q = new Image();
          q.src = clickHeatServer+"?"+params
        }
      }
      var b = new Date();
      clickHeatLocalWait = b.getTime()+clickHeatWait;
      while (clickHeatLocalWait>b.getTime()) {
        b = new Date()
      }
    }

    catch (f) {
      showClickHeatDebug("An error occurred while processing click (Javascript error): "+l.message)
    }
    return true
  }

  function initClickHeat() {
    if (clickHeatDebug===true) {
      document.write('<div id="clickHeatDebuggerDiv" style="padding:5px; display:none; position:absolute; top:10px; left:10px; border:1px solid #888; background-color:#eee; z-index:99;"><strong>ClickHeat debug: <a href="#" onmouseover="document.getElementById(\'clickHeatDebuggerDiv\').style.display = \'none\'; return false">Rollover to close</a></strong><br /><br /><span id="clickHeatDebuggerSpan"></span></div>')
    }
    if (clickHeatGroup==="" || clickHeatServer==="") {
      showClickHeatDebug("ClickHeat NOT initialised: either clickHeatGroup or clickHeatServer is empty");
      return false
    }
    domain = window.location.href.match(/http:\/\/[^/]+\//);
    if (domain!==null && clickHeatServer.substring(0,domain[0].length)===domain[0]) {
      clickHeatServer = clickHeatServer.substring(domain[0].length-1, clickHeatServer.length)
    }
    if (document.addEventListener) {
      document.addEventListener("mousedown", catchClickHeat, false)
    } else {
      if (document.attachEvent) {
        document.attachEvent("onmousedown", catchClickHeat)
      }
    }
    iFrames = document.getElementsByTagName("iframe");
    for (i=0; i<iFrames.length; i++) {
      if (document.addEventListener) {
        iFrames[i].addEventListener("focus", catchClickHeat, false)
      } else {
        if (document.attachEvent) {
          iFrames[i].attachEvent("onfocus", catchClickHeat)
        }
      }
    }
    clickHeatDocument = (document.documentElement!==undefined && document.documentElement.clientHeight!==0) ? document.documentElement : document.body;
    var a = navigator.userAgent!==undefined ? navigator.userAgent.toLowerCase().replace(/-/g,""):"";
    clickHeatBrowser = a.replace(/iceweasel/, "firefox").replace(/^.*(firefox|kmeleon|safari|msie|opera).*$/,"$1");
    if (a===clickHeatBrowser || clickHeatBrowser==="") {
      clickHeatBrowser="unknown"
    }
    showClickHeatDebug("ClickHeat initialised with:<br />site = "+clickHeatSite+"<br />group = "+clickHeatGroup+"<br />server = "+clickHeatServer+"<br />quota = "+(clickHeatQuota===-1?"unlimited":clickHeatQuota)+"<br /><br />browser = "+clickHeatBrowser)
  };
