

function XMLParse(){
	this.parse = function(reponseXml){
		var oResponseXML = reponseXml;
		//alert(oResponseXML.xml);
		try {
			var datas = oResponseXML.getElementsByTagName("data")[0].getElementsByTagName("list");
			for (var i=0; i<datas.length; i++) {
				var node = datas[i];
				
				var id= node.getAttribute("id");
				var typename = node.getAttribute("typename");
				try {
					eval("var vdata = new "+typename+"(\""+id+"\");");
				} catch(e){
					alert("加载了未知的数据结构:"+typename);
					continue;
				}
				
				vdata.parse(node);
			}
		} catch(e){
			if (reponseXml.getElementsByTagName("Response").length > 0) {
				alert("未取到合法的数据！！\n"+reponseXml.getElementsByTagName("Response")[0].firstChild.nodeValue);
			} else if (reponseXml.getElementsByTagName("Result").length > 0){
				alert("未取到合法的数据！！\n"+reponseXml.getElementsByTagName("Result")[0].firstChild.nodeValue);
			}
		}
	}
}

function VList(_id){
	this.id = _id;
	this.classname=null;
	
	this.colnamelist = new Array();
	this.colnamemap = new Array();
	this.datalist = new Array();
	
	this.rowmax = null;
	this.colmax = null;
	
	this.queryURL = null;
	this.curpagenum = null;
	this.pagesize = null;
	this.total = null;
	this.queryString = new Array();
	
	this.modifycol = new Array();
	this.addcol = new Array();
	this.deletecol = new Array();
	
	DataContainer[this.id] = this;
	
	this.fireDataChangeEvent = function(row,col){
	
	}
	
	this.parse = function(node){
		this.id = node.getAttribute("id");
	
		this.queryURL = node.getAttribute("queryurl");
		this.curpagenum = node.getAttribute("curpagenum");
		this.pagesize   = node.getAttribute("pagesize");
		this.total      = node.getAttribute("total");
	
		var items = node.getElementsByTagName("item");

		for (var i=0; i < items.length; i++) {
			if (i == 0) {
				var subitems = items[i].childNodes;
				var k=0;
				for (var j=0; j < subitems.length; j++) {
					if (subitems[j].tagName) {
						this.colnamelist[k] = subitems[j].tagName;
						this.colnamemap[subitems[j].tagName] = k;
						
						k++;
					}
				}
			}
			
			
			this.datalist[i] = new Array();
			
			
			for (var j=0; j < this.colnamelist.length; j++) {
				this.datalist[i][j] ="";
				if (items[i].getElementsByTagName(this.colnamelist[j])[0].firstChild &&
				    items[i].getElementsByTagName(this.colnamelist[j])[0].firstChild.nodeValue){
					this.datalist[i][j] = items[i].getElementsByTagName(this.colnamelist[j])[0].firstChild.nodeValue;
				}
				
			}
		}
		
		var querystringnode = node.getElementsByTagName("querystring")[0];
		
		if (querystringnode) {
			var querynodes = querystringnode.childNodes;
			
			for (var j=0; j < querynodes.length; j++) {
				if (querynodes[j].tagName){
					this.queryString[querynodes[j].tagName] = "";
					if (querynodes[j].firstChild &&
					    querynodes[j].firstChild.nodeValue){
						this.queryString[querynodes[j].tagName] = querynodes[j].firstChild.nodeValue;
					}
					
				}
			}
		}
	}
	
	this.clearSaveData = function(){
		this.addcol = new Array();
		this.modifycol = new Array();
		this.deletecol = new Array();
	}
	
	this.getSaveDataXML = function(){
		/*******先整理要提交的数据*******/
		var arradd = new Array();
		var arrmod = new Array();
		var arrdel = new Array();
		//1、过滤新增但被删除的。
		for (var i in this.addcol){
			if (this.addcol[i] == this.deletecol[i]) {
				this.addcol[i] = "-1";
				this.deletecol[i] = "-1";
			}
		}
		
		
		//2、过滤修改但被删除的。
		for (var i in this.modifycol){
			if (this.deletecol[i] == i ||
			    this.deletecol[i] == "-1") {
			    
				this.modifycol[i] = "-1";
			}
		}
		//3、过滤新增并被修改的。
		for (var i in this.modifycol){
			if (this.addcol[i] == i ||
			    this.addcol[i] == "-1") {
				this.modifycol[i] = "-1";
			}
		}
		
		for (var i in this.addcol){
			if (this.addcol[i] != "-1") {
				arradd.push(this.datalist[i]);
			}
		}
		
		
		for (var i in this.modifycol){
			if (this.modifycol[i] != "-1") {
			
				arrmod.push(this.datalist[i]);
			}
		}
		
		for (var i in this.deletecol){
			if (this.deletecol[i] != "-1") {
				arrdel.push(this.datalist[i]);
			}
		}
		
		var queryStringXML = "";
		//queryStringXML += "<?xml version=\"1.0\" encoding=\"GB2312\"?>\n";
		queryStringXML += "<data>\n";
		
		if (arradd.length > 0) {
			queryStringXML += "  <add>\n";
			for (var i in arradd) {
				queryStringXML += "    <item>\n";
				for (var j in arradd[i]) {
					queryStringXML += "      <"+this.colnamelist[j]+"><![CDATA[";
					queryStringXML += arradd[i][j];
					queryStringXML += "]]></"+this.colnamelist[j]+">\n";
				}
				queryStringXML += "    </item>\n";
			}
			queryStringXML += "  </add>\n";
		}
		
		if (arrmod.length > 0) {
			queryStringXML += "  <mod>\n";
			
			for (var i in arrmod) {
			
				queryStringXML += "    <item>\n";
				for (var j in arrmod[i]) {
					queryStringXML += "      <"+this.colnamelist[j]+"><![CDATA[";
					queryStringXML += arrmod[i][j];
					queryStringXML += "]]></"+this.colnamelist[j]+">\n";
				}
				queryStringXML += "    </item>\n";
			}
			queryStringXML += "  </mod>\n";
		}
		
		if (arrdel.length > 0) {
			queryStringXML += "  <del>\n";
			for (var i in arrdel) {
				queryStringXML += "    <item>\n";
				for (var j in arrdel[i]) {
					queryStringXML += "      <"+this.colnamelist[j]+"><![CDATA[";
					queryStringXML += arrdel[i][j];
					queryStringXML += "]]></"+this.colnamelist[j]+">\n";
				}
				queryStringXML += "    </item>\n";
			}
			queryStringXML += "  </del>\n";
		}
		
		queryStringXML += "</data>\n";
		
		var length = arrdel.length+arrmod.length+arradd.length;
		
		return {length:length,xml:queryStringXML};
	}
	
	this.loadData = function(gotopage){
		var queryStringXML = "";
		var queryURL = this.queryURL;
		
		var queryStr = this.queryString;
		
		if (queryStr){
			//queryStringXML += "<?xml version=\"1.0\" encoding=\"GB2312\"?>\n";
			queryStringXML += "<data>\n";
			queryStringXML += "  <list>\n";
			queryStringXML += "    <querystring>\n";
			for (var i in queryStr) {
				if (queryStr[i]){
					queryStringXML += "      <"+i+"><![CDATA[";
					queryStringXML += queryStr[i];
					queryStringXML += "]]></"+i+">\n";
				}
			}
			queryStringXML += "    </querystring>\n";
			queryStringXML += "  </list>\n";
			queryStringXML += "</data>\n";
		}

		queryURL += "&curpagenum=";
		queryURL += gotopage;
		EventContainer.dataBundler.loadAndAutoFindTask(queryURL,queryStringXML,this.id);
	}
}

