
  function getTop(win)
		{			 
		  return win.document.title.indexOf("Framework") > -1 ? win : win.parent != win ? getTop(win.parent) : win;
		}
		var g_absoluteTop = top;//better save a reference to the real top.
		var top = getTop(window);//overrides IE's 'top' reference which normally points to the uppermost window.  Now Relatis can be embedded in other apps and also embed within itself.

  function setSort(inSortField)
  {
    var tempSortField;
    if (document.view.sortField && document.view.sortField.value != null)
    {
      tempSortField = document.view.sortField.value;
      if (tempSortField.indexOf(inSortField) > -1) 
      {
        if (tempSortField.indexOf('$D_') == -1 && tempSortField.indexOf('$F_') == -1)
        {
          inSortField = '$F_' + inSortField;
        }
        else if (tempSortField.indexOf('$F_') > -1)
        {
          inSortField = '$D_' + inSortField;
        }
        else if (tempSortField.indexOf('$D_') > -1)
        {
          inSortField = '$F_' + inSortField;
        }
      }
      else inSortField = '$F_' + inSortField;
    }
	   document.view.GenExecutionPk.value='';
    document.view.action='/servlet/com.isa.balmoral.admin.process.MatServlet';
				document.view.target='_self';
				if ( document.view.subAction ) document.view.subAction.value = '';
				
				var sf = createHiddenField( document.view, "sorting", "true" );
				document.view.insertBefore(sf, document.view.childNodes.item(0));
				
    document.view.sortField.value = inSortField;
    document.view.submit();
  }

		function refreshList(d)
	 {			 d.view.elements["listRefresh"].value='true';
		   d.view.action.value='/servlet/com.isa.balmoral.admin.process.MatServlet';
			 d.view.GenExecutionPk.value='';	
			 d.view.target='_self';
			 d.view.subAction.value = '';
			 d.view.submit();
} 
  function setPage(inPageAction)
  {
    document.view.GenExecutionPk.value='';	  
    document.view.action='/servlet/com.isa.balmoral.admin.process.MatServlet';	  
    document.view.subAction.value = inPageAction;
    document.view.submit();
  }
  function viewSubmit(inPageAction)
  {
			 document.view.target="_self";
    document.view.action='/servlet/com.isa.balmoral.admin.process.MatServlet';	  
    document.view.subAction.value = inPageAction;
				ufe("view", "subTask", "");
				ufe("view", "selectedFormPk", "");
				ufe("view", "searchListName", "");
				ufe("view", "searchListTitle", "");
				if ( document.view.subTask ) document.view.subTask.value = "";
    document.view.submit();
  }		
  
  function setProcessAction(inAction)
  {
    document.forms["view"].elements["processAction"].value=inAction;
    document.forms["view"].elements["currentLocation"].value=document.location;
    document.forms["view"].submit();
  }

  function setProcessActionSearch(inAction)
  {
    document.forms["view"].elements["processAction"].value=inAction;
    document.forms["view"].elements["currentLocation"].value=document.location;
    document.forms["view"].submit();
  }



  function doStuff(sField, sForm, sMessage, bFocus)
  {
    if(bFocus)
    {
      eval('document.' + sForm + '.' + sField + '.focus();');
      alert(sMessage);
    }
    return false;
  }
      
  function checkFieldExists(sField, sForm)
  {
    var b;
    eval('b=document.' + sForm);
    if(b) eval('b=document.' + sForm + '.' + sField);
    return b;
  }
     
  function checkNotEmpty(sValue,sType)
  {
    var sVal = '';
    if(sValue != null && sValue.length > 0 ) sVal = trim(sValue).toLowerCase();
    if(sType == 'select-one' && (sVal.indexOf('select') == -1 && sVal.indexOf('dd') == -1 && sVal.indexOf('mm') == -1 && sVal.indexOf('yy') == -1)) return true;
    else if(sVal != null && sVal.length > 0) return true;
    else return false;
  }
      
  function checkMinLength(sVal,iMinLen)
  {
    if(sVal != null && sVal.length > iMinLen) return true;
    else return false;
  }
      
  function checkMaxLength(sVal,iMaxLen)
  {
    if(sVal != null && sVal.length <= iMaxLen) return true;
    else return false;
  }
      
  function checkNumeric(sVal)
  {
    if(sVal != null && sVal != '' && !isNaN(sVal)) return true;
    else return false;
  }
      
  function checkEmail(sVal)
  {
    if(sVal != null && sVal != '' && sVal.length > 2 && sVal.indexOf('@') > 0) return true;
    else return false;
  }
      
  function checkCountCBs(sForm, sField, sCompare)
  {
    cb=null; cnt=0; tf=false;
    eval('cb=document.' + sForm + '.' + sField);
    if(cb && cb.length > 0) {for(i=0; i < cb.length; i++) if(cb[i].checked == true) cnt++;}
    else if (cb.checked) cnt=1;
      
    if(sCompare=='1or0' && (cnt==1 || cnt==0)) tf=true;
    else eval( 'tf=(cnt' + sCompare + ')');
     
    if (tf) return true;
    else return false;
  }
      
  function checkLongLat(sVal)
  {
    if( sVal == null || trim(sVal) == '') return true;
    else if(checkNumLimit(sVal,0,'>=') && checkNumLimit(sVal,360,'<')) return true;
    else return false;
  }
      
  function checkNumLimit(sVal, sLimit, sCheck)
  {
    var b=false;
    if(sVal != null && sVal != '' && !isNaN(sVal))
    {
      eval('b=(' + sVal + ' ' + sCheck + ' sLimit)');
      return b;
    }
    else return false;
  }
      
  function trim(sVal)
  {
    var s = new String('');
    if(sVal != null && sVal.length > 0) s = new String(sVal);
    while(s.length > 0 && (s.indexOf(' ') == 0 || s.lastIndexOf(' ') == (s.length-1)))
    {
      if(s.indexOf(' ') == 0) s = s.substr(1);
      else if(s.lastIndexOf(' ') == (s.length-1)) s = s.substr(0,s.length-1);
    }
    return s;
  }

  function checkPlaceColumn(pValue, fieldValue) 
  {
    if (Number(pValue) > 1) 
    { 
      document.forms["view"].elements[fieldValue].value = pValue;
    } 
  }

 function doPageFinderKeyEvent(e)
 {
   var key = -1;
   if(document.layers) key = e.which;
   else key = window.event.keyCode;
   if(key > 0)
   {
     if (key==13 && document.view)
     {
       document.view.submit();
     }
   }  
 }
 
 function processDateFields(fieldname)
 {    
	 try
		{
   var numYear;
   var numDay;
   var numMonth;
   var o = document.all['date_of_birth-dd'];   
   numDay = parseInt(o.options[o.selectedIndex].value);
   o = document.all['date_of_birth-mm'];
   numMonth = parseInt(o.options[o.selectedIndex].value);
   o = document.all['date_of_birth-yyyy'];
   numYear = parseInt(o.options[o.selectedIndex].value);

   if (numMonth == 2 && numDay > 29) 
   {
     var negative = document.all['date_of_birth-dd'].selectedIndex;
     
     if (isLeapYear(numYear))
     {
     	if (numDay == 31) negative = negative - 2;
     	else if (numDay == 30) negative = negative - 1;
     	document.all['date_of_birth-dd'].selectedIndex = negative;
     	return;
     }
     else
     {
     	if (numDay == 31) negative = negative - 3;
     	else if (numDay == 30) negative = negative - 2;
     	else if (numDay == 29) negative = negative - 1;
     	document.all['date_of_birth-dd'].selectedIndex = negative;
     	return;
     }
   }

   if (numMonth == 2 && numDay == 29) 
   {
     var div4 = numYear % 4;
     var div100 = numYear % 100;
     var div400 = numYear % 400;
        // if not divisible by 4, then not a leap year so Feb 29 is invalid
     if (div4 != 0) 
     {
       document.all['date_of_birth-dd'].selectedIndex = document.all['date_of_birth-dd'].selectedIndex - 1;
     }
        // at this point, year is divisible by 4. So if year is divisible by
        // 100 and not 400, then it's not a leap year so Feb 29 is invalid
     if ((div100 == 0) && (div400 != 0)) 
     { 
       document.all['date_of_birth-dd'].selectedIndex = document.all['date_of_birth-dd'].selectedIndex - 1;
     }
     
     return;
   }

   if (((numMonth == 4) || (numMonth == 6) || (numMonth == 9) || (numMonth == 11)) && numDay > 30)
   {
     document.all['date_of_birth-dd'].selectedIndex = document.all['date_of_birth-dd'].selectedIndex - 1;
     return;
   }
		}catch (e) { top.status = 'Need to look in select validation -- see RelatisFunctions.js function processDateFields.'; }
 }

 function isLeapYear(numYear)
 {
   var div4 = numYear % 4;
   var div100 = numYear % 100;
   var div400 = numYear % 400;
        // if not divisible by 4, then not a leap year so Feb 29 is invalid
   if (div4 != 0) return false; 
   else if ((div100 == 0) && (div400 != 0)) return false; 
   else return true;

 }
 
 function waitScreen( delay ) {
   top.openWaitScreenWithDelay( delay );
 }
 
  var waitTimer = false;
  
  function openWaitScreenWithDelay(delay) 
  {
    waitTimer = setTimeout('openWaitScreen()', delay);
  }
  
  function openWaitScreen() 
  {
    if (!document.all.waitscreendiv)
      insertAdjacentHTML(document.body, "BeforeEnd","<div id=waitscreendiv class=tab style='font-family:arial; font-size:10pt; font-weight:bold; color:#000000; background-color:#ffffff; border:thin solid black;' align=center><img src='"+imageLocation+"portal/wait.gif' class=waitImg><br>Please wait...</div>");
	   document.all.waitscreendiv.style.left="400px";
	   document.all.waitscreendiv.style.top="250px";
	   document.all.waitscreendiv.style.visibility="visible";
  }
  
  function closeWaitScreen() 
  {	  
    clearTimeout(waitTimer);
    if (!document.all.waitscreendiv) return;
    document.all.waitscreendiv.style.visibility="hidden";
  } 
  
  function old_publish(inNextScreenPk,inSelectedPk,inLastSelectedPk,inFieldName, inMenuLinkPk,inFromScreenPk)
  {
			 top.g_runWithinTab=false;
    if ( parent != top ) document.view.target="_parent";
    document.view.genFormPk.value=inNextScreenPk;
    document.view.selectedPk.value=inSelectedPk;
    document.view.lastSelectedPk.value=inLastSelectedPk;
    document.view.sortField.value='';
    document.view.menuLinkPk.value=inMenuLinkPk;
    document.view.fromScreen.value=inFromScreenPk;								
				try{ document.view.searchFormPk.value=''; }catch(e){}
				try{ document.view.searchPk.value=''; }catch(e){}
	
				if ( document.view.tabFormPk ) document.view.tabFormPk.value='';
    if (document.view.multiFormPk) document.view.multiFormPk.value='';
    try{document.view.topMenuPk.value=top.document.LeftMenuTree_Form.topMenuPk.value;	}catch(e){}
				try { document.view.GenExecutionPk.value=''; }catch(e){}
    StealthDownload( "view", "appendpks", null, "mainframe", "framename=&tabSummary=false", null );
  } 

