CMinder.Module.require('CMinder.Module', 0.1);
CMinder.Module.createNamespace('CMinder.Includes', 0.1);
CMinder.Includes.Validator = {
    button: null,
    form: null,
    errorClass: null,
    init: function(e) {
    },     
    validateElement: function(element) {
        var validationResult = {
           isValid: false,
           message: ''
        }

        var dataType = element.getAttribute("dataType");
        var fieldName = element.getAttribute("fieldName");
        var dataTrim = element.getAttribute("dataTrim");
        switch (dataType) {
            case 'string':
                var value = $F(element);
                if(value != null) {
                    value = value.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
                    if(dataTrim) { value = value.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); }
                }
                if (value != "") {
                    validationResult.isValid = true;
                } else {
                    validationResult.message = '<b>' + fieldName + '</b> is required.';
                }
                break;
            case 'dropdownlist':
                if (element.selectedIndex != 0) {
                    validationResult.isValid = true;
                } else {
                    validationResult.message = '<b>' + fieldName + '</b> is required.';        
                }
                break;               
            case 'radiolist':
            case 'checkboxlist':
                var groupName = element.getAttribute("groupName");               
                var elements = $A(document.getElementsByName(groupName));
                elements.each(function(elem) {
                    if (elem.checked) {
                        validationResult.isValid = true;
                    }
                });
                if (!validationResult.isValid) {
                    validationResult.message = '<b>' + fieldName + '</b> is required.';
                }               
                break;
            case 'date':
                var isRequired = element.getAttribute("isRequired");
                var value = $F(element); 
                if(value != null) {
                    value = value.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
                    if(dataTrim) { value = value.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); }
                }            
                if(isRequired) {
                    if (value != "") {
                        validationResult.isValid = true;
                    } else {
                        validationResult.message = '<b>' + fieldName + '</b> is required.';
                    }
                } else {
                    validationResult.isValid = true;           
                }
                if (value != "") {
                    var result = CMinder.ValidationUtilities.isDate(value);                   
                    if (!result.isValid) {
                        validationResult.message = '<b>' + fieldName + '</b> is in an incorrect date format. ' + result.message;
                        validationResult.isValid = false;
                    }
                }               
                break;
        }
        if (!validationResult.isValid) {
            Element.addClassName(element, this.errorClass);
        } else {
            Element.removeClassName(element, this.errorClass);
        }       
        return validationResult;       
    },   
    validate: function() {       
        var myErrorList = new Array();
        myErrorList = $A(myErrorList);       

        var myElementArray = $A(document.getElementsByClassName('cmValidate'));
        var me = this;       
        myElementArray.each(function (element) {           
            var validationResult = me.validateElement(element);           
            if (!validationResult.isValid) {
                myErrorList[myErrorList.length++] = validationResult.message;
            }
        });
        if (myErrorList.length > 0) {
            var text = "<p>Your submission had the following errors:</p><ul>";
            myErrorList.each(function (error) {
                text += "<li>" + error + "</li>";
            });
            text += "</ul>";
            CMinder.Utility.alertCancel(text, 'divWrapper', 'Validation Error');
            return false;
        } else {           
            if (this.form != null) {
                this.form.submit();
            }
            return true;
        }
    }  
}