//Restricted Rights Notice (Dec 2007)
//(a) This computer software is submitted with restricted rights under Government Contract. It may not be used, reproduced, or disclosed by the Government except as provided in paragraph (b) of this notice or as otherwise expressly stated in the contract.
//(b) This computer software may be:
//   (1) Used or copied for use with the computer(s) for which it was acquired, including use at any Government installation to which the computer(s) may be transferred;
//   (2) Used or copied for use with a backup computer if any computer for which it was acquired is inoperative;
//   (3) Reproduced for safekeeping (archives) or backup purposes;
//   (4) Modified, adapted, or combined with other computer software, provided that the modified, adapted, or combined portions of the derivative software incorporating any of the delivered, restricted computer software shall be subject to the same restricted rights;
//   (5) Disclosed to and reproduced for use by support service Contractors or their subcontractors in accordance with paragraphs (b)(1) through (4) of this notice; and
//   (6) Used or copied for use with a replacement computer.
//(c) Notwithstanding the foregoing, if this computer software is copyrighted computer software, it is licensed to the Government with the minimum rights set forth in paragraph (b) of this notice.
//(d) Any other rights or limitations regarding the use, duplication, or disclosure of this computer software are to be expressly stated in, or incorporated in, the contract.
//(e) This notice shall be marked on any reproduction of this computer software, in whole or in part.
//Copyright 2000 - 2008 The TriZetto Group, Inc.  All rights reserved.  This material may be reproduced by or for the US Government to the extent permitted by the copyright license under DFARS 42:227-7013(e).
function UpdateCacheCustomData(CacheCustomDataName, CacheCustomDataValue)
{
	CacheCustomDataName.value = CacheCustomDataValue
}

function LoadForm(FormName, bDisableInsert)
{	
	var CacheName="CLIENTCACHE";
	var strClinetCache = FormName[CacheName].value
	for (var i = 0; i < FormName.elements.length; i++) 
	{
		if (FormName.elements[i].type == "text") 
		{
			var field = FormName.elements[i];
			if(strClinetCache.indexOf(":" + field.name + "Control#") > -1){
				field.value=GetPropertyValue(CacheName+'.'+ field.name +'Control.Value');	
			}	
		}
		if (FormName.elements[i].type == "password") 
		{
			var field = FormName.elements[i];
			field.value=GetPropertyValue(CacheName+'.'+ field.name+'Control.Value');		
		}
		if (FormName.elements[i].type == "select-one")
		{
			var field = FormName.elements[i];
			var name = GetPropertyValue(CacheName+'.'+ field.name+'Control.Name');
			var selectedvalue =GetPropertyValue(CacheName+'.'+ field.name+'Control.Value');
			var optionlist = GetPropertyValue(CacheName+'.'+ field.name +'Control.Options');
			var optionlistValues = GetPropertyValue(CacheName+'.'+ field.name +'Control.OptionValues');
			var optionarr = optionlist.split(",");
			var optionarrValues = optionlistValues.split(",");			
					
			if (optionlist != "" && optionlist != ",")
			{
				// Add select entry option
				if ((bDisableInsert + "" == "undefined") || (bDisableInsert + "" == "false")){
					field.options[0]= new Option('Select '+ name,'');
					field.options[0].selected = true;
					for (j = 0; j < optionarr.length; j++)
					{
						field.options[j+1]= new Option(optionarr[j],optionarrValues[j]);
						if (optionarrValues[j] == selectedvalue) {
							field.options[j+1].selected = true;
						}
					}
				}
				else {
					//field.options[0]= new Option('Select '+ name,'');
					//field.options[0].selected = true;
					for (j = 0; j < optionarr.length; j++)
					{
						field.options[j]= new Option(optionarr[j],optionarrValues[j]);
						if (optionarrValues[j] == selectedvalue) {
							field.options[j].selected = true;
						}
					}
				}
			}

		}
		if (FormName.elements[i].type == "checkbox")
		{
			var field = FormName.elements[i];
			var checkval = GetPropertyValue(CacheName+'.'+ field.name+'Control.Value');
			if (checkval == 1) {
				field.checked = true;
			}
		}
		if (FormName.elements[i].type == "textarea")
		{
			var field = FormName.elements[i];
			field.value=GetPropertyValue(CacheName+'.'+ field.name+'Control.Value');
		}
		if (FormName.elements[i].type == "radio")
		{
			var field = FormName.elements[i];
			field.value=GetPropertyValue(CacheName+'.'+ field.name+'Control.Value');
		}		
	}	
	return true;
}


