# Source: jala/code/Captcha.js

    //
    // Jala Project [http://opensvn.csie.org/traccgi/jala]
    //
    // Copyright 2004 ORF Online und Teletext GmbH
    //
    // Licensed under the Apache License, Version 2.0 (the ``License'');
    // you may not use this file except in compliance with the License.
    // You may obtain a copy of the License at
    //
    //    http://www.apache.org/licenses/LICENSE-2.0
    //
    // Unless required by applicable law or agreed to in writing, software
    // distributed under the License is distributed on an ``AS IS'' BASIS,
    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    // See the License for the specific language governing permissions and
    // limitations under the License.
    //
    // $Revision$
    // $LastChangedBy$
    // $LastChangedDate$
    // $HeadURL$
    //

    /**
     * @fileoverview Fields and methods of the jala.Captcha class.
     */

    // Define the global namespace for Jala modules
    if (!global.jala) {
       global.jala = {};
    }

    /**
     * Construct a new captcha.
     * @returns A new captcha.
     * @class Wrapper class for the
     * {@link http://jcaptcha.sourceforge.net/ JCaptcha library}.
     * A captcha (an acronym for "completely automated public
     * Turing test to tell computers and humans apart") is a
     * type of challenge-response test used in computing to
     * determine whether or not the user is human.
     * @constructor
     */
    jala.Captcha = function() {
       /**
        * Jala dependencies
        */
       app.addRepository(getProperty("jala.dir", "modules/jala") +
                         "/lib/jcaptcha-all-1.0-RC3.jar");

       var gimpy;

       try {
          var ref = Packages.com.octo.captcha.engine.image.gimpy;
          gimpy = ref.DefaultGimpyEngine();
       } catch(e) {
          throw("Cannot instantiate object due to missing java class: " +
                arguments.callee.toString());
       }
       var captcha = gimpy.getNextCaptcha();

       /**
        * Get a new captcha object.
        * @returns A new captcha object.
        * @type com.octo.captcha.Captcha
        */
       this.getCaptcha = function getCaptcha() {
          return captcha;
       };

       /**
        * Render a new captcha image.
        */
       this.renderImage = function renderImage() {
          var image = captcha.getImageChallenge();
          var stream = new java.io.ByteArrayOutputStream();
          var ref = Packages.com.sun.image.codec.jpeg.JPEGCodec;
          var encoder = ref.createJPEGEncoder(stream);
          encoder.encode(image);
          res.contentType = "image/jpeg";
          res.writeBinary(stream.toByteArray());
          return;
       };

       /**
        * Validate a user's input with the prompted captcha.
        * @param {String} input The user's input.
        * @returns True if the user's input matches the captcha.
        * @type Boolean
        */
       this.validate = function validate(input) {
          return !input || captcha.validateResponse(input);
       };

       return this;
    };

    /**
     * Get a string representation of the captcha class.
     * @returns A string representation of the capthca class.
     * @type String
     * @ignore
     */
    jala.Captcha.toString = function toString() {
       return "[jala.Captcha http://jcaptcha.sourceforge.net]";
    };

    /**
     * Get a string representation of the captcha object.
     * @returns A string representation of the captcha object.
     * @type String
     */
    jala.Captcha.prototype.toString = function toString() {
       return "[jala.Captcha Object]";
    };