Project

General

Profile

1
// This is a third party JavaScript library from
2
// http://webfx.eae.net/dhtml/xmlextras/xmlextras.html
3
// i.e. This has not been written by ThoughtWorks.
4

    
5
//<script>
6
//////////////////
7
// Helper Stuff //
8
//////////////////
9

    
10
// used to find the Automation server name
11
function getDomDocumentPrefix() {
12
	if (getDomDocumentPrefix.prefix)
13
		return getDomDocumentPrefix.prefix;
14
	
15
	var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
16
	var o;
17
	for (var i = 0; i < prefixes.length; i++) {
18
		try {
19
			// try to create the objects
20
			o = new ActiveXObject(prefixes[i] + ".DomDocument");
21
			return getDomDocumentPrefix.prefix = prefixes[i];
22
		}
23
		catch (ex) {};
24
	}
25
	
26
	throw new Error("Could not find an installed XML parser");
27
}
28

    
29
function getXmlHttpPrefix() {
30
	if (getXmlHttpPrefix.prefix)
31
		return getXmlHttpPrefix.prefix;
32
	
33
	var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
34
	var o;
35
	for (var i = 0; i < prefixes.length; i++) {
36
		try {
37
			// try to create the objects
38
			o = new ActiveXObject(prefixes[i] + ".XmlHttp");
39
			return getXmlHttpPrefix.prefix = prefixes[i];
40
		}
41
		catch (ex) {};
42
	}
43
	
44
	throw new Error("Could not find an installed XML parser");
45
}
46

    
47
//////////////////////////
48
// Start the Real stuff //
49
//////////////////////////
50

    
51

    
52
// XmlHttp factory
53
function XmlHttp() {}
54

    
55
XmlHttp.create = function () {
56
	try {
57
		if (window.XMLHttpRequest) {
58
			var req = new XMLHttpRequest();
59
			
60
			// some versions of Moz do not support the readyState property
61
			// and the onreadystate event so we patch it!
62
			if (req.readyState == null) {
63
				req.readyState = 1;
64
				req.addEventListener("load", function () {
65
					req.readyState = 4;
66
					if (typeof req.onreadystatechange == "function")
67
						req.onreadystatechange();
68
				}, false);
69
			}
70
			
71
			return req;
72
		}
73
		if (window.ActiveXObject) {
74
			return new ActiveXObject(getXmlHttpPrefix() + ".XmlHttp");
75
		}
76
	}
77
	catch (ex) {}
78
	// fell through
79
	throw new Error("Your browser does not support XmlHttp objects");
80
};
81

    
82
// XmlDocument factory
83
function XmlDocument() {}
84

    
85
XmlDocument.create = function () {
86
	try {
87
		// DOM2
88
		if (document.implementation && document.implementation.createDocument) {
89
			var doc = document.implementation.createDocument("", "", null);
90
			
91
			// some versions of Moz do not support the readyState property
92
			// and the onreadystate event so we patch it!
93
			if (doc.readyState == null) {
94
				doc.readyState = 1;
95
				doc.addEventListener("load", function () {
96
					doc.readyState = 4;
97
					if (typeof doc.onreadystatechange == "function")
98
						doc.onreadystatechange();
99
				}, false);
100
			}
101
			
102
			return doc;
103
		}
104
		if (window.ActiveXObject)
105
			return new ActiveXObject(getDomDocumentPrefix() + ".DomDocument");
106
	}
107
	catch (ex) {}
108
	throw new Error("Your browser does not support XmlDocument objects");
109
};
110

    
111
// Create the loadXML method and xml getter for Mozilla
112
if (window.DOMParser &&
113
	window.XMLSerializer &&
114
	window.Node && Node.prototype && Node.prototype.__defineGetter__) {
115

    
116
	// XMLDocument did not extend the Document interface in some versions
117
	// of Mozilla. Extend both!
118
	//XMLDocument.prototype.loadXML = 
119
	Document.prototype.loadXML = function (s) {
120
		
121
		// parse the string to a new doc	
122
		var doc2 = (new DOMParser()).parseFromString(s, "text/xml");
123
		
124
		// remove all initial children
125
		while (this.hasChildNodes())
126
			this.removeChild(this.lastChild);
127
			
128
		// insert and import nodes
129
		for (var i = 0; i < doc2.childNodes.length; i++) {
130
			this.appendChild(this.importNode(doc2.childNodes[i], true));
131
		}
132
	};
133
	
134
	
135
	/*
136
	 * xml getter
137
	 *
138
	 * This serializes the DOM tree to an XML String
139
	 *
140
	 * Usage: var sXml = oNode.xml
141
	 *
142
	 */
143
	// XMLDocument did not extend the Document interface in some versions
144
	// of Mozilla. Extend both!
145
	/*
146
	XMLDocument.prototype.__defineGetter__("xml", function () {
147
		return (new XMLSerializer()).serializeToString(this);
148
	});
149
	*/
150
	Document.prototype.__defineGetter__("xml", function () {
151
		return (new XMLSerializer()).serializeToString(this);
152
	});
153
}
(20-20/20)