if( !document.all ) 
{
    XMLDocument.prototype.selectNodes = function(x, n) 
        { 
            if( !n ) { n = this; } 
            var ai = this.evaluate(x, n, this.createNSResolver(this.documentElement), 
                                       XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, 
                                       null) 
            var ar = [];
            for( var i = 0; i < ai.snapshotLength; i++) 
            { 
                ar[i] =  ai.snapshotItem(i);
            } 
            return ar;
        } 

    Element.prototype.selectNodes = function(x) 
        {
            if(this.ownerDocument.selectNodes) 
            { 
                return this.ownerDocument.selectNodes(x, this);
            } 
            else{throw "sorry only xml";} 
        } 
}

function AjaxRequest() { 
    var req;
    var nocache = false; 
    this.send_ajax = function(url, form) 
	{ 
	    if(window.XMLHttpRequest) { 
		try { req = new XMLHttpRequest(); } catch(e) { req = false; } 
	    } else if(window.ActiveXObject) {
		try { 
		    req = new ActiveXObject("Msxml2.XMLHTTP"); 
		} catch(e) { 
		    try { 
			req = new ActiveXObject("Microsoft.XMLHTTP"); 
		    } catch(e) {
			req = false; 
		    } 
		}
	    } 

	    if(req) { 
		req.onreadystatechange = handleHttpResponse; 

		var send_data = "<request>\n";
		if (form)
		{ 
		    var form = document.getElementById(form);
		    
		    if (form)
			{
			    for ( var i = 0; i < form.length; i++ )
				{
				    var element = form.elements[i];
				    
				    if (element.id)
					{                                    
					    send_data += "<element id=\""   + element.id   + "\">";
					    send_data += "<![CDATA[" + element.value + "]]></element>\n";
					}
				}
			}
		}                    
		send_data += "</request>";

		req.open("POST", url, true); 
		req.send(send_data); 

		return true; 
	    } 
	    return false; 
	} 

    var handleHttpResponse = function ()
	{
	    if(req.readyState == 4 && req.status == 200) { 
		if(!req.responseXML) return; 

		var response = req.responseXML.getElementsByTagName("x-response");
		if (response == null || response.length != 1) {
		    alert("Ajax Error: Non-xml response");
		    return;
		}

		var elements = response[0].selectNodes("response");
    
		for ( var i = 0 ; i < elements.length ; i++ ) 
		{
		    var element = elements[i];
		    
		    if ( element.nodeType != 1 ) continue;
		    
		    var rt = element.getAttribute("type");
		    
		    if ( rt == "element" || rt == "javascript" )
			{
			    var cs = "";
			    
			    var text_nodes = element.selectNodes("text()");
			    for ( var j = 0 ; j < text_nodes.length ; j++ )
				{
				    var childNode = text_nodes[j];
				    if (childNode.nodeType != 3 && childNode.nodeType != 4) 
					continue;
				    cs += childNode.nodeValue;
				} 
			    if (rt == "element")
				{
				    var responseId   = element.getAttribute("id");
				    
				    var elem = document.getElementById(responseId);
				    if (elem) {
					elem.innerHTML = cs;
				    }
				}
			    else if (rt == "javascript")
				{
				    document.eval ? document.eval(cs) : eval(cs);
				}
			}
		    else  alert('Bad type ' + rt );
		}
	    }
	}
}
