/**
 * Filename    : Validation.js
 * Author      : Robert Cerny
 * Created     : 2009-01-07
 * Last Change : 2010-10-15
 */

CERNY.require("CO.jtm.Validation",
              "JSON",
              "JTM.v1_0",
              "JTM.v1_1",
              "CERNY.json.TextPrettyPrinter",
              "CERNY.schema");

CO = {
    jtm: {}
};

(function () {

    CO.jtm.Validation = {};

    var Validation = CO.jtm.Validation;
    var method = CERNY.method;

    var inputField = document.getElementById("input");
    var outputField = document.getElementById("output");


    function run() {
        var jsonString = inputField.value,
            obj,
            printer,
            prettyJsonString,
            jtm,
            tmSchema,
            form = document.forms["validation-form"];

        var version = form["version"].value;
        var itemType = form["item-type"].value;
        var checked = form["check-recomm"].checked;
        var jtm = JTM[version]({checkRules:checked});
        tmSchema = jtm[itemType];

        // Clear the output field
        if (outputField.firstChild) {
            outputField.removeChild(outputField.firstChild);
        }

        // Parse the input
        try {
            obj = JSON.parse(jsonString);
        } catch (e) {
            outputField.innerHTML = "<p>Your JSON String cannot be parsed!</p>";
            return;
        }

        // Validate
        CERNY.schema.strict = true;
        var result = CERNY.schema.validate(obj, tmSchema);

        // Get the printer
        printer = CERNY.json.TextPrettyPrinter();
        printer.logger = CERNY.Logger("CERNY.json.TextPrettyPrinter");

        // Prettyprint it
        prettyJsonStr = printer.print(result);
        if (CERNY.schema.isValid(result)) {
            prettyJsonStr = "Your JTM document is valid!";
        }

        // Display the result
        if (document.all) {
            outputField.innerText = prettyJsonStr;
        } else {
            outputField.appendChild(document.createTextNode(prettyJsonStr));
        }
    }
    method(Validation, "run", run);

})();

