﻿var FormsHelper = {
    DynPost: function(action, method, postdata) {
        var f = document.createElement("form");
        f.action = action;
        f.setAttribute("method", method.toString().toUpperCase());
        f.style.display = "none";

        for (var i = 0; i < postdata.length; i++) {
            var t = document.createElement(postdata[i].tag);
            for (var j = 0; j < postdata[i].attribs.length; j++) {
                t.setAttribute(postdata[i].attribs[j].name, postdata[i].attribs[j].value);
            }
            f.appendChild(t);
        }

        document.body.appendChild(f);
        
        f.submit();
    },
    Colorize: function(tables) {
        for (var a = 0; a < tables.length; a++) {
            var tchildren = new Array();
            tchildren.PushCollection(tables[a].children);
            var rows = new Array();
            rows.PushCollection(tchildren.First(function(item) { return item.tagName.toUpperCase() == "TBODY"; }).children);
            rows = rows.Where(function(item) { return item.className.indexOf("ignoreParity") == -1 });
            var c = 0;
            for (var b = 0; b < rows.length; b++) {
                rows[b].className += b % 2 > 0 ? " odd" : " even";
            }
        }
    },
    // sets the maxlength of input elements
    SetMaxLength: function(type, name, exactMatch, maxLength) {
        var tags = new Array();
        tags.PushCollection(document.getElementsByTagName("input"));
        tags = tags.Where(function(item) { return item.getAttribute("type") == type; });
        for (var a = 0; a < tags.length; a++) {
            if ((exactMatch && tags[a].name == name) || (!exactMatch && tags[a].name.indexOf(name) >= 0))
                tags[a].maxLength = maxLength;
        }
    },
    Validator: {
        errorMessages: {
            REQUIRED: "[[title]] is required.",
            REGEX: "[[title]] is invalid.",
            NUMBER: "[[title]] is not a valid number. Only numbers and decimals are valid.",
            INT: "[[title]] is not a valid number. Only numbers are valid, please remove any decimals and commas.",
            DATE: "[[title]] is not a valid date.",
            RADIO: "[[title]] is not specified."
        },
        parseElement: function(element, form) {
            var errors = new Array();

            if (element.className.indexOf("validate.required") >= 0) {
                if (element.getAttribute("type") && element.getAttribute("type").toUpperCase() == "CHECKBOX" && element.checked == false) {
                    var e = this.errorMessages.REQUIRED;
                    e = e.replace("[[title]]", element.title);
                    errors.push(e);
                }
                else if (element.getAttribute("type") && element.getAttribute("type").toUpperCase() == "RADIO") {
                    var OK = false;
                    for (var x = 0; x < form[element.name].length; x++) {
                        if (form[element.name][x].checked) {
                            OK = true; break;
                        }
                    }
                    if (!OK) {
                        var e = this.errorMessages.RADIO;
                        e = e.replace("[[title]]", element.title);
                        errors.push(e);
                    }
                }
                else if (element.value.length == 0) {
                    var e = this.errorMessages.REQUIRED;
                    e = e.replace("[[title]]", element.title);
                    errors.push(e);
                }
            }
            //else if (element.valueOf != "") {            
            if (element.className.indexOf("validate.number") >= 0 && element.value != "" && (element.value.match(/^(\d|-)?(\d)*\.?\d*$/) == null)) {
                var e = this.errorMessages.NUMBER;
                e = e.replace("[[title]]", element.title);
                errors.push(e);
            }
            if (element.className.indexOf("validate.int") >= 0 && element.value != "" && (element.value.match(/^(\d|-)?(\d)*$/) == null)) {
                var e = this.errorMessages.INT;
                e = e.replace("[[title]]", element.title);
                errors.push(e);
            }
            if (element.className.indexOf("validate.date") >= 0 && (element.value != "MM/DD/YYYY" || element.className.indexOf("validate.required") >= 0) && element.value.match(/^(0?[1-9]|1[0-2])\/(0?[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|[1-9][0-9]|175[3-9]|17[6-9][0-9]|1[8-9][0-9]{2}|[2-9][0-9]{3})$/) == null) {
                var e = this.errorMessages.DATE;
                e = e.replace("[[title]]", element.title);
                errors.push(e);
            }
            //}
            /*if (element.className.indexOf("validate.regex") >= 0) {
            var pattern = element.className.substr(element.className.indexOf("validate.regex") + 15);
            var pattern = pattern.substr(0, pattern.indexOf(" ") - 1);

                if (element.value.match(pattern) == false) {
            var e = this.errorMessages.REGEX;
            e = e.replace("[[title]]", element.title);
            alert(e);
            errors.push(e);
            }
            }*/

            return errors;
        },
        parseForm: function(form) {
            var errors = new Array();
            for (var i = 0; i < form.elements.length; i++) {
                var elementErrors = this.parseElement(form[i], form);
                if (elementErrors.length > 0)
                    errors.push({ name: form[i].name, errorlist: elementErrors });
            }

            return errors;
        }
    }
};