﻿var __NBaseCodeWin,__NBaseDataFld,__NBaseFilter,__NBaseQueryString,__NBaseExAttr,__NBaseSrcObject,__NBaseSrcInputs;
var __NBaseUrl,__NBaseHttpMethod,__NBaseFeatures,__NBaseNavigateMode, __NBaseSearchButton;
var __NBaseSrcObjName="";
var __NBaseSrcObjValue="";
var __NBaseIsIndependent="true";
var __NBaseSep;
function __NBaseGetFilterParam(event,vobjBody){	
	
		var objElement
	if(event==null){
		objElement = vobjBody.childNodes[0];}
	//判斷IE或FireFox所需的Element Object
	else if (document.getElementById&&!document.all) {
		objElement = event.target;} 
	else {
	objElement = event.srcElement;}
	
	var objBody;
	if(vobjBody==null){
		__NBaseSearchButton=__NBaseGetParentElement(objElement,"A");

		//判斷IE或FireFox所要取得的父節點
		if(document.getElementById&&!document.all)
		{objBody=__NBaseSearchButton.parentNode;}
		else
		{objBody=__NBaseSearchButton.parentElement;}
				
		}
	else{
		if(typeof(vobjBody)=="string"){
			objBody=document.getElementById(vobjBody);}
		else{
			objBody=vobjBody;}
		__NBaseSearchButton=objBody.getElementsByTagName("A").item(0);}
	__NBaseSrcInputs=objBody.getElementsByTagName("INPUT");
	while(__NBaseSrcInputs.length==0){
		objBody = __NBaseGetParentElement(objBody,"TABLE");
		__NBaseSrcInputs = objBody.getElementsByTagName("SELECT");
		if(__NBaseSrcInputs.length==0) __NBaseSrcInputs = objBody.getElementsByTagName("TEXTAREA");
		if(__NBaseSrcInputs.length==0) __NBaseSrcInputs = objBody.getElementsByTagName("INPUT");
		if(__NBaseSrcInputs.length==0) {
			//判斷IE或FireFox所要取得的父節點
			if(document.getElementById&&!document.all)
			{objBody=objBody.parentNode;}
			else
			{objBody=objBody.parentElement;}
			//objBody = objBody.parentElement;
		}
	}
	__NBaseSep=objBody.getAttribute("GSSValSep");
	__NBaseNavigateMode=objBody.getAttribute("GSS_NavigateMode");
	__NBaseFeatures=objBody.getAttribute("GSS_Features");
	if(__NBaseFeatures==null){
		if(__NBaseNavigateMode=="1"){
			__NBaseFeatures="dialogWidth=300pt;dialogHeight=250pt;resizable=1;help=1;center=1";}
		else{
			__NBaseFeatures="location=no,titlebar=no,toolbar=no,menubar=no,status=yes,directories=no,scrollbars=yes,resizeable=no,width=450,height=350,center=0";}
	}
	__NBaseHttpMethod=objBody.getAttribute("GSS_HttpMethod");
	if(__NBaseHttpMethod==null) __NBaseHttpMethod="0";
	var blnEscape =  false;		// HttpMethod = GET
	if(__NBaseHttpMethod=="0")	blnEscape = true;
	__NBaseSrcObjName="";
	__NBaseSrcObjValue="";

	if(__NBaseSrcInputs.length>0){
		for(var i=0;i<__NBaseSrcInputs.length;i++){
			if((__NBaseSrcInputs[i].type!="button")&&(__NBaseSrcInputs[i].type!="submit")){
				__NBaseSrcObjName+="," + __NBaseSrcInputs[i].name;
				if(__NBaseSrcInputs[i].tagName=="SELECT"){
					if((__NBaseSep==null)||(__NBaseSep.length!=2)) __NBaseSep=",|";
					for(var j=0;j<__NBaseSrcInputs[i].options.length;j++){
						if(blnEscape){
							__NBaseSrcObjValue+=__NBaseSep.substr(0,1) + escape(__NBaseSrcInputs[i].options[j].value);
							__NBaseSrcObjValue+=__NBaseSep.substr(1,1)+ escape(__NBaseSrcInputs[i].options[j].text);}
						else{
							__NBaseSrcObjValue+=__NBaseSep.substr(0,1) + __NBaseSrcInputs[i].options[j].value;
							__NBaseSrcObjValue+=__NBaseSep.substr(1,1) + __NBaseSrcInputs[i].options[j].text;}
					}
				}
				else{
					if(__NBaseSep==null) __NBaseSep=",";
					if(blnEscape){
						__NBaseSrcObjValue+=__NBaseSep + escape(__NBaseSrcInputs[i].value);}
					else{
						__NBaseSrcObjValue+=__NBaseSep + __NBaseSrcInputs[i].value;}
				}
			}
		}
		__NBaseSrcObjName=__NBaseSrcObjName.substr(1);
		__NBaseSrcObjValue=__NBaseSrcObjValue.substr(1);
	}
	__NBaseSrcObject=objBody;
	__NBaseUrl=__NBaseSearchButton.getAttribute("GSS_URL");
	if((__NBaseUrl==null)||(__NBaseUrl.length==0)){
		__NBaseUrl=objBody.getAttribute("GSS_URL");}
	__NBaseDataFld=objBody.getAttribute("GSS_DataFld");
	__NBaseFilter=objBody.getAttribute("GSS_Filter");
	__NBaseQueryString=objBody.getAttribute("GSS_QS");
	__NBaseExAttr=objBody.getAttribute("GSS_ExAttr");
	if(__NBaseSrcInputs[0].tagName=="SELECT"){
		__NBaseIsIndependent=objBody.getAttribute("GSS_IsIndep");
		if(__NBaseIsIndependent==null) __NBaseIsIndependent = "true";
	}

	//.net 2.0的NavigateUrl的format不同，所以要再處理一次
	if(__NBaseUrl!=null){
	//	var aryUrl = __NBaseUrl.toString().split("/");
	//	__NBaseUrl = aryUrl[aryUrl.length-1];
	// 取URL的絕對路徑
	var hostURL = document.location.protocol + "//" + document.location.host + document.location.port + "/" + document.location.pathname.split("/")[1];
	__NBaseUrl = __NBaseUrl.toString().replace("~",hostURL);
	}

}
function __NBaseGetUrlQS(){
	var strURL = "?GSS_DataFld=";
	if(__NBaseDataFld!=null) strURL += escape(__NBaseDataFld);
	if(__NBaseFilter!=null) strURL += "&GSS_Filter=" + escape(__NBaseFilter);
	if(__NBaseQueryString!=null) strURL+="&" + __NBaseQueryString;
	strURL += "&GSS_SrcObjName=" + escape(__NBaseSrcObjName);
	strURL += "&GSS_SrcObjValue=" + escape(__NBaseSrcObjValue);
	if(__NBaseExAttr!=null){
		var strExAttr=__NBaseExAttr;
		var arrExAttr=strExAttr.split(",");
		for(var i=0;i<arrExAttr.length;i++){
			if(document.getElementById(arrExAttr[i])!=null){
					strURL += "&" + arrExAttr[i] + "=" + escape(document.getElementById(arrExAttr[i]).value);}
		}
	}
	strURL += "&GSS_IsIndep=" + __NBaseIsIndependent;
	strURL += "&GSS_Sep=" + __NBaseSep;
	return strURL;
}
function __NBaseGetPostXmlContent(){
	var strXML = "";
	if(__NBaseDataFld!=null) strXML += "<GSS_DataFld>" + __NBaseDataFld + "</GSS_DataFld>";
	if(__NBaseFilter!=null) strXML += "<GSS_Filter>" + __NBaseFilter + "</GSS_Filter>";
	if(__NBaseQueryString!=null) strXML+= "<GSS_QS>" + __NBaseQueryString + "</GSS_QS>";
	strXML+= "<GSS_SrcObjName>" + __NBaseSrcObjName + "</GSS_SrcObjName>";
	strXML+= "<GSS_SrcValue>" + __NBaseSrcObjValue + "</GSS_SrcValue>";
	if(__NBaseExAttr!=null){
		var strExAttr=__NBaseExAttr;
		var arrExAttr=strExAttr.split(",");
		for(var i=0;i<arrExAttr.length;i++){
			if(document.getElementById(arrExAttr[i])!=null){
					strXML += "<" + arrExAttr[i] + ">" + document.getElementById(arrExAttr[i]).value + "</" + arrExAttr[i] + ">";}
		}
	}
	return "<XML>" + strXML + "</XML>";
}
	var blnExe = true;
