'use strict';

/*@
Ox.FormItem <f> FormItem Element, wraps form element with an error message
    ([options[, self]]) -> <o:Ox.Element> FormItem Element
    options <o> Options object
        element <o|null> element
        error <s> error message
    self <o>    Shared private variable
@*/

Ox.FormItem = function(options, self) {

    self = self || {};
    var that = Ox.Element({}, self)
            .defaults({
                element: null,
                error: ''
            })
            .options(options || {})
            .addClass('OxFormItem');

    self.description = self.options.element.options('description');
    if (self.description) {
        $('<div>')
            .addClass('OxFormDescription OxSelectable')
            .html(self.description)
            .appendTo(that);
    }
    that.append(self.options.element);
    self.$message = Ox.Element()
        .addClass('OxFormMessage OxSelectable')
        .appendTo(that);

    /*@
    setMessage <f> set message
        (message) -> <u> set message
    @*/
    that.setMessage = function(message) {
        self.$message.html(message)[message !== '' ? 'show' : 'hide']();
    };

    /*@
    value <f> get value
        () -> <s> get value of wrapped element
    @*/
    that.value = function() {
        return self.options.element.value();
    };

    return that;

};