// JavaScript Document
//定义解析类
function DataBind(){};
//定义扩展对象
var extend_obj={};
extend_obj.blank=function(v)
{
if(v==null||v==undefined||v.toString().replace(/(^\s*)|(\s*$)/g,"")=="")
   return "&nbsp;";
else
   return v;
}

extend_obj.showlogos=function(v)
		{
			if(!v||v==undefined)
			  return "/images/defaultlogo.jpg"
			else{
				if(v.indexOf("/")!=0&&v.indexOf("\\")!=0){
					v="/"+v;
				}
				v=v.replace(/\\/g,"/");
			  return v;
			}
		}
		
extend_obj.showeplogos=function(v)
		{
			if(!v||v==undefined)
			  return "/images/defaulteplogo.jpg"
			else{
				if(v.indexOf("/")!=0&&v.indexOf("\\")!=0){
					v="/"+v;
				}
				v=v.replace(/\\/g,"/");
			  return v;
			}
		}
//给解析类增加变量与方法
DataBind.prototype={
	selectList   : new Array(),
	radioList    : new Array(),
	lineNum      : 0,
	oddLineClass : "",
	evenLineClass: "",
	templateTxt  : "",
	isForm       : false,
	setLineClass    :  function(oddClass,evenClass)
	{
	   this.oddLineClass=oddClass;
	   this.evenLineClass=evenClass;
	},
	setTemplateTxt  :  function(id)
	{
		var temp=document.getElementById(id);
		if(temp)
		  this.templateTxt=temp.innerHTML;
		this.lineNum=0;
	},
	setForm         :  function()
	{
		this.isForm=true;
	},
	getResultHtml   :  function(data,templateHtml,type)
	{
		var cdomhtml=templateHtml;                         //取绑定模板内容
		var cdomhtmllen = cdomhtml.length;                 //模板长度
		var beginchar = "@{";                              //起始字符
		var endchar = "}";                                 //结束字符
		var endchar_t = "}";
		var start = -1;                                    //查找的开始位置
		while(start<cdomhtmllen)
		{
		   var startflag = cdomhtml.indexOf(beginchar,start+endchar_t.length);       //查找起始标志
		       if(startflag<0) break;
           var endflag = cdomhtml.indexOf(endchar, startflag + beginchar.length);    //查找结束标志  
		       if(endflag<0) break;
		   var fieldName = cdomhtml.substring(startflag+2,endflag);                 //字段标志,起始标志占两位，所以起始位置为startflag+2
		   if(fieldName!="") 
			   {
		           var result = "";
				   if(type=="list")
				      result=this.replaceField(data,fieldName);
				   if(type=="form")
				      result=this.replaceForm(data,fieldName);
				   cdomhtml = cdomhtml.replace(beginchar+fieldName+endchar,result);		  
			   }
			start = startflag;                                                         //重置搜索起始位置
			cdomhtmllen = cdomhtml.length;                                           //重置模板长度(模板内容经替换内容已改变)
		}
		return cdomhtml;                                                             //返回模板替换结果
	},	
		
	replaceField   :   function(data,fieldname)
	{
		var separateFlag = "|";                                                     //定义分隔符(用于返回对象的扩展）
		var fieldSeparateFlag = ",";                                                //定义多重字段分隔符
		var result="";
		var separateArr = fieldname.split(separateFlag);                          //分隔对象成数组
		var extendFlag = separateArr.length>1?true:false;                           //扩展标志（有扩展则为true,没有扩展则为false）
		if(extendFlag)
		{
			var funName=separateArr[1];
			var para=separateArr[0];
			if(para=="rownum")
			  if(this.lineNum % 2==0)
			    return this.evenLineClass;
			  else
			    return this.oddLineClass;
			if(typeof extend_obj[funName]=="function")                              //判断是否为方法(function)
			{
			   
			   var fieldArr=para.split(fieldSeparateFlag);                        //分隔字段名称
			   var filedArrLen=	fieldArr.length;
			   var paraArr = new Array(filedArrLen);     
  	  	   	   var callback = extend_obj[funName] || function(){};
			   for(var i=0;i<filedArrLen;i++)                                      //获取多字段参数
  	  	   	  	{
  	  	   	  		paraArr[i] = data[fieldArr[i]];
  	  	   	  	}
				return extend_obj[funName].call(null,paraArr[0],paraArr[1]);
			    //return callback(paraArr.join("&&"));                           
			}
		}else{
			if(fieldname!="rownum")
			{
			  result=(data[fieldname]!=undefined&&data[fieldname]!=null&&data[fieldname]!="")?data[fieldname]:"&nbsp;";
			}
			else
			  {
			  result=this.lineNum;
			  }
		}
	   return result;	
	},
	bindDataList    :  function(data,objid,callback)
	{
		var datalistLen=data.length;
		var callback = callback || function(){};
        var listInnerHtml="";
        var templateObj=document.getElementById(objid);
		if(templateObj==null)
		 {
			 return;
		 }
		var templateHtml="";
		this.lineNum=0;
		if(this.templateTxt=="")
		{
		    templateHtml=templateObj.innerHTML; 
		    this.templateTxt=templateHtml;
		}
		else
		templateHtml=this.templateTxt;
		templateHtml=templateHtml.replace(/(%7B)/g,"{");
        templateHtml=templateHtml.replace(/(%7D)/g,"}");
		templateHtml=templateHtml.replace(/(%7C)/g,"|");
		templateHtml=templateHtml.replace(/(%27)/g,"'");
       for(var i=0;i<datalistLen;i++)
		{
			this.lineNum+=1;
		   	listInnerHtml+=this.getResultHtml(data[i],templateHtml,"list");
			
     	}
		templateObj.innerHTML=listInnerHtml;	
		callback();
	},
	replaceForm  :   function(data,fieldname)
	{
		var separateFlag = "|";                                                     //定义分隔符(用于返回对象的扩展）
		var result="";
		var separateArr = fieldname.split(separateFlag);                            //分隔对象成数组
		var arrLen=separateArr.length;
		var extendFlag = arrLen>1?true:false;                           //扩展标志（有扩展则为true,没有扩展则为false）
		if(extendFlag)
		{
			var para=separateArr[0];                           //获取参数，即字段
			var funName=separateArr[1];       //用slice截取不包括最后一位，所以不用-1
			var inputtype="text";
			if(arrLen>=3)
			   inputtype=separateArr[2];
			if(inputtype=="text")   
			  {
			    if(typeof extend_obj[funName]=="function")                          //判断是否为方法(function)
			    {
   	  	   	    var callback = extend_obj[funName] || function(){};
			    return callback(data[para]);                                        //apply，第一个参数为对象，这里我们不需要绑定至特定对象，第二个参数必须为数组
			    }
			  }
			if(inputtype=="select")
			  {
				  var selectId="";
				  if(separateArr[3])
				    selectId=separateArr[3];
				  this.selectList.push([selectId,data[para]]);
				  result="";
			  
			  }
			  if(inputtype=="radio")
			  {
				  var radioName="";
				  if(separateArr[3])
				    radioName=separateArr[3];
				  this.radioList.push([radioName,data[para]]);
				  result="";  
				  
			  }
		}else{
			var temp=data[fieldname];
			if(temp!=undefined&&temp!=null&&temp!="")
			  result=temp.replace("\"","&quot;"); 
			else
			if(!this.isForm)
			  result="&nbsp;";
			else
			  if(document.all)
			    result="\"\"";
			  else
			    result="";
			  
		}
	   return result;	
	},
	bindForm   :  function (data,objid,callback)
	{
		var templateObj=document.getElementById(objid);
		var callback = callback || function(){};
		var listInnerHtml="";
		if(templateObj==null||templateObj.innerHTML=="")
		 {
			 return;
		 }
		 var templateHtml=templateObj.innerHTML; 
		 if(this.templateTxt!="")
		    templateHtml=this.templateTxt;
		templateHtml=templateHtml.replace(/(%7B)/g,"{");
        templateHtml=templateHtml.replace(/(%7D)/g,"}");
		templateHtml=templateHtml.replace(/(%7C)/g,"|");
		 listInnerHtml+=this.getResultHtml(data,templateHtml,"form");
		 templateObj.innerHTML=listInnerHtml;
		 var templen=(this.selectList).length;
		 if(templen>0)
		 {
			 for(var j=0;j<templen;j++)
			 {
				 this.resetSelectByValue(this.selectList[j][0],this.selectList[j][1]);
			 }
		 }
		 templen=(this.radioList).length;
		  if(templen>0)
		 {
			 for(var j=0;j<templen;j++)
			 {
				 this.resetRadioByValue(this.radioList[j][0],this.radioList[j][1]);
			 }
		 }
		callback();
	},
	resetSelectByValue : function(selectId,optionValue)
    {
    var obj=document.getElementById(selectId);
    var option="";
    if(obj)	
    {
	 var len=obj.options.length;
	 for(var i=0;i<len;i++)
	 {
		option=obj.options[i];
	    if(option.value==optionValue)
		    option.selected=true;
	 }		
	}	
	},
	resetRadioByValue : function(radioName,radioValue)
	{
	var obj=document.getElementsByName(radioName);
	if(obj)
	{
		var objlen=obj.length;
		for(var i=0;i<objlen;i++)
		{
			if(obj[i].value==radioValue)
			  obj[i].checked=true;		
		}
	}
	}
}