function __NBaseShowFilterWin(event,vstrContainerID){
	var vntReturn=null;
	__NBaseGetFilterParam(event,vstrContainerID);
	var strContainerID = __NBaseSrcObject.id;
	var strScript="if (typeof(%_Validate)==\'function\') __NBaseDoNext = %_Validate();";
	strScript = strScript.replace(/%/g,strContainerID);
	eval(strScript);
	if(!__NBaseDoNext) return false;
	if(__NBaseSearchButton.disabled) return false;
	if(__NBaseUrl==null) return false;
	var strQS = __NBaseGetUrlQS();
	
	//如果是FireFox的話只能用window.open
	if(document.getElementById&&!document.all)__NBaseNavigateMode="0";
	
	if(__NBaseHttpMethod=="0"){	// HttpMethod = GET	
		var strURL = __NBaseUrl + strQS;
		if(__NBaseNavigateMode!="1"){
			if(strURL.length>2083){
				__NBaseShowFilterWinByPost(vstrContainerID);}
			else{
				__NBaseCodeWin=window.open(strURL,"__SearchWin" + vstrContainerID,__NBaseFeatures);
				//window.focus();
				__NBaseAttachEvent2FilterWin();
				}
		}
		else{
			if(strURL.length>2083){
				vntReturn=__NBaseShowFilterDialogByPost(strQS);}
			else{
				vntReturn=window.showModalDialog(strURL,null,__NBaseFeatures);}
		}
	}
	else{
		if(__NBaseNavigateMode!="1"){
			__NBaseShowFilterWinByPost(vstrContainerID);
		}
		else{
			vntReturn=__NBaseShowFilterDialogByPost(strQS);}
	}
	if(vntReturn!=null) __NBaseSetValue2SrcControl(vntReturn);		
	return false;
}
function __NBaseShowFilterDialogByPost(vstrQS){
	var dialogArgs = new Object();
	if(__NBaseUrl.indexOf("/")<0){
		__NBaseUrl = document.URL.substr(0,document.URL.lastIndexOf("/")+1) + __NBaseUrl;
	}
	dialogArgs.URL = __NBaseUrl;
	dialogArgs.QS = vstrQS;
	return window.showModalDialog(__NBaseScriptsFolder + "GSSModalDialog.html",dialogArgs,__NBaseFeatures);
}
function __NBaseShowFilterWinByPost(vstrContainerID){
		__NBaseCreateHiddenElement("GSS_DataFld",__NBaseDataFld);
		__NBaseCreateHiddenElement("GSS_Filter",__NBaseFilter);
		__NBaseCreateHiddenElement("GSS_SrcObjName",__NBaseSrcObjName);
		__NBaseCreateHiddenElement("GSS_SrcObjValue",__NBaseSrcObjValue);

		var objForm = document.forms[0];
		var strIniAction=objForm.action;
		var strIniTarget=objForm.target;	
		objForm.action = __NBaseUrl;
		objForm.target = "__SearchWin" + vstrContainerID;
		__NBaseCodeWin=window.open("","__SearchWin" + vstrContainerID,__NBaseFeatures);
		var objViewState=objForm["__VIEWSTATE"];
		var objEventTarget=objForm["__EVENTTARGET"];
		var objEventArgument=objForm["__EVENTARGUMENT"];

		//for difference of 1.1 and 2.0.Because the hidden textbox(__ViewState) be rendered in tag(DIV).
		//That cause script error, so i prepate two way to removechild
		if(objViewState.parentNode.id!=objForm.id){
			var objParentNode = objViewState.parentNode;
			
			objParentNode.removeChild(objViewState);
			if(objEventTarget!=null) objParentNode.removeChild(objEventTarget);
			if(objEventArgument!=null) objParentNode.removeChild(objEventArgument);
		}
		else{
			objForm.removeChild(objViewState);
			if(objEventTarget!=null) objForm.removeChild(objEventTarget);
			if(objEventArgument!=null) objForm.removeChild(objEventArgument);
		}
		
		objForm.submit();
		window.focus();
		__NBaseAttachEvent2FilterWin();
		if(objViewState!=null) objForm.appendChild(objViewState);
		if(objEventTarget!=null) objForm.appendChild(objEventTarget);
		if(objEventArgument!=null) objForm.appendChild(objEventArgument);
		objForm.action = strIniAction;
		objForm.target = strIniTarget;
}
function __NBaseAttachEvent2FilterWin(){
	var colEvents = new Array("onfocus","onclick", "ondblclick", "onactivate","onfocusin","onbeforeunload");
	var colEvents2 = new Array("focus","click", "dblclick", "activate","focusin","beforeunload");
	for(var i=0;i<colEvents.length;i++){

	if(window.addEventListener){ // Mozilla, Netscape, Firefox
		window.addEventListener(colEvents2[i],__NBaseLockFilterWin,true);}
	else { // IE
		window.attachEvent(colEvents[i],__NBaseLockFilterWin);}
	}
}
function __NBaseLockFilterWin(event) {
	var strType=event.type;
	try {
		switch (strType) {
			case "activate": 
			case "focus":
			case "click": 
			case "dblclick":
				__NBaseCodeWin.focus();
				break;
			case "beforeunload":
				__NBaseCodeWin.close();
				break;
		}			
	}
	catch(err){
		__NBaseCodeWin=null;  
		var colEvents = new Array("onfocus","onclick", "ondblclick", "onactivate","onfocusin","onbeforeunload");
		for(var i=0;i<colEvents.length;i++){
			document.body.detachEvent(colEvents[i],__NBaseLockFilterWin);
		}
	}
}
function __NBaseValidateCodeID(val){

	var ctrl = document.getElementById(val.controltovalidate);
	if(ctrl==null) return true;

	//判斷IE或FireFox所要取得的父節點
	if(document.getElementById&&!document.all)
	{var objBody=ctrl.parentNode;}
	else
	{var objBody=ctrl.parentElement;}

	__NBaseGetFilterParam(null,objBody);		
	var strURL = ctrl.getAttribute("ValidateUrl");
	if(strURL==null) return true;
	var xmlRtn;
	if(__NBaseHttpMethod=="0"){
		strURL +=__NBaseGetUrlQS();
		xmlRtn = __NBaseLoadXml(strURL);}
	else{
		xmlRtn = __NBasePostXML(strURL,__NBaseGetPostXmlContent());}
	if(xmlRtn==null) return true;
	if(xmlRtn.getElementsByTagName("LOG_MESS").length>0){
		//alert(xmlRtn.getElementsByTagName('LOG_MESS').item(0).text);
		__NBaseSrcInputs[1].value="";
		ctrl.select();
		ctrl.focus();
	}
	else{
		var arrDataFld=__NBaseDataFld.split(",");
		ctrl.value=xmlRtn.getElementsByTagName(arrDataFld[0]).item(0).text;
		__NBaseSrcInputs[1].value=xmlRtn.getElementsByTagName(arrDataFld[1]).item(0).text;
		//var blnFired = ctrl.fireEvent("onchange");
	}
}
function __NBaseSetValue2SrcControl(vobjReturn){
	for(var i=0;i<__NBaseSrcInputs.length;i++){
		if(vobjReturn.length>0){
			if(__NBaseSrcInputs[i].tagName=="SELECT"){
				if(__NBaseIsIndependent.toLowerCase()=="false"){
					__NBaseClearOptions(__NBaseSrcInputs[i].id);}
				__NBaseAddOptionsByArray(__NBaseSrcInputs[0].id,vobjReturn);
			}
			else{
				__NBaseSrcInputs[i].value=vobjReturn[i];
				var blnFired = __NBaseSrcInputs[i].fireEvent("onchange");}
		}
	}	//for
}
