function initDataPilot(dataPilot){
	var dataset=getElementDataset(dataPilot);
	if (!dataPilot.getAttribute("pageSize")){
		if (dataset) dataPilot.pageSize=dataset.pageSize;
	}
	var pageSize=dataPilot.getAttribute("pageSize");

	for(var i=0; i<dataPilot.tBodies[0].rows.length; i++){
		var row=dataPilot.tBodies[0].rows[i];
		row.removeNode(true);
	}	

	var buttons_str=getValidStr(dataPilot.getAttribute("buttons"));
	if (buttons_str=="" || compareText(buttons_str, "default"))
		buttons_str="movefirst,prevpage,moveprev,movenext,nextpage,movelast,appendrecord,deleterecord,cancelrecord,updaterecord";
	else if (compareText(buttons_str, "readonly"))
		buttons_str="movefirst,prevpage,moveprev,movenext,nextpage,movelast";
	buttons_str=buttons_str.toLowerCase();
	var buttons=buttons_str.split(",");

	var row=dataPilot.tBodies[0].insertRow();
	row.align="center";
	for(var i=0; i<buttons.length; i++){
		if ((!dataset || !dataset.autoLoadPage || dataset.pageCount<2) && 
			(buttons[i]=="prevpage" || buttons[i]=="nextpage")) continue;

		btn=document.createElement("<input type=button class=button hideFocus=true style=\"height: 22px\">");
		btn.style.backgroundImage = "url("+_extra_library+"image/button.gif)";
		btn.tabIndex=-1;
		btn.onmouseover=_button_onmouseover;
		btn.onmouseout=_button_onmouseout;
		btn.onclick=_datapilot_onclick;

		btn.dataset=dataPilot.getAttribute("dataset");
		btn.buttonType=buttons[i];
		btn.datapiolt=dataPilot;

		switch(buttons[i]){
			case "movefirst":{
				btn.style.fontFamily="Webdings";
				btn.value="9";
				btn.title=constDatasetMoveFirst;
				btn.style.width=30;
				break;
			}
			case "prevpage":{
				btn.style.fontFamily="Webdings";
				btn.value="7";
				btn.title=constDatasetPrevPage;
				btn.style.width=30;
				break;
			}
			case "moveprev":{
				btn.style.fontFamily="Webdings";
				btn.value="3";
				btn.title=constDatasetMovePrev;
				btn.style.width=30;
				break;
			}
			case "movenext":{
				btn.style.fontFamily="Webdings";
				btn.value="4";
				btn.title=constDatasetMoveNext;
				btn.style.width=30;
				break;
			}
			case "nextpage":{
				btn.style.fontFamily="Webdings";
				btn.value="8";
				btn.title=constDatasetNextPage;
				btn.style.width=30;
				break;
			}
			case "movelast":{
				btn.style.fontFamily="Webdings";
				btn.value=":";
				btn.title=constDatasetMoveLast;
				btn.style.width=30;
				break;
			}
			case "insertrecord":{
				btn.value=constBtnInsertRecord;
				btn.title=constDatasetInsertRecord;
				btn.style.width=45;
				break;
			}
			case "appendrecord":{
				btn.value=constBtnAppendRecord;
				btn.title=constDatasetAppendRecord;
				btn.style.width=45;
				break;
			}
			case "deleterecord":{
				btn.value=constBtnDeleteRecord;
				btn.title=constDatasetDeleteRecord;
				btn.style.width=45;
				break;
			}
			case "editrecord":{
				btn.value=constBtnEditRecord;
				btn.title=constDatasetEditRecord;
				btn.style.width=45;
				break;
			}
			case "cancelrecord":{
				btn.value=constBtnCancelRecord;;
				btn.title=constDatasetCancelRecord;
				btn.style.width=45;
				break;
			}
			case "updaterecord":{
				btn.value=constBtnUpdateRecord;
				btn.title=constDatasetUpdateRecord;
				btn.style.width=45;
				break;
			}
		}
		btn.id=dataPilot.id+"_"+btn.buttonType;
		row.insertCell().appendChild(btn);
	}

	refreshDataPilot(dataPilot);
}

function initPagePilot(pagePilot){
	
}


function setDataPilotButtons(dataPilot, buttons){
	dataPilot.buttons=buttons;
	initDataPilot(dataPilot);
}

function _pagepilot_onclick(pagePilot,pageindex){
	
}


