﻿//操作XML数据的类
function XmlHelper(xmlUrl)
{
	this.XmlUrl=xmlUrl;
}
//XML路径
XmlHelper.prototype.XmlUrl=null;
//创建xmlhttprequest对象
XmlHelper.prototype.createXMLHttpRequest=function(){ 
	try {         
		if (window.XMLHTTPRequest) { 
				return new XMLHttpRequest(); 
		} 
		else if (window.ActiveXObject) { 
			return new ActiveXObject("Microsoft.XMLHTTP"); 
		} 
	} 
	catch (e) {alert("XMLHttpRequest对象无法创建！请检查IE安全设置！");} 
};
//创建XMLdom对象
XmlHelper.prototype.createXMLDOM=function() {        
            var arrSignatures = ["MSXML2.DOMDocument.5.0", "MSXML2.DOMDocument.4.0",
                                 "MSXML2.DOMDocument.3.0", "MSXML2.DOMDocument",
                                 "Microsoft.XmlDom"];                                 
            for (var i=0; i < arrSignatures.length; i++) {
                try {                
                    var oXmlDom = new ActiveXObject(arrSignatures[i]);                    
                    return oXmlDom;                
                } catch (oError) {
                    //ignore
                }
            } 
            throw new Error("你的系统没有安装MSXML");           
        } ;
//清理XML，将Visible属性为false的节点清除
XmlHelper.prototype.ClearXML=function(nodeName)
{
	var nodes=nodeName.childNodes;	
	for(var i=0;i<nodes.length;i++)
	{
		var node=new Node(nodes[i]);
		if(!node.Visible)
		{			
			nodeName.removeChild(nodes[i]);	
			--i;	
		}else
		{
			if(node.IsChilds)
			{
				nodeName.replaceChild(this.ClearXML(nodes[i]),nodes[i]); 
			}
		}
	}
	return nodeName.cloneNode(true);
};

//menuObject:菜单对象
//async:是否异步
//method:传送方式
//postString:传送的参
XmlHelper.prototype.Request=function(menuObject,async,method,postString)
{
	//创建ajax核心对象
	var ajaxObj= this.createXMLHttpRequest(); 
	var _this=this;
	var url=this.XmlUrl;
	//如果菜单对象为空，则直接退出
	if(menuObject==null)return;
	//
	if (method!="get"&&method!="post") method = "get"; 
	if (typeof(async)!="boolean") async = true; 
	if (typeof(postString)!="string") postString=""; 
	//预载
	menuObject.Loading();
	ajaxObj.onreadystatechange = function () 
	{ 		
		//如果为异步状态
		if (async)
		{
			try
			{
				if(ajaxObj.readystate==4)
				{
					//加载成功后
					if(ajaxObj.status == 200||ajaxObj.status == 304)
					{
						if(menuObject!=null)
						{	
							//成功获取数据后...
							menuObject.SuccessEvent();
							//获取XML数据，并清理visible属性为false的节点
							var rootNode=_this.ClearXML(ajaxObj.responseXML.lastChild);	
							//alert(menuObject.AppendNode.childNodes.length);
							//加附加节点
							if(menuObject.AppendNode!=null&&menuObject.AppendNode.length>0)
							{
								for(var i=0;i<menuObject.AppendNode.length;i++)
								{
									insertFirst(rootNode,menuObject.AppendNode[i]);
								}
							}
							//生成html节点，并将该节点内容插入到指定容器
							var MenuNode=menuObject.BuilderHTML(rootNode);								
							menuObject.Container.appendChild(MenuNode);	
							//成功完成后...
							menuObject.CompleteEvent();
							
						}
					}else
					{
						//加载成功，但是没有正确读取到数据
						menuObject.NothingEvent();
					}
				
				}else
				{
					//正在加载中...,当状态更改时响应
					//menuObject.Loading();
				}
			}catch(e)
			{
				//加载出错
				menuObject.ErrorEvent();
			}
		} 
	};
	ajaxObj.open (method,url,async); 
	if (method=="post")
		ajaxObj.send(postString);
	else
		ajaxObj.send(); 
	//如果是同步
	if (!async)
	{
		if(completeEvent!=null)
			completeEvent(ajaxObj.responseXML); 
	}
};


