/*
 * SYSTEM_NAME: fackelnet
 *
 * COMPONENT_NAME: Recaptcha
 *
 * FUNCTIONS: Recaptcha client-side handling
 *
 * AUTHOR: Franz Fackelmann
 *
 * CREATED: 10.01.2010
 *
 */

var recaptchaPublicKey    = "6LcsjQoAAAAAANRpJ6Q0sqBFTcAqlwAse5LMDr9M";

var recaptchaLocId        = "recaptchaLoc"; // id of element where to place the widget
var recaptchaValidatorUrl = "recaptcha.php";
var recaptchaOptions      = { theme: 'white', lang: 'de' };


function recaptchaInit(lang)
{
  var recaptchaLoc = document.getElementById(recaptchaLocId);

  if (recaptchaLoc != null) {
    if (Recaptcha.widget == null) {
      if (lang != null) {
        recaptchaOptions.lang = lang;
        if (lang == "de") {
          // fix German translation
          recaptchaOptions.custom_translations =
            { instructions_visual: "Tippen Sie die 2 Wörter:" };
        }
      }

      Recaptcha.create(recaptchaPublicKey, recaptchaLoc, recaptchaOptions);
    }
    else
      Recaptcha.reload();
  }
}


function recaptchaValidate()
{
  var valid = false;

  if (Recaptcha.widget != null) {
    var challenge = Recaptcha.get_challenge();
    var response = Recaptcha.get_response();

    valid = (challenge != "" &&
             response != "" &&
             recaptchaVerify(challenge, response));

    if (!valid) recaptchaInit(null);
  }

  return valid;
}


function recaptchaVerify(challenge, response)
{
  var xmlHttp = null;
  var validity = false;
  var params = "challenge=" + challenge + "&" + "response=" + response;


  // Mozilla, Opera, Safari and Internet Explorer 7
  if (typeof XMLHttpRequest != "undefined") {
    xmlHttp = new XMLHttpRequest();
  }

  if (!xmlHttp) {
    // Internet Explorer 6 and older
    try {
        xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
        try {
            xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");
        } catch(e) {
            xmlHttp  = null;
        }
    }
  }

  if (xmlHttp) {
    xmlHttp.open("POST", recaptchaValidatorUrl, false);

    xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlHttp.setRequestHeader("Content-length", params.length);
    xmlHttp.setRequestHeader("Connection", "close");

    xmlHttp.onreadystatechange = function () {
      if (xmlHttp.readyState == 4) {
        //alert(xmlHttp.responseText);
      }
    };

    xmlHttp.send(params);

    validity = (xmlHttp.responseText == "1");
  }

  return validity;
}

