/**
** Main functions for administration of ClickHeat
**
** @author Yvan Taviaud - Labsmedia.com
** @since 01/04/2007
** @modified for ColdFusion by Tom Mollerus (tom@mollerus.net)
**/

var currentAlpha = 80;
var lastDayOfMonth = 0;
var currentDate = [0, 0, 0, 0, 0];
var currentRange = 'd';
var currentWidth = 0;
var pleaseWait = '';
var cleanerRunning = '';
var isJsOkay = '';
var hideIframes = true;
var hideFlashes = true;
var isPmvModule = false;
var scriptPath = '';
var scriptIndexPath = '';

/** Returns the "top" value of an element */
function getTop(obj)
{
	if (obj.offsetParent != undefined)
	{
		return (obj.offsetTop + getTop(obj.offsetParent));
	}
	else
	{
		return obj.offsetTop;
	}
}

/** Resize the div relative to window height and selected screen size */
function resizeDiv()
{
	oD = document.documentElement != undefined && document.documentElement.clientHeight != 0 ? document.documentElement : document.body;
	iH = oD.innerHeight != undefined ? oD.innerHeight : oD.clientHeight;
	document.getElementById('overflowDiv').style.height = (iH < 300 ? 400 : iH) - getTop(document.getElementById('overflowDiv')) + 'px';
	/** Width of main display */
	iW = oD.innerWidth != undefined ? oD.innerWidth : oD.clientWidth;
	iW = iW < 300 ? 400 : iW;
	if (document.getElementById('formScreen').value == 0)
	{
		currentWidth = iW;
	}
	else
	{
		currentWidth = document.getElementById('formScreen').value - 5;
	}
	document.getElementById('overflowDiv').style.width = currentWidth + 'px';
	document.getElementById('webPageFrame').style.width = currentWidth - 25 + 'px';
}

/** Ajax object */
function getXmlHttp()
{
	var xmlhttp = false;
	try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
	catch (e)
	{
		try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");	}
		catch (oc) { xmlhttp = null; }
	}
	if (!xmlhttp && typeof XMLHttpRequest != undefined) xmlhttp = new XMLHttpRequest();
	return xmlhttp;
}

/** Ajax request to show group layout */
function showGroupLayout()
{
	var xmlhttp;
	xmlhttp = getXmlHttp();
	xmlhttp.open('GET', 'getpage.cfm?group=' + document.getElementById('formGroup').value + '&rand=' + Math.round(100*Math.random()), true);
	xmlhttp.onreadystatechange = function()
	{
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
		{
			document.getElementById('layoutDiv').innerHTML = xmlhttp.responseText;
			document.getElementById('layoutDiv').style.display = 'block';
			showRadioLayout();
		}
	}
	xmlhttp.send(null);
}

/** Ajax request to show javascript code */
function showJsCode()
{
	var xmlhttp;
	xmlhttp = getXmlHttp();
	xmlhttp.open('GET', scriptIndexPath + 'action=javascript&rand=' + Date(), true);
	xmlhttp.onreadystatechange = function()
	{
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
		{
			document.getElementById('layoutDiv').innerHTML = xmlhttp.responseText;
			document.getElementById('layoutDiv').style.display = 'block';
			updateJs();
		}
	}
	xmlhttp.send(null);
}

/** Hide group layout */
function hideGroupLayout()
{
	document.getElementById('layoutDiv').style.display = 'none';
	document.getElementById('layoutDiv').innerHTML = '';
}

