var strThisTranslation = "This translation is correct.";
var strNotesOn = "Notes on translation:";
var strTransBy = "Translation by ";
var strPleaseHelp = "Please help us improve the translation.";
var strIHaveMade = "I have made a comment.";
var debug;
var tgt;
var request;

function submitSQL(t){
  debug = t['sql'].value.indexOf('--pop')>-1;
  t['page'].value = document.location;
  t['random'].value = Math.random();
  var id = t.getAttribute('name').substring(5);
  tgt = document.getElementById('tgt_'+id);
  tgt.innerHTML = 'Waiting...';
  var url = '/execsql.pl';
  if (window.XMLHttpRequest)
    request = new XMLHttpRequest();
  else if (window.ActiveXObject){
    request = new ActiveXObject('Microsoft.XMLHTTP');
    if (!request)
      request = new ActiveXObject('Msxml2.XMLHTTP');
    }
  if (request){
    request.onreadystatechange=handleResponse;
    request.open('POST',url,true);
    request.setRequestHeader('Content-Type',
      'application/x-www-form-urlencoded; charset=UTF-8');
    request.send(encodeForm(t));
  }else{
    alert('Could not build a request object');
  }

  function handleResponse(){
    if (request.readyState != 4) return;
    if (request.status != 200){
      tgt.innerHTML = "Request failed: " + request.status+
                "<br/>Handled by: "+url;
      return;
    }
    //alert(request.responseText);
    if (debug){
       msgWindow=window.open("","displayWindow",
                             "menubar=yes","scrollbars=yes");
       if (msgWindow.document.forms.length==0)
         msgWindow.document.write
          ("<HEAD><TITLE>debug window</TITLE></HEAD>" +
           "<form><textarea rows='20' cols='60' name='a'>"+
           " </textarea></form>");
       msgWindow.document.forms[0].elements['a'].value 
          = request.responseText;
    }
    if (tgt && tgt.innerHTML)
      tgt.innerHTML = request.responseText;
    else
      alert(request.responseText);
    checkAnswer(tgt,id);
  }
}

function checkAnswer(tgt,id){
  var attempt = document.getElementById('frmres_'+id+'_sql');
  var correct = document.getElementById('frmres_'+id+'_answer');
  if (!correct || !attempt
     ||!correct.getElementsByTagName('table')
     ||!attempt.getElementsByTagName('table')) return;
  if ( correct.getElementsByTagName('table').length==0
     ||attempt.getElementsByTagName('table').length==0) return;
  var attTab = attempt.getElementsByTagName('table')
        [attempt.getElementsByTagName('table').length-1];
  var corTab = correct.getElementsByTagName('table')
        [correct.getElementsByTagName('table').length-1];
  var rept = document.getElementById('frmres_'+id+'_rept');
  if (!rept){
    rept = document.createElement('div');
    rept.setAttribute('id','frmres_'+id+'_rept');
//    rept.innerHTML = 'Error';
//    alert(tgt.innerHTML);
    tgt.insertBefore(rept,tgt.firstChild);
  }
  if (debug) alert(rept);
  if (attTab.getElementsByTagName('th').length !=
       corTab.getElementsByTagName('th').length){
    rept.innerHTML = "Wrong Answer. The correct answer has "+
        + corTab.getElementsByTagName('th').length
        + " column(s).";
    return;
  }
  if (attTab.getElementsByTagName('tr').length !=
      corTab.getElementsByTagName('tr').length){
    rept.innerHTML = "Wrong Answer. The correct answer has "+
        + (corTab.getElementsByTagName('tr').length-1)
        + " row(s).";
    return;
  }
  /* Number of rows and columns are the same */
  /* Now build a hash for each row of each */
  var corHash = Array();
  var attHash = Array();
  var wgLine  = Array();
  fillHash(corHash,corTab);
  fillHash(attHash,attTab);
  var isGood = 1;
  var tr; var i=0;
  for (tr in corHash){
    if (corHash[tr] != attHash[tr]){
      wgLine[i] = 1;
      isGood = 0;
    }
    i++;
  }
  rept.innerHTML = (isGood)?'Well Done, that is correct.':
                            'No, that is not right.';
  for (tr in wgLine)
    attTab.getElementsByTagName('tr')[tr].style.backgroundColor='yellow';
}

