﻿var last_datetime = null;
var class_counter = 0;
var id_counter = 1;
var to_display_queue = new Array();
var paused = false;
var initial_pull = true;

function StartStats()
{
	var s2 = new Control.Slider('slider_handle','slider_track',
		{ axis:'horizontal', disabled: false, range:$R(0,7), values:[0,1,2,3,4,5,6,7], onChange:ChangeScrollSpeed }
	);
	SendRequest();
	LiveAddColumn();
}

function ChangeScrollSpeed(val)
{
	draw_speed = orig_draw_speed - (val * 50);
}

function Query()
{
	current_timer--;
	if (current_timer <= 0) {
		SendRequest();
		current_timer = query_seconds;
	} else {
		setTimeout('Query()', 1000);
	}
}

function SendRequest()
{
	if (last_datetime) {
		var json_string = '{ datetime : "' + last_datetime + '" }';
	} else {
		var json_string = '{ datetime: null }';
	}
	
	new Ajax.Request (live_site_url + "/wp-admin/?livestats_ajax=1", {postBody: json_string, method: 'post', onSuccess: RequestDone});
}

function RequestDone(request)
{
	var response_text = request.responseText;
	
	eval('response = ' + response_text);
	var total_hits = response['hits'];
	
	AddToGraph(total_hits);
	
	
	var logs_data = response['results'];

	if (logs_data != null) {
		for (var i = 0; i < logs_data.length; i++) {
			to_display_queue[to_display_queue.length] = logs_data[i];
		}
	}
	if (logs_data != null) {
		if (initial_pull) {
			last_datetime = logs_data[(logs_data.length - 1)]['created'];
		} else {
			last_datetime = logs_data[0]['created'];
		}
	}
	initial_pull = false;
	setTimeout('Query()', 1000);
}

function LiveAddColumn()
{
	if (paused == true) {
		setTimeout('LiveAddColumn()', draw_speed);
		return;
	}
	
	if (to_display_queue.length > 0) {
		var slice = to_display_queue.shift();
		AddNewRow(slice);
	}
	setTimeout('LiveAddColumn()', draw_speed);
}

function StartStopDisplay()
{
	var start_stop_button = document.getElementById('live_start_stop_button');
	if (paused == true) {
		paused = false;
		start_stop_button.value = 'Pause';
	} else {
		paused = true;
		start_stop_button.value = 'Continue';
	}
}

function AddNewRow(data)
{
	var the_table_body = document.getElementById('the_body');
	var new_row = document.createElement('TR');
	new_row.id = 'row_' + id_counter;
	new_row.style.display = 'none';
	
	
	var action_column = document.createElement('TD');
	var page_column = document.createElement('TD');
	var ref_column = document.createElement('TD');
	var ip_column = document.createElement('TD');
	
	action_column.className = 'action';
	page_column.className = 'page';
	ref_column.className = 'ref';
	ip_column.className = 'ip';
	
	var action_div = document.createElement('DIV');
	if (data['action'] == 'page_hit') {
		action_div.className = 'action_page_hit';
	} else if (data['action'] == 'rss_hit') {
		action_div.className = 'action_rss_hit';
	} else {
		action_div.className = 'action_comment';
	}
	
	var ip_anchor = document.createElement('A');
	// http://ws.arin.net/cgi-bin/whois.pl?queryinput=
	ip_anchor.href = 'http://www.ip2location.com/' + data['ip_address'];
	ip_anchor.target = '_blank';
	var ip_text = document.createTextNode(data['ip_address']);
	ip_anchor.appendChild(ip_text);
	
	if (data['referrer'] != '') {
		var ref_anchor = document.createElement('A');
		ref_anchor.href = data['referrer'];
		if (data['referrer'].length > 45) {
			var referrer = data['referrer'].substr(0,35) + '...';
		} else {
			var referrer = data['referrer'];
		}
		var ref_text = document.createTextNode(referrer);
		ref_anchor.appendChild(ref_text);
	} else {
		var ref_anchor = document.createElement('DIV');
		ref_anchor.innerHTML = 'None';
	}
	
	
	var page_anchor = document.createElement('A');
	if (data['comment_url'] != '') {
		page_anchor.href = data['comment_url'];
		var comment_text = document.createTextNode('View Comment');
		page_anchor.appendChild(comment_text);
	} else {
		page_anchor.href = data['page_url'];
		if (data['page_title'].length > 45) {
			var title = data['page_title'].substr(0,35) + '...';
		} else {
			var title = data['page_title'];
		}
		var page_text = document.createTextNode(title);
		page_anchor.appendChild(page_text);
	}
	
	action_column.appendChild(action_div);
	page_column.appendChild(page_anchor);
	ref_column.appendChild(ref_anchor);
	ip_column.appendChild(ip_anchor);
	
	page_column.innerHTML += '<br /><small>' + data['created'] + '</small>';

	new_row.appendChild(action_column);
	new_row.appendChild(page_column);
	new_row.appendChild(ref_column);
	new_row.appendChild(ip_column);
	the_table_body.insertBefore(new_row, the_table_body.childNodes.item(0));
	
	Effect.Appear('row_' + id_counter);
	
	if (the_table_body.childNodes.length > 20) {
		for (var i = 20; i < the_table_body.childNodes.length; i++) {
			Effect.Fade('row_' + (the_table_body.childNodes.length - i));
		}
		
	}
	id_counter++;
}

function AddToGraph(hits)
{
	hits = hits * 3;
	var graph = document.getElementById('live_graph');
	var bar = document.createElement('DIV');
	bar.className = 'live_graph_bar';
	bar.style.marginTop = (75 - hits) + 'px';
	bar.style.height = hits + 'px';
	
	graph.insertBefore(bar, graph.childNodes.item(0));
}
