function createXmlHttp(){
    xmlhttp=false;
    xmlhttpObj=["Microsoft.XmlHttp","MSXML2.XmlHttp.4.0","MSXML2.XmlHttp.3.0","MSXML2.XmlHttp","MSXML2.XmlHttp.5.0"];
    if(window.XMLHttpRequest){
        xmlhttp = new XMLHttpRequest();
    }
    else if(window.ActiveXObject){
        for(i=0;i<xmlhttpObj.length;i++){
            xmlhttp = new ActiveXObject(xmlhttpObj[i]);
            if(xmlhttp) break;
        }
    }
    else{
        alert("对不起,你的机器不能创建XmlHttp对象");
    }
    return xmlhttp?xmlhttp:false;
}
document.onkeydown=
function processEnterKey(){	
	if(event.keyCode==13){
		if(event.srcElement.tagName=='INPUT') event.keyCode=9;
	}
}
function selectAllCheckbox(arguName,arguSelectAll){
	var objCheckboxes=document.getElementsByName(arguName);
	for(var i=0;i<objCheckboxes.length;i++) objCheckboxes(i).checked=arguSelectAll;
}
function convertDouble(objInput,fractionDigits){
	var intDots=0;
	if(fractionDigits!=undefined) intDots=fractionDigits;
	try{
		if(objInput.value=='') return;	
		var numObj=new Number(objInput.value);
		objInput.value=numObj.toFixed(intDots);
	}
	catch(e){}
}
function addWebBrowser(objWindow){
	var objWB=objWindow.document.createElement("OBJECT");
	with(objWB){
		classid='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2';
		name='WebBrowser';
		id=  'WebBrowser';
		style.width='0';
		style.height='0';
		style.display='none';
		style.visibility='hidden';
	}
	objWindow.document.body.appendChild(objWB);
}
function trim(argu){
	try{
		if(typeof(argu)=='string'){
			argu=' '+argu+' ';
			argu=argu.replace(/(^\s*)|(\s*$)/g, "");
			return argu;
		}
		var strTmp=argu.value;
		strTmp=strTmp.replace(/(^\s*)|(\s*$)/g, "");
		argu.value=strTmp;
	}
	catch(e){}
}
function replaceAll(stringObj,stringSearched,replaceText){
	if(stringObj==null) return "";
	if(stringSearched==replaceText) return stringObj;
	while(stringObj.indexOf(stringSearched)!=-1)
		stringObj=stringObj.replace(stringSearched,replaceText);
	return stringObj;
}
function getSpecialElementAttributeValue(objSrcElement,strAttributeName,strTagName){
	while(true){
		if(objSrcElement.tagName=='HTML'||objSrcElement.tagName==null) return null;
		if(objSrcElement.tagName==strTagName.toUpperCase()){
			var strValue=objSrcElement.getAttribute(strAttributeName);
			if(strValue!=null) return strValue;
		}
		objSrcElement=objSrcElement.parentElement;
	}		
}

