package soap

import (
	
)

type SoapMessage struct {
	document *dom.Document
	envelope *dom.Element
	header   *SoapHeader
	body     *dom.Element
}

type MessageBuilder interface {
	SetBody(*dom.Element)
	NewBody() *dom.Element
	CreateElement(*dom.Element, string, dom.Namespace) *dom.Element
	CreateBodyElement(string, dom.Namespace) *dom.Element
	Header() *SoapHeader
	Doc() *dom.Document
	Free()
	String() string
}

func () ( *SoapMessage) {
	 := dom.CreateDocument()
	 := dom.CreateElement("Envelope")
	.SetRoot()
	AddUsualNamespaces()
	DOM_NS_SOAP_ENV.SetTo()

	 = &SoapMessage{document: , envelope: }
	return
}

func ( *SoapMessage) () ( *dom.Element) {
	 = dom.CreateElement("Body")
	.envelope.AddChild()
	DOM_NS_SOAP_ENV.SetTo()
	return
}

func ( *SoapMessage) () string {
	return .document.String()
}

func ( *SoapMessage) () *dom.Document {
	return .document
}

func ( *SoapMessage) () {
}

func ( *SoapMessage) ( *dom.Element,  string,  dom.Namespace) ( *dom.Element) {
	 = dom.CreateElement()
	.AddChild()
	.SetTo()
	return
}

func ( *SoapMessage) ( string,  dom.Namespace) ( *dom.Element) {
	if .body == nil {
		.body = .NewBody()
	}
	return .CreateElement(.body, , )
}

func ( *SoapMessage) () *SoapHeader {
	if .header == nil {
		.header = &SoapHeader{message: }
	}
	return .header
}