var parentPath = "";
var parentVar = "";
var iterCount = 0;

function requestXMLVBSkip(data, supports) {
    return requestXMLVBElements(data, supports);
}

function responseXMLVBSkip(data, supports) {
    return responseXMLVBElements(data, supports);
}

function VBRequestXmlElemValue(data, supports) {
    if (data == null) {
        return "";
    }
    if (data.xmlType == "STRTYPE") {
        return 'ab';
    }
    if (data.xmlType == "IDTYPE") {
        return '200000-1011023419';
    }
    if (data.xmlType == "BOOLTYPE") {
        return '1';
    }
    if (data.xmlType == "DATETYPE") {
        return '2007-12-15';
    }
    if (data.xmlType == "DATETIMETYPE") {
        return '2007-12-15T12:15:12-08:00';
    }
    if (data.xmlType == "INTTYPE") {
        return '6';
    }
    if (data.xmlType == "AMTTYPE") {
        return '10.01';
    }
    if (data.xmlType == "PRICETYPE") {
        return '15.65';
    }
    if (data.xmlType == "PERCENTTYPE") {
        return '20.00';
    }
    if (data.xmlType == "QUANTYPE") {
        return '2';
    }
    if (data.xmlType == "GUIDTYPE") {
        return 'Guid.NewGuid().ToString()';
    }
    if (data.xmlType == "ENUMTYPE") {
        if (typeof(data.xmlEnumValues) != "undefined") {
            return data.xmlEnumValues[0];
        }
    }
    return '"' + data.xmlType + '"';
}

function requestXMLVBAttrs(data, supports) {
    if (data == null) {
        return "";
    }
    var str = ""
    if (data.attributes != null) {
        var i;
        for (i=0; i<data.attributes.length; i++) {
            str += parentPath + data.attributes[i].xmlName + ' = ' + data.attributes[i].xmlType + ';<br/>\n';
        }
    }
    return str;
}

function requestXMLVBElements(data, supports) {
    if (data == null) {
        return "";
    }
  var str = "";
  if (typeof(data.elements) != 'undefined' && data.elements != null) {
      var i;
      for (i=0; i<data.elements.length; i++) {
          str += requestXMLVB(data.elements[i],supports);
      }
  }
  return str;
}

function responseXMLVBElements(data, supports) {
    if (data == null) {
        return "";
    }
  var str = "";
  if (typeof(data.elements) != 'undefined' && data.elements != null) {
      var i;
      for (i=0; i<data.elements.length; i++) {
          str += responseXMLVB(data.elements[i],supports);
      }
  }
  return str;
}

function requestXMLVBOR(data, supports) {
    if (data == null) {
        return "";
    }
    var str = "";
    var oldParent = parentPath;
	if (typeof(data.elements) != 'undefined' && data.elements != null) {
		if (data.elements.length > 1) {
		    str += codeComment("'Begin OR<br/>");
		    str += data.xmlName + 'ElementType As ' + codeType('string ') + '<br/>\n';
	    	str += data.xmlName + 'ElementType = "' + data.elements[0].xmlName + '"<br/>\n';
		    var i;
		    for (i=0; i<data.elements.length; i++) {
		    	str += 'if (' + data.xmlName + 'ElementType = "' + data.elements[i].xmlName + '") Then<br/>';
		    	str += '<div class="codeverb-indent">\n';
		        str += requestXMLVB(data.elements[i],supports);
		        str += '</div>\nEnd If<br/>\n';
		    }
		} else {
			str += responseXMLVBElements(data, supports);
		}
	}
    parentPath = oldParent;
    return str;
}