//Clear all the Values from the control
//Pass the control object as parameter
function ClearControl(Control)
{	

	switch (Control.type)
	{
		case "select-one":
			var OptionCount = Control.options.length;
			for(var i=0; i<=OptionCount; i++)
				Control.options[0] = null;
			break;
		case "select-multiple":
			var OptionCount = Control.options.length;
			for(var i=0; i<=OptionCount; i++)
				Control.options[0] = null;
			break;
		default:
			alert( "Not yet implemented for this control type :" + Control.type);
			break;
	}
}

function XMLEncode(strXML)
{
	re = /&/g
	strXML = strXML.replace(re, "&amp;");
	re = /</g
	strXML = strXML.replace(re, "&lt;");
	re = />/g
	strXML = strXML.replace(re, "&gt;");
	re = /'/g
	strXML = strXML.replace(re, "&apos;");
	re = /"/g
	strXML = strXML.replace(re, "&quot;");
	return (strXML);
}

// This fuction saves selected combo box value on selection change in the client cache 
// (used during back button logic)
function SaveSelection(ControlName)
{
	var field = document.forms[0][ControlName];
	//loop through combobox looking for selected Item.
	for (k = 0; k < field.options.length; k++)
	{
		if (field.options[k].selected == true) {
			UpdatePropertyValue('CLIENTCACHE.'+ ControlName +'Control.Value',field.options[k].value);
		}
	}		
}

// This function loads option boxes when back button is pressed
function LoadSavedForm(FormName)
{	
	var CacheName="CLIENTCACHE";
	for (var i = 0; i < FormName.elements.length; i++) 
	{
		if (FormName.elements[i].type == "select-one")
		{
			var field = FormName.elements[i];
			var name = GetPropertyValue(CacheName+'.'+ field.name+'Control.Name');
			var selectedvalue = GetPropertyValue(CacheName+'.'+ field.name+'Control.Value');
			var optionlist = GetPropertyValue(CacheName+'.'+ field.name +'Control.Options');
			var optionlistValues = GetPropertyValue(CacheName+'.'+ field.name +'Control.OptionValues');
			var optionarr = optionlist.split(",");
			var optionarrValues = optionlistValues.split(",");			
			
			
			if (optionlist != "" && optionlist != ",")
			{
				// Add select entry option
				field.options[0]= new Option('Select '+ name,'');
				for (j = 0; j < optionarr.length; j++)
				{
					field.options[j+1]= new Option(optionarr[j],optionarrValues[j]);
					if (optionarrValues[j] == selectedvalue) {
						field.options[j+1].selected = true;
					}
				}
			}

		}
	}	
	return true;
}


//Places focus on first editable field in form 
function placeFocus() 
{
	if (document.forms.length > 0) 
	{
		var field = document.forms[0];
		for (i = 0; i < field.length; i++) 
		{
			if ((field.elements[i].type == "text") || (field.elements[i].type == "textarea") || (field.elements[i].type.toString().charAt(0) == "s")) 
			{
				document.forms[0].elements[i].focus();
				break;
			}
      }
   }
}

