
/*
/*		include Events/EventHandler.js in the page
*/


(function() {
    FNXJS.Events.Handler.add(window, "load", init, false);

    function init() {
        for (var i = 0; i < document.forms.length; i++) {
            var f = document.forms[i];
            var needsValidation = false;

            // Now loop through the elements in our form
            for (j = 0; j < f.elements.length; j++) {
                var e = f.elements[j];

                // We're only interested in <input type="text"> textfields and text area
                if (e.type != "text" && e.type != "textarea") continue;

                // See if it has attributes that require validation
                var pattern = e.getAttribute("pattern") != null;
                var required = e.getAttribute("required") != null;
                var defaultText = e.getAttribute("defaultText") != null;

                if (defaultText) {
                    e.value = e.attributes.defaultText.value;
                    FNXJS.Events.Handler.add(e, "focus", handleFocus, false);
                    FNXJS.Events.Handler.add(e, "blur", handleBlur, false);
                }

                // Required is just a shortcut for a simple pattern

                if (required && !pattern) {
                    e.setAttribute("pattern", "\\S");
                }

                // If this element requires validation,
                if (pattern) {
                    needsValidation = true;
                }
            }

            // If at least one of the form elements needed validation,
            // we also need an onsubmit event handler for the form
            if (needsValidation)
                FNXJS.Events.Handler.add(f, "submit", validateOnSubmit, false);
        }
    };


    // This function is the onchange event handler for textfields that
    // require validation. Remember that we converted the required attribute
    // to a pattern attribute in init( ).
    function validateOnChange(e) {
        var textfield = e.target;
        var pattern = textfield.getAttribute("pattern");
        var value = this.value;

        // If the value does not match the pattern, set the class to "invalid".
        if (value.search(pattern) == -1)
            textfield.className = "invalid";

        else
            textfield.className = "valid";
    };


    function validateOnSubmit(e) {
        var isValid = true;
        // Loop through all form elements
        for (var i = 0; i < this.elements.length; i++) {
            var element = this.elements[i];

            if (element.type == "text") {
                var value = element.value;
                var pattern = new RegExp(element.attributes.pattern.value, "ig");
                var defaultText = (element.attributes.defaultText) ?
									element.attributes.defaultText.value : null;
                var requiredText = (element.attributes.requiredText) ?
									element.attributes.requiredText.value : "Please correct the required fields and try again.";
                var patternText = (element.attributes.patternText) ?
									element.attributes.patternText.value : requiredText;

                if (defaultText == value)
                    value = "";

                if (isEmpty(value)) {
                    alert(requiredText);
                    isValid = false;
                    break;
                }
                else if (!pattern.test(value)) {
                    alert(patternText);
                    isValid = false;
                    break;
                }
            }
        }
        
        if (!isValid) {
            element.focus();
            e.preventDefault();
            return false;
        }
        else
            return true;
    };


    function handleFocus(e) {
        if (this.value == this.attributes.defaultText.value)
            this.value = "";
    };


    function handleBlur(e) {
        if (isEmpty(this.value))
            this.value = this.attributes.defaultText.value;
    };


    function isEmpty(arg) {
        return (parseInt(arg + "666") == 666)
    };
})();