function refreshPagePilot(pagePilot,pageindex){
	var dataset=getElementDataset(pagePilot);	
	var row = pagePilot.rows[pagePilot.rows.length -1];  //最后一行
	pagePilot.deleteRow(row);
	pagePilot.insertRow();
	row = pagePilot.rows[pagePilot.rows.length -1];  	
	if (dataset.pageCount == 1) return;
	
	if (typeof(pageindex)=="undefined")
		var pageIndex = dataset.pageIndex;
	else
		var pageIndex = pageindex ;
	
	var maxPageLink = eval(pagePilot.getAttribute("maxPageLink"));  
	
	
	var middleIndex = 0;
	if (maxPageLink % 2 == 0)
	 middleIndex = maxPageLink /2 ;
	else
		 middleIndex = maxPageLink / 2-0.5;
		 
	var currentPageIndex = pageIndex - middleIndex;
	
	if (currentPageIndex > dataset.pageCount -maxPageLink +1  ) {   
	currentPageIndex = dataset.pageCount -maxPageLink +1 ;
	}
	if (currentPageIndex < 1) {
	currentPageIndex = 1;
	}  
	var halfPageIndex = currentPageIndex+maxPageLink-1; 
	if (halfPageIndex > dataset.pageCount) {
	  halfPageIndex = dataset.pageCount;
	}  
	
	var cellIndex  = 0;  
	if ((dataset.pageCount > 1)&&(pageIndex>1)){
		 row.insertCell(cellIndex) ;
		 var preIndex = pageIndex -1 ;
		 row.cells[cellIndex].innerHTML = "<td><a onclick=\""+dataset.id+".moveToPage("+preIndex+");refreshPagePilot("+pagePilot.id+","+preIndex+")\" style=\"cursor:hand;\"><font face=webdings >7</font></a></td>";
		 cellIndex++;
	}
	if (currentPageIndex > 1) {
	  //row.insertCell(cellIndex) ;
	  //row.cells[cellIndex].innerHTML="<td><a onclick=\""+dataset.id+".moveToPage(1);refreshPagePilot("+pagePilot.id+",1)\" style=\"cursor:hand;text-decoration:underline;\">1";    
	  //row.cells[cellIndex].innerHTML =row.cells[cellIndex].innerHTML+"</a></td>";
	  var cell = document.createElement("td");
	  row.appendChild(cell);
	  var str="<td><a onclick=\""+dataset.id+".moveToPage(1);refreshPagePilot("+pagePilot.id+",1)\" style=\"cursor:hand;text-decoration:underline;\">1";    
	  row.cells[cellIndex].innerHTML = str+"</a></td>";
	  cellIndex++;
	  if (currentPageIndex > 2) {
	  	//row.insertCell(cellIndex) ;
	  	cell = document.createElement("td");
	  	row.appendChild(cell);
	    row.cells[cellIndex].innerHTML ="<td>...</td>";
	    cellIndex++;
	  }    
	}   
	 
	var  i = currentPageIndex;   
	while (i <= halfPageIndex){  
	//row.insertCell(cellIndex) ; 
	//row.cells[cellIndex].innerHTML = "<td>";	
	cell = document.createElement("td");
	row.appendChild(cell);
	str = "<td>";	
	if (i == pageIndex) { 	    	
	  //row.cells[cellIndex].innerHTML = row.cells[cellIndex].innerHTML+"<b>"+i+"</b>";  
	  str = str+"<b>"+i+"</b>";         
	}
	else  {    	
	  //row.cells[cellIndex].innerHTML =row.cells[cellIndex].innerHTML+"<a onclick=\""+dataset.id+".moveToPage("+i+");refreshPagePilot("+pagePilot.id+","+i+")\" style=\"cursor:hand;text-decoration:underline;\">"+i+"</a>";
	  str =str+"<a onclick=\""+dataset.id+".moveToPage("+i+");refreshPagePilot("+pagePilot.id+","+i+")\" style=\"cursor:hand;text-decoration:underline;\">"+i+"</a>";
	}    
	row.cells[cellIndex].innerHTML = str+"</td>";
	i++;
	cellIndex++;
	}
	
	if (halfPageIndex < dataset.pageCount) {    	
	if (halfPageIndex < dataset.pageCount - 1) {
	  //row.insertCell(cellIndex) ;
	  cell = document.createElement("td");
	  row.appendChild(cell);
	  row.cells[cellIndex].innerHTML  = "<td>...</td>";
	  cellIndex++;
	}
	//row.insertCell(cellIndex) ;
	//row.cells[cellIndex].innerHTML  = "<td><a onclick=\""+dataset.id+".moveToPage("+dataset.pageCount+");refreshPagePilot("+pagePilot.id+","+dataset.pageCount+")\" style=\"cursor:hand;text-decoration:underline;\">"+dataset.pageCount;
	//row.cells[cellIndex].innerHTML =row.cells[cellIndex].innerHTML+"</a></td>";
	cell = document.createElement("td");
	row.appendChild(cell);
	str  = "<td><a onclick=\""+dataset.id+".moveToPage("+dataset.pageCount+");refreshPagePilot("+pagePilot.id+","+dataset.pageCount+")\" style=\"cursor:hand;text-decoration:underline;\">"+dataset.pageCount;
	row.cells[cellIndex].innerHTML =str+"</a></td>";
	cellIndex++;
	}
	if ((dataset.pageCount > 1)&&(pageIndex < dataset.pageCount)){
		 row.insertCell(cellIndex) ;
		 var nextIndex = pageIndex +1 ;
		 row.cells[cellIndex].innerHTML = "<td><a onclick=\""+dataset.id+".moveToPage("
		 +nextIndex+");refreshPagePilot("+pagePilot.id+","
		 +nextIndex+")\" style=\"cursor:hand;\"><font face=webdings >8</font></a></td>";
	}
	
}

