﻿var ValidationSummaryBox = Class.create({
    initialize: function(targetContainer, titleTxt) {
        this.titleTxt = titleTxt || 'We need a little bit more information:';
        this.targetContainer = targetContainer;
        this.errorLabelClassName = 'labError';
        this.errorInputClassName = 'error';
        this.validationResp = null;
        this.inputFieldsArr = new Array();
        this.messages = new Array();
    },
    addInputField: function(inputObj) {
        if (inputObj) this.inputFieldsArr.push($(inputObj));
    },
    showSummary: function(validationResp) {
        this.messages = new Array();
        this.validationResp = validationResp;
        
        // reset the input error styles
        this.resetErrorStyles();
        
        if (this.validationResp.Passed) {
            this.clearFormFields();
        }
        
        // go through the messages and assign the error class to the invalid input fields
        for (var i=0; i < this.validationResp.Messages.length; i++) {
            var m = this.validationResp.Messages[i];                
            
            // add error message
            this.messages.push(m.Text);
            
            if (!m.IsValid) {
                var ic = $(m.InputControlID);
                
                if (ic) {
                    // assign the error class to the label
                    if (ic.labelObj) ic.labelObj.addClassName(this.errorLabelClassName);
                    
                    // assign the error class to the input field
                    ic.addClassName(this.errorInputClassName);
                }
            }
        }
        
        this.generateSummaryBox();
    },
    resetErrorStyles: function() {
        for (var i=0; i < this.inputFieldsArr.length; i++) {
            var ic = this.inputFieldsArr[i];
            
            if (ic.labelObj && ic.labelObj.hasClassName(this.errorLabelClassName)) ic.labelObj.removeClassName(this.errorLabelClassName);
            if (ic.hasClassName(this.errorInputClassName)) ic.removeClassName(this.errorInputClassName);
        }
    },
    clearFormFields: function() {
        for (var i=0; i < this.inputFieldsArr.length; i++) {
            this.inputFieldsArr[i].value = ((this.inputFieldsArr[i].initValue != null && this.inputFieldsArr[i].initValue.length > 0) ? this.inputFieldsArr[i].initValue : new String());
        }
    },
    clearTargetContainer: function() {
        // clear the content of the target container
        this.targetContainer.innerText = '';
        this.targetContainer.innerHTML = this.targetContainer.innerText;
        this.targetContainer.hide();
    },
    generateSummaryBox: function() {
        this.clearTargetContainer();
    
        var frame = $(document.createElement('div'));
        frame.addClassName('validationSummary');
        
        frame.addClassName(((this.validationResp.Passed)?'successValidation':'failedValidation'));
                
        var innerFrame = $(document.createElement('div'));
        innerFrame.addClassName('validationSummaryInner');
        frame.appendChild(innerFrame);
        
        // add the title (header) txt if there is an validation error
        if (!this.validationResp.Passed) {
            var titleDiv = $(document.createElement('div'));
            titleDiv.addClassName('header');
            titleDiv.innerText = this.titleTxt;
            titleDiv.innerHTML = titleDiv.innerText;
            innerFrame.appendChild(titleDiv);
        }
        
        var tab = $(document.createElement('table'));
        tab.cellPadding = 0;
        tab.cellSpacing = 0;
        tab.border = 0;
        tab.addClassName('validationSummaryItems');
        innerFrame.appendChild(tab);
        
        var tBody = $(document.createElement('tbody'));
        tab.appendChild(tBody);
        var tr = $(document.createElement('tr'));
        tBody.appendChild(tr);
        var td = $(document.createElement('td'));
        tr.appendChild(td);
                
        // go through the error messages and add them to the box
        for (var i=0; i < this.messages.length; i++) {
            var msgDiv = $(document.createElement('div'));
            msgDiv.innerText = this.messages[i];
            msgDiv.innerHTML = msgDiv.innerText;
            msgDiv.addClassName('message');
            td.appendChild(msgDiv);
        }
                
        // add the summary box to the target container        
        this.targetContainer.appendChild(frame);
        this.targetContainer.show();
    }
});

var ValidationResponseHelper = Class.create({
    initialize: function() {
        this.Messages = new Array();
        this.Passed = true;
    }
    ,AddMessage: function(msg, pos) {
        
        if (pos == null) this.Messages.push(msg);
        else this.Messages[pos] = msg;
        
        if (!msg.IsValid) this.Passed = false;
    }
});

var ValidationMessage = Class.create({
    initialize: function(txt, controlId, valid) {
        this.Text = txt;
        this.InputControlID = controlId;
        this.IsValid = valid;
    }
});