/*****---------------方便用户输入的JS方法-------------------**/

var selectedItemColor="red";
var commonItemColor="#000000";
var panelStyle='border="1" cellspacing="0" cellpadding="0" bgColor="#FFFFCC"'
				+	' bordercolordark="#FFFFFF" bordercolorlight="#999999" style="font-size:9pt"';
/***********************************************************************************
 * 数据编辑帮助对象
 * @param panelId:面板的ID
 */
function PanelHelper(panelId){
	if(panelId==null || panelId=="")					throw "实例化PanelHelper对象时panelId参数不能为空。";
	var strScript="document.all."+panelId;
	if(eval(strScript)==null)							throw "页面中不存在ID为："+panelId+"的层对象。";
	this.panel=eval(strScript);
	this.showItems=null;											//要显示的数据条目
	this.allItems=null;											//所有条目
	this.maxRowCount=10;											//面版一次最多显示的数据
	this.setItems=setPanelItems								//设置面板的数据项
	this.display=displayPanel;									//显示帮助面板
	this.getInnerHTML=getPanelInnerHTML;					//得到面板的内空HTML代码
	this.conceal=concealPanel;									//隐藏帮助面板
	this.getSelectedItem=getPanelSelectedItem;			//得到选中的条目
	this.selectedItemIndex=0;									//选中的条目在items属性中的索引值
	this.showFirstItemIndex=0;									//显示的第一条数据在items属性中的索引值
	this.prevMoveItem=prevPanelMoveItem;					//显示的条目前移一个条目
	this.nextMoveItem=nextPanelMoveItem;					//显示的条目后移一个条目
	this.selectPrevItem=selectPanelPrevItem;				//选择前一个条目
	this.selectNextItem=selectPanelNextItem;				//选择后一个条目
	this.rePaint=rePaintPanel;									//重新画帮助面板
}

/**
 * 设置面板数据条目
 * @param toSelectedValues：供选择的数据值
 * @param toSelectedTexts: 供选择的数据文本
 */
function setPanelItems(toSelectedValues,toSelectedTexts){
	if(toSelectedValues==null && toSelectedTexts==null){
		throw "设置面板数据时，参数toSelectedValues和toSelectedTexts不能同时为空。";
	}
	//初始化数据
	var myValues=toSelectedValues;
	var myTexts=toSelectedTexts;
	if(myValues==null){
		myValues=new Array(myTexts.length);
	}
	if(myTexts==null){
		myTexts=new Array(myValues.length);
	}
	if(myTexts.length!=myValues.length){
		throw "设置面板数据项时，值和文本的条目数不一至。";
	}
	
	this.showItems=new Array();
	for(var i=0; i<myValues.length; i++){
		this.showItems[i]=new PanelHelperItem(myValues[i],myTexts[i]);
	}
	
	this.allItems=this.showItems;
}

/**
 * 显示帮助面板
 * @param dependCtrl:数据编辑控件
 */
function  displayPanel(dependCtrl){
	if(dependCtrl==null)		throw "显示帮助面板时PanelHelper对象时dependCtrl参数不能为空。";
	
	var oRect=dependCtrl.getBoundingClientRect();
	this.panel.style.left=(oRect.left+document.body.scrollLeft)+"px";
	this.panel.style.top=oRect.bottom+document.body.scrollTop+"px";
	
	var strHtml=this.getInnerHTML();
	//alert(strHtml);
	this.panel.innerHTML=strHtml;
}
/**
 * 得到帮助面板中的内部HTML代码。
 */
function getPanelInnerHTML(){
	var strHtml='<table '+panelStyle+'>\r\n';
//	if(this.showFirstItemIndex>0){
//		strHtml+='<tr><td align="right">';
//		strHtml+='<font style="cursor:hand" onMouseDown="alert(222);">△</font>';;
//		strHtml+='</td></tr>';
//	}
	strHtml+='<tr><td>\r\n';
	var counts=0;
	for(var i=this.showFirstItemIndex; i<this.showItems.length; i++){
		if(counts==this.selectedItemIndex){
			this.showItems[i].isSelected=true;
		}else{
			this.showItems[i].isSelected=false;
		}
		strHtml+="<br>\r\n";
		strHtml+=this.showItems[i].getHtml();
		
		if(++counts>=this.maxRowCount){
			//如果已达到显示的最大条数，则不再处理下一条了。
			break;
		}
	}
	if(this.showItems.length<=this.showFirstItemIndex){
		strHtml+="&nbsp;&nbsp;&nbsp;&nbsp;";
	}
	strHtml+='</td></tr>\r\n';
//	if(this.showFirstItemIndex+this.maxRowCount<this.showItems.length){
//		strHtml+='<tr><td align="right">';
//		strHtml+='<font style="cursor:hand" onMouseDown="alert(222);">▽</font>';
//		strHtml+='</td></tr>';
//	}
	strHtml+='</table>';
	//alert(strHtml);
	return strHtml;
}

/**
 * 隐藏控制面板
 */
function concealPanel(){
	this.panel.innerHTML="";
}

/**
 * 得到用户选中的条目
 */
function getPanelSelectedItem(){
	if(this.showItems==null)	return null;
	if(this.selectedItemIndex==-1)	return null;
	
	var myIndex=this.selectedItemIndex+this.showFirstItemIndex;
	
	var myItem=this.showItems[myIndex];
	return myItem;
}

/**
 * 使显示出来的条目前移一个条目
 */
