/**
 * Filename    : TypeChecking.js
 * Author      : Robert Cerny
 * Created     : 2007-03-19
 * Last Change : 2009-01-15
 */

CERNY.require("CO.cernyjs.demos.TypeChecking",
              "CO.cernyjs",
              "CO.cernyjs.demos.Demo");

CO.cernyjs.demos.TypeChecking = CERNY.object(CO.cernyjs.demos.Demo);
CO.cernyjs.demos.TypeChecking.examples = {
    "allok": "DateUtils.isPastDate(new Date(1986, 5, 1))",
    "wrongarg": "DateUtils.isPastDate('1986-05-01')",
    "toomanyargs": "DateUtils.isPastDate(new Date(), true)"
}

CO.cernyjs.demos.TypeChecking.logger = CERNY.Logger("CO.cernyjs.demos.TypeChecking");

CO.cernyjs.demos.TypeChecking.run = function () {
    var funcCallString = this.inputField.value, obj, printer, result;

    this.configureLogging();

    // Clear the output field
    if (this.outputField.firstChild) {
        this.outputField.removeChild(this.outputField.firstChild);
    }

    // Parse the input
    try {
        result = eval(funcCallString);
        this.logger.debug("result: " + result);
    } catch (e) {
        this.logger.error("exception: " + e);
        result = e.message;
    } finally {
        this.outputField.innerHTML = result;
    }

};

CO.cernyjs.demos.TypeChecking.runExample = function (name) {
    this.inputField.value = this.examples[name];
    this.run();
};

CERNY.intercept(CO.cernyjs.demos.TypeChecking);

init = CERNY.joinFunctions(init, function () {
    CO.cernyjs.demos.TypeChecking.init();
});

var DateUtils = {
    logger: CERNY.Logger("DateUtils")
};
DateUtils.isPastDate = function(date) {
    return date.getTime() < new Date().getTime();
}
CERNY.signature(DateUtils.isPastDate, "boolean", Date);
CERNY.intercept(DateUtils, [CERNY.Interceptors.LogIndenter,
                            CERNY.Interceptors.Tracer,
                            CERNY.Interceptors.TypeChecker]);

