var parentPath = "";
var parentVar = "";

function requestXMLCSharpSkip(data, supports) {
    return requestXMLCSharpElements(data, supports);
}

function responseXMLCSharpSkip(data, supports) {
    return responseXMLCSharpElements(data, supports);
}

function cSharpRequestXmlElemValue(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 requestXMLCSharpAttrs(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 requestXMLCSharpElements(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 += requestXMLCSharp(data.elements[i],supports);
      }
  }
  return str;
}

function responseXMLCSharpElements(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 += responseXMLCSharp(data.elements[i],supports);
      }
  }
  return str;
}

function requestXMLCSharpOR(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 += codeType('string ') + 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 + '")' + '<br/>';
		    	str += '{<div class="codeverb-indent">\n';
		        str += requestXMLCSharp(data.elements[i],supports);
		        str += '</div>\n}<br/>\n';
		    }
		} else {
		    str += requestXMLCSharpElements(data, supports);
		}
	}
    parentPath = oldParent;
    return str;
}

function responseXMLCSharpOR(data, supports) {
    if (data == null) {
        return "";
    }
    var str = "";
    var oldParent = parentPath;
    var oldParentVar = parentVar;
    if (typeof(data.elements) != undefined) {
	    if (data.elements.length > 1) {
		    str += codeType('XmlNodeList ') + data.fcName + 'Children = ' + parentVar + '.SelectNodes("' + parentPath + '*");<br/>\n';
		    str += 'for (' + codeType('int ') + 'i = 0; i &lt; ' + data.fcName + 'Children.Count; i++)<br/>\n';
			str += '{<div class="codeverb-indent">\n';
			str += codeType('XmlNode ') + '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 + '")<br/>\n';
				str += '{<div class="codeverb-indent">\n';
				parentVar = 'Child';
				parentPath = './';
				str += responseXMLCSharpSkip(data.elements[i], supports);
				str += '</div>\n}<br/><br/>\n';	
			}	
			str += '</div>\n}<br/><br/>\n';	
		} else {
			str += responseXMLCSharpElements(data, supports);
		}
	}
	parentPath = oldParent;
	parentVar = oldParentVar;
	return str;
}

function requestXMLCSharpAggregate(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 += codeType('XmlElement') + ' ' + data.xmlName + ' = doc.CreateElement("' + data.xmlName + '");<br/>\n';
    str += parentPath + '.AppendChild(' + data.xmlName + ');<br/>\n';
    parentPath = data.xmlName;
    str += requestXMLCSharpElements(data, supports);
    str += codeComment('//Done creating ' + data.xmlName + ' aggregate<br/><br/>');
    parentPath = oldParent;
    return str;
}

function responseXMLCSharpAggregate(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 += codeType('XmlNodeList ') + data.xmlName + 'List = ' + parentVar + '.SelectNodes("' + parentPath + data.xmlName + '");<br/>\n';
        str += 'if (' + data.xmlName + 'List != null)<br/>\n';
		str += '{<div class="codeverb-indent">\n';
		str += 'for (' + codeType('int ') + 'i = 0; i &lt; ' + data.xmlName + 'List.Count; i++)<br/>\n';
		str += '{<div class="codeverb-indent">\n';
		str += codeType('XmlNode ') + data.xmlName + ' = ' + data.xmlName + 'List.Item(i);<br/>\n';
		parentVar = data.xmlName;
		parentPath = "./";
		str += responseXMLCSharpElements(data, supports);
		str += '</div>\n}<br/>\n';			
		str += '</div>\n}<br/><br/>\n';	
    } else {
    	str += codeComment('//Get all field values for ' + data.xmlName + ' aggregate <br/>');
    	if (!data.required) {
    		str += codeType('XmlNode ') + data.xmlName + ' = ' + parentVar + '.SelectSingleNode("' + parentPath + data.xmlName + '");<br/>\n';
    		str += 'if (' + data.xmlName + ' != null)<br/>\n';
 			str += '{<div class="codeverb-indent">\n';
 		}   		
        parentPath = parentPath + data.xmlName + "/";
        str += responseXMLCSharpElements(data, supports);
        if (!data.required) {
            str += '</div>\n}<br/>\n';
        }
        str += codeComment('//Done with field values for ' + data.xmlName + ' aggregate<br/><br/>');
    }
    parentVar = oldParentVar;
    parentPath = oldParent;
    return str;
}
        

