JSON_URL = 'http://key.smscoin.com/json/key/206149/';

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)? '(включая НДС)': '(без учета НДС)')].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 = 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);
}

