/**
 * 问题：
 * 1. JQT与JQTTools 若形成了for循环嵌套，则相同的参数值会被更改 (for中i循环问题 解决方法：用 in 或特殊一点的变量名称)
 * 2. Json数据长度大于1的时候是数组类型，等于1的时候用数组访问方式会出错。（解决方法：将所有长度为1的在ajax.jsp输出的时候追加一个空数据，构成长度为2的数据结构）
 * 记录
 * ver 0.1.4
 		提供多请求汇合
		动态载入并缓存模板和关系式规则数组的js文件
 */

function JQT() {
	this._version = "0.1.4";
	this._author = "JohnQiao";
	this._date = "2010-07-02 1:00AM";
	this._update = "2010-07-19 12:30PM";
	
	this._URL = "ajax/jqt/ajax.jsp";
	
	this._jsonParams = new Array();
	
	this.dynamicArrayID = "JQTDynamicArray";
	this.dynamicArrayName = "JQTArray";
}

JQT.prototype = {
	
	loadT : function(url) {
		var html = "";
		// 提取缓存模板
		$.ajax({
			type : "GET",
			url : url,
			cache : true, //true
			async: false,
			success : function(data){
				html = data;
			}
		});
		return html;
	},
	
	loadJS : function(url) {
		$.ajax({
			type : "GET",
			url : url,
			cache : true, //true
			async: false,
			dataType: "script",
			success : function(data){
			}
		});
	},
	
	/**
	 * 返回替换后的html输出代码
	 *
	 * url：请求模板的地址
	 * jsonData：json数据，其数据组织是：
	 		_size _DATA段数据的长度
			_paramNameArray  _DATA段参数的名称数组，用英文逗号分隔
			_data Json数据结构 参数:值
	 * conArray：关系式数组
	 		1. replace(替换) - new Array('参数','关系符','值','replace','原','目标true','目标false');
							  例如 var a1 = new Array('state','=','0','replace','COLOR','color:red','color:blue');
			2. ctrlShow(控制显示) - 
	 */
	getHtml : function(url,jsonData,conArray){
		// 读取模板
		var html = this.loadT(url);
		// 转换JSON对象
		var jsonData = eval("("+jsonData+")");
		var output = "";
		var size = jsonData._size;
		var paramNameArray = jsonData._paramNameArray.split(',');
		for(index=0;index<size;index++){
			var tempHtml = html;
			var tempHtmlAnalysis = JQTTools.conditionAnalysis(conArray,html,jsonData,index);
			if(tempHtmlAnalysis!=""){
				tempHtml = tempHtmlAnalysis
			}
			for(j=0;j<paramNameArray.length;j++){
				var key = paramNameArray[j];
				var value = "";
				if(size==1){
					value = jsonData[key];
				}
				else{
					value = jsonData[key][index];
				}
				tempHtml = tempHtml.replaceAll("_"+key,value);
			}
			output += tempHtml;
		}
		return output;
	},
	
	/**
	 * 输出替换后的html输出代码
	 *
	 * target:：添加位置的id
	 * url：-
	 * jsonData：-
	 * type：添加类型 
	 		html 完全覆盖
	 		append 追加
	 * conArray：
	 		关系式规则数组
			js文件
				*注意
				1. 文件路径必须正确
				2. 数组变量名称必须为JQTArray
				3. 请求所在的页面必须有以下一句，id不能更改
				<script id="JQTDynamicArray"></script>
	 */
	output : function(target,url,jsonData,type,conArray){
		// 判断conArray是否为一个js文件
		//alert(conArray);
		if(conArray!=null && conArray!="" && conArray!=undefined){
			//$("#" + JQT.dynamicArrayID).attr("src",conArray);
			JQT.loadJS(conArray);
			eval("conArray = " + JQT.dynamicArrayName);
		}
		else{
			conArray = null;
		}
		// 判断参数
		if(type==undefined){type = "html"};
		var output = this.getHtml(url,jsonData,conArray);
		switch(type){
			case "html" :{
				$('#'+target).html(output);
			}break;
			case "append" :{
				$('#'+target).append(output);
			}break;
		}
	}
	
};

var JQT = new JQT();
