function box($args)
    {
        $defaults = array('group' => null, 'element' => null, 'special_element_type' => false, 'special_element_meta' => false, 'selective_properties' => false, 'property_values' => false, 'property_values_excluding_defaults' => false, 'unsaved_values' => false);
        extract(array_merge($defaults, $args));
        //Format the group name into capitalized and spaced
        $group = ucwords(str_replace('-', ' ', $group));
        //If the group doesn't exist, don't attempt to display it
        if (!($properties = HeadwayElementProperties::get_properties_by_group($group))) {
            return false;
        }
        /* Set up variables */
        $uncustomize_button = '<span class="uncustomize-property tooltip" title="Set the property to inherit."></span>';
        $customize_button = '<div class="customize-property"><span class="tooltip" title="Click to change the value for this property.  If left uncustomized, the property will automatically inherit to the default set for this element type in the defaults tab or the parent element if editing a state, instance, or layout-specific element.">Customize</span></div>';
        $element_selector_attr = isset($element['selector']) ? ' element_selector="' . htmlspecialchars($element['selector']) . '"' : null;
        /* Determine if it's a special element */
        $special_element = !$special_element_type || $special_element_type == 'default' ? false : true;
        /* Custom behaviors for special element types */
        switch ($special_element_type) {
            case 'default':
                $uncustomize_button = null;
                $customize_button = null;
                break;
            case 'instance':
                $instances = headway_get('instances', $element);
                $instance = $instances[$special_element_meta];
                $element_selector_attr = ' element_selector="' . htmlspecialchars($instance['selector']) . '"';
                break;
            case 'state':
                $states = headway_get('states', $element);
                $state = $states[$special_element_meta];
                $element_selector_attr = ' element_selector="' . htmlspecialchars($state['selector']) . '"';
                break;
            case 'layout':
                if (isset($element['selector']) && isset($special_element_meta)) {
                    $element_selector_attr = ' element_selector="' . htmlspecialchars('body.layout-using-' . $special_element_meta . ' ' . $element['selector']) . '"';
                    if ($element['selector'] == 'body') {
                        $element_selector_attr = str_replace(' body', '', $element_selector_attr);
                    }
                }
                break;
        }
        /* Set customized box class flag */
        $customized_box_class = '';
        $property_box_title = '';
        foreach ($property_values_excluding_defaults as $property_id => $property_value) {
            if (!isset($properties[$property_id])) {
                continue;
            }
            $customized_box_class = ' design-editor-box-customized';
            $property_box_title = ' title="' . __('You have customized a property in this property group.', 'headway') . '"';
            break;
        }
        /* Create the box */
        echo '<div class="design-editor-box design-editor-box-' . str_replace(' ', '-', strtolower($group)) . ' design-editor-box-minimized' . $customized_box_class . '">';
        echo '<span class="design-editor-box-title"' . $property_box_title . '>' . $group . '</span>';
        echo '<span class="design-editor-box-toggle"></span>';
        if ($group == 'Rounded Corners' || $group == 'Borders' || $group == 'Padding' || $group == 'Margins') {
            echo '<span class="design-editor-lock-sides" data-locked="false"></span>';
        }
        echo '<ul class="design-editor-box-content">';
        foreach ($properties as $property_id => $options) {
            //If the $selective_properties variable is set, then make sure we're only showing those properties.
            if (is_array($selective_properties)) {
                if (!in_array($property_id, $selective_properties)) {
                    continue;
                }
            }
            //Make sure the input type for the property really exists
            if (!is_callable(array(__CLASS__, 'input_' . str_replace('-', '_', $options['type'])))) {
                continue;
            }
            if (headway_fix_data_type(headway_get($property_id, $property_values)) || headway_fix_data_type(headway_get($property_id, $property_values)) === 0) {
                $options['value'] = $property_values[$property_id];
                $customized = true;
                //If the value isn't set try to get the inherit location value, if not, revert clear back to the default property type value
            } else {
                $property_default = isset($options['default']) ? $options['default'] : null;
                $options['value'] = HeadwayElementsData::get_inherited_property($element['id'], $property_id, $property_default);
                $customized = false;
            }
            $js_callback = htmlspecialchars('
									(function(params){
										' . $options['js-callback'] . '
									})');
            /* Set up attributes */
            $property_title = '';
            $property_classes = array('design-editor-property-' . $property_id);
            if (headway_fix_data_type(headway_get($property_id, $property_values_excluding_defaults)) || headway_fix_data_type(headway_get($property_id, $property_values_excluding_defaults)) === 0) {
                $property_classes[] = 'customized-property-by-user';
                $property_title = ' title="' . __('You have customized this property.', 'headway') . '"';
            } else {
                if (!$customized && $special_element_type !== 'default') {
                    $property_classes[] = 'uncustomized-property';
                }
                if (!$customized && headway_get($property_id, $property_values) === '') {
                    $property_classes[] = 'uncustomized-property-by-user';
                    $property_title = ' title="' . __('You have set this property to inherit.', 'headway') . '"';
                }
            }
            /* add a locked class if it's a lockable element only */
            if ($group == 'Rounded Corners' || $group == 'Padding' || $group == 'Margins' || $property_id == 'border-top-width' || $property_id == 'border-right-width' || $property_id == 'border-bottom-width' || $property_id == 'border-left-width') {
                $property_classes[] = 'lockable';
            }
            if ($property_id == 'border-top-width') {
                echo '<li class="design-property-border-heading"><strong>Border Width</strong></li>';
            }
            echo '<li class="' . implode(' ', array_filter($property_classes)) . '"' . $property_title . '>';
            echo '<strong><span class="property-label">' . $options['name'] . '</span>' . $uncustomize_button . '</strong>';
            echo '<div class="property-' . $options['type'] . ' property">';
            call_user_func(array(__CLASS__, 'input_' . str_replace('-', '_', $options['type'])), $options, $property_id);
            echo '<input ' . $element_selector_attr . ' element="' . $element['id'] . '" property="' . $property_id . '" data-element-group="' . $element['group'] . '" special_element_type="' . $special_element_type . '" special_element_meta="' . $special_element_meta . '" type="hidden" callback="' . $js_callback . '" class="property-hidden-input" value="' . $options['value'] . '" />';
            echo '</div>';
            echo $customize_button;
            echo '</li>';
        }
        echo '</ul><!-- .design-editor-box-content -->';
        echo '</div><!-- .design-editor-box -->';
    }