/**
 * conditionalFlashLoader
 * 
 * Object options: speed: num Min speed limit for flash meter: Object Object
 * with function 'fireMeasurement'
 * 
 */
function conditionalFlashLoader(options) {
	this.speed = -1;
	this.meter = null;

	this.condition = conditionalFlashLoader.genericCondition;
	this.onLoadFlash = conditionalFlashLoader.genericFlashLoader;

	if (typeof options != 'undefined') {
		this.handleObjectOptions(options);
	}
}

conditionalFlashLoader.prototype.init = function() {
	this.meter.onMeasureCompleted = function(res) {
		var o = conditionalFlashLoader.getInstance();
		if (o.condition(res)) {
			o.onLoadFlash();
		}
	}
}

conditionalFlashLoader.prototype.handleObjectOptions = function(options) {
	for ( var p in options) {
		if (p.charAt(0) == '_') {
			continue;
		}
		this[p] = options[p];
	}
}

conditionalFlashLoader.prototype.measureConnection = function() {
	if (typeof this.meter === 'undefined') {
		throw "Meter is not defined";
	}

	this.meter.fireMeasurement();
}

conditionalFlashLoader.instance = null;

conditionalFlashLoader.getInstance = function(options) {
	if (conditionalFlashLoader.instance === null) {
		conditionalFlashLoader.instance = new conditionalFlashLoader(options);
		conditionalFlashLoader.instance.init();
	}
	return conditionalFlashLoader.instance;
}

conditionalFlashLoader.loadFlash = function(options) {
	var _o = conditionalFlashLoader.getInstance(options);

	if (_o.speed > 0) {
		_o.measureConnection();
	} else if (typeof _o.onLoadFlash == 'function') {
		_o.onLoadFlash();
	}
}

conditionalFlashLoader.genericCondition = function(res) {
	var _o = conditionalFlashLoader.getInstance();
	return _o.speed < res.speed;
}

conditionalFlashLoader.genericFlashLoader = function() {
}
