var SiteWidth = 760;
var Res = 10;

var HeatMapShown = false;
function toggleHeatMap() {
	if( HeatMapShown ) {
		$(".HeatClose").remove();
		$(".HeatDot").remove();
		$(".HeatOverlay").remove();
		
		HeatMapShown = false;
	} else {
		var PostData = "";
		PostData = appendFormData(PostData, "SourceURL", document.location.href);
		
		jQuery.post("/_common/LinkClicks/GetPageClicks.cfm", PostData, showHeatMap);
		
		HeatMapShown = true;
	}
}

function incArray( Arr, X, Y, Value ) {
	if( 0 <= X && X < Arr.length && 0 <= Y && Y < Arr[X].length )
		Arr[X][Y] += Value;
}

function showHeatMap( ResponseText, Status ) {
	var Doc = new DocInfo();
	var Clicks = ResponseText.split(";");

	// remove old visuals
	$(".HeatClose").remove();
	$(".HeatDot").remove();
	$(".HeatOverlay").remove();
	
	// init heat map
	var MHeight = Math.ceil(Doc.Height / Res);
	var MWidth = Math.ceil(SiteWidth / Res);
	var HeatMap = new Array(MWidth);
	for( var X = 0; X < MWidth; ++X ) {
		HeatMap[X] = new Array(MHeight);
		for( var Y = 0; Y < MHeight; ++Y )
			HeatMap[X][Y] = 0;
	}
	
	// populate heat map
	var X,Y;
	for( var Index = 0; Index < Clicks.length; ++Index ) {
		Coords = Clicks[Index].split(",");
		if( Coords.length == 2 ) {
			X = Math.floor(Coords[0] / Res);
			Y = Math.floor(Coords[1] / Res);
			
			incArray(HeatMap, X, Y, 7);
			
			incArray(HeatMap, X, Y-1, 3);
			incArray(HeatMap, X-1, Y, 3);
			incArray(HeatMap, X+1, Y, 3);
			incArray(HeatMap, X, Y+1, 3);
			
			incArray(HeatMap, X-1, Y-1, 1);
			incArray(HeatMap, X+1, Y-1, 1);
			incArray(HeatMap, X-1, Y+1, 1);
			incArray(HeatMap, X+1, Y+1, 1);
			
		}
	}
	
	var MaxVal = 1;
	for( X = 0; X < HeatMap.length; ++X )
		for( Y = 0; Y < HeatMap[X].length; ++Y )
			if( HeatMap[X][Y] > MaxVal ) MaxVal = HeatMap[X][Y];
	
	// add new visuals
	$("body").append('<div class="HeatOverlay" style="height: ' + Doc.Height + 'px; width: ' + Doc.Width + 'px; position: absolute; top: 0px; left: 0px; z-index: 10000; background-image: url(/_common/LinkClicks/Overlay.png);"></div>');
	$("body").append('<a href="javascript: toggleHeatMap();"><img src="/_common/LinkClicks/Close.png" class="HeatClose" style="position: absolute; top: 20px; right: 20px; z-index: 10002; border-width: 0;" /></a>');

	// heat dots
	var Step, Xe, Ye;
	for( X = 0; X < HeatMap.length; ++X ) {
		for( Y = 0; Y < HeatMap[X].length; ++Y ) {
			if( HeatMap[X][Y] > 0 ) {
				Step = Math.round(HeatMap[X][Y] / MaxVal * 10);
				Xe = X * Res + Math.floor((Doc.Width - SiteWidth)/2);
				Ye = Y * Res;
				$("body").append('<img class="HeatDot" src="/_common/LinkClicks/HeatDot' + Step + '.png" style="position: absolute; z-index: 10001; left: ' + Xe + 'px; top: ' + Ye + 'px; height: ' + Res + 'px; width: ' + Res + 'px;" />');
			}
		}
	}
	
	scrollHeatClose();
}

function getScrollXY() {
	  var scrOfX = 0, scrOfY = 0;
	  if( typeof( window.pageYOffset ) == 'number' ) {
	//Netscape compliant
	    scrOfY = window.pageYOffset;
	    scrOfX = window.pageXOffset;
	  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
	    //DOM compliant
	    scrOfY = document.body.scrollTop;
	    scrOfX = document.body.scrollLeft;
	  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
	    //IE6 standards compliant mode
	    scrOfY = document.documentElement.scrollTop;
	    scrOfX = document.documentElement.scrollLeft;
	  }
	  return [ scrOfX, scrOfY ];
}

function scrollHeatClose() {
	var Offset = getScrollXY()[1] + 20 ;
	
	if( $(".HeatClose") )
		$(".HeatClose").animate({top: Offset},{duration:500,queue:false});
}

$(window).resize(function() {
	if( HeatMapShown )
		toggleHeatMap();
});

$(document).ready(function() { 
	$(window).scroll(scrollHeatClose);
});