function PersistForm(FormName)
{
	var CacheName="CLIENTCACHE";
	for (var i = 0; i < FormName.elements.length; i++) 
	{
		if (FormName.elements[i].type == "text") 
		{
			var field = FormName.elements[i];
			UpdatePropertyValue(CacheName+'.'+ field.name +'Control.Value',field.value);		
		}
		
		if (FormName.elements[i].type == "password") 
		{
			var field = FormName.elements[i];
			UpdatePropertyValue(CacheName+'.'+ field.name +'Control.Value',field.value);		
		}
		
		if (FormName.elements[i].type == "select-one")
		{
			var field = FormName.elements[i];
			//loop through combobox looking for selected Item.
			for (k = 0; k < field.options.length; k++)
			{
				if (field.options[k].selected == true) {
					UpdatePropertyValue(CacheName+'.'+ field.name +'Control.Value',field.options[k].value);
				}
			}		
		}
		if (FormName.elements[i].type == "checkbox")
		{
			var field = FormName.elements[i];
			var checkval = "0";
			if (field.checked == true) {
				checkval = "1";
			}
			UpdatePropertyValue(CacheName+'.'+ field.name +'Control.Value',checkval);
		}
		if (FormName.elements[i].type == "textarea")
		{
			var field = FormName.elements[i];
			UpdatePropertyValue(CacheName+'.'+ field.name +'Control.Value',field.value);
		}
		if (FormName.elements[i].type == "radio")
		{
			var field = FormName.elements[i];
			UpdatePropertyValue(CacheName+'.'+ field.name +'Control.Value',field.value);
		}
		
	}
		
	return true;
}


function FieldValidation(FormName,FieldName) {
	var CacheName="CLIENTCACHE"
	var regexpstr = new RegExp(GetPropertyValue(CacheName+'.'+FieldName+'Control.RegExp'));
	var errormsg = GetPropertyValue(CacheName+'.'+FieldName+'Control.ErrMsg');
	var matchArr = FormName.FieldName.value.match(regexpstr);
	if (matchArr == null) {
		alert("Incorrect format or missing value for: " + errormsg + " field.");
		FormName.FieldName.select();
		return false;
	}
	else {
		FormName.submit();
		return true;
   	}
}

function FormValidation(FormName) {
	var CacheName="CLIENTCACHE";
	var CollectErrors = "";
	for (var i = 0; i < FormName.elements.length; i++) 
	{
		if (FormName.elements[i].type == "text")
		{
			var field = FormName.elements[i];
			var regexpstr = new RegExp(GetPropertyValue(CacheName+'.'+ field.name+'Control.RegExp'));
			var errormsg = GetPropertyValue(CacheName+'.'+ field.name +'Control.ErrMsg');
			
			if (regexpstr!="//"){
				var valid = regexpstr.test(field.value);
				if (!valid) {
					if (errormsg == "") {
						errormsg = "Incorrect format or missing value for: " + field.name + " field."; }
					CollectErrors = CollectErrors + errormsg + String.fromCharCode(13) + String.fromCharCode(9)	
				}
			}
			field="";
			regexpstr="";
			errormsg="";
		}
		if (FormName.elements[i].type == "password")
		{
			var field = FormName.elements[i];
			var regexpstr = new RegExp(GetPropertyValue(CacheName+'.'+ field.name+'Control.RegExp'));
			var errormsg = GetPropertyValue(CacheName+'.'+ field.name +'Control.ErrMsg');
			
			if (regexpstr!="//"){
				var valid = regexpstr.test(field.value);
				if (!valid) {
					if (errormsg == "") {
						errormsg = "Incorrect format or missing value for: " + field.name + " field."; }
					CollectErrors = CollectErrors + errormsg + String.fromCharCode(13) + String.fromCharCode(9)	
				}
			}
			field="";
			regexpstr="";
			errormsg="";
		}
		
		if (FormName.elements[i].type == "select-one")
		{
			var field = FormName.elements[i];
			var regexpstr = new RegExp(GetPropertyValue(CacheName+'.'+ field.name+'Control.RegExp'));
			var errormsg = GetPropertyValue(CacheName+'.'+ field.name +'Control.ErrMsg');
			
			if (regexpstr!="//"){
				var valid = regexpstr.test(field.value);
				if (!valid) {
					if (errormsg == "") {
						errormsg = "Incorrect format or missing value for: " + field.name + " field."; }
					CollectErrors = CollectErrors + errormsg + String.fromCharCode(13) + String.fromCharCode(9)	
				}
			}
			field="";
			regexpstr="";
			errormsg="";
		}
	}
	if (CollectErrors != "") {
		alert("Incorrect format or missing value for: " + String.fromCharCode(13) + String.fromCharCode(13) + String.fromCharCode(9) + CollectErrors);
		return false;
	}
	else {
		return true;
	}
}

function CheckForm(FormName) {
	if (FormValidation(FormName)) {
		PersistForm(FormName); 
		FormName.submit();
	}
}