function refreshDataPilot(dataPilot){
	function refreshButton(btn, enable){
			btn.disabled=!enable;
			refreshButtonColor(btn);
	}

	var dataset=getElementDataset(dataPilot);

	var row=dataPilot.rows[0];
	for(var i=0; i<row.cells.length; i++){
		var btn=row.cells[i].children[0];
		switch(btn.buttonType){
			case "movefirst":;
			case "moveprev":{
				refreshButton(btn, (dataset && !dataset.bof));
				break;
			}
			case "prevpage":{
				refreshButton(btn, (dataset && dataset.record && dataset.record.pageIndex>1));
				break;
			}
			case "movenext":;
			case "movelast":{
				refreshButton(btn, (dataset && !dataset.eof));
				break;
			}
			case "nextpage":{
				refreshButton(btn, (dataset && dataset.record && dataset.record.pageIndex<dataset.pageCount));
				break;
			}
			case "insertrecord":;
			case "appendrecord":{
				refreshButton(btn, (dataset && !dataset.readOnly));
				break;
			}
			case "editrecord":{
				refreshButton(btn, (dataset && !(dataset.bof && dataset.eof) && !dataset.readOnly));
				break;
			}
			case "deleterecord":{
				refreshButton(btn, (dataset && !(dataset.bof && dataset.eof) && !dataset.readOnly));
				break;
			}
			case "cancelrecord":;
			case "updaterecord":{
				refreshButton(btn, (dataset && (dataset.state=="insert" || dataset.state=="modify") && !dataset.readOnly));
				break;
			}
		}

		fireUserEvent(getElementEventName(dataPilot, "onRefreshButton"), [dataPilot, btn, btn.buttonType, dataset]);
	}
}

function _datapilot_onclick(){
	if (event.srcElement.disabled) return;
	var datapiolt=event.srcElement.datapiolt;
	var dataset=getElementDataset(datapiolt);

	var eventName=getElementEventName(datapiolt, "onButtonClick");
	
	if (isUserEventDefined(eventName)){
			var event_result=fireUserEvent(eventName, [datapiolt, event.srcElement, event.srcElement.buttonType, dataset]);
			if (!event_result) return;
	}

	var pageSize=datapiolt.getAttribute("pageSize");

	switch(event.srcElement.buttonType){
		case "movefirst":{
			dataset.moveFirst();
			break;
		}
		case "prevpage":{
			var pageIndex=(dataset.record)?dataset.record.pageIndex-1:1;
			//alert("prevpage ="+pageIndex);
			dataset.moveToPage(pageIndex);
			break;
		}
		case "moveprev":{
			dataset.movePrev();
			break;
		}
		case "movenext":{
			dataset.moveNext();
			break;
		}
		case "nextpage":{
			
			var pageIndex=(dataset.record)?dataset.record.pageIndex+1:1;
			//alert("nextpage = "+pageIndex);
			dataset.moveToPage(pageIndex);
			//alert("button_onclick()");
			break;
		}
		case "movelast":{
			dataset.moveLast();
			break;
		}
		case "insertrecord":{
			dataset.insertRecord("before");
			break;
		}
		case "appendrecord":{
			dataset.insertRecord("end");
			break;
		}
		case "editrecord":{
			dataset_setState(dataset, "modify");
			break;
		}
		case "deleterecord":{
			if (isTrue(datapiolt.getAttribute("confirmDelete"))){
					if (confirm(constDatasetDeleteRecord)) dataset.deleteRecord();
			}
			else
					dataset.deleteRecord();
			break;
		}
		case "cancelrecord":{
			if (isTrue(datapiolt.getAttribute("confirmCancel"))){
					if (confirm(constDatasetCancelRecord)) dataset.cancelRecord();
			}
			else
					dataset.cancelRecord();
			break;
		}
		case "updaterecord":{
			dataset.updateRecord();
			break;
		}
	}
}