function checkDigitalInput(objInput,intType,iScale){	
	try{
		if(!checkDigital(objInput.value,intType,iScale)){
			objInput.focus();
			objInput.select();
			return false;
		}
	}
	catch(e){
		alert(e);
		return false;
	}
	return true;
}
function checkDigital(digitalString,intType,iScale){
	var sValue=digitalString;
	var rgExp;
	if(intType)	rgExp=/^\d*$/;
	else{
		if(sValue.indexOf('.')==-1) return checkDigital(digitalString,true,iScale);
		eval('rgExp=/^\\d*\.\\d{1,'+iScale+'}$/');
	}	
	if(sValue.match(rgExp)==null)	return false;	
	return true;
}
function checkEmptyInput(objInput,sMsg){	
	var sValue;
	try{
		sValue=objInput.value;
	}
	catch(e){
		alert(sMsg);
		return false;
	}
	if(sValue==null) sValue='';
	sValue=replaceAll(sValue,' ','');
	if(sValue==''){
		alert(sMsg);
		objInput.focus();	
		return false;
	}
	return true;
}
function shortDate(objDateInput){
	var sValue
	try{
		sValue=objDateInput.value;
	}
	catch(e){
	}
	if(sValue==null) sValue='';
	if(sValue.length>10)	objDateInput.value=sValue.substr(0,10);
	if(sValue.indexOf('1900')!=-1) objDateInput.value='';
}
function checkDate(objDateInput,blnAutoAlert){
	var strErrMsg='错误的日期格式,请检查日期格式正确!\n可以参考下面的日期格式:\n(1) 2000/1/1\n(2) 2000-1-1\n(3) 2000.1.1';
	var sValue=objDateInput.value;
	if(sValue==null) sValue='';
	if(sValue=='') return true;
	if(sValue.indexOf(' ')!=-1) sValue=sValue.substr(0,sValue.indexOf(" "));
	sValue=sValue.replace('年','/');
	sValue=sValue.replace('月','/');
	sValue=sValue.replace('日','');
	
	sValue=sValue.replace('.','/');
	sValue=sValue.replace('.','/');
	sValue=sValue.replace('.','/');
	
	sValue=replaceAll(sValue,'-','/');
	var dateArray=sValue.split("/");
	if(dateArray.length!=3){
		if(blnAutoAlert==undefined){			
			alert(strErrMsg);
			objDateInput.focus();
		}
		return false;
	}
	if(dateArray[1]=='0' || dateArray[1]=='00' || dateArray[2]=='0' || dateArray[1]=='00'){
		if(blnAutoAlert==undefined){			
			alert(strErrMsg);
			objDateInput.focus();
		}
		return false;
	}
	objDateInput.value=sValue;	
	if(isNaN(Date.parse(sValue))){
		if(blnAutoAlert==undefined){
			alert(strErrMsg);
			objDateInput.focus();
		}
		return false;
	}
	var rgExp1=/^\d{1,4}\/\d{1,2}\/\d{1,2}$/;
	var rgExp2=/^\d{1,4}\-\d{1,2}\-\d{1,2}$/;
	if((!sValue.match(rgExp1)) && (!sValue.match(rgExp2))){
		if(blnAutoAlert==undefined) alert(strErrMsg);
		return false;
	}
	objDateInput.value=replaceAll(sValue,'/','-')+' 00:00:00.0';
	return true;
}
function windowAutoSuitElement(objElement,autoCenter){
	if(objElement.style.position=='') objElement.style.position='relative';
	window.resizeTo(objElement.offsetWidth+5,objElement.offsetHeight+26);
	if(autoCenter){
		var relaYPos=window.screen.height/2-objElement.offsetHeight/2;
		var relaXPos=window.screen.width/2-objElement.offsetWidth/2;
		if(relaYPos<0 || relaXPos<0){
			if(relaXPos<0) relaXPos=10;
			if(relaYPos<0) relaYPos=10;
			self.document.body.style.overflow='auto';
		}
		window.moveTo(relaXPos,relaYPos);
	}
	
}
function transSelect(){
	var objSelect=document.getElementsByTagName("SELECT");
	for(var i=0;i<objSelect.length;i++){
		var objParent=objSelect(i).parentElement;
		if(objSelect(i).selectedIndex<0){
			objParent.removeChild(objSelect(i));
			i--;
			continue;
		}
		var sText=objSelect(i).options(objSelect(i).selectedIndex).text;						
		var objFont=document.createElement("FONT");
		objFont.innerText=sText;
		objParent.removeChild(objSelect(i));
		objParent.appendChild(objFont);
		i--;
	}
}
function newWindow(url,win_width,win_height,winname){
  var features="toolbar=no,scrollbars=no"  
  var win_posX=window.screen.width/2-win_width/2;
  var win_posY=window.screen.height/2-win_height/2;
  features=features+",width="+win_width+",scrollbars=1,height="+win_height+",top="+win_posY+",left="+win_posX;
  window.open(url,winname,features)
}
function newHyperLink(url,strTarget){
	var objLink=document.createElement('A');
	objLink.href=url;
	if(strTarget==undefined) objLink.target='_blank';
	else	objLink.target=strTarget;
	document.body.appendChild(objLink);
	objLink.click();
	document.body.removeChild(objLink);
}
function getParentXY(objElement){
	objParent=objElement.parentElement;
	if(objParent==null) return new Array(0,0);
	var strPosition=objParent.style.position;
	if(strPosition.toLowerCase()=='absolute'){
		var intTop=objParent.offsetTop;
		var intLeft=objParent.offsetLeft;
		return new Array(intLeft,intTop);
	}
	else
		return getParentXY(objParent);
}
function getLastPartOfUrl(urlString,argu2){
	var splitChar="\\";
	if(argu2!=undefined) splitChar=argu2;
	if(splitChar==null||splitChar=='') splitChar="\\";
	var splitCharIndex=urlString.lastIndexOf(splitChar);
	if(splitCharIndex==-1) return urlString;		
	return urlString.substring(splitCharIndex+1);
}
function tableKeyControl(objTable,strBgColor,strTxtColor){
	this.autoCompleteCtrl=null;
	this.controlTable=objTable;
	this.currentRowIndex=-1;
	this.prevMoveRow=null;
	this.rowBgColorOnMove=(strBgColor==undefined)?'#0A246A':strBgColor;
	this.rowTextColorOnMove=(strTxtColor==undefined)?'white':strTxtColor;
	var myObj=this;
	this.controlTable.onkeyup=function(){
		myObj.onKeyEvent();
	}
	
}				
tableKeyControl.prototype.onKeyEvent=function (){
	if(event.keyCode==40) this.moveRowFocus(0);
	if(event.keyCode==38) this.moveRowFocus(1);									
	if(event.keyCode==13) this.onPressEnter();
}
tableKeyControl.prototype.onPressEnter=function (){
	var dataRow=this.controlTable.rows(this.currentRowIndex);
	this.autoCompleteCtrl.currentDataRow=dataRow;
	this.autoCompleteCtrl.control.value=dataRow.cells(0).innerText;	
	try{this.autoCompleteCtrl.setRelationValue();}catch(e){}
	this.autoCompleteCtrl.hideCompletePanel();	
}
tableKeyControl.prototype.moveRowFocus=function (moveType){
	if(moveType==0){
		//move to next row
		this.currentRowIndex++;
		if(this.currentRowIndex==this.controlTable.rows.length) this.currentRowIndex=0;
	}
	if(moveType==1){
		//move to previous row
		this.currentRowIndex--;
		if(this.currentRowIndex==-1) this.currentRowIndex=this.controlTable.rows.length-1;
	}
	var sourceRow=this.controlTable.rows(this.currentRowIndex);	
	if(sourceRow.getAttribute('originalBgColor')==null){
        sourceRow.setAttribute('originalBgColor',sourceRow.bgColor);
        sourceRow.setAttribute('originalTextColor',sourceRow.style.color);
    }
	with(sourceRow.style){
		backgroundColor=this.rowBgColorOnMove;
		color=this.rowTextColorOnMove;
	}
	if(this.prevMoveRow!=null&&this.prevMoveRow!=sourceRow){					       
		with(this.prevMoveRow.style){
			backgroundColor=this.prevMoveRow.getAttribute('originalBgColor');
			color=this.prevMoveRow.getAttribute('originalTextColor');
		}
	}
	this.prevMoveRow=sourceRow;
}
function autoComplete(eleId,servletUrl,completePanelId,loadingIcon){
	this.tableKeyCtrl=null;
	this.allowScroll=false;
	this.control=typeof(eleId)=='object'?eleId:document.getElementById(eleId);
	this.servletUrl=servletUrl;
	this.oldValue='';
	this.currentDataRow=null;
	this.processKeyUpEvent=processKeyUpEventFun;
	this.completePanel=null;
	this.panelBorderColor='#999999';
	this.sucess=false;
	this.loadingPanel=null;
	this.loadingIcon=loadingIcon!=undefined?loadingIcon:"";
	if(completePanelId!=undefined){
		if(completePanelId!=null) this.completePanel=document.getElementById(completePanelId);
	}
	if(this.completePanel==null){
		this.completePanel=document.createElement('DIV');
		this.control.parentElement.appendChild(this.completePanel);
	}
	with(this.completePanel.style){
		position='absolute';
		top=0;
		left=0;
		zIndex=+999;
		visibility='hidden';		
		overflow='hidden';
	}
	if(this.control.style.position!='relative'){
		this.control.style.cssText+=';position:relative';
	}
	if(servletUrl==null){
		var objTable=this.getFirstTable(this.completePanel);
		this.addTableEvent(objTable);
		this.tableKeyCtrl=new tableKeyControl(objTable);
		this.tableKeyCtrl.autoCompleteCtrl=this;	
	}						
}
autoComplete.prototype.getFirstTable=function(objElement){
	var collEle=objElement.children;
	if(collEle.length==0) return null;
	if(this.servletUrl!=null) collEle=collEle[0].children;
	for(var i=0;i<collEle.length;i++){
		if(collEle[i].tagName=='TABLE') return collEle[i];
	}
	return null;
}		
autoComplete.prototype.hideCompletePanel=function (){
	this.sucess=true;
	this.completePanel.style.visibility='hidden';
}
autoComplete.prototype.getDataRow=function (sourceEle){
	var parEle=sourceEle.parentElement;
	if(parEle.tagName!='TR') return this.getDataRow(parEle);
	return parEle;
}
autoComplete.prototype.addTableEvent=function (objTable){
	var myObj=this;
	objTable.onclick=function (){
		myObj.currentDataRow=myObj.getDataRow(event.srcElement);
		myObj.control.value=event.srcElement.innerText;
		try{myObj.setRelationValue();}catch(e){}
		myObj.hideCompletePanel();		
	}
}
autoComplete.prototype.showCompletePanel=function (arguVisible){
	with(this.completePanel.style){
		top=this.control.offsetTop+this.control.offsetHeight+1;
		left=this.control.offsetLeft;
		width=this.control.offsetWidth;			
		backgroundColor='white';
		visibility=(arguVisible==undefined)?'hidden':arguVisible;
		overflow=this.allowScroll?'auto':'hidden';
	}
	var objTable=this.getFirstTable(this.completePanel);
	if(objTable!=null&&this.completePanel.style.visibility=='visible') objTable.focus();
}
function processKeyUpEventFun(arguExtendParam){
	if(event.keyCode==40){
		if(this.completePanel.style.visibility=='hidden') return;
		this.control.blur();						
		var objTable=this.getFirstTable(this.completePanel);
		if(objTable==null) return;
		objTable.focus();		
		this.tableKeyCtrl.moveRowFocus(0);
		return;
	}
	var newValue=this.control.value;
	var servletUrl=this.servletUrl;
	servletUrl+=(arguExtendParam==undefined)?'':'?'+arguExtendParam;
	servletUrl+=arguExtendParam==undefined?'?':'&';
	servletUrl+='key='+newValue;									
	var ajax=createXmlHttp();
	var completePanel=this.completePanel;
	var control=this.control;	
	if(this.oldValue!=newValue){
		this.oldValue=newValue;	
		if(this.oldValue==''){
			this.hideCompletePanel()
			return '';
		}
		this.sucess=false;
		if(this.loadingPanel==null){
			this.loadingPanel=document.createElement('DIV');						
			this.loadingPanel.style.cssText="position:absolute;top:0;left:0;z-index:+999;visibility:hidden;";
			this.loadingIcon=this.loadingIcon!=''?"<img hspace=3 align='absmiddle' src='"+this.loadingIcon+"'>":"";
			this.loadingPanel.innerHTML="<div style='text-align:left;width:100%;font-size:9pt;left;border:1 solid "+this.panelBorderColor+";background-color:#FFFFE1;padding:2;'><nobr>"+this.loadingIcon+"数据加载中,请稍候......</nobr></div>";
			this.control.parentElement.appendChild(this.loadingPanel);
			var frameHeight=this.loadingPanel.offsetHeight;
			this.loadingPanel.innerHTML=this.loadingPanel.innerHTML+"<iframe frameborder=0 style='width:100%;height:"+frameHeight+";position:absolute;top:0;left:0;z-index:-1'></iframe>";
		}
		with(this.loadingPanel.style){
			top=this.control.offsetTop+this.control.offsetHeight+1;
			left=this.control.offsetLeft;
			width=this.control.offsetWidth;
			visibility='visible';
			display='';
		}
		var myObj=this;
		ajax.onreadystatechange=function (){
			if(ajax.readyState==4){
				if(ajax.status==200){
					myObj.loadingPanel.style.visibility='hidden';
					myObj.showCompletePanel();													
					completePanel.innerHTML="<div style='width:100%;height:100%;border:1 solid "+myObj.panelBorderColor+"'>"+ajax.responseText+"</div>";
					var objIframe=document.createElement('IFRAME');
					with(objIframe){
						frameBorder='no';
						style.position='absolute';
						style.top=0;
						style.left=0;
						style.zIndex=-1;
						style.width='100%';
						style.height='100%';
					}
					myObj.completePanel.appendChild(objIframe);
					var objTable=myObj.getFirstTable(completePanel);					
					myObj.addTableEvent(objTable);					
					if(objTable.rows.length>0){
						myObj.tableKeyCtrl=new tableKeyControl(objTable);
						myObj.tableKeyCtrl.autoCompleteCtrl=myObj;					
						completePanel.style.visibility='visible';
						if(objTable.rows.length==1){
							myObj.currentDataRow=objTable.rows(0);
							myObj.control.value=objTable.rows(0).cells(0).innerText;
							myObj.oldValue=myObj.control.value;
							try{myObj.setRelationValue();}catch(e){}
							myObj.hideCompletePanel();
						}
					}
					else{
						try{myObj.noMatchResult();}catch(e){}
						completePanel.style.visibility='hidden';
					}						
				}
			}							
		}							
		ajax.open("GET",servletUrl);						
		ajax.send(null);
	}					
}
function addDownArrowInInputCtrl(relCtrl,showPanelId,arrowColor,arrowBgColor,arrowBorderColor){
	this.control=typeof(relCtrl)=='object'?relCtrl:document.getElementById(relCtrl);
	this.scrollLimit=false;
	this.arrowColor=(arrowColor==undefined)?"gray":arrowColor;
	this.arrowBgColor=(arrowBgColor==undefined)?"white":arrowBgColor;
	this.arrowBorderColor=(arrowBorderColor==undefined)?"gray":arrowBorderColor;
	this.panel=document.getElementById(showPanelId);
	this.control.style.position='relative';
	this.arrowCreate=false;
	this.autoCompleteCtrl=new autoComplete(this.control,null,showPanelId);
	this.autoCompleteCtrl.allowScroll=true;
}
addDownArrowInInputCtrl.prototype.allowScroll=function (scrollLimit){
	this.autoCompleteCtrl.allowScroll=scrollLimit;
}
addDownArrowInInputCtrl.prototype.showPanel=function (){
	if(!this.arrowCreate) this.createArrow();
	this.autoCompleteCtrl.showCompletePanel('visible');				
}
addDownArrowInInputCtrl.prototype.createArrow=function (){
	if(this.arrowCreate) return;
	var objArrow=document.createElement('DIV');
	var marginTop=-3+(this.control.offsetHeight-6-15);
	objArrow.innerHTML="<div style='font-size:9pt;margin-top:"+marginTop+";font-family:webdings;color:"+this.arrowColor+"'>6</div>";
	with(objArrow.style){	
		cursor='hand';				
		position='absolute';
		overflow='hidden';
		top=this.control.offsetTop+(this.control.offsetHeight/2-5)-1;
		height=this.control.offsetHeight-6;
		left=this.control.offsetLeft+this.control.offsetWidth-17;
		border='1 solid '+this.arrowBorderColor;
		backgroundColor=this.arrowBgColor;
		visibility='visible';
		zIndex=+1;
	}	
	this.control.parentElement.appendChild(objArrow);
	var myObj=this;
	objArrow.onclick=function (){
		myObj.showPanel();
	}					
	this.arrowCreate=true;
}	