private static void ExportField(XmlDocument doc, XmlElement f, Field field)
        {
            switch (field.FieldType)
            {
            case FieldType.Url:
                UrlProperty uprop = (UrlProperty)field.Data;
                switch (uprop.Type)
                {
                case UrlType.File:
                    doc.AddAttribute(f, new XmlAttributeElement("method", "file"));
                    break;

                case UrlType.Folder:
                    doc.AddAttribute(f, new XmlAttributeElement("method", "folder"));
                    break;

                case UrlType.Url:
                    doc.AddAttribute(f, new XmlAttributeElement("method", "url"));
                    break;
                }

                break;

            case FieldType.Text:
                if (field.DefaultValue.Enabled)
                {
                    doc.AddAttribute(f, new XmlAttributeElement("default", field.DefaultValue.AsText, string.Empty));
                }

                break;

            case FieldType.Select:
                List <string> sc           = (List <string>)field.Data;
                string        selectValues = string.Empty;
                foreach (string s in sc)
                {
                    if (selectValues.Length != 0)
                    {
                        selectValues += ";";
                    }

                    selectValues += s;
                }

                doc.AddAttribute(f, new XmlAttributeElement("values", selectValues));
                if (field.DefaultValue.Enabled)
                {
                    doc.AddAttribute(f, new XmlAttributeElement("default", field.DefaultValue.Value.ToString(), (-1).ToString()));
                }

                break;

            case FieldType.Number:
                if (field.DefaultValue.Enabled)
                {
                    doc.AddAttribute(f, new XmlAttributeElement("default", field.DefaultValue.Value.ToString(), (0).ToString()));
                }

                NumberProperty prop = field.Data as NumberProperty;
                if (prop != null)
                {
                    doc.AddAttributes(f, new XmlAttributeElement[] {
                        new XmlAttributeElement("decimal", prop.DecimalPlaces.ToString(), (0).ToString()),
                        new XmlAttributeElement("increment", prop.Increment.ToString(), (1).ToString()),
                        new XmlAttributeElement("thousands", prop.Thousands.ToString(), false.ToString()),
                        new XmlAttributeElement("prefix", prop.Prefix, string.Empty),
                        new XmlAttributeElement("suffix", prop.Suffix, string.Empty)
                    });
                    if (prop.Bounds)
                    {
                        doc.AddAttributes(f, new XmlAttributeElement[] {
                            new XmlAttributeElement("maximum", prop.Maximum.ToString()),
                            new XmlAttributeElement("minimum", prop.Minimum.ToString())
                        });
                    }
                }

                break;

            case FieldType.List:
                ListProperty listRef = field.Data as ListProperty;
                if (listRef != null)
                {
                    doc.AddAttribute(f, new XmlAttributeElement("ref_guid", listRef.Reference.Identifier.ToString()));
                }

                break;

            case FieldType.Boolean:
                if (field.DefaultValue.Enabled)
                {
                    doc.AddAttribute(f, new XmlAttributeElement("default", field.DefaultValue.Value.ToString()));
                }

                break;

            case FieldType.Date:
                if (field.DefaultValue.Enabled)
                {
                    doc.AddAttribute(f, new XmlAttributeElement("default", field.DefaultValue.Value.ToString(), DateTime.MinValue.ToString()));
                    DateProperty dprop = field.Data as DateProperty;
                    if (dprop != null)
                    {
                        doc.AddAttribute(f, new XmlAttributeElement("time", dprop.ViewTime.ToString(), false.ToString()));
                    }
                }

                break;

            case FieldType.Rating:
                if (field.DefaultValue.Enabled)
                {
                    doc.AddAttribute(f, new XmlAttributeElement("default", field.DefaultValue.Value.ToString(), (0).ToString()));
                }

                break;

            case FieldType.Reference:
                ReferenceProperty reference = field.Data as ReferenceProperty;
                if (reference != null)
                {
                    doc.AddAttribute(f, new XmlAttributeElement("ref_guid", reference.Reference.Identifier.ToString()));
                }

                break;

            case FieldType.Table:
                List <ColumnProperty> list = (List <ColumnProperty>)field.Data;
                foreach (ColumnProperty cp in list)
                {
                    XmlElement c = doc.CreateElement(f, "column", "name", cp.Name);
                    if (cp.Reference != null)
                    {
                        doc.AddAttribute(c, new XmlAttributeElement("ref_guid", cp.Reference.Identifier.ToString()));
                    }
                }

                break;
            }
        }