function fillHash(hash,tab){
  for (var i=0;i<tab.getElementsByTagName('tr').length;i++){
    var ln = "";
    var tr = tab.getElementsByTagName('tr')[i];
    for (var j=0;j<tr.getElementsByTagName('td').length;j++)
      ln += tr.getElementsByTagName('td')[j].innerHTML.toLowerCase() + '::';
    if (hash[ln])
      hash[ln]++;
    else
      hash[ln]=1;
  }
}

function encodeForm(frm){
  var ret = "";
  for (var i=0;i<frm.elements.length;i++){
    if (frm.elements[i].name){
      if (ret) ret+='&';
      ret += frm.elements[i].name + "="
           +((frm.elements[i].name!='ans')
               ?encodeURIComponent(frm.elements[i].value)
               :frm.elements[i].value);
    }
  }
  return ret;
}

function resetToDef(t){
  var id = t.getAttribute('name').substring(5);
  t['sql'].value = document.getElementById('frmdef_'+id).innerHTML
                .replace(/^\s+/g,'').replace(/\&lt;/g,'<')
                .replace(/&gt;/g,'>').replace(/\&amp;/g,'&');
}

function cv(q,v){
 if (document.getElementById(q)){
   v = unescape(v);
   if (v.indexOf(" ") == -1)
     v = unescape(v);
   document.getElementById(q).value=v;
 }
}

function oc(f){
 var v = escape(escape(f.sql.value));
 var action = "javascript:cv('q"+f.name+"','"+v+"');";
 var a=document.getElementById("d"+f.name);
 if (!a) return;

 //Add answer to post
 var answer = document.getElementById("ans"+f.name);
 if (answer)
   f.answer.value = getStr(answer.firstChild);
 //.data;

 var n=a.lastChild;
 if (n) n=n.previousSibling;
 if (n){
   if (n.getAttribute("href")==action){
     alert("You just tried that!");
     return false;
   }
   n = n.firstChild.nodeValue;
 }else
   n = 0;
 var b = document.createElement("a");
 b.setAttribute("href", action);
 var c=document.createTextNode(++n);
 b.appendChild(c);
 a.appendChild(b);
 a.appendChild(document.createTextNode(" "));
 return true;
}

function flip(id){
//Used by the hint tags - hide or show the hint
document.getElementById(id).style.display =
  (document.getElementById(id).style.display=="none")?"block":"none";
}

function newDiv(fontSize,text,bold){
  var m = document.createElement("div");
  m.style.padding = "3pt";
  m.style.fontSize = fontSize;
  if (bold) {
    m.style.fontWeight = "bold";
  }
  m.appendChild(document.createTextNode(text));
  return m;
}

function newButton(text){
  return newElement("input",["type","button","value",text]);
  var m = document.createElement("input");
  m.setAttribute("type", "button");
  m.setAttribute("value", text);
  return m;
}

function searchAtts(n,k,v){
  var r = k + "," + v + " Not Found";
  for (var c=n.firstChild;c;c=c.nextSibling){
    if (c && c.nodeType == 1){ //Node.ELEMENT_NODE
      alert(c.nodeName + "\n" + c.getAttribute(k));
      if (c.getAttribute(k) == v)
        return c;
    }
  }
  alert("Not found :(");
  return r;
}

function newElement(node,a,c){
  var e = document.createElement(node);
  for (var i=0;i<a.length;i+=2){
    e.setAttribute(a[i],a[i+1]);
  }
  if (c){
    //alert(c.data);
    e.appendChild(c);
  }
  return e;
}

function getStr(n,ex){
  // return n and all following siblings as a string
  // Exclude ex
  var s = "";
  for (var i=n;i;i=i.nextSibling){
    if (i == ex) {continue;}
    if (i.nodeType==3){
      s += i.data
    }
    if (i.nodeType==1){
      s += "<"+i.nodeName.toLowerCase()+">"+getStr(i.firstChild)+
            "</"+i.nodeName.toLowerCase()+">";
    }
  }
  return s;
}