function responseXMLVBOR(data, supports) {
    if (data == null) {
        return "";
    }
    var str = "";
    var oldParent = parentPath;
    var oldParentVar = parentVar;
    str += 'Dim ' + data.fcName + 'Children As ' + codeType('XmlNodeList ') + '<br/>\n';
    str += data.fcName + 'Children = ' + parentVar + '.SelectNodes("' + parentPath + '*")<br/>\n';
   	var iter = 'i' + iterCount++;
   	str += '    Dim ' + iter + ' As Integer<br/>\n';
   	str += '    For ' + iter + ' = 0 To ' + data.fcName + 'Children.Count-1<br/>\n';
	str += '        <div class="codeverb-indent">\n';
	str += '        Dim Child As ' + codeType('XmlNode ') + '<br/>\n';
	str += '        Child = ' + data.fcName + 'Children.Item(i)<br/>\n';
	var i;
	for (i=0; i<data.elements.length; i++) {
	    str += '        if ( Child.Name = "' + data.elements[i].xmlName + '") Then<br/>\n';
		str += '        <div class="codeverb-indent">\n';
		parentVar = 'Child';
		parentPath = './';
		str += responseXMLVBSkip(data.elements[i], supports);
		str += '</div>\nEnd If<br/><br/>\n';	
	}	
	str += '</div>\nNext ' + iter + '<br/><br/>\n';	
	parentPath = oldParent;
	parentVar = oldParentVar;
	return str;
}

function requestXMLVBAggregate(data, supports) {
    if (data == null) {
        return "";
    }
    var str = "";
    var oldParent = parentPath;
    str += '<br/>\n' + codeComment("'Create " + data.xmlName + ' aggregate and fill in field values for it<br/>');
    if (typeof(data.count) != "undefined" && typeof(data.count) == "string" && data.count.indexOf("n") >= 0) {
        str += codeComment("' May create more than one of these aggregates if needed<br/>");
    }
    str += 'Dim ' + data.xmlName + ' As ' + codeType('XmlElement') + '<br/>\n';
    str += data.xmlName + ' = doc.CreateElement("' + data.xmlName + '")<br/>\n';
    str += parentPath + '.AppendChild(' + data.xmlName + ');<br/>\n';
    parentPath = data.xmlName;
    str += requestXMLVBElements(data, supports);
    str += codeComment("'Done creating " + data.xmlName + ' aggregate<br/><br/>');
    parentPath = oldParent;
    return str;
}

function responseXMLVBAggregate(data, supports) {
    if (data == null) {
        return "";
    }
    var str = "";
    var oldParent = parentPath;
    var oldParentVar = parentVar;
    if (typeof(data.count) != "undefined" && typeof(data.count) == "string" && data.count.indexOf("n") >= 0) {
    	str += codeComment("'Walk list of " + data.xmlName + ' aggregates<br/>');
    	str += 'Dim ' + data.xmlName + 'List As ' + codeType('XmlNodeList') + '<br/>\n';
        str += data.xmlName + 'List = ' + parentVar + '.SelectNodes("' + parentPath + data.xmlName + '")<br/>\n';
        str += 'If (Not ' + data.xmlName + 'List Is Nothing) Then<br/>\n';
		str += '    <div class="codeverb-indent">\n';
    	var iter = 'i' + iterCount++;
    	str += '    Dim ' + iter + ' As Integer<br/>\n';
    	str += '    For ' + iter + ' = 0 To ' + data.xmlName + 'List.Count-1<br/>\n';
		str += '        <div class="codeverb-indent">\n';
		str += '        Dim ' + data.xmlName + ' As ' + codeType('XmlNode ') + '<br/>\n';
		str += '        ' + data.xmlName + ' = ' + data.xmlName + 'List.Item(i)<br/>\n';
		parentVar = data.xmlName;
		parentPath = "./";
		str += responseXMLVBElements(data, supports);
		str += '</div>\nNext ' + iter + '<br/>\n';			
		str += '</div>\nEnd If<br/><br/>\n';	
    } else {
    	str += codeComment("'Get all field values for " + data.xmlName + ' aggregate <br/>');
    	if (!data.required) {
    		str += 'Dim ' + data.xmlName + ' As ' + codeType('XmlNode ') + '<br/>\n';
    		str += data.xmlName + ' = ' + parentVar + '.SelectSingleNode("' + parentPath + data.xmlName + '")<br/>\n';
    		str += 'If (Not ' + data.xmlName + ' Is Nothing) Then <br/>\n';
 			str += '<div class="codeverb-indent">\n';
 		}   		
        parentPath = parentPath + data.xmlName + "/";
        str += responseXMLVBElements(data, supports);
        if (!data.required) {
            str += '</div>\nEnd If<br/>\n';
        }
        str += codeComment("'Done with field values for " + data.xmlName + ' aggregate<br/><br/>');
    }
    parentVar = oldParentVar;
    parentPath = oldParent;
    return str;
}
        

