String.prototype.ltrim = function() { return this.replace(/^\s+/, '') }
String.prototype.rtrim = function() { return this.replace(/\s+$/, '') }
String.prototype.trim = function() { return this.ltrim().rtrim() }
belongsToClass = function(element, className) { return !!element.className && new RegExp('\\b' + className.replace(/\-/, '\\-') + '\\b').test(element.className) }
addToClass = function(element, className) { if (!belongsToClass(element, className)) element.className += (element.className.length? ' ': '') + className }
removeFromClass = function(element, className) { element.className = element.className.replace(new RegExp('\\b' + className.replace(/\-/, '\\-') + '\\b ?'), '').rtrim() }
_ = function(id) { return document.getElementById(id) }

View = {
	_el: function(tagName, text, props) {
		var el = document.createElement(tagName);
		if (text) el.appendChild(document.createTextNode(text));
		if (props) for (var p in props) el[p] = props[p];
		return el;
	},
	a: function(text, props) { return View._el('a', text, props) },
	tr: function() { return View._el('tr') },
	td: function(text) { return View._el('td', text) },
	addOperator: function(i, name) {
		var op = View.a(name, { className: 'operator', href: '#', rel: i });
		if (!i) addToClass(op, 'active');
		op.onclick = function() {
			var ls = document.getElementsByTagName('a');
			for (var i = 0; i < ls.length; ++i) {
				if (belongsToClass(ls[i], 'active')) {
					removeFromClass(ls[i], 'active');
				}
			}
			addToClass(this, 'active');
			View.rates(this.rel);
			return false;
		}
		_('grid_operators').appendChild(op);
	},
	rates: function(operator) {
		var rows = _('grid_rates_rows');
		while (rows.firstChild) rows.removeChild(rows.firstChild);
		var r = Model[operator].rates;
		for (var i = 0; i < r.length; ++i) {
			var row = View.tr();
			row.appendChild(View.td(r[i].shortcode));
			row.appendChild(View.td(r[i].cost));
			row.appendChild(View.td(r[i].share));
			row.appendChild(View.td(Math.round(10000 * r[i].share / r[i].cost) / 100 + '%'));
			rows.appendChild(row);
		}
	}
}

window.onload = function() {
	if (Model && Model.length) {
		for (var i = 0; i < Model.length; ++i) {
			View.addOperator(i, Model[i].name);
		}
		View.rates(0);
	}
}
