var h2x = function() {
	var valid_attrs = ["id", "name", "src", "href"];
	
	function parseNode(t) {
		//alert(t.nodeName + " " + t.nodeType);
		
		if (t.nodeType == 3) {
			//alert(t.nodeName + " " + t.nodeType + " " + t.nodeValue);
			return t.nodeValue;
		}
		else 
		if (t.childNodes.length <= 0) {
			return openTag(t.nodeName, t.attributes, true);
		}
		else {
			var str = openTag(t.nodeName, t.attributes, false);
			for (var c = 0; c < t.childNodes.length; ++c) {
				str += parseNode(t.childNodes[c]); 
			}
			str += closeTag(t.nodeName);
			return str;
		}
	}
	
	 function parseAttrs(attrs) {
		var str = '';
		var i = 0, node = null;
		for (var a = 0; a < attrs.length; a++) {
			node = attrs[a];
			i = valid_attrs.indexOf(node.nodeName);
			if (i > -1 && node.nodeValue != null) {
				str +=  " " + node.nodeName + '="' + node.nodeValue + '"';
			}	
		}
		return str;
	}
	
	function openTag(n, a, single) {
		//alert("openTag " + n + " " + a);
		return "<" + n.toLowerCase() + parseAttrs(a) + (single ? " />" : ">");
	}
	
	function closeTag(n) {
		//alert("closeTag " + n);
		return "</" + n.toLowerCase() + ">";
	}
	
	return { parse: function(h) {
		//alert(h.nodeName + " parsed: " + parseNode(h));
		return parseNode(h);
	}}
}();


if (typeof(Array.prototype.indexOf)=="undefined") 
{
	Array.prototype.indexOf = function( val )
	{
		for (var k in this) {
			if (this[k]==val) return k;
		}
		return -1;
	}
}
