﻿function xml2json(node)
{
	switch (node.nodeTypeString)
	{
	case "document":
		var json = xml2json(node.childNodes[0]);
		return json;
	case "element":
		var json = {};
		var attrs = node.attributes;
		if (attrs)
		{
			for (var i=0; i<attrs.length; i++)
			{
				var attr = attrs[i];
				json[attr.nodeName] = attr.nodeValue;
			}
		}
		var nodes = node.childNodes;
		if (nodes)
		{
			if (nodes.length == 1 &&
				(nodes[0].nodeTypeString == "cdatasection" || nodes[0].nodeTypeString == "text"))
			{
				return node.text;
			}
			for (var i=0; i<nodes.length; i++)
			{
				var node = nodes[i];
				var name = node.nodeName;
				var j1 = json[name];
				var j2 = xml2json(node);
				if (typeof j1 == "undefined")
					j1 = j2;
				else if (j1.constructor == Array)
					j1.push(j2);
				else
				{
					var temp = j1;
					j1 = [];
					j1.push(temp);
					j1.push(j2);
				}
				json[name] = j1;
			}
		}
		return json;
	default:
		return null;
	}
};