/** Update JS code in display */
function updateJs()
{
	var str = '';
	var language = (navigator.language !== undefined && navigator.language == 'fr' ? 'fr' : 'com');
	str += '&lt;script type="text/javascript" src="' + scriptPath + 'js/clickheat.js"&gt;&lt;/script&gt;\n';
	str += '&lt;script type="text/javascript"&gt;&lt;!--\n';
	str += 'clickHeatSite = ';
	/** PMV form */
	if (document.getElementById('form_site') != undefined)
	{
		str += document.getElementById('form_site').site.value.replace(/[^a-z0-9\-_\.]+/gi, '.');
	}
	else
	{
		str += '\'<span class="error">' + document.getElementById('jsSite').value.replace(/[^a-z0-9\-_\.]+/gi, '.') + '</span>\'';
	}
	str += ';\nclickHeatGroup = ';
	if (document.getElementById('jsGroup1').checked)
	{
		str += '\'<span class="error">' + document.getElementById('jsGroup').value.replace(/[^a-z0-9\-_\.]+/gi, '.') + '</span>\'';
	}
	if (document.getElementById('jsGroup2').checked)
	{
		str += 'document.title';
	}
	if (document.getElementById('jsGroup3').checked)
	{
		str += 'window.location.pathname';
	}
	str += ';\n';
	if (document.getElementById('jsQuota').value != 0)
	{
		str += 'clickHeatQuota = <span class="error">' + document.getElementById('jsQuota').value.replace(/[^0-9]*/g, '') + '</span>;\n';
	}
	if (scriptPath != '/clickheat/')
	{
		str += 'clickHeatServer = \'' + scriptPath + 'click' + (isPmvModule == true ? 'pmv' : '') + '.php\';\n';
	}
	str += 'initClickHeat();\n//--&gt;\n';
	str += '&lt;/script&gt;\n';
	if (document.getElementById('jsShowImage').checked)
	{
		str += '&lt;a href="http://www.labsmedia.' + language + '/clickheat/index.html" title="ClickHeat: clicks heatmap"&gt;&lt;img src="' + scriptPath + 'images/logo.png" width="80" height="15" border="0" alt="ClickHeat : track clicks" /&gt;&lt;/a&gt;';
	}
	else
	{
		str += '&lt;noscript&gt;&lt;a href="http://www.labsmedia.' + language + '/clickheat/index.html" title="ClickHeat: clicks heatmap"&gt;clickheat&lt;/a&gt;&lt;/noscript&gt;'
	}
	document.getElementById('clickheat-js').innerHTML = str;
}

/** Show layout's parameters */
function showRadioLayout()
{
	for (i = 0; i < 7; i++)
	{
		document.getElementById('layout-span-' + i).style.display = (document.getElementById('layout-radio-' + i).checked ? 'block' : 'none');
	}
}

/** Show layout's parameters */
function saveGroupLayout()
{
	for (i = 0; i < 7; i++)
	{
		if (document.getElementById('layout-radio-' + i).checked)
		{
			break;
		}
	}
	if (i == 7)
	{
		alert('Error');
		return false;
	}
	var xmlhttp;
	xmlhttp = getXmlHttp();
	xmlhttp.open('GET', scriptIndexPath + 'action=layoutupdate&group=' + document.getElementById('formGroup').value + '&url=' + document.getElementById('formUrl').value + '&left=' + document.getElementById('layout-left-' + i).value + '&right=' + document.getElementById('layout-right-' + i).value + '&center=' + document.getElementById('layout-center-' + i).value + '&rand=' + Date(), true);
	xmlhttp.onreadystatechange = function()
	{
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
		{
			if (xmlhttp.responseText != 'OK')
			{
				alert(xmlhttp.responseText);
			}
			hideGroupLayout();
			loadIframe();
		}
	}
	xmlhttp.send(null);
}

/** Ajax request to get associated group in iframe */
function loadIframe()
{
	var xmlhttp;
	xmlhttp = getXmlHttp();
	xmlhttp.open('GET', 'getpage.cfm?group=' + document.getElementById('formGroup').value + '&rand=' + Math.round(100*Math.random()), true);
	xmlhttp.onreadystatechange = function()
	{
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
		{
			if (document.getElementById('webPageFrame').src.search(/clickempty\.html$/) != -1)
			{
				//document.getElementById('webPageFrame').src = xmlhttp.responseText;
				//updateCalendar();
			}
			else
			{
				//document.getElementById('webPageFrame').src = xmlhttp.responseText;
				reloadMap();
			}
		}
	}
	xmlhttp.send(null);
}

/** Hide iframe's flashes and iframes */
function cleanIframe()
{
	if (document.getElementById('webPageFrame').src.search(/clickempty\.html$/) != -1)
	{
		return true;
	}
	if (hideIframes == false && hideFlashes == false)
	{
		return true;
	}
//	try
//	{
		var currentIframe = document.getElementById('webPageFrame');
		if (currentIframe.contentDocument)
		{
			currentIframeContent = currentIframe.contentDocument;
		}
		else if (currentIframe.Document)
		{
			currentIframeContent = currentIframe.Document;
		}
		/** Hide iframes and flashes content */
		if (currentIframeContent == undefined)
		{
			return false;
		}
		newContent = currentIframeContent.body.innerHTML;
		oldPos = 0;
		if (hideIframes == false)
		{
			reg = 'object';
		}
		else
		{
			if (hideFlashes == false)
			{
				reg = 'iframe';
			}
			else
			{
				reg = 'object|iframe';
			}
		}
		startReg = new RegExp('<(' + reg + ')', 'i');
		endReg = new RegExp('<\/(' + reg + ')', 'i');
		while (true)
		{
			pos = newContent.search(startReg);
			pos2 = newContent.search(endReg);
			if (pos == -1 || pos2 == -1 || pos == oldPos || pos > pos2) break;
			pos2 += 9;
			found = newContent.substring(pos, pos2);
			width = found.match(/width=[^0-9]*(\d+)/);
			if (width == null) width = [0, 300];
			height = found.match(/height=[^0-9]*(\d+)/);
			if (height == null) height = [0, 150];
			newContent = newContent.substring(0, pos) + '<span style="margin:0; padding:' + Math.ceil(height[1] / 2) + 'px ' + Math.ceil(width[1] / 2) + 'px; line-height:' + (height[1] * 1 + 10) + 'px; border:1px solid #f00; background-color:#faa; font-size:0;">&nbsp;</span>&nbsp;test' + newContent.substring(pos2, newContent.length);
			oldPos = pos;
		}
		currentIframeContent.body.innerHTML = newContent;
//	}
//	catch(e) {}
}

