var CaptchaControl = Class.create({},
{
  preInit: function()
  {
    this.declareEvent('captchaResult');
  },
  
  postInit: function()
  {
    this.loadCaptcha();
    this.postURL = location.href.toString();
    this.captchaHidden = $('#' + this._serverData.ids.hiddenId);
    this.captchaText = $('#' + this._serverData.ids.textId);   
  },
  
  loadCaptcha: function()
  {
    var data = {};
    data[this._serverData.generateCaptcha] = true;
    
    $.post(this.postURL, data, this.getHandler(this, 'onLoadCaptcha'));
  },
  
  onLoadCaptcha: function(data)
  {
    $("body").find('#' + this._serverData.ids.imageId).remove();
    var captchaImage = $('<img />');
    captchaImage.css('margin-bottom', '15px');  
    captchaImage.attr('id', this._serverData.ids.imageId);  
    captchaImage.attr('src', '/captcha.php?id=' + data);  
    this.captchaHidden.before(captchaImage);

    this.captchaHidden.val(data);
  },
  
  checkCaptcha: function()
  {
    var data = {};
    data[this._serverData.checkCaptcha] = true;
    data[this._serverData.names.hiddenName] = this.captchaHidden.val();
    data[this._serverData.names.textName] = this.captchaText.val();
    $.post(this.postURL, data, this.getHandler(this, 'onCheckCaptcha'), 'json');
  },
  
  onCheckCaptcha: function (data)
  {
    if(!data)
    {
      this.loadCaptcha();
      this.dispatchEvent('captchaResult', [false]);
      return false;
    }
    this.dispatchEvent('captchaResult', [true]);
    return true;
  },
  
  getCaptchaId: function()
  {
    return this.captchaHidden.val();
  },
  
  getCaptchaText: function()
  {
    return this.captchaText.val();
  }
},
[Control])