//********************************************//
// 打印页面（JRPage）控件                         //
//                                            //
//********************************************//
//构造函数
function JRPage(parent)   
{
  var pdiv,obj=document.createElement('div');//创建一个控制节点
  if(parent){obj.Unit=parent.Unit;obj.Parent=parent;}else obj.Parent=document.body;//获取父块
  obj.Components=new Array();//子控件集
  obj.Unit='mm';//单位
  obj.Page=0;//显示的页数
  obj.Pages=new Array();
  //方法
  obj.Preview=PG_preview;//打印
  obj.RegisterComponent=JR_registercomponent;//注册控件
  obj.CreatePage=PG_createpage;//创建新的一页
  setFont(obj);
  return obj;
}
function PG_createpage()
{
  var obj,detail=null;
  var page=this.cloneNode(false);//创建新的一页
  page.style.top=this.Page*unitToValue(this.style.height)+this.Unit;
  page.Top=0;
  this.Parent.appendChild(page);
  this.Pages[this.Page]=page;
   var isfirst = true;
    //显示子控件
		for(i=0;i<this.Components.length;i++)
		{
			this.Components[i].style.top=this.Pages[this.Page].Top+this.Unit;
			if((this.Components[i].BandType=='Title')&&this.Page==0)
			{  
//				this.Components[i].style.top=0;
				//if(isfirst)	this.Pages[this.Page].Top+=unitToValue(this.Components[i].style.top);
				//设置是否显示(第一个JRDetailBand之前的显示)
				obj=this.Components[i].Preview();
				this.Pages[this.Page].appendChild(obj);
		        this.Pages[this.Page].Top+=unitToValue(this.Components[i].style.height);
				isfirst=false;
			}
			//如果子控件是JRBand
			if(this.Components[i].BandType=='DetailTitle'||this.Components[i].BandType=='PageTitle')
			{ 
//				if(isfirst)
//					this.Pages[this.Page].Top+=unitToValue(this.Components[i].style.top);
				//设置是否显示(第一个JRDetailBand之前的显示)
				obj=this.Components[i].Preview();
				this.Pages[this.Page].appendChild(obj);
		        this.Pages[this.Page].Top+=unitToValue(this.Components[i].style.height);
				isfirst=false;
			}

            if(this.Components[i].Type=='JRDetailBand')
			{
				//设置是否显示(第一个JRDetailBand之前的显示)
				detail = this.Components[i];
				detail.DataSet.AutoControl=false;
				if(detail.DataSet&&this.Page==0) {
					//分别显示数据集中的记录
					detail.DataSet.First();
				}
				detail.Preview();
				detail.DataSet.AutoControl=true;     
            }
  			//显示一页的页脚
	        if(this.Components[i].BandType=='PageFoot')
			{	
				obj=this.Components[i].Preview();
				this.Pages[this.Page].appendChild(obj);
				obj.style.top=unitToValue(this.Pages[this.Page].style.height)-unitToValue(this.Components[i].style.height)+this.Unit;
		    }
		}
  this.Page++;
  if(detail)if(detail.DataSet){if(!detail.DataSet.Eof)this.CreatePage();}	
  return page;
}
//显示页面
function PG_preview()
{  
	//生成并显示控件
	this.CreatePage();
}
//注册控件
function JR_registercomponent(obj)
{
   if(this.Components==null)
       this.Components=new Array();
   this.Components[this.Components.length++]=obj;
}
//********************************************//
// Band控件                                   //
//                                           //
//*******************************************//
//构造函数
function JRBand(parent,BandType)   
{
  var obj=document.createElement('div');//创建一个控制节点
  obj.Type='JRBand';//控件类型
  obj.BandType='Title';//该控件的角色,默认为：Title（有：A.标题：Title,B.页头：PageTitle,C.数据集头.DetailTitle,D.页脚：PageFoot,E.DetailBand内部自动生成：Detail.）
  obj.BandType=BandType;
  if(parent!=null)
  {
     parent.RegisterComponent(obj);
     obj.Parent=parent;
	 obj.Unit=parent.Unit;
  }
  else
  {
	 obj.Parent=document.body;
     obj.Unit='mm';
  }
  obj.Components=null;//子控件集
  //方法
  obj.Preview=JRB_preview;//打印预览
  obj.RegisterComponent=JR_registercomponent;//注册控件
  setFont(obj);
  return obj;
}
//打印预览
function JRB_preview()
{
  var obj=this.cloneNode(false);
  if(this.Components!=null)
	for(var i=0;i<this.Components.length;i++){
	 obj.appendChild(this.Components[i].Preview());}
  return obj;
}
//********************************************//
// Lable控件                                  //
//                                           //
//*******************************************//
//构造函数
function JRLabel(parent)   
{
  var obj=document.createElement('Span');//创建一个控制节点
  if(parent!=null){
    parent.RegisterComponent(obj);
    obj.Parent=parent;
    obj.Unit=parent.Unit;
  }
  else
  {
	obj.Parent=document.body;
    obj.Unit='mm';
  }
  obj.Type='JRLabel';//控件类型
  //方法
  obj.Preview=JRL_preview;//打印
  setFont(obj);
  return obj;
}
//打印预览
function JRL_preview()
{
  var obj=this.cloneNode(true);
  obj.innerHTML=this.innerText;
  return obj;
}
//********************************************//
// DetailBand控件                              //
//                                            //
//********************************************//
//构造函数
function JRDetailBand(parent)   
{
  var obj=document.createElement('div');//创建一个控制节点
  if(parent!=null)
  {
     parent.RegisterComponent(obj);
     obj.Parent=parent;
     obj.Unit=parent.Unit;
  }
  else 
  {	 
	 obj.Parent=document.body;
     obj.Unit='mm';//单位
  }
  obj.Type='JRDetailBand';//控件类型
  obj.DataSet=null;//数据集
  obj.RowCount=10;//默认一页明细10行
  //方法
  obj.Preview=JRD_preview;//打印预览
  obj.RegisterComponent=JR_registercomponent;//注册控件
  //事件
  obj.onpropertychange=JRD_onpropertychange;//属性变化的事件
  setFont(obj);
  return obj;
}
function JRD_onpropertychange()//属性变化处理
{
  var n=event.propertyName;
  switch(n){
	case 'DataSet':
	  if(this.OldDataSet)this.OldDataSet.RemoveLink(this);//从原来的DATASET中移除
      this.DataSet.LinkObj(this);
	  this.OldDataSet=this.DataSet;
	  break;
  }
}
//打印预览
function JRD_preview()
{
	if(this.Components!=null)
		{
			if(this.DataSet.Active==false)this.DataSet.Open();
			//分页显示数据
			if(this.DataSet.RecordCount==0)
				return;
			else
			{	
				var i=0;
				while(!this.DataSet.Eof) {
						var band= this.cloneNode(false);
     				    this.Parent.Pages[this.Parent.Page].appendChild(band);
						band.style.top=this.Parent.Pages[this.Parent.Page].Top+this.Parent.Unit;
						this.Parent.Pages[this.Parent.Page].Top+=unitToValue(band.style.height);
						for(var k=0;k<this.Components.length;k++)
						{
							//显示JRDBLabel控件
                 		  if(this.Components[k].Type=='JRDBLabel')
						  {   
								if(this.DataSet)
									this.Components[k].DataSet=this.DataSet;
								band.appendChild(this.Components[k].Preview());
  						  } 	  
    					  if(this.Components[k].Type=='JRRect')
						  {
							  var rect=this.Components[k].Preview();
							  if(i>0) rect.style.borderTopWidth=0;
					
							  band.appendChild(rect);
						  }
						  if(this.Components[k].Type=='JRLabel')
						      band.appendChild(this.Components[k].Preview());
						  }
     	   				  this.DataSet.Next();
						  i++;
    					  if(i>=this.RowCount) {
							return;
						  }
			        }
		     }
        }
}
//********************************************//
// DBLabel控件                                //
//                                           //
//*******************************************//
//构造函数
function JRDBLabel(parent)   
{
  var obj=document.createElement('span');//创建一个控制节点
  obj.DataSet=null;
  if(parent!=null)
  {
     parent.RegisterComponent(obj);
     obj.Parent=parent;
     obj.Unit=parent.Unit;
     if(obj.Parent.Type=='JRDetailBand')
        obj.DataSet=obj.Parent.DataSet;
  }
  else 
  {	 
	 obj.Parent=document.body;
     obj.Unit='mm';//单位
  }
  obj.Type='JRDBLabel';//控件类型
  obj.Unit='mm';//单位
  obj.DataField='';//域名
  obj.Preview=JRDBL_preview;//打印
  setFont(obj);
  return obj; 
}
//打印预览
function JRDBL_preview()
{  
  var obj=this.cloneNode(false);
   if(this.DataField!=''){
	if(this.DataSet.Fields.Field[this.DataField]==null)
	  jcl_err(this.Name+'.DataField:'+this.DataField+Err_NoField);
	else{
	  var text=this.DataSet.Fields.Field[this.DataField].GetValue();
      if(text==null)text='';
      obj.innerHTML=text;
	}
  }
  return obj;
}
//********************************************//
// JRRect控件                                //
//                                           //
//*******************************************//
function JRRect(parent)   
{
  var obj=document.createElement('div');//创建一个控制节点
  obj.style.borderWidth=1;
  obj.style.borderColor=clBlack;
  obj.style.borderStyle="solid";
  if(parent!=null){
    parent.RegisterComponent(obj);
    obj.Parent=parent;
    obj.Unit=parent.Unit;
  }
  else
  {
	obj.Parent=document.body;
    obj.Parent.appendChild(obj);
	obj.Unit='mm';
  }
  obj.Type='JRRect';//控件类型
 
  //方法
  obj.Preview=JRR_preview;//打印
  setFont(obj);
  return obj;
}
//打印预览
function JRR_preview()
{
  var obj=this.cloneNode(false);
  if(isMoz){
	  obj.style.width=unitToValue(obj.style.width)-0.5+'mm';
	  obj.style.height=unitToValue(obj.style.height)-0.5+'mm';
  }

  return obj;
}
//********************************************//
// JRLine控件                                   //
//                                           //
//*******************************************//
function JRLine(parent,x1,y1,x2,y2)   
{
  var obj=document.createElement('div');//创建一个控制节点
  if(x1<x2){
	 obj.style.left=x1+'mm';
     obj.style.width=(x2-x1)+'mm';
     x2-=x1;
  } else{
	  obj.style.left=x2+'mm';
      obj.style.width=(x1-x2)+'mm';
	  x2=x1-x2;
  }
  if(y1<y2){
	 obj.style.top=y1+'mm';
     obj.style.width=(y2-y1)+'mm';
	 y2-=y1;
  } else{
	  obj.style.top=y2+'mm';
      obj.style.width=(y1-y2)+'mm';
	 y2=y1-y2;
  }
  obj.style.position='absolute';
  canvas=new Canvas(obj);
  
  x1=x1+'mm';
  y1=y1+'mm';
  x2+='mm';
  y2+='mm';
  line=canvas.LineTo(x2,y2);
  if(parent!=null){
    parent.RegisterComponent(obj);
    obj.Parent=parent;
    obj.Unit=parent.Unit;
  }
  else
  {
	obj.Parent=document.body;
    obj.Unit='mm';
  }
  obj.Type='JRLine';//控件类型
  obj.style.position='absolute';
  //方法
  obj.Parent.appendChild(obj);
  obj.Preview=JRR_preview;//打印
  setFont(obj);
  return obj;
}

//得到除去单位的数值:left,top,height,width
function unitToValue(value){
	if(value!=null) {
	  var length=value.length;
	  return parseFloat(value.substring(0,length-2));
	}
	else return 0;
}