/***********************************************************************
	file: ClientService.EZTObj.js
	object: EZTClientService
 ***********************************************************************/


var strTemp;
g_strUpdateLanguageID = null;

//-------------------------------------------------------------------

function EZTisNetscape(v) 
{
	return EZTisBrowser("Netscape", v);
}

//-------------------------------------------------------------------

function EZTisExplorer(v) 
{
	return EZTisBrowser("Explorer", v);
}

//-------------------------------------------------------------------

function EZTisBrowser(b,v) 
{
	if(!v)
		v = 0;

	browserOk = false;
	versionOk = false;

	browserOk = (navigator.appName.indexOf(b) != -1);
	if(v == 0)
		versionOk = true;
	else
		versionOk = (v <= parseInt(navigator.appVersion));
	
	return browserOk && versionOk;
}

//-------------------------------------------------------------------

function EZTClientService()
{
	this.gotoChannel = gotoChannel;
	this.gotoPortalHome = gotoPortalHome;
	this.generatePageParam = generatePageParam;
	this.replaceXMLSpecChars = replaceXMLSpecChars;
	this.escapeString = escapeString;
	this.getCookie = getCookie;
	this.generateListActionCustomData = generateListActionCustomData;
	this.addUIPart = addUIPart;
	this.gotoLocation = gotoLocation;
	this.logout = logout;
	this.checkForNoErrors = checkForNoErrors;
	this.getAbsoluteTop = getAbsoluteTop;
	this.getAbsoluteLeft = getAbsoluteLeft;
	this.refreshPage = refreshPage;
	this.verifySelectionSupport = verifySelectionSupport;
	this.updateLanguage = updateLanguage;
	this.printPage = printPage;
	this.postFormToUIPart = postFormToUIPart;
	this.postParameterToService = postParameterToService;
	this.postParameterToServiceInst = postParameterToServiceInst;
	this.postParameterToUIPart = postParameterToUIPart;
	this.postParameterToUIPartInst = postParameterToUIPartInst;
	this.resetUIPartForm = resetUIPartForm;
	this.emailForm = emailForm;
	this.getSelectedItems = getSelectedItems;
	this.navigateTo = navigateTo;
	this.clearAllParameters = clearAllParameters;
	this.trimString = trimString;

	//-------------------------------------------------------------------------------------
	// Gets real Top value with respect to client area

	function getAbsoluteTop(elem)
	{
		var topPosition = 0;
		
		while (elem)
		{
			var strTemp = elem.tagName + '';
			if(strTemp == 'BODY')
			{
				break;
			}

			if(!isNaN(parseInt(elem.offsetTop)))
			{
				topPosition += parseInt(elem.offsetTop);
			}

			if(!isNaN(parseInt(elem.scrollTop)))
			{
				topPosition -= parseInt(elem.scrollTop);
			}

			elem = elem.offsetParent;
		}

		return topPosition;
	}

	//-------------------------------------------------------------------------------------
	// Get real Left value with respect to client area

	function getAbsoluteLeft(elem)
	{
		var leftPosition = 0;

		while (elem)
		{
			var strTemp = elem.tagName + '';
			if(strTemp == 'BODY')
			{
				break;
			}

			if(!isNaN(parseInt(elem.offsetLeft)))
			{
				leftPosition += parseInt(elem.offsetLeft);
			}

			if(!isNaN(parseInt(elem.scrollLeft)))
			{
				leftPosition -= parseInt(elem.scrollLeft);
			}

			elem = elem.offsetParent;
		}

		return leftPosition;
	}

	//-------------------------------------------------------------------
	
	function logout()
	{
		window.location.href = "guestlogin.asp?Logout=1";
	}

	//-------------------------------------------------------------------

	function checkForNoErrors(xmlNode, bDisplayError)
	{
		if(bDisplayError == null)
			bDisplayError = true;

		var state = xmlNode.readyState;

		if(state == 4)
  		{
			var err = xmlNode.parseError;
			if (err.errorCode != 0)
			{
				if(bDisplayError)
					alert(err.reason);
				return false;
			}

			var pNode = xmlNode.selectSingleNode("error");
			if(pNode)
			{
				if(bDisplayError)
					alert(pNode.text);
				return false;
			}
			else
				return true;
		}
	}

	//-------------------------------------------------------------------

	function postFormToUIPart(strFormName, strUIPartInstUID, strViewUID)
	{
		if(!strViewUID)
			strViewUID = g_strViewID;

		EZTService.gotoChannel(g_strTeamID, strViewUID, g_strSubViewID,
								EZTService.generatePageParam('SetUIPartParamFromForm', strFormName, strUIPartInstUID, null, null));
															
	}

	//-------------------------------------------------------------------

	function resetUIPartForm(strUIPartInstUID)
	{
		EZTService.gotoChannel(g_strTeamID, g_strViewID, g_strSubViewID,
								EZTService.generatePageParam('SetUIPartParam', '', strUIPartInstUID, null, null));
															
	}

	//-------------------------------------------------------------------

	function clearAllParameters()
	{
		document.forms["_EZTMainForm_"].elements["_EZTPrevPageParameters_"].value = "";
	}

	//-------------------------------------------------------------------

	function postParameterToService(strParameter, strServiceUID, strViewUID)
	{
		if(!strViewUID)
			strViewUID = g_strViewID;

		EZTService.gotoChannel(g_strTeamID, strViewUID, g_strSubViewID,
								EZTService.generatePageParam('SetUIPartParam', strParameter, null, null, null, strServiceUID),4);
	}

	//-------------------------------------------------------------------

	function postParameterToServiceInst(strParameter, strServiceInstUID, strViewUID)
	{
		if(!strViewUID)
			strViewUID = g_strViewID;

		EZTService.gotoChannel(g_strTeamID, strViewUID, g_strSubViewID,
								EZTService.generatePageParam('SetUIPartParam', strParameter, null, null, strServiceInstUID),4);
	}

	//-------------------------------------------------------------------

	function postParameterToUIPart(strParameter, strUIPartUID, strViewUID)
	{
		if(!strViewUID)
			strViewUID = g_strViewID;

		EZTService.gotoChannel(g_strTeamID, strViewUID, g_strSubViewID,
								EZTService.generatePageParam('SetUIPartParam', strParameter, null, strUIPartUID, null),4);
	}

	//-------------------------------------------------------------------

	function postParameterToUIPartInst(strParameter, strUIPartUID, strViewUID)
	{
		if(!strViewUID)
			strViewUID = g_strViewID;

		EZTService.gotoChannel(g_strTeamID, strViewUID, g_strSubViewID,
								EZTService.generatePageParam('SetUIPartParam', strParameter, null, strUIPartUID, null),4);
	}

	//-------------------------------------------------------------------

	function generatePageParam(strActionType, strUIPartParameters, strUIPartInstUID, strUIPartUID, strServiceInstUID, strServiceUID)
	{
		var strParam = '<action>';

		if(strActionType == 'SetUIPartParam')
		{
			if(strUIPartParameters)
				strParam += '<parameters>'+strUIPartParameters+'</parameters>';
		}
		else if(strActionType == 'SetUIPartParamFromForm')
			strParam += '<parameters>'+getFormParameters(strUIPartParameters)+'</parameters>';

		if(strUIPartInstUID)
		{
			if(strUIPartInstUID != strUIPartInstUID.toUpperCase())
				alert(strUIPartInstUID+" needs to be in upper case.");
			strParam += '<UIPartInstUID>'+strUIPartInstUID+'</UIPartInstUID>';
		}

		if(strUIPartUID)
		{
			if(strUIPartUID != strUIPartUID.toUpperCase())
				alert(strUIPartUID+" needs to be in upper case.");
			strParam += '<UIPartUID>'+strUIPartUID+'</UIPartUID>';
		}

		if(strServiceInstUID)
		{
			if(strServiceInstUID != strServiceInstUID.toUpperCase())
				alert(strServiceInstUID+" needs to be in upper case.");
			strParam += '<ServiceInstUID>'+strServiceInstUID+'</ServiceInstUID>';
		}

		if(strServiceUID)
		{
			if(strServiceUID != strServiceUID.toUpperCase())
				alert(strServiceUID+" needs to be in upper case.");
			strParam += '<ServiceUID>'+strServiceUID+'</ServiceUID>';
		}

		strParam += '</action>';

		return strParam;
	}

	//-------------------------------------------------------------------

	function generateListActionCustomData(strFormName, strCustomAction, strSelectionSupport, strExtraData, strNoItemMsg)
	{
		var strFormParams = "";

		var pForm = document.forms[strFormName];
		var pElement, pElements;
		var bFoundOne = false;

		var strCustomData = "<custom>";

		if(strSelectionSupport == "one" || strSelectionSupport == "many")
		{
			pElements = pForm.elements["_EZTListItem_"];

			if(pElements && !pElements.length)
			{
				if(pElements.checked)
				{
					strCustomData +="<itemID>"+pElements.value+"</itemID>";
					bFoundOne = true;
				}
			}
			else if(pElements)
			{
				for(var i=0; i<pElements.length; i++)
				{
					if(pElements[i].checked)
					{
						strCustomData +="<itemID>"+pElements[i].value+"</itemID>";
						bFoundOne = true;
						if(strSelectionSupport == "one")
							break;
					}
				}
			}
		}

		if(strExtraData && strExtraData.length)
			strCustomData += "<other>"+strExtraData+"</other>";

		strCustomData += "<action>"+strCustomAction+"</action>";
		strCustomData += "</custom>";

		if(strSelectionSupport == "one" || strSelectionSupport == "many")
		{
			if(bFoundOne)
				return strCustomData;
			else
			{
				if(strNoItemMsg)
					alert(strNoItemMsg); 
				return null;
			}
		}
		else
			return strCustomData;
	}

	//-------------------------------------------------------------------

	function verifySelectionSupport(strSelectionSupport, strFormName, strNoItemMsg, strOneItemMsg, pWindow)
	{
		var strFormParams = "";

		if(!pWindow)
			pWindow = window;

		var pForm = pWindow.document.forms[strFormName];
		var pElement, pElements;
		var bFoundOne = false;
		var bFoundMoreThanOne = false;

		if(strSelectionSupport == "one" || strSelectionSupport == "many")
		{
			pElements = pForm.elements["_EZTListItem_"];

			if(pElements && !pElements.length)
			{
				if(pElements.checked)
					bFoundOne = true;
			}
			else if(pElements)
			{
				for(var i=0; i<pElements.length; i++)
				{
					if(pElements[i].checked)
					{
						if(bFoundOne)
						{
							bFoundMoreThanOne = true;
							break;
						}

						bFoundOne = true;
					}
				}
			}

			if(!bFoundOne)
			{
				if(strNoItemMsg)
					pWindow.alert(strNoItemMsg); 
				return false;
			}

			if(strSelectionSupport == "one" && bFoundMoreThanOne)
			{
				if(strOneItemMsg)
				{
					pWindow.alert(strOneItemMsg); 
					return false;
				}
			}
		}

		return true;
	}

	//-------------------------------------------------------------------

	function addUIPart(strURL, strUIPartUID, strServiceInstUID, strCustomXML, strWidth, strHeight, iFlags, pCallerWindow)
	{
		if(!iFlags)
			iFlags = 0;

		var strOpenURL = strURL;
		
		if(strOpenURL.search("\\?") == -1)
			strOpenURL += "?";
		else
			strOpenURL += "&";
		
		strOpenURL +="UserSessionID="+g_strUserSID+"&UIPartUID="+strUIPartUID+"&ServiceInstUID="+strServiceInstUID+"&TeamUID="+g_strTeamID+"&CompanyUID="+g_strCompanyUID+"&br="+g_EZTBrowserType+"&ver="+g_EZTBrowserVer+"&CustomXML="+strCustomXML;

		if(g_strViewID.length)
			strOpenURL += "&ViewUID="+g_strViewID;

		if (strOpenURL.length > 2000)
		{
			alert(g_arrEZTStrings["STR_TOO_MANY_ITEMS_SELECTED"]);
			return;
		}

		if(pCallerWindow)
		{
			var arrCallerURL = pCallerWindow.location.href.split("?");
			var strCallerURL = arrCallerURL[0];

			arrCallerURL = strCallerURL.split("/");
			strCallerURL = "";
			for(var i=0; i < arrCallerURL.length-1; i++)
				strCallerURL += arrCallerURL[i]+"/";

			pCallerWindow.open(strCallerURL+strOpenURL, "_blank", "HEIGHT="+strHeight+",WIDTH="+strWidth+",resizable,scrollbars,left=0,top=0");
		}
		else
			window.open(strOpenURL, "_blank", "HEIGHT="+strHeight+",WIDTH="+strWidth+",resizable,scrollbars,left=0,top=0");
	}

	//-------------------------------------------------------------------

	function gotoLocation(strURL, strServiceInstUID, strCustomXML)
	{
		window.location.href = strURL+"&ServiceInstUID="+strServiceInstUID+"&CustomXML="+strCustomXML;
	}

	//-------------------------------------------------------------------

	function getFormParameters(strFormName)
	{
		var strFormParams = "";
		var pForm = document.forms[strFormName];
		var pElement;

		for(var i=0; i<pForm.elements.length; i++)
		{
			pElement = pForm.elements[i];
			if(pElement.type == "button")
				continue;
			else if(pElement.type == "select-one")
				strFormParams += '<parameter name="'+pElement.name+'"><![CDATA['+pElement.options[pElement.selectedIndex].value+']]></parameter>';
			else if(pElement.type == "checkbox" || pElement.type == "radio")
			{
				if(pElement.checked)
					strFormParams += '<parameter name="'+pElement.name+'"><![CDATA['+pElement.value+']]></parameter>';
			}
			else
				strFormParams += '<parameter name="'+pElement.name+'"><![CDATA['+pElement.value+']]></parameter>';
		}

		return strFormParams;
	}

	//-------------------------------------------------------------------
	
	function updateLanguage(strNewLanguage)
	{
		g_strUpdateLanguageID = strNewLanguage;
		EZTService.gotoPortalHome();
	}

	//-------------------------------------------------------------------

	function refreshPage()
	{
		EZTService.gotoChannel(g_strTeamID, g_strViewID, g_strSubViewID);
	}

	//-------------------------------------------------------------------

	function printPage()
	{
		EZTService.gotoChannel(g_strTeamID, g_strViewID, g_strSubViewID, null, 1);
	}

	//-------------------------------------------------------------------

	function gotoPortalHome()
	{
		EZTService.gotoChannel(null, null, null, null, 2);
	}

	//-------------------------------------------------------------------

	function navigateTo(strTeamID, strViewID)
	{
		document.forms["_EZTMainForm_"].elements["_EZTNewPageParameters_"].value = "";
		document.forms["_EZTMainForm_"].elements["_EZTPrevPageParameters_"].value = "";

		EZTService.gotoChannel(strTeamID, strViewID);
	}

	//-------------------------------------------------------------------

	function gotoChannel(strTeamID, strViewID, strSubViewID, strPageParam, iFlags)
	{
		if(!strTeamID)
			strTeamID = "";

		if(!strViewID)
			strViewID = "";

		if(!strSubViewID)
			strSubViewID = "";

		var strLocationPrefix = "";
		if(EZTisNetscape())
		{
			var strTemp = window.location+"";
			var iPos = strTemp.search("main.asp");

			strLocationPrefix = strTemp.substring(0, iPos);
		}

		var strURL = strLocationPrefix+"main.asp?";
		
		if(g_iInTemplateMode)
			strURL += "TemplateID="+g_strViewID;
		else
		{
			if(!strViewID.length)
				strURL += "TeamID="+strTeamID;
			else
			{
				if(strViewID.substr(0,9) == "{00000000")
					strURL += "TeamID="+strTeamID+"&";
				strURL += "ViewID="+strViewID;
			}

			if(strSubViewID.length)
				strURL += "&SubViewID="+strSubViewID;
		}

		if(g_displayMode == 1)
			strURL +="&Mode=1";

		if(g_strUpdateLanguageID)
		{
			strURL += "&LangID="+g_strUpdateLanguageID;
		}

		if(iFlags)
		{
			if(iFlags & 1)
				strURL += "&Print=1";

			if(!g_iInTemplateMode && (iFlags & 2))
				strURL += "&GoHome=1";

			if(iFlags & 4)
			{
				var strURLParams = strPageParam;
				
				// change xml to short url info
				var strPattern = /<action>/i;
				strURLParams = strURLParams.replace(strPattern, "");
				strPattern = /<\/action>/i;
				strURLParams = strURLParams.replace(strPattern, "");
				strPattern = /<parameters>/i;
				strURLParams = strURLParams.replace(strPattern, "");
				strPattern = /<\/parameters>/i;
				strURLParams = strURLParams.replace(strPattern, "");
				strPattern = /<parameter name="/gi;
				strURLParams = strURLParams.replace(strPattern, "");
				strPattern = /">/gi;
				strURLParams = strURLParams.replace(strPattern, "=");
				strPattern = /<\/parameter>/i;
				strURLParams = strURLParams.replace(strPattern, ";");
				strPattern = /<UIPartUID>/i;
				strURLParams = strURLParams.replace(strPattern, "&UIPartUID=");
				strPattern = /<\/UIPartUID>/i;
				strURLParams = strURLParams.replace(strPattern, "");
				strPattern = /<UIPartInstUID>/i;
				strURLParams = strURLParams.replace(strPattern, "&UIPartInstUID=");
				strPattern = /<\/UIPartInstUID>/i;
				strURLParams = strURLParams.replace(strPattern, "");
				strPattern = /<ServiceInstUID>/i;
				strURLParams = strURLParams.replace(strPattern, "&ServiceInstUID=");
				strPattern = /<\/ServiceInstUID>/i;
				strURLParams = strURLParams.replace(strPattern, "");
				strPattern = /<ServiceUID>/i;
				strURLParams = strURLParams.replace(strPattern, "&ServiceUID=");
				strPattern = /<\/ServiceUID>/i;
				strURLParams = strURLParams.replace(strPattern, "");
				strPattern = /</gi;
				strURLParams = strURLParams.replace(strPattern, "");
				strPattern = />/gi;
				strURLParams = strURLParams.replace(strPattern, "=");

				strURL += "&params="+strURLParams;
			}
		}

		// check for parameters
		if(strPageParam)
		{
			document.forms["_EZTMainForm_"].elements["_EZTNewPageParameters_"].value = strPageParam;
		}
		else
		{
			document.forms["_EZTMainForm_"].elements["_EZTNewPageParameters_"].value = "";
		}

		strURL +="&u=u";

		document.forms["_EZTMainForm_"].action = strURL;
		document.forms["_EZTMainForm_"].submit();
	}

	//-------------------------------------------------------------------

	function getCookie(sName)
	{
		// cookies are separated by semicolons
		var aCookie = document.cookie.split("; ");
		for (var i=0; i < aCookie.length; i++)
		{
			// a name/value pair (a crumb) is separated by an equal sign
			var aCrumb = aCookie[i].split("=");
			if (sName == aCrumb[0]) 
				return unescape(aCrumb[1]);
		}

		// a cookie with the requested name does not exist
		return null;
	}

	//-------------------------------------------------------------------

	function escapeString(strOriginal, bIgnoreLTGT)
	{
		var strPattern = /'/gi;
		strEscaped = strOriginal.replace(strPattern, "''");


		if(!bIgnoreLTGT)
		{
			strPattern = /</gi;
			strEscaped = strEscaped.replace(strPattern, "&lt;");

			strPattern = />/gi;
			strEscaped = strEscaped.replace(strPattern, "&gt;");
		}

		return strEscaped;
	}

	//-------------------------------------------------------------------

	function replaceXMLSpecChars(strInput)
	{
		var strPattern = /&amp;/gi;
		var strOutput = strInput.replace(strPattern, "&");

		strPattern = /&lt;/gi;
		var strOutput = strOutput.replace(strPattern, "<");

		strPattern = /&gt;/gi;
		var strOutput = strOutput.replace(strPattern, ">");

		strPattern = /&quote;/gi;
		var strOutput = strOutput.replace(strPattern, '"');

		strPattern = /&apos;/gi;
		var strOutput = strOutput.replace(strPattern, "'");

		return strOutput;
	}

	//-------------------------------------------------------------------

	function getSelectedItems(strFormName, iFlag)
	{
		var strSelectedItems="";
		var pForm = document.forms[strFormName];
		var bFoundOne=false;
		pElements = pForm.elements["_EZTListItem_"];

		if(pElements && !pElements.length)
		{
			if(pElements.checked)
			{
				strSelectedItems += pElements.value;
				bFoundOne = true;
			}
		}
		else if(pElements)
		{
			for(var i=0; i<pElements.length; i++)
			{
				if(pElements[i].checked)
				{
					if(bFoundOne)
						strSelectedItems +=";";
					strSelectedItems +=pElements[i].value;

					bFoundOne=true;

					if(iFlag == 1)
						break;
				}
			}
		}

		return strSelectedItems;
	}

	//-------------------------------------------------------------------

	function emailForm(iFlags, strSubject, strDestEmail, strDestName, strSrcEmail, strSrcName)
	{
		if(!iFlags)
			iFlags = 0;

		if(!strSubject)
			strSubject = "";

		if(!strDestEmail)
			strDestEmail = "";

		if(!strDestName)
			strDestName = "";

		if(!strSrcEmail)
			strSrcEmail = "";

		if(!strSrcName)
			strSrcName = "";

		var strXML = "<emailForm>";
		strXML += "<flags>"+iFlags+"</flags>";
		strXML += "<subject>"+strSubject+"</subject>";
		strXML += "<destEmail>"+strDestEmail+"</destEmail>";
		strXML += "<destName>"+strDestName+"</destName>";
		strXML += "<senderEmail>"+strSrcEmail+"</senderEmail>";
		strXML += "<senderName>"+strSrcName+"</senderName>";
		strXML += "</emailForm>";

		window.open("loading.htm", "EMail", "HEIGHT=380,WIDTH=400,resizable,scrollbars");
		var strOpenURL = "services/Framework/EmailFormDlg.EZTSvc.asp?UIPartUID={21B91F96-913A-49f6-8E06-FC9057A0C3EA}&ServiceInstUID={00000000-0000-0000-0000-000000000000}&TeamUID="+g_strTeamID+"&CompanyUID="+g_strCompanyUID+"&br="+g_EZTBrowserType+"&ver="+g_EZTBrowserVer;

		document.forms["_EZTEmailForm_"].elements["_EZTEmailParams_"].value = strXML;
		document.forms["_EZTEmailForm_"].action = strOpenURL;
		document.forms["_EZTEmailForm_"].submit();
	}

	//-------------------------------------------------------------------

	function trimString(inputString)
	{
		var i, bFound;

		if (inputString == null)
			inputString = "";
		else
		{
			bFound = false;
			for (i = 0; i <= inputString.length - 1; i++)
			{
				if (inputString.charAt(i) != " ")
				{
					bFound = true;
					break;
				}
			}

			if (!bFound)
				inputString = "";
			else
			{
				inputString = inputString.substr(i, inputString.length - i);
				bFound = false;
				for (i = inputString.length - 1; 0 <= i; i--)
				{
					if (inputString.charAt(i) != " ")
					{
						bFound = true;
						break;
					}
				}

				if (!bFound)
					inputString = "";
				else
					inputString = inputString.substr(0, i + 1);
			}
		}
		return inputString;
	}

	//-------------------------------------------------------------------
	
}