
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 updateInstructions(data) {
	show$('instructions');
	update(clear$('message_text'), [data.prefix, SERVICE].join(' '));
	update(clear$('shortcode'), data.number);
	update(clear$('message_cost'), [data.price, data.currency,
		(parseInt(data.vat)? '(including VAT)': '(without VAT)')].join(' '));
	if (data.special) show(update(clear$('notes'), data.special));
	else hide(clear$('notes'));
}

function selectProvider(i) {
	if (i == '-') {
		hide$('instructions');
		return;
	}
	updateInstructions(DATA.providers[i]);
}

function selectCountry(i) {
	if (i == '-') {
		hide$('providers');
		hide$('instructions');
		return;
	}
	if (JSONResponse[i].providers && JSONResponse[i].providers.length) {
		hide$('instructions');
		show$('providers');
		DATA = JSONResponse[i];
		var select_provider = clear$('select_provider');
		var def = document.createElement('option');
		update(def, 'Выберите оператора').value = '-';
		select_provider.appendChild(def);
		for (var j = 0; j < DATA.providers.length; ++j) {
			var opt = document.createElement('option');
			update(opt, DATA.providers[j].name).value = j;
			select_provider.appendChild(opt);
		}
		select_provider.onchange = function() {
			selectProvider(this.value);
		}
	}
	else {
		hide$('providers');
		updateInstructions(JSONResponse[i]);
	}
}

function JSONHandleResponse() {
	document.body.style.backgroundImage = 'none';
	if (!window.JSONResponse) {
		show$('fail');
		return;
	}
	//SERVICE = JSON_URL.replace(/.+?(\d+)\/$/, '$1');
	show$('ui');
	var select_country = $('select_country');
	for (var i = 0; i < JSONResponse.length; ++i) {
		var opt = document.createElement('option');
		update(opt, JSONResponse[i].country_name).value = i;
		select_country.appendChild(opt);
	}
	select_country.onchange = function() {
		selectCountry(this.value);
	}
}

function JSONSendRequest() {
	var head_node = document.getElementsByTagName('head').item(0);
	var js_node = document.createElement('script');
	js_node.src = window.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);
}
else if (window.attachEvent) {
	window.attachEvent('onload', JSONSendRequest);
}
