function show(node) {
	node.style.display = '';
	return node;
}

function hide(node) {
	node.style.display = 'none';
	return node;
}

function update(node, text) {
	node.appendChild(document.createTextNode(text));
	return node;
}

function clear(node) {
	while (node.hasChildNodes()) {
		node.removeChild(node.firstChild);
	}
	return node;
}

function _(id) { return document.getElementById(id) }

function show$(id) { return show(_(id)) }

function hide$(id) { return hide(_(id)) }

function update$(id, text) { return update(_(id), text) }

function clear$(id) { return clear(_(id)) }


/*
function $(id) { return document.getElementById(id) }

function show$(id) { return show($(id)) }

function hide$(id) { return hide($(id)) }

function update$(id, text) { return update($(id), text) }

function clear$(id) { return clear($(id)) }
*/

function findCountryId(c_name) {
	for (var i = 0; i < JSONResponse.length; i++) {
		if(JSONResponse[i].country == c_name) {
			return i;
		}
	}
	return -1;
}

function ShowTariffsByProvider() {

	var n = this.rel;
	var res = n.match(/\((.*?)\)/i);
	n = n.replace(/\(.*?\)/i, "");
	var k = res[1];

	var ss = _('grid_operators').childNodes;
	for (var i = 0; i < ss.length; ++i) {
		ss[i].className = 'operator';
	}
	this.className = 'operator active';
	clear$('grid_rates_rows');

	var providers = JSONResponse[k].providers;
	var k = 0;
	for (var i = 0; i < providers.length; ++i) {
		if (providers[i].code === n) {
			k++;
			var row = document.createElement('tr');
			row.appendChild(update(document.createElement('td'), providers[i].number));
			row.appendChild(update(document.createElement('td'), providers[i].prefix));
			row.appendChild(update(document.createElement('td'), providers[i].price));
			row.appendChild(update(document.createElement('td'),  ((providers[i].price * (providers[i].profit + RATES_SHIFT) ) / 100).toFixed(2) ));
			row.appendChild(update(document.createElement('td'), ((providers[i].profit + RATES_SHIFT).toFixed(2) + '%') )  );
			if (k % 2) {
				row.className = 'hilit';
			}
			_('grid_rates_rows').appendChild(row);
		}
	}
	return false;
}

function selectCountry(i) {
	if (JSONResponse[i].providers && JSONResponse[i].providers.length) {
		hide$('grid_operators');
		show$('grid_rates');
		DATA = JSONResponse[i];
		nlist = [];
		for (var despair = 0; despair < DATA.providers.length; ++despair) {
			nlist.push({n: DATA.providers[despair].name, v: DATA.providers[despair].code});
		}
		nlist.sort(function(x, y) {return x.v - y.v});
		plist = [];
		clear$('grid_operators');
		for (var despair = 0; despair < nlist.length; ++despair) {
			if (plist[nlist[despair].n]) continue;
			plist[nlist[despair].n] = 1;
			var sc = document.createElement('a');
			sc.rel = nlist[despair].v + '(' + i + ')';
			sc.href = "#";
			sc.className = "operator";
			update(sc, nlist[despair].n /*+ ' (' + nlist[despair].v + ')'*/);
			sc.onclick = ShowTariffsByProvider;
			_('grid_operators').appendChild(sc);
			despair || sc.onclick();
		}
		show$('grid_operators');
	} else {
		hide$('grid_operators');
		show$('grid_rates');
		var tarifs_country = JSONResponse[i].country;
		var k = 0;
		for (var j = 0; j < JSONResponse.length; j++) {
			if( JSONResponse[j].country == tarifs_country) {
				k++;
				var row = document.createElement('tr');
				row.appendChild(update(document.createElement('td'), JSONResponse[j].number));
				row.appendChild(update(document.createElement('td'), JSONResponse[j].prefix));
				row.appendChild(update(document.createElement('td'), JSONResponse[j].price));
				row.appendChild(update(document.createElement('td'),  ((JSONResponse[j].price * (JSONResponse[j].profit - RATES_SHIFT) ) / 100).toFixed(2) ));
				row.appendChild(update(document.createElement('td'), JSONResponse[j].profit));
				if (k % 2) {
					row.className = 'hilit';
				}
				_('grid_rates_rows').appendChild(row);
			}
		}
		show$('grid_rates_rows');
	}
}

function JSONHandleResponse() {
	var n = 0;
	document.body.style.backgroundImage = 'none';
	if (!window.JSONResponse) {
		return;
	}
	var country_id;
	country_id = findCountryId(COUNTRY);
	if ( country_id != -1) {
		selectCountry(country_id);
	} else {
		alert ('Country' + COUNTRY + ' not found!');
	}
}

function JSONSendRequest() {
	var head_node = document.getElementsByTagName('head').item(0);
	var js_node = document.createElement('script');
	js_node.src = JSON_URL;
	js_node.type = 'text/javascript';
	js_node.charset = 'utf-8';
	if (navigator.product == 'Gecko') {
		js_node.onload = JSONHandleResponse;
	}
	else {
		js_node.onreadystatechange = function(evt) {
			evt? 1: evt = window.event;
			var rs = (evt.target || evt.srcElement).readyState;
			if (rs == 'loaded' || rs == 'complete') {
				JSONHandleResponse();
			}
		}
	}
	head_node.appendChild(js_node);

}

if (window.addEventListener) {
	window.addEventListener('load', JSONSendRequest, false);
	var name_p = location.href.indexOf('smscoin.net') == -1? 'name': 'name_en';
}
else if (window.attachEvent) {
	window.attachEvent('onload', JSONSendRequest);
}