function requestXMLCSharpElement(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 + '", "' + cSharpRequestXmlElemValue(data, supports) + '"));<br/>\n';
    return str;
}

function responseXMLCSharpElement(data, supports)
{
    if (data == null) {
        return "";
    }
    var str = "";
    str += codeComment('//Get value of ' + data.xmlName + '<br/>');
    if (data.required) {
        str += codeType('string ') + data.xmlName + ' = ' + parentVar + '.SelectSingleNode("' + parentPath + data.xmlName + '").InnerText;<br/>\n';
    } else {
        str += 'if (' + parentVar + '.SelectSingleNode("' + parentPath + data.xmlName + '") != null)<br/>\n';
		str += '{<div class="codeverb-indent">\n';
        str += codeType('string ') + data.xmlName + ' = ' + parentVar + '.SelectSingleNode("' + parentPath + data.xmlName + '").InnerText;<br/>\n';
		str += '</div>\n}<br/>\n';		
    }	   
    return str;
}

function requestXMLCSharp(data,parentSupports) {
  var colspan;
  var str = ""
  var supports = updateSupports(parentSupports, data);
    if (data == null) {
        return "";
    }
  if (!supportsCheckedEditions(supports)) {
      return str;
  }
  if (!checkSDKVers(data)) {
      return str;
  }
  if (data.xmlType == "skip") {
      str += requestXMLCSharpSkip(data, supports);
  } else if (data.xmlType == "OR") {
      str += requestXMLCSharpOR(data, supports);
  } else if (data.xmlType == "Aggregate") {
      str += requestXMLCSharpAggregate(data, supports);
  } else if (data.xmltype == "List") {
      str += requestXMLCSharpAggregate(data, supports);
  } else {
      str += requestXMLCSharpElement(data, supports);
  }
  return str;
}

function responseXMLCSharp(data, parentSupports) {
    var str = "";
    if (data == null) {
        return "";
    }
    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 += responseXMLCSharpSkip(data, supports);
    } else if (data.xmlType == "OR") {
        str += responseXMLCSharpOR(data, supports);
    } else if (data.xmlType == "Aggregate") {
        str += responseXMLCSharpAggregate(data, supports);
    } else if (data.xmlType == "List") {
        str += responseXMLCSharpAggregate(data, supports);
    } else {
        str += responseXMLCSharpElement(data, supports);
    }
    return str;
}

function XMLCSharpBuild(data, supports) {
    var str = "";
    if (data == null) {
        return "";
    }
    var msg = _vars['selectedMsg'];
    str += codeType('void') + ' Build' + data.xmlName + '(' + codeType('XmlDocument') + ' doc, ' + codeType('XmlElement') + ' parent)<br/>\n';
    str += '{<div class="codeverb-indent">\n';
    parentPath =  "parent";
    str += requestXMLCSharp(data, supports);
    str += '</div>\n';
    str += '}<br/><br/>\n';
    return str;
}