function requestXMLVBElement(data, supports)
{
    if (data == null) {
        return "";
    }
    var str = "";
    str += codeComment("'Set field value for " + data.xmlName + getComment(data) + '<br/>');
    str += parentPath + '.AppendChild(MakeSimpleElem(doc, "' + data.xmlName + '", "' + VBRequestXmlElemValue(data, supports) + '"))<br/>\n';
    return str;
}

function responseXMLVBElement(data, supports)
{
    if (data == null) {
        return "";
    }
    var str = "";
    str += codeComment("'Get value of " + data.xmlName + '<br/>');
    if (data.required) {
        str += 'Dim ' + data.xmlName + ' As ' + codeType('String') + '<br/>\n';
        str += data.xmlName + ' = ' + parentVar + '.SelectSingleNode("' + parentPath + data.xmlName + '").InnerText<br/>\n';
    } else {
        str += 'If (Not ' + parentVar + '.SelectSingleNode("' + parentPath + data.xmlName + '") Is Nothing) Then<br/>\n';
		str += '<div class="codeverb-indent">\n';
		str += '    Dim ' + data.xmlName + ' As ' + codeType('String') + '<br/>\n';
        str += '    ' + data.xmlName + ' = ' + parentVar + '.SelectSingleNode("' + parentPath + data.xmlName + '").InnerText<br/>\n';
		str += '</div>\nEnd If<br/><br/>\n';		
    }	   
    return str;
}

function requestXMLVB(data,parentSupports) {
    if (data == null) {
        return "";
    }
  var colspan;
  var str = ""
  var supports = updateSupports(parentSupports, data);
  if (!supportsCheckedEditions(supports)) {
      return str;
  }
  if (!checkSDKVers(data)) {
      return str;
  }
  if (data.xmlType == "skip") {
      str += requestXMLVBSkip(data, supports);
  } else if (data.xmlType == "OR") {
      str += requestXMLVBOR(data, supports);
  } else if (data.xmlType == "Aggregate") {
      str += requestXMLVBAggregate(data, supports);
  } else if (data.xmltype == "List") {
      str += requestXMLVBAggregate(data, supports);
  } else {
      str += requestXMLVBElement(data, supports);
  }
  return str;
}

function responseXMLVB(data, parentSupports) {
    if (data == null) {
        return "";
    }
    var str = "";
    var supports = updateSupports(parentSupports, data);
    if (!supportsCheckedEditions(supports)) {
        return str;
    }
    if (!checkSDKVers(data)) {
        return str;
    }
    if (!data.xmlType) {
        return str;
    } else if (data.xmlType == "skip") {
        str += responseXMLVBSkip(data, supports);
    } else if (data.xmlType == "OR") {
        str += responseXMLVBOR(data, supports);
    } else if (data.xmlType == "Aggregate") {
        str += responseXMLVBAggregate(data, supports);
    } else if (data.xmlType == "List") {
        str += responseXMLVBAggregate(data, supports);
    } else {
        str += responseXMLVBElement(data, supports);
    }
    return str;
}

function XMLVBBuild(data, supports) {
    if (data == null) {
        return "";
    }
    var str = "";
    var msg = _vars['selectedMsg'];
    str += codeType('Public Sub') + ' Build' + data.xmlName + '(doc As ' + codeType('XmlDocument') + ', parent As ' + codeType('XMLElement') + ')<br/>\n';
    str += '    <div class="codeverb-indent">\n';
    parentPath =  "parent";
    str += requestXMLVB(data, supports);
    str += '     </div>\n';
    str += 'End Sub<br/><br/>\n';
    return str;
}