function initTabSet(tabset){
	var tabs=tabset.getAttribute("tabs");
	if (!tabs) return;
	var tabs=tabs.split(";");

	for(var i=0; i<tabset.tBodies[0].rows.length; i++){
		var row=tabset.tBodies[0].rows[i];
		row.removeNode(true);
	}
	
	//var row=tabset.tBodies[0].insertRow();	
	var row = document.createElement("tr");
  tabset.tBodies[0].appendChild(row);
	//var cell=row.insertCell();
	var cell = document.createElement("td");
  row.appendChild(cell);
	cell.firstCell=true;
	cell.innerHTML="<img src=\""+_extra_library+"image/start_tab.gif\">";

	var label, tabname, index;
	for(i=0; i<tabs.length; i++){
		props=tabs[i].split(",");

		//cell=row.insertCell();
		cell = document.createElement("td");
  	row.appendChild(cell);
		cell.background=_extra_library+"image/tab_button.gif";
		cell._tabIndex=i;
		tabname=props[1];
		cell.tabName=tabname;
		cell.targetUrl=getDecodeStr(props[2]);

		btn=document.createElement("<DIV hideFocus=true nowrap class=tab></DIV>");
		btn.innerText=getDecodeStr(props[0]);
		btn._tabIndex=-1;
		btn.onclick=_tabset_onclick;
		btn.onmouseover=_tabset_onmouseover;
		btn.onmouseout=_tabset_onmouseout;
		btn.tab=cell;
		cell.appendChild(btn);

		//cell=row.insertCell();
		cell = document.createElement("td");
  	row.appendChild(cell);
		if (i!=tabs.length-1){
			cell.innerHTML="<img src=\""+_extra_library+"image/tab.gif\">";
		}
		else{
			cell.lastCell=true;
			cell.innerHTML="<img src=\""+_extra_library+"image/end_tab.gif\">";
		}

		eval("if (typeof("+tabset.id+"_"+tabname+")!=\"undefined\"){ "+
			tabset.id+"_"+tabname+".style.visibility=\"hidden\";"+
			tabset.id+"_"+tabname+".style.position=\"absolute\";}");
	}
	//cell=row.insertCell();
	cell = document.createElement("td");
  row.appendChild(cell);
	cell.width="100%";
	cell.background=_extra_library+"image/tab_blank.gif";

	setActiveTabIndex(tabset, getInt(tabset.getAttribute("tabIndex")));
}

function setTabs(tabset, tabs){
	tabset.tabs=tabs;
	initTabSet(tabset);
}

function _setActiveTab(cell){
	try{
		var row=getRowByCell(cell);
		var tabset=getTableByRow(row);
		var selectCell=tabset.selectTab;

		if (selectCell==cell) return;
		var oldName=(selectCell)?selectCell.tabName:"";
		var newName=cell.tabName;

		var eventName=getElementEventName(tabset, "beforeTabChange");
		var event_result=fireUserEvent(eventName, [tabset, oldName, newName]);
		if (event_result) throw event_result;

		if (selectCell){
			var prevCell=row.cells[selectCell.cellIndex-1];
			var nextCell=row.cells[selectCell.cellIndex+1];

			selectCell.background=_extra_library+"image/tab_button.gif";

			if (prevCell.firstCell)
				prevCell.firstChild.src=_extra_library+"image/start_tab.gif";
			else
				prevCell.firstChild.src=_extra_library+"image/tab.gif";

			if (nextCell.lastCell)
				nextCell.firstChild.src=_extra_library+"image/end_tab.gif";
			else
				nextCell.firstChild.src=_extra_library+"image/tab.gif";
			eval("if (typeof("+tabset.id+"_"+oldName+")!=\"undefined\") "+tabset.id+"_"+oldName+".style.visibility=\"hidden\"");
		}

		var prevCell=row.cells[cell.cellIndex-1];
		var nextCell=row.cells[cell.cellIndex+1];

		cell.background=_extra_library+"image/active_tab_button.gif";

		if (prevCell.firstCell)
			prevCell.firstChild.src=_extra_library+"image/active_start_tab.gif";
		else
			prevCell.firstChild.src=_extra_library+"image/active_tab1.gif";

		if (nextCell.lastCell)
			nextCell.firstChild.src=_extra_library+"image/active_end_tab.gif";
		else
			nextCell.firstChild.src=_extra_library+"image/active_tab2.gif";
		eval("if (typeof("+tabset.id+"_"+newName+")!=\"undefined\") "+tabset.id+"_"+newName+".style.visibility=\"\"");

		tabset.selectTab=cell;
		tabset.selectName=cell.tabName;
		tabset.selectIndex=cell._tabIndex;

		if (cell.targetUrl){
			//20030920 TabSet的TargetUrl中不必加入tabIndex参数
			//var url=cell.targetUrl+((cell.targetUrl.indexOf("?")>=0)?"&":"?");
			//url+=tabset.id+"_tabIndex="+cell._tabIndex;
			open(cell.targetUrl, tabset.targetFrame);
		}

		var eventName=getElementEventName(tabset, "afterTabChange");
		fireUserEvent(eventName, [tabset, oldName, newName]);
	}
	catch(e){
		processException(e);
	}
}