function XMLCSharpParse(data, supports) {
    var str = "";
    if (data == null) {
        return "";
    }
    str += codeType('void') + ' Walk' + data.xmlName + '(' + codeType('string') + ' response)<br/>\n';
    str += '{<div class="codeverb-indent">\n';
    str += codeComment('//Parse the response XML string into an XmlDocument<br/>');
    str += codeType('XmlDocument ') + 'responseXmlDoc = new XmlDocument();<br/>\n';
    str += 'responseXmlDoc.LoadXml(response);<br/><br/>\n';
    str += codeComment('//Get the response for our request<br/>');
    str += codeType('XmlNodeList ') + data.xmlName + 'List = responseXmlDoc.GetElementsByTagName("' + data.xmlName + '");<br/>\n';
    str += 'if (' + data.xmlName + 'List.Count == 1) ' + codeComment('//Should always be true since we only did one request in this sample<br/>');
    str += '{<div class="codeverb-indent">\n';
    str += codeType('XmlNode ') + 'responseNode = ' + data.xmlName + 'List.Item(0);<br/>\n';
    str += codeComment('//Check the status code, info, and severity<br/>');
    str += codeType('XmlAttributeCollection ') + 'rsAttributes = responseNode.Attributes;<br/>\n';
    str += codeType('string ') + 'statusCode = rsAttributes.GetNamedItem("statusCode").Value;<br/>\n';
    str += codeType('string ') + 'statusSeverity = rsAttributes.GetNamedItem("statusSeverity").Value;<br/>\n';
    str += codeType('string ') + '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)<br/>\n';
    str += '{<div class="codeverb-indent">\n';
    if (typeof(data.elements) != "undefined"  && data.elements != null) {
    	var retData = data.elements[0]; //only one
    	str += codeType('XmlNodeList ') + retData.xmlName + 'List = responseNode.SelectNodes("//' + retData.xmlName + '");' + codeComment('//XPath Query<br/>');
    	str += 'for (' + codeType('int ') + 'i=0; i &lt; ' + retData.xmlName + 'List.Count; i++)<br/>\n';
	    str += '{<div class="codeverb-indent">\n';
	    str += codeType('XmlNode ') + retData.xmlName + ' = ' + retData.xmlName + 'List.Item(i);<br/>\n';
    	str += '<b>Walk' + retData.xmlName + '(' + retData.xmlName + ');</b><br/>\n';
	    str += '</div>}<br/>\n';
	}    	
    str += '</div>\n}<br/>\n';
    str += '</div>\n}<br/>\n';
    str += '</div>\n}<br/>\n';
    str += '<br/><br/><br/>\n';
    if (typeof(data.elements) != "undefined" && data.elements != null) {
        var retData = data.elements[0];
     	str += 'void Walk' + retData.xmlName + '(' + codeType('XmlNode ') + retData.xmlName + ')<br/>\n';
        str += '{<div class="codeverb-indent">\n';
        str += 'if (' + retData.xmlName + ' == null) return;<br/><br/>\n';
        parentVar = retData.xmlName;
        parentPath = './';
        str += codeComment('//Go through all the elements of ' + retData.xmlName + '<br/>');
        str += responseXMLCSharpElements(retData, supports);
	    str += '</div>\n}<br/>\n';
	    str += '<br/><br/><br/>\n';
    }
    return str;
}    

