﻿/*
	table 表格显示数据
	$.ebm.table.create({
		data:JSON数据,
		element:调用table的dom对象,
		oldElement:原始对象,
		consultRow:开始循环的行
	})
	
Depends
	util.js
	jQuery.js(1.3.2)
*/
//添加outerHTML支持
 
var table = {
	table:{
		create:function(cfg){
			var me = this;
			var consultRow = cfg.consultRow;
			var oldEle = cfg.oldElement;
   		var oldRow = oldEle.rows[consultRow];
   		if(!oldRow)return;
   		var oldCells = oldRow.cells;
   		var n = cfg.element;
   		var data = cfg.data;
   		for(var i = consultRow ; i < n.rows.length;){
		 	 	n.deleteRow( i );
		 	}
		 	
   		for(var i = 0; i < data.length; i++){
   			var r = n.insertRow(parseInt( consultRow ) + i);
   			me.setAttributes(r, oldRow.outerHTML.replace(oldRow.innerHTML, ""), data[i], i);
   			for(var cell = 0; cell < oldRow.cells.length; cell++){
					var cellObj = oldRow.cells[cell];
					var objCell = r.insertCell(-1);
					var tdTagHtml= me.replaceData( data[i], cellObj.outerHTML.replace(cellObj.innerHTML, ""), i );
					objCell.innerHTML = me.replaceData(data[i], cellObj.innerHTML, i);
					me.setAttributes(objCell, cellObj.outerHTML.replace(cellObj.innerHTML,""), data[i], i);
				}
   		}
		},
		replaceData:function(data,html,i){
			html=html.replace(/%([\w\.]+)?%/g,function($0,$1){
				var value=$0;
				try{
					value=eval("data."+$1);
					if(value==null){
						value=$0;
					}
					}catch(e){alert(e.message)}
				return value
			});
			return html;
		 },
		 setAttributes:function(obj,html,data,i){
		 		var me = this;
				if(typeof data=="object")
					var attributes = me.getAttributes( me.replaceData(data,html,i));
				else
					var attributes = me.getAttributes(html);
				for(var key in attributes){
					if(key.match(/^on/i))
						obj[key]= Function(attributes[key]);
					else
						Function("o","k","as","o."+ me.checkAttribute(key)+ "=as[k]")(obj,key,attributes);
				}
				attributes=null;	
			},
		 checkAttribute:function(attributeName){
				var checkAttributeObj = $.ebm.util.temp("checkAttributeObj")!=null?$.ebm.util.temp("checkAttributeObj"):{};
			  if(checkAttributeObj[attributeName.toUpperCase ()]){
					 return checkAttributeObj[attributeName.toUpperCase ()]
			 	}
			 	return attributeName.toLowerCase();
			},	
		 getAttributes:function(html){
				var attributes={};
			 	html= html.match(/<([^>]+)>/)[1];
				var re=/([\w-\.]+)\s*=\s*([^\s"']+|(?:("|')(.*?)\3))/mg;
				html.replace(re,function(){
					attributes[arguments[1]]=arguments[arguments[3]?4:2];										   
				});	
				return 	attributes;
			}	
	}	
}

if($.ebm === undefined){
	$.extend({ebm: table});
	table = null;
}else{
	$.extend($.ebm, table);	
	table = null;
}