function VForm(_id){
	this.id = _id;
	this.data = {};
	
	DataContainer[this.id] = this;
	
	this.parse = function(node){
		//alert("123");
	}
	
	this.setValue = function(key,value){
		this.data[key] = value;
	}
	
	this.getXml = function(){
		var dataXML = "";
		
		var queryStr = this.data;
		var length = 0;
		
		if (queryStr){
			//dataXML += "<?xml version=\"1.0\" encoding=\"GB2312\"?>\n";
			dataXML += "<data>\n";
			dataXML += "    <form>\n";
			for (var i in queryStr) {
				if (queryStr[i]){
					length ++;
					dataXML += "      <"+i+"><![CDATA[";
					dataXML += queryStr[i];
					dataXML += "]]></"+i+">\n";
				}
			}
			dataXML += "    </form>\n";
			dataXML += "</data>\n";
		}
		
		return {length:length,xml:dataXML};
	}
}

function VTree(_id){
	this.id = _id;
	this.classname=null;
	
	this.treeid=null;
	this.value=null;
	
	this.treenodes = null;
	
	//DataContainer[this.id] = this;
	this.parse = function(node){
		var ulroot = node.getElementsByTagName("ul")[0];
		var linode = ulroot.getElementsByTagName("li")[0];
		var anode = linode.getElementsByTagName("a")[0];
		var id="";
		if (linode.getAttribute("id")) {
			id = linode.getAttribute("id");
		}
		
		this.treenodes = new WebFXTree(anode.firstChild.nodeValue, id);
		this.treenodes.setBehavior('classic');
		
		var ulsonnode = linode.getElementsByTagName("ul")[0];
		
		this.parsetree(ulsonnode, this.treenodes);
	}
	
	this.parsetree = function(node,parentNode){
		if (node) {
			var linodes = node.childNodes;
			
			for (var i=0; i<linodes.length; i++){
				var linode = linodes[i];
				if (linode.tagName.toLowerCase() == "li"){
					var anode = linode.getElementsByTagName("a")[0];
					
					var id="";
					if (linode.getAttribute("id")) {
						id = linode.getAttribute("id");
					}
					var treenode = new WebFXTreeItem(anode.firstChild.nodeValue,id,linode.pageName,linode.fatherId);
					parentNode.add(treenode);
					
					var ulnode = linode.getElementsByTagName("ul")[0];
					this.parsetree(ulnode,treenode);
				}
			}
		}
	}
}