function publish( inNextScreenPk, inSelectedPk, inLastSelectedPk, inFieldName, inMenuLinkPk, inFromScreenPk )
{
  var sAddFields = "";
  top.g_runWithinTab = false;
  var sTopMenuPk = "";
  try { sTopMenuPk = top.document.LeftMenuTree_Form.topMenuPk.value; } catch( e ) {}
  StealthDownload("view", "appendpks", null, ( parent != top && !window.g_publishSelf  ? "_parent" :"_self" ), "framename=&tabSummary=false&genFormPk="+inNextScreenPk+"&selectedPk="+inSelectedPk+"&lastSelectedPk="+inLastSelectedPk+"&sortField=&menuLinkPk="+inMenuLinkPk+"&fromScreen="+inFromScreenPk+"&searchFormPk=&searchPk=&tabFormPk=&multiFormPk=&GenExecutionPk=&topMenuPk="+sTopMenuPk, null);
}
 

  function setNextButton(inSubAction) 
  {
    StealthDownload( "view", inSubAction, "/servlet/com.isa.balmoral.admin.process.MatEngineServlet", "_self","", null );	  
  }

  function setNextProcessButton(inSubAction) 
  {
    StealthDownload( "view", "", "/servlet/com.isa.balmoral.admin.process.MatEngineServlet", "_self","&processaction=" + inSubAction, null );	  
  }
  
  function setNextProcessButtonSearchs(inSubAction) 
    {
      var frames1 = document.getElementsByTagName("IFRAME");
      if ( frames1.length > 1 ) 
      {
            var fr=frames[document.all["framename"].value];
            var value = "";
            var selectedPk = "";
            if(fr && fr.document)
            {
              fr=fr.document.forms[0];
              if(fr.elements["PK"].length > 0)
              {
                for (var i=0; i < fr.elements["PK"].length; i++)
                {
                  if (fr.elements["PK"][i].checked)
                  {
                    if (selectedPk == "") selectedPk = "&selectedPk=" + fr.elements["PK"][i].value;
                    value += "&PK="+fr.elements["PK"][i].value;
                  }
                }
              }
        }
      }
      StealthDownload( "view", "", "/servlet/com.isa.balmoral.admin.process.MatEngineServlet", "_self","&processaction=" + inSubAction + value + selectedPk, null );	  
    }
  
  
  function downloadFile(inGenFormPk) 
  {
    //document.location = "/servlet/com.isa.balmoral.admin.process.MatDownLoadServlet?genFormPk=" + inGenFormPk + "&session=" + top.document.LeftMenuTree_Form.elements.session.value;
    StealthDownload( "view", "", "/servlet/com.isa.balmoral.admin.process.MatDownLoadServlet", '_self',"&genFormPk=" + inGenFormPk, null, true );	  
  }

  function addToPrefered(inGenFormPk) 
  {
	   var frames = document.getElementsByTagName("IFRAME");
	   if ( frames.length > 1 ) 
	   {
	     frames[0].contentWindow.addToPrefered(inGenFormPk);
	     return;
	   }    
    StealthDownload( "view", "", "/servlet/com.isa.balmoral.admin.process.MatPreferredServlet", null,"&genFormPk=" + inGenFormPk + "&subaction=add", deselectAll );	  
  }
  
  function removeFromPrefered(inGenFormPk)
  {
	   var frames = document.getElementsByTagName("IFRAME");
	   if ( frames.length > 1 ) 
	   {
	     frames[0].contentWindow.removeFromPrefered(inGenFormPk);
	    return;
	   }	  
    StealthDownload( "view", "", "/servlet/com.isa.balmoral.admin.process.MatPreferredServlet", "_parent","&preferred=true&genFormPk=" + inGenFormPk + "&subaction=delete&MenuTitleImage=" + parent.document.getElementById('view').elements.MenuTitleImage.value + "&tempFormPk=" + parent.document.getElementById('view').elements.genFormPk.value, null );
  }
  
  function togglePrefered(inVal)
  {
    StealthDownload( "view", "", "/servlet/com.isa.balmoral.admin.process.MatServlet", "_self","&preferred=" + inVal, noReply );
  }
  
  function selectAll()
  {
    var checkboxes = document.getElementsByName("PK");
	   for ( c = 0; c < checkboxes.length; c++ )
	   {
      checkboxes[c].checked = true;
						checkboxes[c].fireEvent("onchange");
	   }
	   document.getElementById("view").elements.selectOperation.value="selectAll";
  }
  function invertSelection()
  {
    var checkboxes = document.getElementsByName("PK");
	   for ( c = 0; c < checkboxes.length; c++ )
	   {
	     if ( checkboxes[c].checked )
        checkboxes[c].checked = false;
	     else
  	     checkboxes[c].checked = true;
						checkboxes[c].fireEvent("onchange");
	   }
	   document.getElementById("view").elements.selectOperation.value="invertSelection";	  
  }
  function deselectAll()
  {
    var checkboxes = document.getElementsByName("PK");
	   for ( c = 0; c < checkboxes.length; c++ )
	   {
      checkboxes[c].checked = false;
						checkboxes[c].fireEvent("onchange");
	   }
	   document.getElementById("view").elements.selectOperation.value="deselectAll";	  
  }
		
		var g_tpaneFormName = 'view';
		function ToggleHelpMode( tpaneFormName )
		{
			if ( tpaneFormName ) g_tpaneFormName = tpaneFormName;
			 if ( !document.all.cursorHelp )
			   insertAdjacentHTML(document.body, "AfterBegin", "<div id=cursorHelp onmousedown='cancelBubble(event);' onclick='HelpElementAt(event);cancelBubble(event);' style='position:absolute;visibility:visible;z-index:120000; background-color:white;left:0;top:0;height:100%;width:100%; cursor:help; FILTER: progid:DXImageTransform.Microsoft.BasicImage( Opacity=0.01);-moz-opacity:0.1;'>&nbsp;</div>");
				else 
				  document.all.cursorHelp.style.display='block';
						
		}
		function HelpElementAt(e)
		{
			 document.all.cursorHelp.style.display='none';
    var el = efp(e.clientX, e.clientY);
				el = getElWithPk(el);
				var sessionId = document.getElementById('view').elements.session.value;				
				if ( el && el.getAttribute('help') ) 
				{
					 var HelpFormPk = el.getAttribute('help');
						sessionId = document.getElementById('view').elements.session.value;
      window.open('/servlet/com.isa.balmoral.admin.process.MatFrameworkServlet?session='+sessionId+'&subAction=getFormHelp&HelpFormPk='+HelpFormPk,'RelatisHelp', 'left=100,top=100,directories=no,width=600,height=400,location=no,menubar=no,resizable=yes,scrollbars=yes,status=no,titlebar=no,toolbar=no');
				} else 
				{
			   var formPk = document.getElementById(g_tpaneFormName).elements.genFormPk.value;
      window.open('/servlet/com.isa.balmoral.admin.process.MatFrameworkServlet?session='+sessionId+'&subAction=getPageHelp&genFormPk='+formPk,'RelatisHelp', 'left=100,top=100,directories=no,width=600,height=400,location=no,menubar=no,resizable=yes,scrollbars=yes,status=no,titlebar=no,toolbar=no');					
				}
		}
		
		function getElWithPk(o)
		{
			 if ( !o || o.nodeName.toLowerCase() == "body" ) return false;
			 if ( !o.getAttribute('help') || o.getAttribute('help').length < 1 ) o = getElWithPk(o.parentNode);
				return o;
		}
		
		function ForceFormReset(formName)
		{
			  var frm = document.getElementById(formName);
					for ( i = 0; i < frm.elements.length; i++ )
					{
					  if ( frm.elements[i].type != 'hidden' || frm.elements[i].forceText )
							{
								 if ( !frm.elements[i].getAttribute("vs") ) 
								   frm.elements[i].value='';
									else
									{
									  frm.elements[i].value='Select';
											frm.elements[frm.elements[i].name.replace(/_Ignore/g,"")].value='select';
									}
							} 
							else if ( frm.elements[i].type == 'hidden' && frm.elements[i].name.indexOf("_Ignore") > -1 )
							{
								  var nme = frm.elements[i].name.replace(/_Ignore/g,"");
										if ( document.all[nme+"_Display"] )
										{
											 document.all[nme+"_Display"].innerHTML='dd-mm-yyyy';
												frm.elements[nme].value='';												
												frm.elements[i].value='';
										}
							}
					}
		}
		
		
		function copyForm(toFormName, fromFormName)
		{
			  document.getElementById(toFormName).elements['notes'].value=document.getElementById(fromFormName).elements['notes'].value;
		}
		
		function notesReply(data)
		{
		  try
                  {
		    closeTPane("Know_Div");
                  }
                  catch (e) {}
			 var o = document.getElementById("Mat_Pain_Div");
    genericTPaneDisplay( data, o, o.offsetWidth, 0, document.body, null );
				if ( document.all.Mat_Pain_Form.elements['notes'] ) 
				  document.all.Notes_Form.elements['notes'].value=document.all.Mat_Pain_Form.elements['notes'].value;				
		}

function knowReply(data)
		{
                  try
                  {
                    closeTPane("Notes_Div");
                  }
                  catch (e) {}
			 var o = document.getElementById("Mat_Pain_Div");
    genericTPaneDisplay( data, o, o.offsetWidth, 0, document.body, null );
		}
		
		
		function timerRun( sRunFunction, t )
		{
if ( !t ) t = 100;
			  try
					{
						 eval(sRunFunction);
					} catch(e)
					{
						  setTimeout( "timerRun(\""+sRunFunction+"\")", t);
					}
		}

		