//This function submits the form from a field when the enter key is pressed
function callSubmit()
	{
	// (keyCode 13 is the enter key), checks to see if event key is the enter key
	if (window.event.keyCode == 13)
		{
		// if the event key is key 13, call the checkform function
		// to check and validate fields in form
		CheckForm(document.forms[0]);
		}
	}

function GetWindowHeight() {
	if (navigator.userAgent.indexOf("MSIE") > 0) {
		var sSize = (window.top.document.body.clientHeight);
		return sSize;
	} else {                                                
		var sSize = (window.outerHeight);
		return sSize;
	}
return;      
}

function GetWindowWidth() {
	if (navigator.userAgent.indexOf("MSIE") > 0) {
		var sSize = (window.top.document.body.clientWidth);
		return sSize;
	} else {                                                
		var sSize = (window.outerWidth);
		return sSize;
	}
return;      
}

//Loads a Form from a specified frame.
function LoadFormFromFrame(Frame, FormName)
{	
	var CacheName="CLIENTCACHE";
	for (var i = 0; i < FormName.elements.length; i++) 
	{
		if (FormName.elements[i].type == "text") 
		{
			var field = FormName.elements[i];
			field.value=GetPropertyValueFromFrame(Frame, CacheName+'.'+ field.name+'Control.Value');
		}
		if (FormName.elements[i].type == "password") 
		{
			var field = FormName.elements[i];
			field.value=GetPropertyValueFromFrame(Frame, CacheName+'.'+ field.name+'Control.Value');		
		}
		if (FormName.elements[i].type == "select-one")
		{
			var field = FormName.elements[i];
			var name = GetPropertyValueFromFrame(Frame, CacheName+'.'+ field.name+'Control.Name');
			var selectedvalue = GetPropertyValueFromFrame(Frame, CacheName+'.'+ field.name+'Control.Value');
			var optionlist = GetPropertyValueFromFrame(Frame, CacheName+'.'+ field.name +'Control.Options');
			var optionlistValues = GetPropertyValueFromFrame(Frame, CacheName+'.'+ field.name +'Control.OptionValues');
			var optionarr = optionlist.split(",");
			var optionarrValues = optionlistValues.split(",");			
					
			if (optionlist != "" && optionlist != ",")
			{
				// Add select entry option
				//field.options[0]= new Option('Select '+ name,'');
				//field.options[0].selected = true;
				for (j = 0; j < optionarr.length; j++)
				{
					field.options[j]= new Option(optionarr[j],optionarrValues[j]);
					if (optionarrValues[j] == selectedvalue) {
						field.options[j].selected = true;
					}
				}
			}

		}
		if (FormName.elements[i].type == "checkbox")
		{
			var field = FormName.elements[i];
			var checkval = GetPropertyValueFromFrame(Frame, CacheName+'.'+ field.name+'Control.Value');
			if (checkval == 1) {
				field.checked = true;
			}
		}
		if (FormName.elements[i].type == "textarea")
		{
			var field = FormName.elements[i];
			field.value=GetPropertyValueFromFrame(Frame, CacheName+'.'+ field.name+'Control.Value');
		}
		if (FormName.elements[i].type == "radio")
		{
			var field = FormName.elements[i];
			field.value=GetPropertyValueFromFrame(Frame, CacheName+'.'+ field.name+'Control.Value');
		}		
	}	
	return true;
}



//*********************************************************************
//Used to get total working area on page as QueryParameters.
// Sample Call: GenerateFrameURL('medicalobservation.asp','&OBXID=427')
// Sample Ouput: medicalobservation.asp?x=840&y=650&OBXID=427
//*********************************************************************
function GenerateFrameURL(URLPage,URLQueryParameters) {
		var BrowserWidth
		var BrowserHeight
		BrowserWidth=(GetWindowWidth());
		BrowserHeight=(GetWindowHeight());
		parent.frames['body'].location.href = URLPage + "?x=" + BrowserWidth + "&y=" + BrowserHeight + URLQueryParameters;
}

//Return Session ID from the Navigation Frame
function PullSessionID() {
	return window.top.navigation.document.SessID.SessionID.value;
}