function prevPanelMoveItem(){
	if(this.allItems==null || this.allItems.length==0){
		return;
	}
	if(this.showFirstItemIndex>0){
		this.showFirstItemIndex--;
		this.panel.innerHTML=this.getInnerHTML();
	}
}

/**
 * 使显示出来的条目后移一个条目
 */
function nextPanelMoveItem(){
	if(this.allItems==null || this.allItems.length==0){
		return;
	}
	var lastItemIndex=this.showFirstItemIndex+this.maxRowCount;
	if(lastItemIndex<this.showItems.length){
		this.showFirstItemIndex++;
		this.panel.innerHTML=this.getInnerHTML();
	}
}

/**
 * 选择前一个条目
 */
function selectPanelPrevItem(){
	if(this.allItems==null || this.allItems.length==0){
		return;
	}
	var itemIndex=this.showFirstItemIndex+this.selectedItemIndex;
	if(itemIndex<=0){
		//如果当前选中的条目就是第一条了，就不做任何动作。
		return;
	}
	if(this.selectedItemIndex>0){
		document.all.panelHelperItem[this.selectedItemIndex].color=commonItemColor;
		this.selectedItemIndex--;
		document.all.panelHelperItem[this.selectedItemIndex].color=selectedItemColor;
	}else{
		this.prevMoveItem();
	}
}

/**
 * 选择后一个条目
 */
function selectPanelNextItem(){
	if(this.allItems==null || this.allItems.length==0){
		return;
	}
	var itemIndex=this.showFirstItemIndex+this.selectedItemIndex;
	if(itemIndex+1>=this.showItems.length){
		//如果当前选中的条目是最后一条
		return;
	}
	if(this.selectedItemIndex<this.maxRowCount-1){
		document.all.panelHelperItem[this.selectedItemIndex].color=commonItemColor;
		this.selectedItemIndex++;
		document.all.panelHelperItem[this.selectedItemIndex].color=selectedItemColor;
	}else{
		this.nextMoveItem();
	}
}
/**
 * 重画帮助面板
 * @param filter:显示数据过虑条件。
 */
function rePaintPanel(filter){
	if(this.allItems==null || this.allItems.length==0){
		return;
	}
	this.showItems=new Array();
	var rgExp=new RegExp("^"+filter,"i");
	for(var i=0,count=0; i<this.allItems.length; i++){
		if(this.allItems[i].text.match(rgExp)!=null){
			this.showItems[count]=this.allItems[i];
			count++;
		}
	}
	
	this.selectedItemIndex=0;
	this.showFirstItemIndex=0;
	this.panel.innerHTML=this.getInnerHTML();
}

/*******************************************************************************************
 * 数据编辑帮助数据条目
 * @param itemValue:值
 * @param itemText:文本
 */
function PanelHelperItem(itemValue,itemText){
	this.value=new String(itemValue);
	this.text=new String(itemText);
	this.isSelected=false;
	this.getHtml=getItemHtml;
}

function getItemHtml(){
	var strHtml='<font id="panelHelperItem"';
	if(this.isSelected){
		strHtml+=' color="'+selectedItemColor+'"';
	}else{
		strHtml+=' color="'+commonItemColor+'"';
	}
	strHtml+=">";
	var strShowText=this.text;
	if(strShowText==null || strShowText==""){
		strShowText=this.value
	}else{
		if(this.value!=null && this.value.length>0){
			strShowText+="("+this.value+")";
		}
	}
	strHtml+=strShowText;
	strHtml+="</font>";
	
	return strHtml;
}


/******-------------------------------调用帮助的事件函数---------------------------------****>
/**
 * 显示帮助面板
 */
function showPanelHelper(editCtrl){
	try{
		if(editCtrl.readOnly){
			//如果是只读，则不让它显示
			return false;
		}
		var strScript="editCtrl.form."+editCtrl.dataSrcFldName;
		var dataItemsObj=eval(strScript);
		var items=dataItemsObj.options;
		var myValues=new Array();
		var myTexts=new Array();
		for(var i=0; i<items.length; i++){
			myValues[i]=items[i].value;
			myTexts[i]=items[i].text;
		}
//		alert(myValues);
//		alert(myTexts);
		myHelper.setItems(myValues,myTexts);
		myHelper.display(editCtrl);
	}catch(ex){
		alert(ex);
	}
}
function myKeyDownHelper(editCtrl){
	if(event.keyCode==38){
		//如果是按了向上方向键
		myHelper.selectPrevItem();
		return true;
	}
	if(event.keyCode==40){
		//如果是按了向下方向键
		myHelper.selectNextItem();
		return true;
	}
	if(event.keyCode==13){
		event.keyCode=9;
		if(editCtrl.readOnly){
			//如果是只读，则不让它把选中的值写到域中。
			return false;
		}
		var myItem=myHelper.getSelectedItem();
		if(myItem==null)	return;
		editCtrl.value=myItem.text;
		
		//得到存放Value的域对象并给其赋值
		var valueFld=null;
		if(eval("document.forms[0]."+editCtrl.valueFldName)!=null){
			valueFld=eval("document.forms[0]."+editCtrl.valueFldName);
		}
		if(valueFld!=null){
			valueFld.value=myItem.value;
		}
		
		return true;
	}
}
function myKeyUpHelper(editCtrl){
	if(event.keyCode==38 || event.keyCode==40 || event.keyCode==13){
		return;
	}
	
	myHelper.rePaint(editCtrl.value)
}


