/**
 * Miscellaneous utilities.
 */

var Wellcare = {
    /**
     * Clear the flash area.
     */
    clearFlash: function() {
        var flash = $('FlashPlaceHolder')
        if(flash != null)
            {
            while (flash.firstChild) 
                {
                flash.removeChild(flash.firstChild);
                }
            }
    },

    /**
     * Build DOM components based on the errors object (defined in lib under error_converter).
     * Assumes an element with an id of flash is defined.
     * Depends on builder.js
     */
    renderFlash: function(obj) {
        // If this is modified, you may also want to modify the render_flash method in application_helper
        this.clearFlash();
        var flash = $('FlashPlaceHolder');
        // Single line error message
        cls = obj.status + 'Explanation';
        if (obj.message) {
            flash.appendChild(
                    Builder.node('div', {className: cls + "Top"}, '')
    	    );
            var newFlashMessage = Builder.node('div', {id: "InnerFlash", className: cls + "Flash"}, obj.message);
            newFlashMessage.innerHTML = obj.message;
            flash.appendChild(
                        Builder.node('div', {id: "OuterFlash", className: cls + "Div"}, [
                        Builder.node('div', {className: cls + "Image"}, ""),
                        newFlashMessage]
            ));
            flash.appendChild(
                    Builder.node('div', {className: cls + "Bottom"}, '')
            );
        }
        // Multiple error messages or model validation errors
        else if (obj.header) {
            var msgEls = obj.messages.map(function(msg) {
                                              var newFlashMessage = Builder.node('ol', {className: cls + "List"}, msg);
                                              newFlashMessage.innerHTML = msg;
                                              return newFlashMessage;
                                          });
            flash.appendChild(
                    Builder.node('div', {className: cls + "Top"}, '')
	    );
            flash.appendChild(
                    Builder.node('div', {id: "OuterFlash", className: cls + "Div"}, [
                        Builder.node('div', {className: cls + "Image"}, ""),
                        Builder.node('div', {id: "InnerFlash", className: cls + "Flash"}, msgEls)]
	    ));
            flash.appendChild(
                    Builder.node('div', {className: cls + "Bottom"}, '')
	    );
	};
        $('OuterFlash').style.height = String($('InnerFlash').offsetHeight) + "px";
    },

    renderFlashNotice: function(message) {
        this.renderFlash({status: 'notice', message: message});
    },

    renderFlashWarning: function(message) {
        this.renderFlash({status: 'warning', message: message});
    },

    renderFlashError: function(message) {
        this.renderFlash({status: 'error', message: message});
    }
}