//Return Session Type from the Navigation Frame
function PullSessionType() {
	return window.top.navigation.document.SessID.SessionType.value;
}

//Return Member Name from the Navigation Frame
function PullSessionMemberName() {
	return GetHiddenData("MEMBERFULLNAME")
	//return window.top.navigation.document.SessID.MemberFirstName.value + " " + window.top.navigation.document.SessID.MemberLastName.value;
}


//Return TreeNodeId value from the Navigation Frame
function PullTreeNodeId() {
	if(window.top.navigation.document.SessID.TreeNodeId + "" != "undefined"){
		return window.top.navigation.document.SessID.TreeNodeId.value;
	}
}

function SetTreeNodeId(IDValue) {
	if(window.top.navigation.document.SessID.TreeNodeId + "" != "undefined"){
		window.top.navigation.document.SessID.TreeNodeId.value = IDValue;
	}
}

function isNameExist(select, OptionName){
	OptionName = OptionName.toUpperCase();
	for (i = 0;  i < select.length; i++){
		if (select[i].text.toUpperCase() == OptionName){
			return true;
		}
	}
	return false;
}

function jstrim(strIn) {
	//Trims leading spaces.
	while(''+strIn.value.charAt(0)==' ')
		strIn.value=strIn.value.substring(1,strIn.value.length);

	//Trims ending spaces.
	while(''+strIn.value.charAt(strIn.value.length-1)==' ')
		strIn.value=strIn.value.substring(0,strIn.value.length-1);
}

function updatehelpdata(pagename, pageaction) {
	//var headerform = window.top.navigation.document.SessID
	
	//headerform.pageloaded.value = pagename;
	//headerform.pageloadedaction.value = pageaction;
	//alert(pagename + ' ' + pageaction);

}

function gethelpfile(pagename,pageaction) {
	//var headerform = window.top.navigation.document.SessID.helpcache.value
	var helpfilename = "obxhelpfile"
	var params =   'helpcache.pageloaded.' + pagename + '.' + pageaction;
	helpfilename=GetPropertyValueFromFrame(window.top.frames['navigation'], params);

	return helpfilename
}

// UB 11/18/04 Bug 5846 - confirm with a navigation message
function ConfirmWithNavigationAlert(id) {
	var msg = "";
	try {
		msg = window.top.navigation.arrAlerts[id];
	}
	catch(e) {
		try {
			msg = window.opener.window.top.navigation.arrAlerts[id];
		}
		catch(e) {}
	}
	return confirm(unescape(msg));
}

//Get the alert message from navigation frame (the navigation.asp)
//#192937 - Fix
function RaiseAlertInNavigation(id){

	try {
		var msg = "Please fill in the required field.";
		if(window.top.navigation.arrAlerts != null)
		{
			   msg =top.navigation.arrAlerts[id];
	    }
	    else if(arrAlerts != null)
	    {
	           msg = arrAlerts[id];
	    }	
	    
	    alert(unescape(msg));
	}
	catch(e) {
		try {
			alert(unescape(window.opener.window.top.navigation.arrAlerts[id]));
		}
		catch(e) 
		{
			alert("Please fill in the required field.");
		}
	}
}

//Retrieve the alert message from navigation frame (the navigation.asp)
function RetrieveAlertInNavigation(id){
	return	unescape(window.top.navigation.arrAlerts[id]);

}


//RaiseComposedAlert and Retrieve the alert message from navigation frame (the navigation.asp)
function RaiseComposedAlert(IDs, MSGs){
	var strAlert="";
	var id = IDs.shift();
	var msg =MSGs.shift();
	var count = 1;
	var maxCount = 10; //the limit of how many alert part can go into one composed alert
	//alert("(outside while)ID: " + id);
	//alert("(outside while)MSG: " + msg);
	while ((id+"" != "undefined") && (count < maxCount)){
		//alert("(in while)ID: " + id);
		//alert("(in while)MSG: " + msg);
		strAlert += RetrieveAlertInNavigation(parseInt(id)) + " ";
		if (msg + "" != "undefined") {
			strAlert += msg + " ";
			msg =MSGs.shift();
		}
		id = IDs.shift();
		count++;
	}
	alert(strAlert);
	return strAlert;
}