/** Ajax request to show javascript code */
function runCleaner()
{
	document.getElementById('cleaner').innerHTML = cleanerRunning;
	var xmlhttp;
	xmlhttp = getXmlHttp();
	xmlhttp.open('GET', scriptIndexPath + 'action=cleaner&rand=' + Date(), true);
	xmlhttp.onreadystatechange = function()
	{
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
		{
			if (xmlhttp.responseText == 'OK')
			{
				document.getElementById('cleaner').innerHTML = '';
			}
			else
			{
				document.getElementById('cleaner').innerHTML = xmlhttp.responseText;
				setTimeout("document.getElementById('cleaner').innerHTML = '';", 10000);
			}
		}
	}
	xmlhttp.send(null);
}

/** Ajax request to show latest available version */
function showLatestVersion()
{
	var xmlhttp;
	xmlhttp = getXmlHttp();
	xmlhttp.open('GET', scriptIndexPath + 'action=latest&rand=' + Date(), true);
	xmlhttp.onreadystatechange = function()
	{
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
		{
			document.getElementById('layoutDiv').innerHTML = xmlhttp.responseText;
			document.getElementById('layoutDiv').style.display = 'block';
			showRadioLayout();
		}
	}
	xmlhttp.send(null);
}

/** Shows main panel */
function showPanel() {
	var div = 'adminPanel';
	if (document.getElementById(div).style.display != 'none') {
		return true;
	}
	document.getElementById(div).style.display = 'block';
	document.getElementById('divPanel').innerHTML = '<img src="images/arrow-up.png" width="11" height="6" alt="" />';
	resizeDiv();
}
/** Hides main panel */
function hidePanel()
{
	var div = 'adminPanel';
	document.getElementById(div).style.display = 'none';
	document.getElementById('divPanel').innerHTML = '<img src="images/arrow-down.png" width="11" height="6" alt="" />';
	resizeDiv();
}


/* ***************** Original ClickHeat code above; Code below added for ClickHeat for ColdFusion ***************** */
var alpha = 80;

function changeAlpha() {
	var alpha = parseInt(document.getElementById('slider').value) || 0;
	for(i = 0; i < document.images.length; i++) {
		if(document.images[i].id.search(/^heatmap-\d+$/) == 0) {
			document.images[i].style.opacity = alpha / 100;
			if(document.body.filters != undefined) {
				document.images[i].style.filter = 'alpha(opacity:' + alpha + ')';
			}
		}
	}
}

function changeStartDate(newstartdate) {
	document.filters.startDate.value = newstartdate;
	reloadMap();
}

function reloadMap() {
	oForm = document.filters;
	type = oForm.type.options[oForm.type.options.selectedIndex].value || 'heat';
	page = oForm.page.options[oForm.page.options.selectedIndex].value || '';
	startdate = document.filters.dateStart.value || '';
	enddate = document.filters.dateEnd.value || '';
	// enddate = oForm.enddate.value || '';
	browser = oForm.browser.options[oForm.browser.options.selectedIndex].value || '';
	screenSize = oForm.screen.options[oForm.screen.options.selectedIndex].value || '';
	//alert('generate.cfm?type=' + type + '&page=' + page + '&browser=' + browser + '&screenSize=' + screenSize + '&startdate=' + startdate + '&enddate=' + enddate);
	document.images['heatmap-0'].src = "generate.cfm?loading=1&startdate=" + startdate + "&enddate=" + enddate;
	setTimeout('document.images["heatmap-0"].src = "generate.cfm?type=" + type + "&page=" + page + "&browser=" + browser + "&screensize=" + screenSize + "&startdate=" + startdate + "&enddate=" + enddate', 500);
}
