function SetDisplay(e_id, disp) {
  var elem = document.getElementById(e_id);
  if(elem && elem.style.display != disp) {
    elem.style.display = disp;
  }
}
function SetVisibility(e_id, vis) {
  var elem = document.getElementById(e_id);
  if(elem && elem.style.visibility != vis) {
    elem.style.visibility = vis;
  }
}
function SetClass(e_id, classname) {
  var elem = document.getElementById(e_id);
  if(elem && elem.className != classname) {
    elem.className = classname;
  }
}

function FormActivate(testname) {
  var form = document.getElementById('testform');
  if(testname == 'perf') {
    SetDisplay('forminputurlrow', '');
    SetDisplay('forminputhostrow', 'none');
    SetDisplay('formthreadsnum', '');
    SetDisplay('formiprate', 'none');
    SetDisplay('formipoptions', 'none');
    if(! hide_perf_options) {
      SetDisplay('formlinkcontrol', '');
      SetDisplay('formhttpfeature', '');
      SetDisplay('formhttpauth', '');
      SetDisplay('formdnsoverride', '');
    }
    SetClass('li_perf', 'formheaderselected');
    SetClass('li_trace', 'formheadernotselected');
    SetDisplay('siteperf_help', 'block');
    SetDisplay('trace_help', 'none');
    form.url.focus();
    form.url.value = form.url.value;
    form.action.value = testname;
  } else if(testname == 'trace') {
    SetDisplay('forminputurlrow', 'none');
    SetDisplay('forminputhostrow', '');
    SetDisplay('formthreadsnum', 'none');
    SetDisplay('formlinkcontrol', 'none');
    SetDisplay('formiprate', '');
    SetDisplay('formipoptions', '');
    SetDisplay('formhttpfeature', 'none');
    SetDisplay('formhttpauth', 'none');
    SetDisplay('formdnsoverride', 'none');
    SetClass('li_perf', 'formheadernotselected');
    SetClass('li_trace', 'formheaderselected');
    SetDisplay('trace_help', 'block');
    SetDisplay('siteperf_help', 'none');
    form.host.focus();
    form.host.value = form.host.value;
    form.action.value = testname;
  }
}

function FormClearInputUrl(e_id) {
  var input = document.getElementById(e_id);
  input.value = '';
  input.focus();
}

function PointSelect(e_id) {
  if(! e_id)
    return;
  var form = document.getElementById('testform');
  form.point.value = e_id;
  var elem = document.getElementById('formpoint_' + e_id);
  elem.style.display='block';
  var hint = document.getElementById('formpointhint');
  hint.style.display='none';
  var i = 1;
  while(elem = document.getElementById('formpoint_' + i)) {
    if(i != e_id) {
      elem.style.display = 'none';
    }
    i++;
  }
}

function PointList() {
  var list = document.getElementById('formpointlist');
  if(list.style.visibility == 'visible') {
    list.style.visibility = 'hidden';
    SetVisibility('max_threads', 'visible');
    SetVisibility('bandwidth', 'visible');
    SetVisibility('ip_packets_number', 'visible');
    SetVisibility('ip_rate', 'visible');
    SetVisibility('ip_protocol', 'visible');
    SetVisibility('ip_tos', 'visible');
  } else {
    list.style.visibility = 'visible';
    SetVisibility('max_threads', 'hidden');
    SetVisibility('bandwidth', 'hidden');
    SetVisibility('ip_packets_number', 'hidden');
    SetVisibility('ip_rate', 'hidden');
    SetVisibility('ip_protocol', 'hidden');
    SetVisibility('ip_tos', 'hidden');
  }
}

function PointSet(e_id) {
  var form = document.getElementById('testform');
  form.point.value = e_id;
}

