/**
* DOM模型解析器(二维XML)
*/
function XMLReader(){
	var self = this;//映射自己
	var dom = null;//DOM对象
	var codeNodes = null;//字段集合
	var childNode = null;//临时结点
	var currentIndex = -1;//当前行
	var fieldSetName = "FieldSet";//字段结点名称
	var containerSetName = "XMLSet";//主结点名称
	var rowSetName = "RowSet";//行结点名称
	var columnSetName = "ColumnSet";//列结点名称
	var ajaxObject = new AjaxObject();//请求对象
	var loadedListeners = new Array();//模型载入监听器列表
	

	/**
	* 指定行结点名称
	* nodeName - 结点名称
	* 默认值 - RowSet
	*/
	this.setRowNodeName = function(nodeName){
		if(nodeName)rowSetName = nodeName;
	}

	/**
	* 获取指定或默认的行结点名称
	*/
	this.getRowNodeName = function(){
		return rowSetName;
	}

	/**
	* 指定列结点名称
	* nodeName - 结点名称
	* 默认值 - ColumnSet
	*/
	this.setColumnNodeName = function(nodeName){
		if(nodeName)columnSetName = nodeName;
	}

	/**
	* 获取指定或默认的列结点名称
	*/
	this.getColumnNodeName = function(){
		return columnSetName;
	}

	/**
	* 指定主结点名称
	* nodeName - 结点名称
	* 默认值 - XMLSet
	*/
	this.setContainerNodeName = function(nodeName){
		if(nodeName)containerSetName = nodeName;
	}

	/**
	* 获取或默认的主结点名称
	*/
	this.getContainerNodeName = function(){
		return containerSetName;
	}
	
	/**
	* 指定字段结点名称
	* nodeName - 结点名称
	* 默认值 - FieldSet
	*/
	this.setFieldNodeName = function(nodeName){
		if(nodeName)fieldSetName = name;
	}

	/**
	* 获取或默认的字段结点名称
	*/
	this.getFieldNodeName = function(){
		return fieldSetName;
	}

	/**
	* 请求数据
	* url - 服务器地址
	*/
	this.request = function(url){
		ajaxObject.request(url);
		
	}
	
	/**
	* 放入模型载入监听器
	* functionObject - 函数对象
	*/
	this.addLoadedListener = function(functionObject){
		loadedListeners.push(functionObject);
	}
	
	/**
	* 移除模型载入监听器
	* functionObject - 函数对象
	*/
	this.removeLoadedListener = function(functionObject){
		for(var i=0;i<loadedListeners.length;i++){
			if(loadedListeners[i] == functionObject){
				loadedListeners.splice(i,1);
				break;
			}
		}
	}
	
	/**
	* 通过字段得到列号
	* code - 字段
	*/
	this.getIndexByCode = function(code){
		if(codeNodes && code){
			for(var i=0;i<codeNodes.length;i++){
				if(codeNodes[i].text.toLowerCase() == code.toLowerCase()){
					return i;
				}
			}
		}
		return -1;
	}
	
	/**
	* 通过字段设值
	* code - 字段
	* value - 值
	*/
	this.setValue = function(code,value){
		self.setData(currentIndex,self.getIndexByCode(code),value);
	}
	
	/**
	* 通过字段取值
	* code - 字段
	*/
	this.getValue = function(code){
		return self.getData(currentIndex,self.getIndexByCode(code));
	}
	
	/**
	* 专到指定行
	* row - 行
	*/
	this.gotoRow = function(row){
		if(!isNaN(row) && row > -2 && row < self.getRowCount()){
			currentIndex = row;
		}
	}
	
	/**
	* 通过行号和列号设置值
	* row - 行
	* colunm - 列
	*/
	this.setData = function(row,colunm,value){
		if(dom && row < self.getRowCount()){
			childNode = dom.getElementsByTagName(rowSetName)[row];
			if(childNode){
				childNode = childNode.getElementsByTagName(columnSetName)[colunm];
				if(childNode){
					if(value)childNode.text = value;
					else childNode.text = "";
				}
			}
		}
	}
	
	/**
	* 通过行号和列号取得数据
	* row - 行
	* colunm - 列
	*/
	this.getData = function(row,colunm){
		if(dom && row < self.getRowCount()){
			childNode = dom.getElementsByTagName(rowSetName)[row];
			if(childNode){
				childNode = childNode.getElementsByTagName(columnSetName)[colunm];
				if(childNode)return childNode.text;
				else return null;
			}
			else return null;
			return dom.getElementsByTagName(rowSetName)[row];
		}
		return null;
	}
	
	/**
	* 获取当前行
	*/
	this.getRow = function(){
		return currentIndex;
	}
	
	/**
	* 删除当前行
	*/
	this.deleteRow = function(){
		self.deleteByIndex(self.getRow());
	}
	
	/**
	* 移除指定行
	* index - 行号
	*/
	this.deleteByIndex = function(index){
		if(!isNaN(index) && index > -1 && index < self.getRowCount())return dom.removeChild(dom.getElementsByTagName(rowSetName)[index]);
		else return false;
	}
	
	/**
	* ajax自动载入事件调用
	*/
	this.dataLoaded = function(xml){
		dom = xml.getElementsByTagName(containerSetName)[0];
		codeNodes = dom.getElementsByTagName(fieldSetName);
		if(self.getRowCount() < 1)self.gotoRow(-1);
		else self.gotoRow(0);
		for(var i=0;i<loadedListeners.length;i++){
			loadedListeners[i](dom);
		}
	}
	/**
	* 获取总跳数
	*/
	this.getRowCount = function(){
		//alert(dom.getElementsByTagName(rowSetName).length);
		if(dom)return dom.getElementsByTagName(rowSetName).length;
		else return 0;
	}
	
	/**
	* 初始化
	*/
	this.init = function(){
		ajaxObject.addLoadedListener(self.dataLoaded);
		ajaxObject.setContentType("xml");
	}
	this.init();
}
