/**
* 自定义的事件对象，需要后续扩展
*/
function Event(type,args)
{this.type = type;
this.args = args;}
/**
 * @author andypan
 * 操作模板<%%>基本功能 基类
*/
var CliBase = (function() {
// Return the constructor.
return function() { // implements Publication
// 私有变量 //存储事件数组
var _eventList = new Array();
// 保密的方法
this.getEventList = function() {return _eventList;}
}})();
/**
 * 返回正则表达式匹配项列
 * @param  html 模板代码段 className 类名 
 * @return 正则表达式匹配段
 */
CliBase.prototype.getRepeatStrArray = function(html,className){
	var stRegPrefix = "<%repeat_"+className+"\\s*match=\"([^\"]+)\"[^%]*%>";
	var stRegContent = "<%repeat_"+className+"[^>]*%>((.|\\n)+)<%_repeat_"+className+"%>";
	var r_repeat_match = new RegExp(stRegPrefix);
	var r_repeat_match_global = new RegExp(stRegPrefix,"g");
	if (html.match(r_repeat_match)==null){
		//alert("没有找到xml节点<%repeat_"+(className)+"%>");
		return new Array();
	}
	var arPrefix = html.match(r_repeat_match_global);
	return arPrefix;
}
/**
* 返回执行<%XX%>XX连续内容的代码段 如已  <%Radio%>开头  <%_Radio%>结尾
*/
CliBase.prototype.getStrSession = function(html,name){
	var start = html.indexOf("<%"+name+"%>",0)+("<%"+name+"%>").length;
	var end = html.indexOf("<%_"+name+"%>",start);
	if(end==-1)
		return html;
	return html.substring(start,end);
}

/**
 * 按照获得的模板代码和类名 进行循环复制 返回实际使用的html
 * @param intiFn 预处理模块中 属性值的方法(eg:<%=text%>) repeatFn处理repeat的方法 可能与类属性耦合
 */
CliBase.prototype.getRepeatStr = function (html,className,intiFn,repeatFn){
	var arPrefix = this.getRepeatStrArray(html,className);
	var resultStr ="";
	var startPosition = 0;
	for (var i=0;i<arPrefix.length;i++){
		var st = arPrefix[i];
		startPosition += html.indexOf(st);
		var endPosition = html.indexOf("<%_repeat_"+className+"%>",startPosition);
		startPosition += st.length;
		if(intiFn==null || repeatFn==null)
		{
			return html;
		}else{
			var repeatContent = repeatFn(intiFn(html.substring(startPosition,endPosition))); //获得内容模板
			resultStr += repeatContent;
		}
	}
	return  resultStr;
}
/**
 * 返回repeat之前的模板值
 * @param html
 * @param className
 * @return
 */
CliBase.prototype.getRepeatBeforeStr = function (html,className){
	var arPrefix = this.getRepeatStrArray(html,className);
	if(arPrefix.length==0) return html;
	var startPosition = html.indexOf(arPrefix[0]);
	return  html.substring(0,startPosition);
}
/**
 * 返回repeat之后的模板值
 * @param html
 * @param className
 * @return
 */
CliBase.prototype.getRepeatAfterStr = function (html,className){
	var endPosition = html.indexOf("<%_repeat_"+className+"%>");
	if(endPosition==-1) return "";
	return  html.substring(endPosition+("<%_repeat_"+className+"%>").length,html.length);
}
CliBase.prototype.bulidXML = function (src){
	var xmlDoc;
	try
	  {
	  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
	  xmlDoc.async="false";
	  xmlDoc.loadXML(src);
	  }
	catch(e)
	  {
		  try //Firefox, Mozilla, Opera, etc.
			{
			var parser=new DOMParser();
			xmlDoc=parser.parseFromString(src,"text/xml");
			}
		  catch(e) {alert(e.message)}
	  }
	  //xmlDoc.getElementsByTagName("err")[0].firstChild.nodeValue
	  var result ;
	  if(xmlDoc.getElementsByTagName("err").length>0){
		  result = xmlDoc.getElementsByTagName("err")[0].firstChild.nodeValue;
	  }else{
		  result =0
	  }
	  if(xmlDoc.getElementsByTagName("r").length>0){
		  result = xmlDoc.getElementsByTagName("r")[0].firstChild.nodeValue;
	  }else{
		  result =0
	  }
	 if(result!=0){return String(result);
	 }else{return xmlDoc;}
}
//将html格式化 主要是处理<%%>的转义
CliBase.prototype.getDivHTML =function(id){
	var div = $(id);
	var templetHTML;
	if (div.oldHTML) {
		templetHTML = div.oldHTML;
	}else{
		templetHTML = div.oldHTML = div.innerHTML;
	}

	templetHTML = templetHTML.replace(/&lt;/g,"<");
	templetHTML = templetHTML.replace(/&gt;/g,">");
	templetHTML = unescape(templetHTML);
	return templetHTML;
}
CliBase.prototype.getValueFromXML =function(xmlnode,name){
	if(xmlnode.getElementsByTagName(name).length>0){
		if(xmlnode.getElementsByTagName(name)[0].firstChild==null){
			return null;
		}
		return xmlnode.getElementsByTagName(name)[0].firstChild.nodeValue;
	}
	return null;
}
/**
* 为该实例增加事件机制
	EventName 事件名,handler 处理函数
*/
CliBase.prototype.addEventListener = function(EventType,handler){
	this.getEventList().push([EventType,handler]);
}
CliBase.prototype.removeEventListener = function(EventType,handler){
	for(var i=0;i<this.getEventList().length;i++){
		if((EventType==this.getEventList()[i][0])&&(handler==this.getEventList()[i][1])){
			try{
			this.getEventList().splice(i,1);
			}catch(e){}
		}
	}
}
CliBase.prototype.dispatchEvent = function(Event){
	for(var i=0;i<this.getEventList().length;i++){
		if(Event.type==this.getEventList()[i][0]){
			try{
			this.getEventList()[i][1](Event);
				}catch(e){}
		}
	}
}
/*  |xGv00|075ae554ad8bf28b1c2f66b0ab173f9a */
