/**
 * @desc Will gather stats about servers
 * @param target jQuery The jQuery Element to target, has to be display=none
 * @param metricsOptions array Set of options concerning the behavior of the metrics script
 * @param postUrl String The url to send stats to (can be null if useGA = true)
 * @param userGA Boolean Weither or not to use Google Analytics to gather stats
 **/
jQuery.fn.metrics = function(target, metricsOptions, postUrl, label, useGA) {
	var rand = Math.floor(Math.random() * 100000);
	var servN;
	var currentOptions;
	var currentPool = 0;
	var timer;
	if(useGA == undefined) {
		useGA = false;
	}
	
	if(postUrl == null && !useGA) {
		return false;
	}

	function onLoad(startTime, serverName) {
			var endDate = new Date();
			var endTime = endDate.getTime();
			var total = endTime - startTime;
			if(useGA) {
				pageTracker._trackEvent("metrics",  serverName +":load.image","10kb", total); 
			} else {
				sendResult(serverName, label, total);
			}
			nextImage();
	};
	
	function nextImage() {
		if(servN < (currentOptions.number + currentOptions.startAt) - 1 ) {
			loadImage();
		} else if(currentPool < metricsOptions.length) {
			servN = null;
			startNext();
		}
	}
	
	function sendRequest(url, callBack, serverName) {
		return jQuery(target).each(function(){
			var img = new Image();
			var startDate = new Date();
			var startTime = startDate.getTime();
			jQuery(img).load(function() {
				onLoad(startTime, serverName);
			});
			jQuery(img).error(function() {
				nextImage();
			});
			jQuery(img).attr('src', url);
			jQuery(this).append(img);
		});
	};
	
	function loadImage() {
		if(servN == null) {
			servN = currentOptions.startAt;
		} else {
			servN++;
		}
		var serverName = currentOptions.serverPattern.replace("{n}", servN);
		sendRequest(serverName + currentOptions.cdnFolder + currentOptions.file + "?rand=" + rand, onLoad, serverName);
	};
	
	function startNext() {
		currentOptions = metricsOptions[currentPool];
		currentPool++;
		loadImage();
	};

	function sendResult(server, act, val) {
		server = server.replace("http://", "");
		var rnd = Math.random();
		var img = new Image(1,1);
		img.src = postUrl + "?category=10kb&label=" + server + "&action=" + act + "&value=" + val +"&"+rnd;
		$j(target).append(img);
	}
	
	startNext();

	return true;
}