function setActiveTab(table, tabname){
	if (!tabname) return;
	for(var i=0; i<table.cells.length; i++){
		if (table.cells[i].tabName==tabname){
			_setActiveTab(table.cells[i]);
			break;
		}
	}
}

function setActiveTabIndex(table, index){
	for(var i=0; i<table.cells.length; i++){
		if (table.cells[i]._tabIndex==index){
			_setActiveTab(table.cells[i]);
			break;
		}
	}
}

function _tabset_onclick(){
	var tab=event.srcElement.tab;	
	_setActiveTab(tab);
}

function _tabset_onmouseover(){
	event.srcElement.style.color="blue";
	event.srcElement.style.textDecorationUnderline=true;
}

function _tabset_onmouseout(){
	event.srcElement.style.color="black";
	event.srcElement.style.textDecorationUnderline=false;
}

function initButton(button) {
	button.hideFocus=true;
	setButtonDown(button, button.getAttribute("down"))
	button.onmousedown=_button_onmousedown;
	button.onmouseup=_button_onmouseup;
	button.onmouseover=_button_onmouseover;
	button.onmouseout=_button_onmouseout;
	if (button.onclick==null && !isTrue(button.getAttribute("defaultOperation"))) {
		button.onclick=_button_onclick;
	}
	button.title = getDecodeStr(button.toolTip);
}

function refreshButtonColor(button){
	if (isTrue(button.getAttribute("down"))){
		button.className="button_down";
		button.style.color = "white";
		button.style.backgroundImage = "url("+_extra_library+"image/button_down.gif)";
	}
	else{
		button.className="button";
		button.style.color = "black";
		button.style.backgroundImage = "url("+_extra_library+"image/button.gif)";
	}
}

function setButtonDown(button, down){
	button.down=isTrue(down);
	refreshButtonColor(button);
}

function _button_onmousedown(){
	var button=event.srcElement;
	var menu=button.getAttribute("menu");

	if (typeof(menu)=="string" && menu!=""){
		eval("menu="+menu);
		button.menu=menu;
	}

	if (menu){
		showButtonMenu(menu, button);
	}
}

function _button_onmouseup(){
	var button=event.srcElement;
	if (isTrue(button.getAttribute("allowPushDown"))){
		var down=button.getAttribute("down");
		setButtonDown(button, !down);
	}
}

function _button_onmouseover(){
	try{
		var button=event.srcElement;
		if (button.disabled || button.down) return;
		button.style.backgroundImage="url(none)";
	}
	catch(e){
		//do nothing
	}
}

function _button_onmouseout(){
	try{
		var button=event.srcElement;
		if (button.disabled) return;
		refreshButtonColor(button);
	}
	catch(e){
		//do nothing
	}
}

function _button_onclick(){
	
	var button=event.srcElement;
	/*
	if (!button.defaultOperation) return;
	switch (button.defaultOperation.toLowerCase())
	{
	case "submitupdate":
		submitManager.submitUpdate();
		break;
	case "refreshpage":
		window.open(window.location.href, "_self");
		break;
	}*/
	
	//alert(button.defaultOperation);
	if (button.defaultOperation){
		switch (button.defaultOperation.toLowerCase())
		{
		case "submitupdate":
			submitManager.submitUpdate();
			break;
		case "refreshpage":
			window.open(window.location.href, "_self");
			break;
		}
	} else{
	  
		fireUserEvent(getElementEventName(button, "onClick"), [button]);
	}
}