function Ia_counts(params) {
	var self = this;
	Changes.apply(this, [ 
		[
		new Ia_counts_ajax_handler({
			'get_ia_counts' : function (data) {
				self._handle_data(data);
			}
		}),
		new Ia_counts_ajax_handler()
		]
	]);
	this._params = params;
}

extend(Ia_counts, Changes);

Ia_counts.prototype.update = function () {
	var ot = this._params['ot'] || null;
	var p = { 'last' : this.get_last_update(), 'minb' : 20, 'lim' : 0.01, 'ot' : ot };
	this.get_async_srv().get_ia_counts(p);
}

Ia_counts.prototype._update_data = function (data) {
	// data: newiacounts
	var newiacounts = data;
	this._update_missing_pevts(Util.hash_keys(newiacounts));

	var iacounts = this.get_data();		
	for (var peid in newiacounts) {
		for (var ot in newiacounts[peid]) {
			var cnts = newiacounts[peid][ot];
			if (!iacounts[peid]) {
				iacounts[peid] = {};
			}
			iacounts[peid][ot] = cnts;
		}
	}
}

function Ia_counts_screen(iacounts, opts) {
	var self = this;
	
	// sflags (screen flags): 1 - in-running
	var defaults = { 'sflags' : 0, 'max_rows' : 200 };
	$.extend(defaults, opts);
	Peid_ot_changes_screen.apply(this, [ iacounts, defaults ]);

	this._pevts = iacounts.get_pevts();
	this._iacdata = iacounts.get_data();

	var t = iacounts.get_sync_srv().get_books();
	if (t[0] < 0) throw t[1];
	else this._books = t[1];

	this._sortord = [ 3 ];
	this._ttdata = {};
	this._tts = new Tooltips(this._ttdata, { 
		'create_tt' : function (pos, data) {
			var t = self._get_peid_ot(data);
			return Util.create_tooltip(pos, self._create_tooltip_text(t[0], t[1]));
		}
	});
}

extend(Ia_counts_screen, Peid_ot_changes_screen);

Ia_counts_screen.prototype.refresh = function () {
	var oct = this._oct;	
	while (oct.rows.length > 1)
		oct.deleteRow(oct.rows.length-1);
	this.update(this._iacdata);
}
	
Ia_counts_screen.prototype.create = function () {
	var cont = this.get_container();

	var oct = document.createElement("table");
	this._oct = oct;
	oct.className = "omvt";
	cont.appendChild(this._oct);

	var r = oct.insertRow(0);
	var c;
	c = r.insertCell(r.cells.length);
	c.className = "omvtht";
	c.innerHTML = "date";
	c = r.insertCell(r.cells.length);
	c.className = "omvtht";
	c.innerHTML = "match";

	var self = this;

	c = r.insertCell(r.cells.length);
	c.className = "omvtht";
	c.innerHTML = "ot";
	c.title = "odds type";
	c = r.insertCell(r.cells.length);
	c.className = "omvtht";
	c.innerHTML = "na";
	c.title = "active count";
	c.onclick = function () { self._sortord = [ 2 ]; self.refresh(); }
	c = r.insertCell(r.cells.length);
	c.className = "omvtht";
	c.innerHTML = "nia";
	c.title = "inactive count";
	c.onclick = function () { self._sortord = [ 3 ]; self.refresh(); }
	c = r.insertCell(r.cells.length);
	c.className = "omvtht";
	c.innerHTML = "ia pct";
	c.title = "inactive pct";
	c.onclick = function () { self._sortord = [ 4 ]; self.refresh(); }
}
	
Ia_counts_screen.prototype._update_row = function (peid, ot, nd) {
	var opts = this.get_opts();
	var max_rows = opts.max_rows;
	var id = this._get_row_id(peid, ot);
	var oct = this._oct;	

	var i;	
	for (i=1; i < oct.rows.length; ++i) {
		if (oct.rows[i].id == id) {
			oct.deleteRow(i);
			break;
		}
	}
	
	var sflags = opts.sflags;
	var inrunnings = sflags & 1;

	do {	
		var pe = this._pevts[peid];
		if (!pe) continue;
		var petime = pe[0];

		// XXX server time?
		var inrunning = new Date().getTime() > petime*1000;
		if (!inrunnings && inrunning) {
			continue;
		}

		var so = this._sortord[0];
		var sso = so == (3 || 4) ? 2 : 3; // sec sort ord
		for (i=1; i < oct.rows.length && i < max_rows; ++i) {
			var dat = this._get_row_data(oct.rows[i].id);
			var a = parseFloat(nd[so]);
			var b = parseFloat(dat[so]);
			if (a == b) {
				a = parseFloat(nd[sso]);
				b = parseFloat(dat[sso]);
			}
			if (a > b) 
				break;
		}

		if (i < max_rows) {
			this._create_row(i, id, peid, ot, nd);
			if (oct.rows.length > max_rows) {
				oldttid = oct.rows[oct.rows.length-1].id
				oct.deleteRow(oct.rows.length-1);
			}
		}
	} while (0);
}

Ia_counts_screen.prototype._create_row = function (i, id, peid, ot, dat) {
	var r = this._oct.insertRow(i);
	r.id = id;

	var c;
	var pevt = this._pevts[peid];
	c = r.insertCell(r.cells.length);
	c.className = "omvtdate";
	c.innerHTML = Util.date_str2(new Date(pevt[0]*1000));
	c = r.insertCell(r.cells.length);
	c.className = "omvtteams";
	c.innerHTML = "<a href=\"/cgi-bin/kvtest?type=ochtml&peid=" + peid + "&ot=" + ot + "\" target=\"_blank\">" + pevt[4] + "-" + pevt[5] + "</a>";
	c = r.insertCell(r.cells.length);
	c.innerHTML = Oc_util.ot_names[ot];
	c = r.insertCell(r.cells.length);
	c.innerHTML = dat[2];
	c = r.insertCell(r.cells.length);
	c.innerHTML = dat[3];
	c = r.insertCell(r.cells.length);
	c.innerHTML = (parseFloat(dat[4])*100.0).toFixed(2) + "%";
}

Ia_counts_screen.prototype.update = function (data) {
	for (var peid in data) {
		for (var ot in data[peid]) {
			this._update_row(peid, ot, data[peid][ot]);
		}
	}
	
	// paivitetaan tooltipsit	
	var ttids = {};
	for (i=1; i < this._oct.rows.length; ++i) {
		var id = this._oct.rows[i].id;
		ttids[id] = id;
	}
	this._tts.set_data(ttids);
}
	
Ia_counts_screen.prototype._create_tooltip_text = function (peid, ot) {
	var pe = this._pevts[peid];
	var s = "<b>" + pe[4] + "-" + pe[5] + "</b><br>";
	s += "<em>otb books</em><br>\n";
	var iabids = this._iacdata[peid][ot][6];
	var i;
	for (i=0; i < iabids.length && i < 15; ++i) {
		var bid = iabids[i];
		s += this._books[bid][0];
		s += "<br>\n";
	}	
	if (i != iabids.length) {
		s += "<em>" + (iabids.length-i) + " more ...</em><br>\n";
	}

	return s;
}
