function exist(name) {
  return !!document.getElementById(name);
}

function hide(id_name) {
  $(id_name).style.display = 'none';
}  

function show(id_name) {
  $(id_name).style.display = 'block';
}  

function toggle(id_name) {
  if ($(id_name).style.display == 'none') {
    show(id_name);
  } else {
    hide(id_name);
  }
}

function show_a() {
  show('a-overlay'); 
  show('a-dialog'); 
  $('a-title').focus();
  return false;
}

function show_q() {
  show('q-overlay'); 
  show('q-dialog'); 
  $('q-title').focus();
  return false;
}

function setAnswer(l) {
  $("answer0").innerHTML = {en: "the pig", es: "el loro", nl: "de os", de: "der Wurm", fr: "la vache", it: "la carne"}[l]
  $("answer1").innerHTML = {en: "the dog", es: "el perro", nl: "de hond", de: "der Hund", fr: "le chien", it: "il cane"}[l]
  $("answer2").innerHTML = {en: "the paw", es: "el ciervo", nl: "de hoed", de: "die Gans", fr: "le lion", it: "il leone"}[l]
  $("answer3").innerHTML = {en: "the fox", es: "el pollo", nl: "de vos", de: "die Eule", fr: "le ver", it: "la capra"}[l]
  $("tlang0").value = l;
  $("tlang1").value = l;
  $("tlang2").value = l;
  $("tlang3").value = l;
}


function getCaretPosition(input) {
  var result = { start: 0, end: 0 };
  if (input.setSelectionRange) {
    result.start = input.selectionStart;
    result.end = input.selectionEnd;
  } else if (document.selection && document.selection.createRange) {
    var range = document.selection.createRange();
    var r2 = range.duplicate();
    result.start = 0 - r2.moveStart('character', -100000);
    result.end = result.start + range.text.length;
  }
  return result;
}

function accentuate(element_name) {
  var prev = null;
  function checkKey(e) {
    var keynum;
    var keychar;
    var numcheck;
    
    var answ = $(element_name);
    var caretPos = getCaretPosition(answ);
    if(caretPos.start != caretPos.end) return true;

    if(window.event) {
      keynum = window.event.keyCode;
    } else if(e.which) {
      keynum = e.which;
    }
    keychar = String.fromCharCode(keynum)
    var v = answ.value;
  
    rv = true;
  
    set = function(lt, ac_lt) {
      if(keychar == lt) {
        rv = false;
        var x = v.substring(0, caretPos.start) + lt + v.substring(caretPos.start);
        answ.value = x.replace(new RegExp("\\" + prev + lt, "g"), ac_lt);
      }
    }

    if(prev == "/") {
      set('a', 'á');// es
      set('A', 'Á');// es
      set('e', 'é');// fr es nl
      set('E', 'É');// fr es nl
      set('i', 'í');// es
      set('I', 'Í');// es
      set('o', 'ó');// es
      set('O', 'Ó');// es
      set('u', 'ú');// es
      set('U', 'Ú');// es
    }
    if(prev == "`") {
      set('a', 'à');// fr
      set('e', 'è');// fr nl
      set('i', 'ì');
      set('o', 'ò');// fr
      set('u', 'ù');
      set('A', 'À');// fr
      set('E', 'È');// fr nl
      set('I', 'Ì');
      set('O', 'Ò');// fr
      set('U', 'Ù');
    }
    if(prev == "~") {
      set('n', 'ñ');// es
      set('s', 'ß');// de
      set('c', 'ç');// fr
      set('C', 'Ç');// fr
      set('?', '¿');// es
    }
    if(prev == "^") {
      set('a', 'â'); // fr
      set('e', 'ê'); // fr
      set('i', 'î'); // fr
      set('o', 'ô'); // fr
      set('u', 'û'); // fr
      set('A', 'Â'); // fr
      set('E', 'Ê'); // fr
      set('I', 'Î'); // fr
      set('O', 'Ô'); // fr
      set('U', 'Û'); // fr
    }
    if(prev == '"') {
      set('a', 'ä'); // de
      set('e', 'ë'); // nl
      set('i', 'ï'); // nl
      set('o', 'ö'); // de
      set('u', 'ü'); // de
      set('A', 'Ä'); // de
      set('E', 'Ë'); // nl
      set('I', 'Ï'); // nl
      set('O', 'Ö'); // de
      set('U', 'Ü'); // de
    }
    prev = keychar;
    return rv;
  }
  $(element_name).onkeypress = checkKey;
}

function rjs(url, vars) {
  var request = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP.3.0");
  request.open("POST", url, true);
  request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
  request.setRequestHeader('X_REQUESTED_WITH', "XMLHttpRequest"); 
  request.onreadystatechange = function() {
    if (request.readyState == 4 && request.status == 200) {
      if (request.responseText) {
        eval(request.responseText);
      }
    }
  };
  request.send(vars);
}

function ajax(url, vars, callbackFunction) {
  var request = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP.3.0");
  request.open("POST", url, true);
  request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
  request.onreadystatechange = function() {
    if (request.readyState == 4 && request.status == 200) {
      if (request.responseText && callbackFunction) {
        callbackFunction(request.responseText);
      }
    }
  };
  request.send(vars);
}

function encodePair(name, value) {
  return encodeURIComponent(name).replace(/%20/g,"+") + '=' + encodeURIComponent(value).replace(/%20/g,"+");
}

function encodeFormData(data) {
  var pairs = [];
  for(i = 0; i < data.length; i++) { pairs.push(encodePair(data[i][0], data[i][1])); }
  return pairs.join('&');
};

function closeFlagQuestion() {
  hide('q-overlay'); 
  hide('q-dialog'); 
  return false;
}

function closeFlagAnswer() {
  hide('a-overlay'); 
  hide('a-dialog'); 
  return false;
}

function vanish(id) {
  if(exist(id)) {
    setTimeout(function() { opacity(id, 100, 0, 400); }, 1500);
  }
}

function startStudy() {
  if(exist('answer')) {
    accentuate('answer');
  }
  vanish('true_content');
  if(exist('disagree_box')) {
    $('disagree_box').onclick = function() {
      ajax($('disagree_link').href, '', function(txt) {$('disagree_box').innerHTML = txt});
      document.study.answer.focus();
      return false;
    }
  }
}

function opacity(id, opacStart, opacEnd, millisec) { 
  var speed = Math.round(millisec / 50); 
  var timer = 0; 
  for(i = opacStart; i >= opacEnd; i--) { 
    setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed)); 
    timer++; 
  } 
} 

function changeOpac(opacity, id) { 
  var object = document.getElementById(id).style; 
  object.opacity = (opacity / 100); 
  object.MozOpacity = (opacity / 100); 
  object.KhtmlOpacity = (opacity / 100); 
  object.filter = "alpha(opacity=" + opacity + ")"; 
}

