/**
 * Filename    : Schema.js
 * Author      : Robert Cerny
 * Created     : 2007-03-20
 * Last Change : 2009-01-15
 */

CERNY.require("CO.cernyjs.demos.Schema",
              "CO.cernyjs.demos.Demo",
              "CO.cernyjs.demos.examples",
              "CERNY.json.TextPrettyPrinter",
              "CO.cernyjs.demos.Family",
              "CERNY.schema");

CO.cernyjs.demos.Schema = CERNY.object(CO.cernyjs.demos.Demo);
CO.cernyjs.demos.Schema.logger = CERNY.Logger("CO.cernyjs.demos.Schema");
CO.cernyjs.demos.Schema.schemaInputField = document.getElementById("input-schema");
CO.cernyjs.demos.Schema.examples = CO.cernyjs.demos.examples.documents;

CERNY.method(CO.cernyjs.demos.Schema, "run", function () {
    var jsonString = this.inputField.value, obj, printer, prettyJsonString;

    this.configureLogging();

    // Clear the output field
    if (this.outputField.firstChild) {
        this.outputField.removeChild(this.outputField.firstChild);
    }

    // Parse the input
    try {
        obj = jsonString.parseJSON();
    } catch (e) {
        this.outputField.innerHTML = "<p>Your JSON String cannot be parsed!</p>";
        return;
    }

    // Validate
    var result = CERNY.schema.validate(obj, Family);

    // Get the printer
    printer = CERNY.json.TextPrettyPrinter();
    printer.logger = CERNY.Logger("CERNY.json.TextPrettyPrinter");

    // In Cerny.js 1.2 there is no interceptors installed on the Printers
    CERNY.intercept(printer);

    // Prettyprint it
    prettyJsonStr = printer.print(result);

    // Display the result
    if (document.all) {
        this.outputField.innerText = prettyJsonStr;
    } else {
        this.outputField.appendChild(document.createTextNode(prettyJsonStr));
    }
});

init = CERNY.joinFunctions(init, function () {
    CO.cernyjs.demos.Schema.init();
    var printer = CERNY.json.TextPrettyPrinter();
    CO.cernyjs.demos.Schema.inputField.value = printer.print(CO.cernyjs.demos.Schema.examples.familyOfCsp);
});

