
// Provide the XMLHttpRequest class for IE 5.x-6.x:
if( typeof XMLHttpRequest == "undefined" ) XMLHttpRequest = function() {
  try { return new ActiveXObject("Msxml2.XMLHTTP.6.0") } catch(e) {}
  try { return new ActiveXObject("Msxml2.XMLHTTP.3.0") } catch(e) {}
  try { return new ActiveXObject("Msxml2.XMLHTTP") } catch(e) {}
  try { return new ActiveXObject("Microsoft.XMLHTTP") } catch(e) {}
  throw new Error( "This browser does not support XMLHttpRequest." )
};

var Captcha = new Object();
Captcha.challenge = '';
Captcha.current_image = null;

Captcha.get_challenge = function(){
    return this.challenge
}  

Captcha.get_response = function(){
    if(Captcha.current_input)
        return Captcha.current_input.value
    else
        return ''
}

Captcha.request_challenge = function(){
     var req = new XMLHttpRequest();
    
    currentreq = req;
    req.onreadystatechange = function(e){
        captcha_callback(e)
    };
    req.open("GET", '/captcha/challenge?v='+Math.random(), false);
    req.send(null);
    
    if(parseInt(req.status) != 200)
        return;

    var result = currentreq.responseText;
    var _result = null
    try {
      eval('_result = '+result);
    }
    catch(e){
      //console.error(e)
    }
    
    if(_result && _result.type == 'success'){
      //console.log('success')
      return _result.data
    }
    else if(_result && _result.type == 'failure'){
      //console.log('failure')
      return null
    }
    
    return null
    
}

Captcha.regenerate = function(){
    Captcha.challenge = Captcha.request_challenge()
    
    if(!Captcha.challenge.length){
        //console.error('Error retrieving challenge')
        return false
    }
    
    Captcha.current_image.src = '/captcha/image?challenge='+Captcha.challenge
    Captcha.current_input.value = '';
}

Captcha.generate = function(el){
    Captcha.challenge = this.request_challenge()
    
    if(!Captcha.challenge.length){
        //console.error('Error retrieving challenge')
        return false
    }
    
    input = $create('input')
    input.type = 'text'
    Captcha.current_input = input
    
    image = $create('img')
    image.src = '/captcha/image?challenge='+Captcha.challenge
    image.width = '300';
    image.height = '57';
    image.style.width ='300px';
    image.style.height ='57px';
    Captcha.current_image = image
    
    cell1 = $create('td');
    cell1.appendChild(image)
    cell1.appendChild(input)
    
    button_refresh = $create('a')
    button_refresh.className = 'button-refresh';
    button_refresh.innerHTML = _('Refresh')
    button_refresh.onclick = Captcha.regenerate;
    
    
    cell2 = $create('td');
    cell2.appendChild(button_refresh)
    
    
    row = $create('tr');
    row.appendChild(cell1);
    row.appendChild(cell2);
    
    
    tbody = $create('tbody');
    tbody.appendChild(row);
    
    table = $create('table');
    table.className = 'ui-form-captcha-field';
    table.width = '100%'
    table.appendChild(tbody)
    
    frag = document.createDocumentFragment();
    frag.appendChild(table)
    
    el.parentNode.replaceChild(frag, el)
}

function captcha_callback(e){
  if (currentreq.readyState != 4)
    return;

  var result = currentreq.responseText;
  //console.log('Res',result)
  var _result = null
  try {
      eval('_result = '+result);
  }
  catch(e){
      //console.error(e)
  }
  
  
  if(_result && _result.type == 'success'){
      //console.log('success')
      Captcha.challenge = _result.data
  }
  else if(_result && _result.type == 'failure'){
      //console.log('failure')
  }
  
}