function XMLCSharpHeader(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 += 'using System;<br/>\n';
    str += 'using System.Net;<br/>\n';
    str += 'using System.Drawing;<br/>\n';
    str += 'using System.Collections;<br/>\n';
    str += 'using System.ComponentModel;<br/>\n';
    str += 'using System.Windows.Forms;<br/>\n';
    str += 'using System.Data;<br/>\n';
    str += 'using System.IO;<br/>\n';
    str += 'using System.Xml;<br/>\n';
    if (XMLType == "qbxml") {
   	    str += 'using Interop.QBXMLRP2;<br/>\n';
   	}
    str += '<br/>\n';
    str += 'namespace <span class="xmlverb-ns-name">com.intuit.idn.samples</span><br/>\n';
    str += '{<br/>\n';
    str += '<div class="codeverb-indent">\n';
    str += 'public class Sample<br/>\n';
    str += '{<br/>\n';
    str += '<div class="codeverb-indent">\n';    
    str += 'private ' + codeType('XmlElement') + ' MakeSimpleElem(' + codeType('XmlDocument') + ' doc, ' + codeType('string') +' tagName, ' + codeType('string') + ' tagVal)<br/>\n';
	str += '{<br/>\n';
    str += '<div class="codeverb-indent">\n';
	str += codeType('XmlElement') + ' elem = doc.CreateElement(tagName);<br/>\n';
	str += 'elem.InnerText = tagVal;<br/>\n';
	str += 'return elem;<br/>\n';
	str += '</div>\n';
	str += '}<br/><br/>\n';
    
    str += 'public ' + codeType('void') + ' Do' + _vars['selectedMsg'] + '()<br/>\n';
    str += '{<div class="codeverb-indent">\n';
    if (XMLType == "qbxml") {
    	str += codeType('bool') + ' sessionBegun = false;<br/>\n';
    	str += codeType('bool') + ' connectionOpen = false;<br/>\n';
    	str += codeType('RequestProcessor2') + ' rp = null;<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 += codeType('XmlDocument') + ' 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 tag<br/>');
    str += codeType('XmlElement') + ' 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 += codeType('XmlElement') + ' 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 += codeType('string') + ' 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 += codeType('string') + ' 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 += codeType('string') + ' responseStr  = SendRequest(requestXmlDoc.OuterXml);<br/>\n';
    	str += '<br/>\n';
    }
    str += '<b>Walk' + _vars['selectedMsg'] + 'Rs(responseStr);</b><br/><br/>\n';
    str += '</div>\n';
    str += '}<br/>\n';
    str += 'catch (Exception e)<br/>\n';
    str += '{<div class="codeverb-indent">\n';
    str += 'MessageBox.Show(e.Message, "Error");<br/>\n';
    if (XMLType == "qbxml") {
    	str += 'if (sessionBegun)<br/>\n';
    	str += '{<div class="codeverb-indent">\n';
    	str += 'sessionManager.EndSession();<br/>\n';
    	str += '</div>\n';
    	str += '}<br/>\n';
    	str += 'if (connectionOpen)<br/>\n';
    	str += '{<div class="codeverb-indent">\n';
    	str += 'sessionManager.CloseConnection();<br/>\n';
    	str += '</div>\n';
    	str += '}<br/>\n';
    }
    str += '</div>\n';
    str += '}<br/>\n';
    str += '</div>\n';
    str += '}<br/><br/><br/>\n';
    if (XMLType == "qbmsxml") {
	    str += codeType('void') + ' BuildSignonRq(' + codeType('XmlDocument') + ' doc, ' + codeType('XmlElement') + 'parent)<br/>\n';
	    str += '{<div class="codeverb-indent">\n';
        str += codeType('XmlElement') + ' 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 += '}<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 += codeType('string') + ' SendRequest(' + codeType('string') + ' request_xml)<br/>\n';
	    str += '{<div class="codeverb-indent">\n';
        str += codeType('string') + ' url = "https://merchantaccount.ptc.quickbooks.com/j/AppGateway";<br/>\n';
        str += codeType('string') + ' strResponse = "";<br/>\n';
        str += 'try<br/>\n';
	    str += '{<div class="codeverb-indent">\n';
        str += codeComment('//Prepare the HTTP request<br/>');
        str += codeType('HttpWebRequest') + ' 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 += codeType('StreamWriter') + ' myWriter = null;<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 += codeType('HttpWebResponse') + ' objResponse = (HttpWebResponse)objRequest.GetResponse();<br/>\n';
        str += codeType('StreamReader') + ' sr = new StreamReader(objResponse.GetResponseStream());<br/>\n';
		str += 'strResponse = sr.ReadToEnd();<br/>\n';
   	    str += '</div>\n';
        str += '}<br/>\n';
        str += 'catch (' + codeType('Exception') + ' e)<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 += '}<br/>\n';
        str += 'return strResponse;<br/>\n';
    	str += '</div>\n';
    	str += '}<br/><br/><br/>\n';
    }

    return str;
}
 

function renderXMLCSharpCode(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 += XMLCSharpHeader(docroot);
    content += XMLCSharpBuild(messageDataJSON, supports);
    content += '<br/><br/><br/>\n';
    content += XMLCSharpParse(respDataJSON, supports);
    content += '</div>\n';
    content += '}<br/>\n';
    content += '</div>\n';
    content += '}<br/>\n';
    content += '</b:xhtml>\n';
    //alert(content)
    //content += requestXMLCSharp(data, supports);
    bpc.render(content,'replacechildren', targ);
    //bpc.task(['b:action', 'settext', 'b:value', content], _current);
    return content;
}