function XMLVBParse(data, supports) {
    if (data == null) {
        return "";
    }
    var str = "";
    str += 'Public Sub Walk' + data.xmlName + '( response As ' + codeType('String') + ')<br/>\n';
    str += '    <div class="codeverb-indent">\n';
    str += '    ' + codeComment("'Parse the response XML string into an XmlDocument<br/>");
    str += '    Dim responseXmlDoc as XmlDocument<br/>\n';
    str += '    responseXmlDoc = new XmlDocument();<br/>\n';
    str += '    responseXmlDoc.LoadXml(response)<br/><br/>\n';
    str += '    ' + codeComment("'Get the response for our request<br/>");
    str += '    Dim ' + data.xmlName + 'List As XmlNodeList<br/>';
    str += '    ' + data.xmlName + 'List = responseXmlDoc.GetElementsByTagName("' + data.xmlName + '")<br/>\n';
    str += '    if (' + data.xmlName + 'List.Count = 1) Then' + codeComment("'Should always be true since we only did one request in this sample<br/>");
    str += '        <div class="codeverb-indent">\n';
    str += '        Dim responseNode As XmlNode<br/>\n';
    str += '        responseNode = ' + data.xmlName + 'List.Item(0);<br/>\n';
    str += '        ' + codeComment("'Check the status code, info, and severity<br/>");
    str += '        Dim rsAttributes as XmlAttributeCollection<br/>\n';
    str += '        rsAttributes = responseNode.Attributes;<br/>\n';
    str += '        Dim statusCode As String<br/>\n';
    str += '        Dim statusSeverity As String<br/>\n';
    str += '        Dim statusMessage As String<br/>\n';
    str += '        statusCode = rsAttributes.GetNamedItem("statusCode").Value<br/>\n';
    str += '        statusSeverity = rsAttributes.GetNamedItem("statusSeverity").Value<br/>\n';
    str += '        statusMessage = rsAttributes.GetNamedItem("statusMessage").Value<br/>\n';
    str += '        <br/>\n';
    str += '        ' + codeComment("'status code = 0 all OK, > 0 is warning<br/>");
    str += '        If (Convert.ToInt32(statusCode) &gt;= 0) Then<br/>\n';
    str += '            <div class="codeverb-indent">\n';
    if (typeof(data.elements) != "undefined"  && data.elements != null) {
    	var retData = data.elements[0]; //only one
    	str += '            Dim ' + retData.xmlName + 'List As ' + codeType('XmlNodeList') + '<br/>\n';
    	str += '            ' + retData.xmlName + 'List = responseNode.SelectNodes("//' + retData.xmlName + '")' + codeComment("'XPath Query<br/>");
    	var iter = 'i' + iterCount++;
    	str += '            Dim ' + iter + ' As Integer<br/>\n';
    	str += '            For ' + iter + ' = 0 To ' + retData.xmlName + 'List.Count-1<br/>\n';
	    str += '                <div class="codeverb-indent">\n';
	    str += '                Dim ' + retData.xmlName + ' As ' + codeType('XmlNode') + '<br/>\n';
	    str += '                ' + retData.xmlName + ' = ' + retData.xmlName + 'List.Item(i)<br/>\n';
    	str += '                <b>Walk' + retData.xmlName + '(' + retData.xmlName + ');</b><br/>\n';
	    str += '                </div>\n';
	    str += '            Next ' + iter + '<br/>\n';
	}    	
    str += '            </div>\n';
    str += '        End If<br/>\n';
    str += '        </div>\n';
    str += '    End If<br/>\n';
    str += '</div>\n';
    str += 'End Sub<br/>\n';
    str += '<br/><br/><br/>\n';
    if (typeof(data.elements) != "undefined" && data.elements != null) {
        var retData = data.elements[0];
     	str += 'Public Sub Walk' + retData.xmlName + '(' + retData.xmlName + ' As '  + codeType('XmlNode') + ')<br/>\n';
        str += '<div class="codeverb-indent">\n';
        str += '    If (' + retData.xmlName + ' = nothing) Then<br/>\n'
        str += '        <div class="codeverb-indent">\n';
        str += '        Exit Sub<br/>\n';
        str += '        </div>\n';
        str += '    End If<br/><br/>\n';
        parentVar = retData.xmlName;
        parentPath = './';
        str += '    ' + codeComment("'Go through all the elements of " + retData.xmlName + '<br/>');
        str += responseXMLVBElements(retData, supports);
	    str += '</div>\nEnd Sub<br/>\n';
	    str += '<br/><br/><br/>\n';
    }
    return str;
}    