function FormCheck() {
  var form = document.getElementById('testform');
  if(form.action.value == 'perf') {
    if(! form.url.value || form.url.value == 'http://') {
      alert('Please enter tested URL');
      form.url.focus();
      form.url.value = form.url.value;
      return false;
    }
  } else if(form.action.value == 'trace') {
    if(! form.host.value) {
      alert('Please enter tested host');
      form.host.focus();
      form.host.value = form.host.value;
      return false;
    }
  }
  if(form.point.value == 0) {
    var list = document.getElementById('formpointlist');
    if(list.style.visibility != 'visible') {
      PointList();
    } else {
      alert('Please select test-point');
    }
    return false;
  }
  if(! form.recaptcha_response_field.value) {
    var elem = document.getElementById('form_captcha');
    if(elem.style.display != 'none') {
      alert('Please enter CAPTHCA solution');
      form.recaptcha_response_field.focus();
      return false;
    }
  }
  return true;
}

// load captcha on demand
function CaptchaSetup() {
  var container = document.getElementById('form_captcha');
  container.style.display = 'none';
  if(window.XMLHttpRequest) {
     xmlrequest = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    xmlrequest = new ActiveXObject("Msxml2.XMLHTTP");
    if (!xmlrequest) {
      xmlrequest = new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  if(xmlrequest) {
    xmlrequest.onreadystatechange = CaptchaSet;
    xmlrequest.open('GET', '/cgi-bin/antibot.cgi', true);
    xmlrequest.send(null);
  }
}

function CaptchaSet() {
  if(xmlrequest.readyState != 4) return;
  if(xmlrequest.status == 200 && xmlrequest.responseText == 'true') return;
  var script = document.createElement('script');
  script.type = 'text/javascript';
  script.src = 'http://api.recaptcha.net/js/recaptcha_ajax.js';
  var head = document.getElementsByTagName("head")[0];
  head.appendChild(script);
  CaptchaShow();
}

// we use existance check in loop because script.onLoad doesn't work in FF,IE
function CaptchaShow() {
  if(typeof(window['Recaptcha']) != 'undefined') {
    var container = document.getElementById('form_captcha');
    container.style.display = '';
    Recaptcha.create('6Le02wEAAAAAANnt4SNwzDWHtdrDMbMQBYMXJXyc', 'form_captcha_self', { theme: 'red' });
  } else {
    setTimeout('CaptchaShow()', 300);
  }
}

function clk(id) {
  var dummy_img = document.createElement('img');
  dummy_img.src = '/cgi-bin/clk.cgi?' + id;
  dummy_img.style.width = '0';
  dummy_img.style.height = '0';
  dummy_img.style.visibility = 'hidden';
  var head = document.getElementsByTagName("head")[0];
  head.appendChild(dummy_img);
}

function hint(e_id, state) {
  var elem = document.getElementById(e_id);
  if(state) {
    elem.style.visibility='visible';
  } else {
    elem.style.visibility='hidden';
  }
}

function display_toggle(e_id) {
  var elem = document.getElementById(e_id);
  if(elem.style.display =='none') {
    elem.style.display='';
  } else {
    elem.style.display='none';
  }
}

function PointCheck() {
  return FormCheck();
}

function InsertContent(e_id, url) {
  var xmlrequest;
  if(window.XMLHttpRequest) {
    xmlrequest = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    xmlrequest = new ActiveXObject("Msxml2.XMLHTTP");
    if (!this.xmlrequest) {
      xmlrequest = new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  if(xmlrequest) {
    xmlrequest.onreadystatechange = function() {
      if(xmlrequest.readyState != 4) return;
      if(xmlrequest.status != 200) return;
      var elem = document.getElementById(e_id);
      elem.innerHTML = xmlrequest.responseText;
    };
    xmlrequest.open('GET', url, true);
    xmlrequest.send(null);
  }
}

var hide_perf_options = false;
function TogglePerfOptions() {
  var elem = document.getElementById('options_switcher');
  if(hide_perf_options) {
    hide_perf_options = false;
    elem.innerHTML = 'Hide options ..';
  } else {
    hide_perf_options = true;
    elem.innerHTML = 'More options ..';
  }
  display_toggle('formlinkcontrol');
  display_toggle('formhttpfeature');
  display_toggle('formhttpauth');
  display_toggle('formdnsoverride');
}

var dns_visible_rows = 1;
function dns_expand() {
  if(dns_visible_rows >= 10)
    return;
  dns_visible_rows ++;
  SetDisplay('dns' + dns_visible_rows, 'list-item');
}