function XMLVBHeader(XMLType) 
{
    var str = "";
    str += codeComment("'The following sample code is generated as an illustration of <br/>");
    str += codeComment("'Creating requests and parsing responses ONLY<br/>");
    str += codeComment("'This code is NOT intended to show best practices or ideal code<br/>");
    str += codeComment("'Use at your most careful discretion<br/><br/>");
    str += 'imports System<br/>\n';
    str += 'imports System.Net<br/>\n';
    str += 'imports System.Drawing<br/>\n';
    str += 'imports System.Collections<br/>\n';
    str += 'imports System.ComponentModel<br/>\n';
    str += 'imports System.Windows.Forms<br/>\n';
    str += 'imports System.Data<br/>\n';
    str += 'imports System.IO<br/>\n';
    str += 'imports System.Xml<br/>\n';
    if (XMLType == "qbxml") {
        str += 'imports Interop.QBXMLRP2<br/>\n';
    }
    str += '<br/>\n';
    str += 'Module <span class="xmlverb-ns-name">com.intuit.idn.samples</span><br/>\n';
    str += '    <div class="codeverb-indent"><br/>\n';
    str += '    Public Class Sample<br/>\n';
    str += '        <div class="codeverb-indent"><br/>\n';    
    str += '        Private Function MakeSimpleElem(doc As ' + codeType('XmlDocument') + ', tagName As ' + codeType('String') + ', tagVal As ' + codeType('String') + ') As ' + codeType('XmlElement') + '<br/>\n';
    str += '            <div class="codeverb-indent">\n';
    str += '            Dim elem as ' + codeType('XmlElement') + '<br/>\n';
	str += '            elem = doc.CreateElement(tagName);<br/>\n';
	str += '            elem.InnerText = tagVal;<br/>\n';
	str += '            return elem;<br/>\n';
	str += '            </div>\n';
	str += '        End Function<br/><br/>\n';
    
    str += '        Public Sub Do' + _vars['selectedMsg'] + '()<br/>\n';
    str += '            <div class="codeverb-indent">\n';
    if (XMLType == "qbxml") {
        str += '        Dim sessionBegun as ' + codeType('Boolean') + '<br/>\n';
        str += '        sessionBegun = False<br/>\n';
        str += '        Dim connectionOpen as '  + codeType('Boolean') + '<br/>\n'
        str += '        connectionOpen = False<br/>\n';
        str += '        Dim ticket As ' + codeType('String') + '<br/>\n';
        str += '        Dim rp as ' + codeType('RequestProcessor2') + '<br/><br/>\n';
    }
    str += '            Try<br/>\n';
    str += '                <div class="codeverb-indent">\n';
    if (XMLType == "qbxml") {
        str += '                ' + codeComment("'Create the Request Processor object<br/>\n");
        str += '                rp = new RequestProcessor2()<br/><br/>\n';
    }
    str += '                ' + codeComment("'Create the XML document to hold our request<br/>\n");
    var major = maxSDK.substring(0,1);
    var minor = maxSDK.substring(2);
    str += '                Dim requestXmlDoc As ' + codeType('XmlDocument') + '<br/>\n';
    str += '                requestXmlDoc = New XmlDocument()<br/>\n';
    str += '                ' + codeComment("'Add the prolog processing instructions<br/>\n");
    str += '                requestXmlDoc.AppendChild(requestXmlDoc.CreateXmlDeclaration("1.0", null, null))<br/>\n';
    str += '                requestXmlDoc.AppendChild(requestXmlDoc.CreateProcessingInstruction("' + XMLType + '", "version=\\"' + major + '.' + minor + '\\""))<br/>\n';
    str += '                <br/>\n';
    str += '                ' + codeComment("'Create the outer request envelope tags<br/>");
    str += '                Dim outer as ' + codeType('XmlElement') + '<br/>\n';
    str += '                outer = requestXmlDoc.CreateElement("' + XMLType.toUpperCase() + '")<br/>\n';
    str += '                requestXmlDoc.AppendChild(outer);<br/>\n';
    str += '                <br/>\n';
    if (XMLType == "qbmsxml") {
    	str += codeComment("'Create a signon request for the QBMS server<br/>");
    	str += 'BuildSignonRq(requestXmlDoc, outer)<br/>\n';
    	str += '<br/>\n';
    }
    str += '                ' + codeComment("'Create the inner request envelope &amp; any needed attributes<br/>");
    str += '                Dim inner As ' + codeType('XmlElement') + '<br/>\n';
    str += '                inner = requestXmlDoc.CreateElement("' + XMLType.toUpperCase() + 'MsgsRq")<br/>\n';
    str += '                outer.AppendChild(inner);<br/>\n';
    str += '                inner.SetAttribute("onError", "stopOnError");<br/>\n';
    str += '                <b>Build' + _vars['selectedMsg'] + 'Rq(requestXmlDoc, inner);</b><br/><br/>\n';
    if (XMLType == "qbxml") {
    	str += '                ' + codeComment("'Connect to QuickBooks and begin a session<br/>");
    	str += '                rp.OpenConnection2("","Sample Code from OSR", localQBD);<br/>\n';
    	str += '                connectionOpen = True;<br/>\n';
    	str += '                ticket = rp.BeginSession("", QBFileMode.qbFileOpenDoNotCare)<br/>\n';
    	str += '                sessionBegun = true;<br/><br/>\n';
    	str += '                ' + codeComment("'Send the request and get the response from QuickBooks<br/>");
    	str += '                Dim responseStr As ' + codeType('String') + '<br/>\n'
    	str += '                responseStr = rp.ProcessRequest(ticket, requestXmlDoc.OuterXml)<br/><br/>\n';
    	str += '                ' + codeComment("'End the session and close the connection to QuickBooks<br/>");
    	str += '                rp.EndSession(ticket);<br/>\n';
    	str += '                sessionBegun = false;<br/>\n';
    	str += '                rp.CloseConnection();<br/>\n';
    	str += '                connectionOpen = false;<br/><br/>\n';
    } else if (XMLType == "qbmsxml") {
        str += codeComment("'Send the request and get the response from QBMS<br/>");
        str += '                Dim responseStr as ' + codeType('String') + '<br/>\n';
        str += '                responseStr  = SendRequest(requestXmlDoc.OuterXml)<br/>\n';
    	str += '                <br/>\n';
    }
    str += '                <b>Walk' + _vars['selectedMsg'] + 'Rs(responseStr);</b><br/><br/>\n';
    str += '                </div>\n';
    str += '            Catch e As ' + codeType('Exception') + '<br/>\n';
    str += '                <div class="codeverb-indent">\n';
    str += '                MessageBox.Show(e.Message, "Error");<br/>\n';
    if (XMLType == "qbxml") {
    	str += '                If (sessionBegun) Then<br/>\n';
    	str += '                    <div class="codeverb-indent">\n';
    	str += '                    sessionManager.EndSession(ticket);<br/>\n';
    	str += '                    </div>\n';
    	str += '                End If<br/>\n';
    	str += '                If (connectionOpen) Then<br/>\n';
    	str += '                    <div class="codeverb-indent">\n';
    	str += '                    sessionManager.CloseConnection();<br/>\n';
    	str += '                    </div>\n';
    	str += '                End If<br/>\n';
    }
    str += '                </div>\n';
    str += '            End Try<br/>\n';
    str += '            </div>\n';
    str += '        End Sub<br/><br/><br/>\n';
    if (XMLType == "qbmsxml") {
	    str += 'Private Sub BuildSignonRq(doc as ' + codeType('XmlDocument') + ', parent as ' + codeType('XmlElement') + ')<br/>\n';
	    str += '    <div class="codeverb-indent">\n';
	    str += '    Dim rq as ' + codeType('XmlElement') + '<br/>\n';
        str += '    rq = doc.CreateElement("SignonDesktopRq")<br/>\n';
        str += '    parent.AppendChild(rq)<br/>\n';
		str += codeComment("'Create ClientDateTime aggregate and fill in field values for it<br/>");
        str += '    rq.AppendChild(MakeSimpleElem(doc, "ClientDateTime", "2007-04-12T21:54:30"));<br/><br/>\n';
		str += codeComment("' AppLogin<br/>");
        str += '    rq.AppendChild(MakeSimpleElem(doc, "ApplicationLogin", "trialapp.qbms.intuit.com"))<br/><br/>\n';
		str += codeComment("'Connection Ticket<br/>");
        str += '    rq.AppendChild(MakeSimpleElem(doc, "ConnectionTicket", "TGT-201-5UYHgnHLIODwg8I5ENct$Q"))<br/><br/>\n';
        str += codeComment("'Language<br/>");
        str += '    rq.AppendChild(MakeSimpleElem(doc, "Language", "English"))<br/><br/>\n';
		str += codeComment("'AppID<br/>");
        str += '    rq.AppendChild(MakeSimpleElem(doc, "AppID", "100023234"))<br/>\n';
    	str += '</div>\n';
    	str += 'End Sub<br/><br/><br/>\n';
        str += codeComment("'Send an XML request to qbMS and return the XML response.<br/>");
        str += codeComment("'    url -- The URL to which the request should be POSTed<br/>");
        str += codeComment("'    request_xml The XML string to POST<br/>");
        str += 'private function SendRequest(request_xml as ' + codeType('String') + ') as ' + codeType('String') + '<br/>\n';
	    str += '<div class="codeverb-indent">\n';
	    str += '    Dim url as ' + codeType('String') + '<br/>\n';
        str += '    url = "https://merchantaccount.ptc.quickbooks.com/j/AppGateway";<br/>\n';
        str += '    Dim strResponse as ' + codeType('String') + '<br/>\n';
        str += '    strResponse = ""<br/>\n';
        str += '    Try<br/>\n';
	    str += '        <div class="codeverb-indent">\n';
        str += codeComment("'Prepare the HTTP request<br/>");
        str += '        Dim objRequest as ' + codeType('HttpWebRequest') + '<br/>\n';
        str += '        objRequest = (HttpWebRequest)WebRequest.Create(url)<br/>\n';
        str += '        objRequest.Method = "POST"<br/>\n';
        str += '        objRequest.ContentLength = request_xml.Length<br/>\n';
        str += '        objRequest.ContentType = "application/x-qbmsxml"<br/><br/>\n';
        str += codeComment("'Send the Request<br/>");
        str += '        Dim myWriter as ' + codeType('StreamWriter') + '<br/>\n';
        str += '        myWriter = nothing<br/>\n';
        str += '        myWriter = new StreamWriter(objRequest.GetRequestStream())<br/>\n';
        str += '        myWriter.Write(request_xml)<br/>\n';
        str += '        myWriter.Close()<br/><br/>\n';
		str += codeComment("'Get the response<br/>");
		str += '        Dim objResponse as ' + codeType('HttpWebResponse') + '<br/>\n';
        str += '        objResponse = (HttpWebResponse)objRequest.GetResponse()<br/>\n';
        str += '        Dim sr as ' + codeType('StreamReader') + '<br/>\n';
        str += '        sr = new StreamReader(objResponse.GetResponseStream())<br/>\n';
		str += '        strResponse = sr.ReadToEnd()<br/>\n';
   	    str += '    </div>\n';
        str += '    Catch ( e as ' + codeType('Exception') + ')<br/>\n';
	    str += '         <div class="codeverb-indent">\n';
	    str += codeComment("'do something appropriate for your application<br/>");
        str += '         return ""<br/>\n';
   	    str += '         </div>\n';
        str += '    End Try<br/>\n';
        str += '    return strResponse;<br/>\n';
    	str += '</div>\n';
    	str += 'End Function<br/><br/><br/>\n';
    }
    return str;
}
 

function renderXMLVBCode(targ) {
    showUS = _vars['showUS'][0];
    showOE = _vars['showOE'][0];
    showCA = _vars['showCA'][0];
    showUK = _vars['showUK'][0];
    datadir = _vars['dataDir'][0];
    indent = "";
    var docroot = _vars['docroot'][0];
    var msgData = _vars['messageDataJSON'][0];
    var messageDataJSON;
    if (msgData != "") {
        messageDataJSON = eval('(' + msgData + ')');
    }
    var respData = _vars['responseData'][0];
    var respDataJSON;
    if (respData != "") {
        respDataJSON = eval('(' + respData + ')');
    }
    rowcount = 0;
    maxSDK = _vars['maxSDKVersion'][0];
    var supports = {US:true, CA:true, UK:true, OE:true};
    var content = '<b:xhtml>\n';
    content += XMLVBHeader(docroot);
    content += XMLVBBuild(messageDataJSON, supports);
    content += '<br/><br/><br/>\n';
    content += XMLVBParse(respDataJSON, supports);
    content += '</div>\n';
    content += 'End Class<br/>\n';
    content += '</div>\n';
    content += 'End Module<br/>\n';
    content += '</b:xhtml>\n';
    //alert(content)
    //content += requestXMLVB(data, supports);
    bpc.render(content,'replacechildren', targ);
    //bpc.task(['b:action', 'settext', 'b:value', content], _current);
    return content;
}

