menu_used = 0;
sTableTitle = "";
ll=1;
bCommonIncluded=true;

var Fields=new Array();
var AutoReloadSpans=new Array();
var Timers=new Array();
var AutoReloadGraphics=new Array();
var JSChecks=new Array();
var ScaledFields=new Array();
var Fields2Enable4Post=new Array();

var oDragingWindow=0;
var diMouseX__=0;
var diMouseY__=0;
var diDragOffsetX__=0;
var diDragOffsetY__=0;
var diDebugLogOffset__=800;

var bNetscape=false;
var biPhone=false;
var bSafari=false;
var bIE=false;
var bIE6=false;
var bIE7=false;

var sNewURL="";
var bActivateAutoReloads__=false;

var OnMouseMoveHook=0;
var OnMouseUpHook=0;
var OnMouseDownHook=0;
var OnKeyDownHook=0;
var OnKeyUpHook=0;

window.setInterval("Timer_1000()", 1000);
window.setInterval("Timer_100()" , 100);

//*****************************************************************************************
function Log(sText)
	{
	return;
	
	objDiv=document.createElement("div");
	objDiv.innerHTML='<font size=1 nowrap>'+sText+'</font>';
	objDiv.style.position='absolute';
	objDiv.style.left='0';
	objDiv.style.height=10;
	objDiv.style.overflow='hidden';
	objDiv.style.top=diDebugLogOffset__;
	objDiv.style.zIndex=501;
	diDebugLogOffset__+=10;
	
	var body = document.getElementsByTagName ('BODY')[0];
	body.appendChild(objDiv);
	}
	
//*****************************************************************************************
function CheckBrowserType()
	{
	if(navigator.appName=="Netscape")
		{
		bNetscape=true;
		
		if(navigator.appVersion.indexOf("iPhone", 0)>-1)
			biPhone=true;
			
		if(navigator.appVersion.indexOf("Safari", 0)>-1)
			bSafari=true;
		}
		
	if(navigator.appName=="Microsoft Internet Explorer")
		{
		bIE=true;

		var MSIEpos=navigator.appVersion.indexOf("MSIE ", 0);
		if(MSIEpos>-1)
			{
			var Version=navigator.appVersion.substr(MSIEpos+5, navigator.appVersion.indexOf(";", MSIEpos)-MSIEpos-5);

			if(Version=="5.5")
				bIE6=true;
			
			if(Version=="6.0")
				bIE6=true;
				
			if(Version=="7.0")
				bIE7=true;
			}
		}
	}
	
//*****************************************************************************************
function PageInitialize()
	{
	Log('************************************************************************* DEBUG LOG ENABLED *************************************************************************');
	CheckBrowserType();
   }

//*****************************************************************************************
function body_OnMouseMove(e)
	{
	if(!e)
		e=window.event;

	diMouseX__=e.clientX;
	diMouseY__=e.clientY;

	if(!oDragingWindow)
		{
		if(OnMouseMoveHook)
			return(OnMouseMoveHook(e));
		
		return;
		}

	posX=e.clientX+document.body.scrollLeft-diDragOffsetX__;
	posY=e.clientY+document.body.scrollTop-diDragOffsetY__;

	posX-=getLeft(oDragingWindow.offsetParent);
	posY-=getTop(oDragingWindow.offsetParent);

	setPos(oDragingWindow, posX, posY);
	
	if(OnMouseMoveHook)
		return(OnMouseMoveHook(e));
		
	return false;		// don`t let IE interpret mousemove it would make a can`t drag/drop symbol!
	}
	
//*****************************************************************************************
function body_OnMouseUp(e)
	{
	if(!e)
		e=window.event;

	oDragingWindow=0;
	
	if(OnMouseUpHook)
		return(OnMouseUpHook(e));
	}
	
//*****************************************************************************************
function body_OnMouseDown(e)
	{
	if(!e)
		e=window.event;

	if(OnMouseDownHook)
		return(OnMouseDownHook(e));
	}
	
//*****************************************************************************************
function frame_OnMouseDown()
	{
	closeWindow('idColorPicker');
	}
	
//*****************************************************************************************
function body_OnKeyDown(e)
	{
	if(!e)
		e=window.event;

	var keynum;

	if(bIE)	keynum=e.keyCode;
	else     keynum=e.which;
	
	Log('body_OnKeyDown '+keynum);
	// 17..Ctrl	 (left & right)
	// 16..Shift (left & right)
	
	if(OnKeyDownHook)
		return(OnKeyDownHook(keynum));
	}
	
//*****************************************************************************************
function body_OnKeyUp(e)
	{
	if(!e)
		e=window.event;

	var keynum;

	if(bIE)	keynum=e.keyCode;
	else     keynum=e.which;
	
	Log('body_OnKeyUp '+keynum);
	
	if(OnKeyUpHook)
		return(OnKeyUpHook(keynum));
	}
	
//*****************************************************************************************
function body_OnLoad()
	{
	Log('body_OnLoad()');
	
	SetFocus2FirstField();
	bActivateAutoReloads__=true;
	
	document.body.onmousemove=body_OnMouseMove;
	document.body.onmouseup=body_OnMouseUp;
	document.body.onmousedown=body_OnMouseDown;
	}

//*****************************************************************************************
function DragWindow(oWindow)
	{
	diDragOffsetX__=diMouseX__-getLeft(oWindow)+document.body.scrollLeft;
	diDragOffsetY__=diMouseY__-getTop(oWindow)+document.body.scrollTop;
	
	oDragingWindow=oWindow;
	}

//*****************************************************************************************
// getPageScroll()
// Returns array with x,y page scroll values.
function getPageScroll()
	{
	var yScroll;

	if (self.pageYOffset) 
		{
		yScroll = self.pageYOffset;
		} 
	else if (document.documentElement && document.documentElement.scrollTop)
		{	 // Explorer 6 Strict
		yScroll = document.documentElement.scrollTop;
		} 
	else if (document.body) 
		{// all other Explorers
		yScroll = document.body.scrollTop;
		}

	arrayPageScroll = new Array('',yScroll)
	return arrayPageScroll;
	}

//*****************************************************************************************
// getPageSize()
// Returns array with page width, height and window width, height
function getPageSize()
	{

	var xScroll, yScroll;

	if (window.innerHeight && window.scrollMaxY) 
		{
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
		} 
	else if (document.body.scrollHeight > document.body.offsetHeight)
		{ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
		} 
	else 
		{ // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
		}

	var windowWidth, windowHeight;
	
	if (self.innerHeight) 
		{	// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
		} 
	else if (document.documentElement && document.documentElement.clientHeight) 
		{ // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
		} 
	else if (document.body) 
		{ // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
		}

	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight)
		{
		pageHeight = windowHeight;
		} 
	else 
		{
		pageHeight = yScroll;
		}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth)
		{
		pageWidth = windowWidth;
		} 
	else 
		{
		pageWidth = xScroll;
		}

	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight)
	return arrayPageSize;
	}

//*****************************************************************************************
function getNodeDepth(objElement)
	{
	var diDepth=0;
	
	while(objElement.parentNode)
		{
		diDepth++;
		objElement=objElement.parentNode;
		}
		
	return(diDepth);
	}
	
//*****************************************************************************************
function getStyle(el, styleProp)
	{
	if (el.currentStyle)
		var y = el.currentStyle[styleProp];
	else if (window.getComputedStyle)
		var y = document.defaultView.getComputedStyle(el,null).getPropertyValue(styleProp);
		
	return y;
	}

//*****************************************************************************************
function roundTo(fFloat, diDecPl)
	{
	var sValue=fFloat.toFixed(diDecPl);
	var sParts=sValue.split('.');
	
	// remove decimal places which are 0 until one is left
	while(sParts[1].length>1 && sParts[1][sParts[1].length-1]=='0')
		sParts[1]=sParts[1].substr(0, sParts[1].length-1);
		
	return(sParts[0]+"."+sParts[1]);
	}
	
//*****************************************************************************************
function toHex(iValue, iDigits)
	{
	iValue=parseInt(iValue.toFixed(0));
	
	var sResult=iValue.toString(16);
	
	while(sResult.length < iDigits)
		sResult='0'+sResult;

	return(sResult);	
	}
	
//*****************************************************************************************
function parseFloatLocal(sText)
	{
	var sEN='';
	
	for(var i=0; i<sText.length; i++)
		{
		if(sText.charAt(i)==cDecimalSeparator)
			{
			sEN+='.';
			continue;
			}
			
		if(sText.charAt(i)==cThousandSeparator)
			continue;
			
		sEN+=sText.charAt(i);
		}
	
	return(parseFloat(sEN));
	}
	
//*****************************************************************************************
function setHTML(idSpan, sText)
	{
	var objSpan=document.getElementById(idSpan);
	
	if(!objSpan)
		return;
		
	objSpan.innerHTML=sText;
	RefreshRelativeTags();
	}
	
//*****************************************************************************************
function removeThousandSeparaterLocal(sText)
	{
	var sEN='';
	
	for(var i=0; i<sText.length; i++)
		{
		if(sText.charAt(i)==cDecimalSeparator)
			{
			sEN+='.';
			continue;
			}
			
		if(sText.charAt(i)==cThousandSeparator)
			continue;
			
		if(sText.charAt(i)==' ')
			continue;
			
		sEN+=sText.charAt(i);
		}
	
	return(sEN);
	}
	
//*****************************************************************************************
function StringLeadingZeros(iValue, iDecPl)
	{
	var sText=String(iValue);
	
	while(sText.length < iDecPl)
		sText='0'+sText;
		
	return(sText);
	}
	
//*****************************************************************************************
function RemoveLeadingZeros(sValue)
	{
	var sText=String(sValue);
	var i;
	
	for(i=0; i<sText.length-1; i++)
		{
		if(sText.charAt(i)!='0')
			break;
		}

	return(sText.substr(i));
	}
	
//*****************************************************************************************
function StringLocal(fValue, bInsertThounsandSeparator, bForceDecPoint)
	{
	var sLocal='';
	var sText=String(fValue);
	var diDecimalPos=-1;

	if(bInsertThounsandSeparator || bForceDecPoint)
		{
		for(var i=0; i<sText.length; i++)
			{
			if(sText.charAt(i)=='.')
				{
				diDecimalPos=i;
				break;
				}
			}
	
		if(bForceDecPoint && diDecimalPos==-1)
			{
			diDecimalPos=sText.length;
			sText+='.0';
			}
			
		if(diDecimalPos==-1)
			diDecimalPos=sText.length;
		}
			
	for(var i=sText.length-1; i>=0; i--)
		{
		if(sText.charAt(i)=='.')
			{
			sLocal=cDecimalSeparator+sLocal;
			continue;
			}
			
		if(sText.charAt(i)==',')
			{
			bInsertThounsandSeparator=false;
			sLocal=cThousandSeparator+sLocal;
			continue;
			}
			
		if(bInsertThounsandSeparator && diDecimalPos>-1 && i<diDecimalPos-1 && (diDecimalPos-i-1) % 3==0)
			{
			sLocal=cThousandSeparator+sLocal;
			}
			
		sLocal=sText.charAt(i)+sLocal;
		}
		
	return(sLocal);
	}

	
//*****************************************************************************************
function gotoUrl(url)
	{
	sNewURL=url;	// queue new url for next timer event, IE does`nt execute direct changes
	}
	
//*****************************************************************************************
function ConfirmDelete(url, sMessage, bEnterCode)
	{
   var btnOptions={};
   
   if(bEnterCode)
   	btnOptions.enableOnCode=true;
   
	var btnCancel = new MsgBoxButton('cancel', function(){}, {} );
	var btnDelete = new MsgBoxButton('delete', function(){gotoUrl(url);}, btnOptions );
  
   var options={defaultButton:btnCancel, icon:'msgbox_x.gif'};
   
   if(bEnterCode)
   	options.enterCode=true;
   	
   var msg='Delete entry?';
   
   if(sMessage)
		msg=sMessage;
   
	var msgBox = new MsgBox(msg, [btnCancel, btnDelete], options);

	msgBox.display();
	}

//*****************************************************************************************
function ConfirmDeleteAll(url)
	{
	var btnCancel = new MsgBoxButton('cancel', function(){}, {} );
	var btnDelete = new MsgBoxButton('delete', function(){gotoUrl(url);}, {} );
  
	var msgBox = new MsgBox('Delete all entries?', [btnCancel, btnDelete], {defaultButton:btnCancel, icon:'msgbox_warning.gif'});

	msgBox.display();
	}

//*****************************************************************************************
function myAlert(sText)
	{
	var btnOk = new MsgBoxButton('Ok', function(){}, {} );
  
	var msgBox = new MsgBox(sText, [btnOk], {defaultButton:btnOk, icon:'msgbox_warning.gif'});

	msgBox.display();
	}
	
//*****************************************************************************************
function PopupHelp(url)
  {
  ajaxLoadWindow('help', 'Help', url);
  return false;
  }

//*****************************************************************************************
function WriteMenuBegin()
	{
	menu_used = 1;
	document.write('<table cellspacing=0 cellpadding=0 width=100%><tr><td class=menu_nontab>');
	document.write('<table cellspacing=0 cellpadding=0 width=755><tr><td width=100% class=menu_nontab>');
	document.write('<table cellpadding="1" cellspacing="0">');
	document.write('  <tr>');
	}

//*****************************************************************************************
function WriteMenuSpacer()
	{
	document.write('</tr></table></td><td align=right>');
	document.write('<table cellpadding="1" cellspacing="0">');
	document.write('  <tr>');
	}

//*****************************************************************************************
function WriteMenuEnd()
	{
	if (menu_used != 0)
		{
		document.write('</tr></table></td></tr></table></td></tr></table>');
      document.write('<table cellspacing=0 cellpadding=0 width=100%><tr><td class=lines height="3"></td></tr></table>');
		}
	}

//*****************************************************************************************
function WriteMenuEnd2()
	{
	if (menu_used != 0)
		{
		document.write('</tr></table></td></tr>');
      document.write('</table>');
		}
	}
  
//*****************************************************************************************
function WriteTab( sDocName, sTitle, sLink)
	{
	var bActive=false;
	
	if(sDocName=="")
		bActive=true;
	else
		{
		if(location.pathname==sDocName || (sDocName=="/start.htm" && location.pathname=="/login.htm"))
			bActive=true;
		}
	
	if(bActive)
		{
		if(ll!=1) document.write('<td class=menu_tab_line></td>'); ll=0;
		document.write('<td class=menu_active nowrap>');
		document.write('<font class=menu_active>&nbsp;&nbsp;<b>' + sTitle + '</a></b>&nbsp;&nbsp;');
		document.write('</font></td>');
		}
	else
		{
		if(ll!=1) document.write('<td class=menu_tab_line></td>'); ll=0;
		document.write('<td class=menu ><font class=menu>');
      document.write('&nbsp;&nbsp;<a class=menu href="' + sLink + '"><b>' + sTitle + '</b></a>&nbsp;&nbsp;');
      document.write('</font></td>');
		}
	}

//*****************************************************************************************
function WriteNonTab( sTitle, sLink)
  {
    document.write('<td class=menu_nontab align="right"><font class=menu_nontab>');
    document.write('&nbsp;<a class=menu_nontab href="' + sLink + '">' + sTitle + '</a>&nbsp;');
    document.write('</font></td>');
  }

//*****************************************************************************************
function WriteNonTab8( sTitle, sLink)
  {
    document.write('<td class=menu_8 align="right"><font class=menu_8>');
    document.write('&nbsp;<a class=menu_8 href="' + sLink + '">' + sTitle + '</a>&nbsp;');
    document.write('</font></td>');
  }
  
//*****************************************************************************************
function WriteNonTabHelp( sDocName, sTitle, sLink)
  {

    if ((sDocName != "") && (location.pathname != sDocName)){}
    else
    {
      document.write('<td align="right" class=menu_nontab><font class=menu_nontab>');
      document.write('  &nbsp;<a class=menu_nontab href="' + sLink + '" onclick="return PopupHelp(this.href);">' + sTitle + '</a>&nbsp;');
      document.write('</font></td>');
    }
  }

//*****************************************************************************************
function WriteTableHeader( sTitle, sAddLink, idSpan)
  {
  var sText="";
  
  sText='<table cellspacing=0 cellpadding=0 width=100%><tr class=tableheader>';
  sText+='  <td align="center" valign="middle" width=53>';
  if( sAddLink && (sAddLink != "") && bCanSave)
    sText+='<a href="'+sAddLink+'"><IMG border="0" src="plus.gif" title="add"></a>';
  else
    sText+='&nbsp;';

  sText+='  </td>';
  sText+='  <td colspan=20 align="left">';
  sText+='    <font class=tableheader><b>' + sTitle + '</b></font>';
  sText+='  </td>';
  sText+='</tr></table>';
  
  if(idSpan)
  	{
	var objSpan=document.getElementById(idSpan);
		
	if(objSpan)
		{
		objSpan.innerHTML=sText;
		RefreshRelativeTags();
		}
  	}
  else
  	document.write(sText);
  }

//*****************************************************************************************
function WriteTableHeaderRawLink( sTitle, sAddLink, idSpan)
  {
  var sText="";
  
  sText='<table cellspacing=0 cellpadding=0 width=100%><tr class=tableheader>';
  sText+='  <td align="center" valign="middle" width=53>';
  if( sAddLink && (sAddLink != ""))
    sText+=sAddLink;
  sText+='  </td>';
  sText+='  <td colspan=20 align="left">';
  sText+='    <font class=tableheader><b>' + sTitle + '</b></font>';
  sText+='  </td>';
  sText+='</tr></table>';
  
  if(idSpan)
  	{
	var objSpan=document.getElementById(idSpan);
		
	if(objSpan)
		{
		objSpan.innerHTML=sText;
		RefreshRelativeTags();
		}
  	}
  else
  	document.write(sText);
  }

//*****************************************************************************************
function decodeAmps(sText)
	{
	var sReturn="";
	
	for(i=0; i<sText.length; i++)
		{
		var c=sText.charAt(i);
		
		if(i<sText.length-3 && sText.charAt(i)=='&' && sText.charAt(i+1)=='#' && sText.charAt(i+2)=='x')
			{
			sReturn+=String.fromCharCode( parseInt( "0x"+sText.substr(i+3, 2) ) );
			i+=5;
			}
		else
			sReturn+=sText.charAt(i);
		}
		
	return(sReturn);
	}
	
//*****************************************************************************************
function FillFields(oComboBox, fields, selected)
	{
	var value = oComboBox.options[oComboBox.options.selectedIndex].value;
	var id=(value.split(";"))[1];
	var objFields=document.getElementById(fields);

	objFields.options.length=0;

	for(var i=0; i<Fields.length; i++)
		{
		if( (Fields[i])[0]==id || (id!='' && (Fields[i])[0]=='*'))
			{
			objFields.options.length++;
			objFields.options[objFields.options.length-1].text=decodeAmps(Fields[i][1]);
			
			var sValue=Fields[i][2]+';'+Fields[i][3];
			
			objFields.options[objFields.options.length-1].value=sValue;

			if(sValue==selected || Fields[i][2]==selected)	//  for downwards compatibility: Fields[i][2]==selected
				objFields.options.selectedIndex=objFields.options.length-1;
			}
		}
		
	if(objFields.onchange) 
		objFields.onchange();
	}

//*****************************************************************************************
function ComboBoxEventSET(sEvent)	// <input> SET {field}={value}
	{
	var Parts=sEvent.split('=');

	var objField=document.getElementById(Parts[0]);

	if(!objField)
		return;

	objField.value=Parts[1];
	}

//*****************************************************************************************
var AComboBoxEvents=new Array();
var AInputEvents=new Array();

function InitComboBoxEvents()
	{
	Log('InitComboBoxEvents()...ComboBoxEvents');
	
	for(var i=0; i<AComboBoxEvents.length; i++)
		{
		ComboBoxEvents(document.getElementById((AComboBoxEvents[i])[0]), (AComboBoxEvents[i])[1], true);
		}
		
	Log('InitComboBoxEvents()...InputEvents');
	
	for(var i=0; i<AInputEvents.length; i++)
		{
		InputEvents(document.getElementById((AInputEvents[i])[0]), (AInputEvents[i])[1], true);
		}
		
	Log('InitComboBoxEvents()...OK');
	}

//*****************************************************************************************
function DoComboBoxEvents4(sId, objParentSelects)
	{
	for(var i=0; i<AComboBoxEvents.length; i++)
		{
		if((AComboBoxEvents[i])[0] != sId)
			continue;
			
		ComboBoxEvents(document.getElementById((AComboBoxEvents[i])[0]), (AComboBoxEvents[i])[1], true, objParentSelects);
		}
	}

//*****************************************************************************************
function ComboBoxEventSEL(sEvent, objParentSelects)	// <select> SEL {field}={value}
	{
	var FieldValue=sEvent.split('=');

	var objField=document.getElementById(FieldValue[0]);

	if(!objField)
		return;

	// skip event if it would produce a recursion
	if(objParentSelects)
		{
		for(var i=0; i<objParentSelects.length; i++)
			{
			if(objField==objParentSelects[i])
				return;
			}
		}

	for(o=0; o<objField.options.length; o++)
		{
		if(objField.options[o].value==FieldValue[1])
			{
			objField.options[o].selected=true;
			
			if(!objField.disabled)	// for bug in Chrome
				{
				objField.disabled=true;	
				objField.disabled=false;	
				}
				
			if(!objParentSelects)
				objParentSelects=new Array();
				
			objParentSelects.push(objField);
				
			DoComboBoxEvents4(FieldValue[0], objParentSelects);
			return;
			}
		}
	}

//*****************************************************************************************
function ComboBoxEventADD(sEvent)	// <select> ADD {field}.{value}={text}
	{
	var Parts=sEvent.split('=');
	var FieldValue=Parts[0].split('.');

	var objField=document.getElementById(FieldValue[0]);

	if(!objField)
		return;

	for(o=0; o<objField.options.length; o++)
		{
		if(objField.options[o].value==FieldValue[1])
			return;
		}

	objField.options.length++;
	objField.options[objField.options.length-1].text=Parts[1];
	objField.options[objField.options.length-1].value=FieldValue[1];
	}

//*****************************************************************************************
function ComboBoxEventENO(sEvent)	// <select> ENO {field}.{value}=0/1	Enable Option
	{
	var Parts=sEvent.split('=');
	var FieldValue=Parts[0].split('.');

	var objField=document.getElementById(FieldValue[0]);
	
	if(!objField)
		return;

	for(o=0; o<objField.options.length; o++)
		{
		if(objField.options[o].value==FieldValue[1])
			{
			objField.options[o].disabled=!parseInt(Parts[1]);
			
			// select first enabled if current was disabled
			if(objField.options[o].disabled && objField.options[o].selected)
				{
				for(o=0; o<objField.options.length; o++)
					{
					if(!objField.options[o].disabled)
						{
						objField.options[o].selected=true;
						break;
						}
					}
				}

			break;
			}
		}
	}

//*****************************************************************************************
function ComboBoxEventDEL(sEvent)	// <select> DEL {filed}.{value}
	{
	var FieldValue=sEvent.split('.');

	var objField=document.getElementById(FieldValue[0]);

	if(!objField)
		return;

	for(o=0; o<objField.options.length; o++)
		{
		if(objField.options[o].value==FieldValue[1])
			{
			bWasSelected=objField.options[o].selected;

			objField.options[o]=null;

			if(bWasSelected && objField.options.length)
				objField.options[0].selected=true;

			break;
			}
		}
	}


//*****************************************************************************************
function ComboBoxEventCHK(sEvent)	// <input type=checkbox> CHK {field}=0/1
	{
	var FieldValue=sEvent.split('=');

	var objField=document.getElementById(FieldValue[0]);

	if(!objField)
		return;

	if(FieldValue[1]==1)
		{
		objField.checked=1;
		}
	else
		{
		objField.checked=0;
		}
	}

//*****************************************************************************************
function ComboBoxEventENA(sEvent)	// ENA {field}=0/1
	{
	var FieldValue=sEvent.split('=');

	var objField=document.getElementById(FieldValue[0]);

	if(!objField)
		return;

	if(FieldValue[1]==1)
		{
		objField.disabled=false;
		objField.diDisabledDepth_=0;
		objField.className='';
		}
	else
		{
		objField.className='field_readonly';
		objField.disabled=true;
		objField.diDisabledDepth_=999999;
		}
	}

//*****************************************************************************************
function ComboBoxEventENP(sEvent)	// ENP {field}=0/1	enable/disable but post it
	{
	var FieldValue=sEvent.split('=');

	var objField=document.getElementById(FieldValue[0]);

	if(!objField)
		return;

	if(FieldValue[1]==1)
		{
		objField.disabled=false;
		objField.diDisabledDepth_=0;
		}
	else
		{
		objField.disabled=true;
		objField.diDisabledDepth_=999999;
		}
		
	// check if field is already in the list for fields to enable at submit hook
	for(var i=0; i<Fields2Enable4Post.length; i++)
		{
		if(Fields2Enable4Post[i]==objField)
			return;
		}
			
	Fields2Enable4Post.push(objField);
	}

//*****************************************************************************************
function EnableDisabledFields4Post()
	{
	for(var i=0; i<Fields2Enable4Post.length; i++)
		{
		Fields2Enable4Post[i].disabled=false;
		}
	}

//*****************************************************************************************
function SetBranchDisabledDo(objNode, diNodeDepth, bDisabled)
	{
	if(!objNode.hasChildNodes())
		return;
	
	for(var c=0; c<objNode.childNodes.length; c++)
		{
		if(objNode.childNodes[c].tagName=="INPUT" || objNode.childNodes[c].tagName=="SELECT")
			{
			// don`t enable childs which were disabled by an lower element
			if(!bDisabled && objNode.childNodes[c].diDisabledDepth_ && objNode.childNodes[c].diDisabledDepth_ > diNodeDepth)
				{
				Log('SetBranchDisabled ignored '+objNode.childNodes[c].tagName+' '+objNode.childNodes[c].id+' bDisabled='+bDisabled+' diDisabledDepth='+objNode.childNodes[c].diDisabledDepth_+' diNodeDepth='+diNodeDepth);
				continue;
				}
			
			objNode.childNodes[c].disabled=bDisabled;
			
			// remember which element had disabled this item
			if(bDisabled && (!objNode.childNodes[c].diDisabledDepth_ || diNodeDepth > objNode.childNodes[c].diDisabledDepth_))
				objNode.childNodes[c].diDisabledDepth_ = diNodeDepth;
				
			if(!bDisabled)
				objNode.childNodes[c].diDisabledDepth_=0;
			
//			Log('SetBranchDisabled '+objNode.childNodes[c].tagName+' '+objNode.childNodes[c].id+' bDisabled='+bDisabled+' diDisabledDepth='+objNode.childNodes[c].diDisabledDepth_+' diNodeDepth='+diNodeDepth);
			}
			
		SetBranchDisabledDo(objNode.childNodes[c], diNodeDepth, bDisabled);
		}
	}
	
//*****************************************************************************************
function SetBranchDisabled(objNode, bDisabled)
	{
	if(!objNode.hasChildNodes())
		return;
	
//	Log('SetBranchDisabled depth= '+getNodeDepth(objNode));
	
	SetBranchDisabledDo(objNode, getNodeDepth(objNode), bDisabled);
	}
	
//* (obsolet use ComboBoxEventDIS instead!) ***********************************************
function ComboBoxEventDIV(sEvent)	// DIV {field}=0/1 (obsolet use ComboBoxEventDIS instead!)
	{
	var FieldValue=sEvent.split('=');

	var objDiv=document.getElementById(FieldValue[0]);

	if(!objDiv)
		{
		Log('ComboBoxEventDIV '+sEvent+' OBJ NOT FOUND!');
		return;
		}

	Log('ComboBoxEventDIV '+sEvent+" width was="+objDiv.style.width);

	if(FieldValue[1]==0)
		{
		objDiv.style.width='0px';
		SetBranchDisabled(objDiv, true);	// disable all input fields to prevent sending it back to the server
		}
	else
		{
		objDiv.style.width='auto';
		SetBranchDisabled(objDiv, false);
		}
	}

//*****************************************************************************************
function ComboBoxEventDIS(sEvent)	// DIS {id}=/none/block/inline
	{
	var FieldValue=sEvent.split('=');

	var objDiv=document.getElementById(FieldValue[0]);

	if(!objDiv)
		return;

	Log('ComboBoxEventDIS '+sEvent+" display was="+objDiv.style.display);

	objDiv.style.display=FieldValue[1];
	
	if(FieldValue[1]=='none')	SetBranchDisabled(objDiv, true);	// disable all input fields to prevent sending it back to the server
	else                       SetBranchDisabled(objDiv, false);
	}

//*****************************************************************************************
function ComboBoxEventIMG(sEvent)	// IMG {id_image}=newimage.jpg
	{
	var FieldValue=sEvent.split('=');

	var objImg=document.getElementById(FieldValue[0]);

	if(!objImg)
		return;

	objImg.src=FieldValue[1];
	}

//*****************************************************************************************
function ComboBoxEventAJX(sEvent, value)	// AJX {id}={url}	starts an ajaxLoadSpan()
	{
	var idxEQ=sEvent.indexOf('=');
	var FieldName =sEvent.substr(0, idxEQ);
	var FieldValue=sEvent.substr(idxEQ+1, sEvent.length);

	ajaxLoadSpan(FieldName, FieldValue+"&autoreload=1&value="+value);
	}

//*****************************************************************************************
function ComboBoxEventCOP(sEvent, asText)	// COP {id}	copies display value of active option to innerHTML
	{
	setHTML(sEvent, asText);
	}
	
//*****************************************************************************************
function ComboBoxEventHTM(sEvent)			// HTM {id}={content}	copies content to innerHTML
	{
	var idxEQ=sEvent.indexOf('=');
	var FieldName =sEvent.substr(0, idxEQ);
	var FieldValue=sEvent.substr(idxEQ+1, sEvent.length);

	setHTML(FieldName, FieldValue);
	}
	
//*****************************************************************************************
function ComboBoxEventEVA(sEvent)			// EVA {JavaScript} execute given JavaScript code
	{
	eval(sEvent);
	}
	
//*****************************************************************************************
function ComboBoxEventCJS(sEvent, asText)	// CJS {var} copies display value of active option to JavaScript variable
	{
	eval(sEvent+"='"+asText+"'");
	}
	
//*****************************************************************************************
function ComboBoxEventSCL(sEvent)	// <input> SCL {field}=1.0|-2	sets new scale|offset for scaled field
	{
	var FieldValue=sEvent.split('=');
	var ScaleOffs=FieldValue[1].split('|');
	
	var fScale =parseFloat(ScaleOffs[0]);
	var fOffset=parseFloat(ScaleOffs[1]);
	
	for(var i=0; i<ScaledFields.length; i++)
		{
		if((ScaledFields[i])[0] != FieldValue[0])
			continue;
			
		CalcScaledFieldBack((ScaledFields[i])[0], (ScaledFields[i])[1], (ScaledFields[i])[2], (ScaledFields[i])[3], (ScaledFields[i])[4]);
		
		(ScaledFields[i])[3]=fScale;
		(ScaledFields[i])[4]=fOffset;
		
		CalcScaledField((ScaledFields[i])[0], (ScaledFields[i])[1], (ScaledFields[i])[2], (ScaledFields[i])[3], (ScaledFields[i])[4]);
		break;
		}
	}
	
//* (obsolet use ComboBoxEventDIS instead!) ***********************************************
function ComboBoxEventDIF(sEvent)	// DIF {field}=0/1	same as DIV but for vertically order field list (obsolet use ComboBoxEventDIS instead!)
	{
	var FieldValue=sEvent.split('=');

	var objDiv=document.getElementById(FieldValue[0]);

	if(!objDiv)
		return;

	if(FieldValue[1]==0)
		{
		objDiv.style.height='1px';			// 0px is not supported by IE
//		SetBranchDisabled(objDiv, true);	// disable all input fields to prevent sending it back to the server
		}
	else
		{
		objDiv.style.height='auto';
//		SetBranchDisabled(objDiv, false);
		}
	}

//*****************************************************************************************
function InputEvents(oInput, sEvents, bInit)
	{
	var value = oInput.value;
	var EntryList=sEvents.split('^');
	
	if(oInput.disabled)
		return;
		
	for(var ei=0; ei<EntryList.length; ei++)
		{
		// split events to execute separated by , except EVA event
		if(EntryList[ei].substr(0,3)=="EVA")
			{
			var EventList=new Array()
			EventList.push(EntryList[ei]);
			}
		else
			var EventList=EntryList[ei].split(",");
			
		for(var e=0; e<EventList.length; e++)
			{
			// skip events marked for onChange events only if InputEvents is called from InitComboBoxEvents()
			if( EventList[e].charAt(3)=="~" && bInit)
				continue;
			
			var sCommand=EventList[e].substr(0,3);
				
			// Replace ` placeholder to ;
			EventList[e]=EventList[e].replace(/`/g, ';');

			if(sCommand=="AJX")	ComboBoxEventAJX(EventList[e].substr(4), value);
			if(sCommand=="EVA")	ComboBoxEventEVA(EventList[e].substr(4));
			}
		}
	}

//*****************************************************************************************
function ComboBoxEvents(oComboBox, sEvents, bInit, objParentSelects)
	{
	var value = oComboBox.options[oComboBox.options.selectedIndex].value;
	var asText= oComboBox.options[oComboBox.options.selectedIndex].text;
	var EntryList=sEvents.split('^');

/*	if(oComboBox.disabled)	
		// have to be done for disabling fields depending on ComboBox selections
		// after disabling ComboBox itself by AdaptPage2InstrumentVersion() (MINIwv outputs)
		{
		Log('ComboBoxEvents IGNORED FIELD IS DISABLED '+oComboBox.id);
		return;
		}*/

	for(var ei=0; ei<EntryList.length; ei++)
		{
		var ValueList=EntryList[ei].split(";");

		for(var i=0; i<ValueList.length; i++)
			{
			var Parts=ValueList[i].split(":");

			if(Parts[0].charAt(0)=='[')	// resolve array index of value [n]:v where n=index of ; separated value, v=value
				{
				var VParts=Parts[0].split("]");
				
				sPValue=VParts[1];
				
				var VArray=value.split(";");
				value=VArray[ VParts[0].substr(1, VParts[0].length-1) ];
				}
			else
				sPValue=Parts[0];

//			Log(unescape(sPValue)+'='+value);

			if(unescape(sPValue)!=value && sPValue!='*')
				continue;

			// split events to execute separated by , except EVA event
			if(Parts[1].substr(0,3)=="EVA")
				{
				var EventList=new Array()
				EventList.push(Parts[1]);
				}
			else
				var EventList=Parts[1].split(",");

			for(var e=0; e<EventList.length; e++)
				{
				// skip events marked for onChange events only if ComboBoxEvents is called from InitComboBoxEvents()
				if( EventList[e].charAt(3)=="~" && bInit)
					continue;

				var sCommand=EventList[e].substr(0,3);
				
				// Replace ` placeholder to ;
				EventList[e]=EventList[e].replace(/`/g, ';');

				if(sCommand=="SET")	ComboBoxEventSET(EventList[e].substr(4));	// <input>  SET {field}={value}
				if(sCommand=="SEL")	ComboBoxEventSEL(EventList[e].substr(4), objParentSelects); // <select> SEL {field}={value}
				if(sCommand=="ADD")	ComboBoxEventADD(EventList[e].substr(4)); // <select> ADD {field}.{value}={text}
				if(sCommand=="DEL")	ComboBoxEventDEL(EventList[e].substr(4)); // <select> DEL {field}.{value}
				if(sCommand=="ENA")	ComboBoxEventENA(EventList[e].substr(4));	// ENA {field}=0/1
				if(sCommand=="ENP")	ComboBoxEventENP(EventList[e].substr(4)); // ENP {field}=0/1	enable/disable but post it (enable on submit)
				if(sCommand=="DIV")	ComboBoxEventDIV(EventList[e].substr(4)); // obsolet
				if(sCommand=="DIF")	ComboBoxEventDIF(EventList[e].substr(4)); // obsolet
				if(sCommand=="DIS")	ComboBoxEventDIS(EventList[e].substr(4)); // DIS {id}=block/none/inline
				if(sCommand=="AJX")	ComboBoxEventAJX(EventList[e].substr(4), value); // AJX {id}={url}	starts an ajaxLoadSpan()
				if(sCommand=="IMG")	ComboBoxEventIMG(EventList[e].substr(4)); // IMG {id_image}=newimage.jpg
				if(sCommand=="COP")	ComboBoxEventCOP(EventList[e].substr(4), asText); // COP {id}	copies display value of active option to innerHTML
				if(sCommand=="CJS")	ComboBoxEventCJS(EventList[e].substr(4), asText); // CJS {var} copies display value of active option to JavaScript variable
				if(sCommand=="HTM")	ComboBoxEventHTM(EventList[e].substr(4)); // HTM {id}={content}	copies content to innerHTML
				if(sCommand=="EVA")	ComboBoxEventEVA(EventList[e].substr(4)); // EVA {JavaScript} execute given JavaScript code
				if(sCommand=="ENO")	ComboBoxEventENO(EventList[e].substr(4)); // <select> ENO {field}.{value}=0/1	Enable Option
				if(sCommand=="SCL")	ComboBoxEventSCL(EventList[e].substr(4)); // <input> SCL {field}=1.0|-2	sets new scale|offset for scaled field
				if(sCommand=="CHK")	ComboBoxEventCHK(EventList[e].substr(4)); // <input type="checkbox"> CHK {field}=1/0
				}

			break;
			}
		}
	}

//*****************************************************************************************
function HTMLEncode(sText)
	{
	var sResult='';
	
	for(var i=0; i<sText.length; i++)
		{
		if(sText.charAt(i)==' ')
			{
			sResult+='&nbsp;';
			continue;
			}
			
		if(sText.charAt(i)=='<')
			{
			sResult+='&lt;';
			continue;
			}
			
		if(sText.charAt(i)=='>')
			{
			sResult+='&gt;';
			continue;
			}
			
		sResult+=sText.charAt(i);
		}
		
	return(sResult);
	}

//*****************************************************************************************
function SetFocus2FirstField()
	{
	for(var f=0; f<document.forms.length; f++)
		{
		if(document.forms[f].name)
			{
			if(document.forms[f].name!="[object]" || String(document.forms[f].name).charAt(0)=="_")
				continue;
			}

		for(var i=0; f<document.forms[f].elements.length; i++)
			{
			if(document.forms[f].elements[i].disabled)
				continue;

			try
				{			
				document.forms[f].elements[i].focus();
				}
			catch(ex)
				{
				}
			
			break;
			}
		}
	}
	
//*****************************************************************************************
function CheckInputMin(objField, sTitle, Params)
	{
	var fValue, fMin, i;
	
	// check if the field is a scaled one
	for(i=0; i<ScaledFields.length; i++)
		{
		if((ScaledFields[i])[0] == objField.id)
			break;
		}
	
	if(i<ScaledFields.length)
		{
		objField=document.getElementById(objField.id+"_scaled");
		
		fValue=parseFloatLocal(objField.value);
		fMin  =parseFloat(Params[1]) * (ScaledFields[i])[3] + (ScaledFields[i])[4];
		}
	else
		{
		fValue=parseFloatLocal(objField.value);
		fMin  =parseFloat(Params[1]);
		}
	
	if(fValue < fMin)
		{
		myAlert(sTitle+':<br>Entered value is too low!<br>Minimum is '+StringLocal(fMin, true));
		return(false);
		}

	return(true);	
	}
	
//*****************************************************************************************
function CheckInputEmpty(objField, sTitle, Params)
	{
	var i;
	
	// check if the field is a scaled one
	for(i=0; i<ScaledFields.length; i++)
		{
		if((ScaledFields[i])[0] == objField.id)
			break;
		}
	
	if(i<ScaledFields.length)
		objField=document.getElementById(objField.id+"_scaled");

	if(objField.value=="")
		{
		myAlert(sTitle+':<br>Field must not be empty!');
		return(false);
		}

	return(true);	
	}
	
//*****************************************************************************************
function CheckInputMax(objField, sTitle, Params)
	{
	var fValue, fMax, i;
	
	// check if the field is a scaled one
	for(i=0; i<ScaledFields.length; i++)
		{
		if((ScaledFields[i])[0] == objField.id)
			break;
		}
	
	if(i<ScaledFields.length)
		{
		objField=document.getElementById(objField.id+"_scaled");
		
		fValue=parseFloatLocal(objField.value);
		fMax  =parseFloat(Params[1]) * (ScaledFields[i])[3] + (ScaledFields[i])[4];
		}
	else
		{
		fValue=parseFloatLocal(objField.value);
		fMax  =parseFloat(Params[1]);
		}
	
	if(fValue > fMax)
		{
		myAlert(sTitle+':<br>Entered value is too high!<br>Maximum is '+StringLocal(fMax, true));
		return(false);
		}

	return(true);	
	}
	
//*****************************************************************************************
function CheckInputMinLen(objField, sTitle, Params)
	{
	var fMin  =parseFloat(Params[1]);

	if(objField.value.length < fMin)
		{
		myAlert(sTitle+':<br>Entered value is too short!<br>Minimum length is '+Params[1]);
		return(false);
		}

	return(true);	
	}
	
//*****************************************************************************************
function CheckInputMaxLen(objField, sTitle, Params)
	{
	var fMax  =parseFloat(Params[1]);

	if(objField.options)
		return(true);

	if(objField.value.length > fMax)
		{
		myAlert(sTitle+':<br>Entered value is too long!<br>Maximum length is '+Params[1]);
		return(false);
		}

	return(true);	
	}
	
//*****************************************************************************************
function CheckInputHex(objField, sTitle, Params)
	{
	var sValue="";
	
	for(var i=0; i<objField.value.length; i++)
		{
		var c=objField.value.charAt(i);
		
		if(c>='a' && c<='f')
			c=c.toUpperCase();
			
		sValue+=c;
		
		if((c<'0' || c>'9') && (c<'A' || c>'F'))
			{
			myAlert(sTitle+':<br>Use only numbers from 0-9 and letters from A-F!');
			return(false);
			}
		}
	
	objField.value=sValue;
	
	if(Params[1] && sValue.length!=Params[1])
		{
		myAlert(sTitle+':<br>Invalid length!<br>Length should be '+Params[1])
		return(false);
		}
		
	return(true);
	}
	
//*****************************************************************************************
// 120 -> 01:00
function ReformatTime(sValue, sFormat)
	{
	var aValue=sValue.split(':');
	var aFormat=sFormat.split(':');
	var iCarry=0;
	var sResult='';
	
	for(var i=aValue.length-1; i>=0; i--)
		{
		var iValue=parseInt(RemoveLeadingZeros(aValue[i]));
	
		iValue+=iCarry;
		
		if(i > 0+aValue.length-aFormat.length)
			{
			iCarry=Math.floor(iValue / 60);
			iValue-=iCarry*60;
			}
		else
			iCarry=0;
		
		if(sResult!='')
			sResult=':'+sResult;
			
		sResult=String(iValue)+sResult;
		}
		
	if(iCarry)
		{
		sResult=String(iCarry)+':'+sResult;
		aValue.push(0);
		}
		
	for(var i=aValue.length; i<aFormat.length; i++)
		sResult='0:'+sResult;
		
	return(sResult);
	}

//*****************************************************************************************
function CheckInputMinTim(objField, sTitle, Params)
	{
	var aValue=ReformatTime(objField.value, Params[1]).split(':');
	var aParam=Params[1].split(':');
	
	for(var i=0; i<aValue.length; i++)
		{
		var iValue=parseInt(aValue[i]);
		var iParam=parseInt(aParam[i]);

		if(iValue < iParam)
			{
			myAlert(sTitle+':<br>Entered value is too low!<br>Minimum is '+Params[1])
			return(false);
			}
			
		if(iValue > iParam)
			return(true);
		}
	
	return(true);
	}
	
//*****************************************************************************************
function CheckInputMaxTim(objField, sTitle, Params)
	{
	var aValue=ReformatTime(objField.value, Params[1]).split(':');
	var aParam=Params[1].split(':');
	
	for(var i=0; i<aValue.length; i++)
		{
		var iValue=parseInt(aValue[i]);
		var iParam=parseInt(aParam[i]);
		
		if(iValue > iParam)
			{
			myAlert(sTitle+':<br>Entered value is too high!<br>Maximum is '+Params[1])
			return(false);
			}
			
		if(iValue < iParam)
			return(true);
		}
	
	return(true);
	}
	
//*****************************************************************************************
function CheckJSChecks()
	{
	for(var i=0; i<JSChecks.length; i++)
		{
		var sId=JSChecks[i][0];
		var sTitle=JSChecks[i][1];
		var sCheck=JSChecks[i][2];
		
		var objField=document.getElementById(sId);
		
		if(!objField)
			{
			Log("CheckJSChecks: Can`t find field with id="+sId);
			return(true);
			}
			
		if(objField.disabled)
			continue;
			
		var Params=sCheck.split(';');
		
		if(Params[0]=='hex'		)	if(!CheckInputHex(objField, sTitle, Params)) return(false);
		if(Params[0]=='min'		)	if(!CheckInputMin(objField, sTitle, Params)) return(false);
		if(Params[0]=='max'		)	if(!CheckInputMax(objField, sTitle, Params)) return(false);
		if(Params[0]=='min_len' )	if(!CheckInputMinLen(objField, sTitle, Params)) return(false);
		if(Params[0]=='max_len' )	if(!CheckInputMaxLen(objField, sTitle, Params)) return(false);
		if(Params[0]=='min_tim' )	if(!CheckInputMinTim(objField, sTitle, Params)) return(false);
		if(Params[0]=='max_tim' )	if(!CheckInputMaxTim(objField, sTitle, Params)) return(false);
		if(Params[0]=='empty' )	   if(!CheckInputEmpty(objField, sTitle, Params)) return(false);
		}
		
	return(true);
	}
	
	
//*****************************************************************************************
function DisableSubmitButtonAndSubmit()
	{
	var objButton=document.getElementById("btn_submit");
	
	if(!objButton)
		return;

	objButton.disabled=true;
	
	// ..disabled=true prevents submission of form, so do it manually
	objButton.form.submit();
	}
	
//*****************************************************************************************
function DoThisOnSubmit()
	{
	rtoStore();						// Store RichEdit fields
	
	if(!CheckJSChecks())			// Validate field inputs 
		return(false);
	
	CalcAllScaleOfsFields();
	ConvertScaledFields();
	EnableDisabledFields4Post();
	
	DisableSubmitButtonAndSubmit();
	
	return(true);
	}
	
//*****************************************************************************************
var CalcScaleOfsFieldList=new Array();

function CalcMinMaxValues(idScale, idOfs, diRawMin, diRawMax, idMin, idMax, bFloat)
	{
	var objScale=document.getElementById(idScale);
	var objOfs  =document.getElementById(idOfs);
	var objMin  =document.getElementById(idMin);
	var objMax  =document.getElementById(idMax);

	if(objScale && objOfs)
		{
		var fScale  =parseFloatLocal(objScale.value);
		var fOfs    =parseFloatLocal(objOfs.value);

		if(isNaN(fScale) || isNaN(fOfs))
			{
			objMin.value='';
			objMax.value='';
			}
		else
			{
			if(bFloat)
				{
				if(bFloat<0)
					{
					objMin.value=StringLocal( parseFloat(roundTo(diRawMin * fScale + fOfs, -bFloat)), true, true);
					objMax.value=StringLocal( parseFloat(roundTo(diRawMax * fScale + fOfs, -bFloat)), true, true);
					}
				else
					{
					objMin.value=StringLocal( parseFloat(roundTo(diRawMin * fScale + fOfs, 6)), true, true);
					objMax.value=StringLocal( parseFloat(roundTo(diRawMax * fScale + fOfs, 6)), true, true);
					}
				}
			else
				{
				objMin.value=StringLocal( Math.round(diRawMin * fScale + fOfs), true);
				objMax.value=StringLocal( Math.round(diRawMax * fScale + fOfs), true);
				}
			}
		}

	// Store field parameters to calc scale offs on all fields if form is submitted with CalcAllScaleOfsFields()
 	CalcScaleOfsFieldList.push(new Array(idMin, idMax, diRawMin, diRawMax, idScale, idOfs));
	}


//*****************************************************************************************
function CalcScaleOfsFields(idMin, idMax, diRawMin, diRawMax, idScale, idOfs)
	{
	var objScale=document.getElementById(idScale);
	var objOfs  =document.getElementById(idOfs);
	var objMin  =document.getElementById(idMin);
	var objMax  =document.getElementById(idMax);

	var fMin  =parseFloatLocal(objMin.value);
	var fMax  =parseFloatLocal(objMax.value);

	if(isNaN(fMin) || isNaN(fMax))
		{
		objScale.value='';
		objOfs.value='';
		return;
		}

	var fScale=(fMax-fMin)/(diRawMax-diRawMin);

	objScale.value=StringLocal(fScale);
	objOfs.value  =StringLocal(fMin-diRawMin*fScale);
	}
	
//*****************************************************************************************
function CalcAllScaleOfsFields()
	{
	for(var i=0; i<CalcScaleOfsFieldList.length; i++)
		{
		CalcScaleOfsFields((CalcScaleOfsFieldList[i])[0], (CalcScaleOfsFieldList[i])[1], (CalcScaleOfsFieldList[i])[2], (CalcScaleOfsFieldList[i])[3], (CalcScaleOfsFieldList[i])[4], (CalcScaleOfsFieldList[i])[5]);
		}
	}

//*****************************************************************************************
function ActivateFoldableTab(idTabNew)
	{
	var idFoldable=Math.floor(idTabNew/100);
	var objFoldable=document.getElementById('foldable_'+idFoldable);
	
	if(!objFoldable)
		{
		alert('Can`t find foldable id='+idFoldable);
		return;
		}
	
	if(objFoldable.idActiveTab_)
		idTabOld=objFoldable.idActiveTab_;
	else
		idTabOld=idFoldable*100+1;
	
	var objTabOld=document.getElementById(idTabOld);
	var objTabNew=document.getElementById(idTabNew);

	if(!objTabOld)
		{
		alert('Can`t find old foldable tab id='+idTabOld);
		return;
		}

	if(!objTabNew)
		{
		alert('Can`t find new foldable tab id='+idTabNew);
		return;
		}

	objTabOld.className='field_group_header';
	objTabNew.className='field_group';
	
	for(var l=1; l<100; l++)
		{
		var idLine=idTabOld*100 + l;
		var objLineOld=document.getElementById(idLine);

		idLine=idTabNew*100 + l;
		var objLineNew=document.getElementById(idLine);
		
		if(objLineOld)
			objLineOld.style.display='none';
		
		if(objLineNew)
			objLineNew.style.display='block';
		}
	
	objFoldable.idActiveTab_=idTabNew;
	
	}

//*****************************************************************************************
var FoldableCounter=0, FoldableLineCounter=0;

function BeginFoldable(sTitle, aTabs, sEvalThisOnOpen, sEvalThisOnClose)
	{
	FoldableCounter++;
	FoldableLineCounter=0;
	
	document.write('<table height=3><tr><td></td></tr></table>');
	document.write('<table class=field_group width=100% id="foldable_'+FoldableCounter+'">');
	document.write('<tr style="cursor:pointer;" onSelectStart="return false"> <td class=field_group_header valign=middle><img src="fold.gif" id="Foldable'+FoldableCounter+'_Image" onClick=ChangeFoldable("Foldable'+FoldableCounter+'") onDblClick=ChangeFoldable("Foldable'+FoldableCounter+'")></td>');
	document.write('<td width=760 class=field_group_header valign=middle >');
	document.write('<table cellpadding=0 cellspacing=0 width=100%><tr><td class=field_group_header onClick="ChangeFoldable(\'Foldable'+FoldableCounter+'\'); return false;" onDblClick=ChangeFoldable("Foldable'+FoldableCounter+'")>&nbsp;'+sTitle+'</td>');
	document.write('<td align=right><table cellpadding=0 cellspacing=0><tr>');
	
	if(aTabs)
		{
		var TabCounter=0;
		
		for(var i=0; i<aTabs.length; i++)
			{
			TabCounter++;
			
			if(aTabs[i]=="")
				continue;
			
			var idTab=FoldableCounter*100+TabCounter;
			
			if(!i)
				document.write('<td class=field_group id='+idTab+'><a href="javascript:ActivateFoldableTab('+idTab+')"><b>&nbsp;'+aTabs[i]+'&nbsp;</b></a></td>');
			else
				document.write('<td>|</td><td class=field_group_header id='+idTab+'><a href="javascript:ActivateFoldableTab('+idTab+')"><b>&nbsp;'+aTabs[i]+'&nbsp;</b></a></td>');
			}
		}
	
	document.write('</tr></table></td></tr></table>');
	document.write('</td></tr>');
	document.write('<tr><td colspan=2><div id="Foldable'+FoldableCounter+'" style="overflow:hidden;">');
	
	var objFoldable=document.getElementById("Foldable"+FoldableCounter);
	
	objFoldable.sEvalThisOnOpen_=sEvalThisOnOpen;
	objFoldable.sEvalThisOnClose_=sEvalThisOnClose;
	}
	
//*****************************************************************************************
function EndFoldable(bOpened)
	{
	document.write('</div></td></tr>');
	document.write('</table>');
	
	if(!bOpened)
		ChangeFoldable('Foldable'+FoldableCounter);
	}
	
//*****************************************************************************************
function ajaxFoldable(sTitle, aTabs, asURL, uniqueNumber)
	{
	var thisFoldableCounter=0;
	
	if(uniqueNumber)
		thisFoldableCounter=uniqueNumber;
	else
		{
		FoldableCounter++;
		thisFoldableCounter=FoldableCounter;
		}
	
	document.write('<table height=3><tr><td></td></tr></table>');
	document.write('<table class=field_group width=100% id="foldable_'+thisFoldableCounter+'">');
	document.write('<tr style="cursor:pointer;" onSelectStart="return false"> <td class=field_group_header valign=middle><img src="unfold.gif" id="Foldable'+thisFoldableCounter+'_Image" onClick=ChangeFoldable("Foldable'+thisFoldableCounter+'") onDblClick=ChangeFoldable("Foldable'+thisFoldableCounter+'")></td>');
	document.write('<td width=760 class=field_group_header valign=middle >');
	document.write('<table cellpadding=0 cellspacing=0 width=100%><tr><td class=field_group_header onClick="ChangeFoldable(\'Foldable'+thisFoldableCounter+'\'); return false;" onDblClick=ChangeFoldable("Foldable'+thisFoldableCounter+'")>&nbsp;'+sTitle+'</td>');
	document.write('<td align=right><table cellpadding=0 cellspacing=0><tr>');
	
	if(aTabs)
		{
		var TabCounter=0;
		
		for(var i=0; i<aTabs.length; i++)
			{
			TabCounter++;
			
			if(aTabs[i]=="")
				continue;
			
			var idTab=thisFoldableCounter*100+TabCounter;
			
			if(!i)
				document.write('<td class=field_group id='+idTab+'><a href="javascript:ActivateFoldableTab('+idTab+')"><b>&nbsp;'+aTabs[i]+'&nbsp;</b></a></td>');
			else
				document.write('<td>|</td><td class=field_group_header id='+idTab+'><a href="javascript:ActivateFoldableTab('+idTab+')"><b>&nbsp;'+aTabs[i]+'&nbsp;</b></a></td>');
			}
		}
	
	document.write('</tr></table></td></tr></table>');
	document.write('</td></tr>');
	document.write('<tr><td colspan=2><div id="Foldable'+thisFoldableCounter+'" style="display:none;">');
	
	document.write("<table cellspacing=0 cellpadding=0 width=100%><tr height=30><td></td></tr><tr><td align=center><img src=loading.gif></td></tr><tr height=30><td></td></tr></table>");
	
	document.write('</div></td></tr>');
	document.write('</table>');
	
	var objFoldable=document.getElementById("Foldable"+thisFoldableCounter);
	
	objFoldable.url_=asURL+"&foldablecntr="+thisFoldableCounter;
	objFoldable.has2load_=true;
	}

//*****************************************************************************************
function ConfigureFoldableLine(idTab, FoldableCounter, FoldableLineCounter)
	{
	var objFoldableLine=document.getElementById('foldable_line_div');
	
	objFoldableLine.id=FoldableCounter*10000 + idTab*100 + FoldableLineCounter;
	
	if(idTab==1)
		objFoldableLine.style.display='block';
	else	
		objFoldableLine.style.display='none';
	}

//*****************************************************************************************
function BeginFoldableLine(idTab)
	{
	if(idTab==1)
		FoldableLineCounter++;
	
	var idLine=FoldableCounter*10000 + idTab*100 + FoldableLineCounter;
	
 	if(idTab==1)
		document.writeln('<div id='+idLine+' style="display:block;">');
	else
		document.writeln('<div id='+idLine+' style="display:none;">');
	}
	
//*****************************************************************************************
function EndFoldableLine()
	{
	document.writeln('</div>');
	}
	
//*****************************************************************************************
function ChangeFoldable(idFoldable)
	{
	var objFoldable=document.getElementById(idFoldable);
	var objButton  =document.getElementById(idFoldable+'_Image');
	
	if(objFoldable.style.display=='none')
		{
		objFoldable.style.display='';
		objButton.src='fold.gif';
		
		if(objFoldable.has2load_)
			{
			objFoldable.has2load_=false;
			ajaxLoadSpan(idFoldable, objFoldable.url_);
			}

		if(objFoldable.sEvalThisOnOpen_)
			eval(objFoldable.sEvalThisOnOpen_);
		}
	else
		{
		objFoldable.style.display='none';
		objButton.src='unfold.gif';
		
		if(objFoldable.sEvalThisOnClose_)
			eval(objFoldable.sEvalThisOnClose_);
		}
	}
	
//*****************************************************************************************
function SetWidthOfDivMainFrame()
	{
	var objDivMain  =document.getElementById("div_mainframe");
	var objTableMain=document.getElementById("td_mainframe");

	objDivMain.style.width=objTableMain.offsetWidth;
	}

//*****************************************************************************************
function getLeft(l)
	{
	if(!l)
		return(0);
	
	if (l.offsetParent) 
		return (l.offsetLeft + getLeft(l.offsetParent));
	else 
		return (l.offsetLeft);
	}

//*****************************************************************************************
function getTop(l)
	{
	if(!l)
		return(0);
	
	if (l.offsetParent) 
		return (l.offsetTop + getTop(l.offsetParent));
	else 
		return (l.offsetTop);
	}

//*****************************************************************************************
function CreateBookmark(sURL, sTitle)
	{
	if (biPhone)
		{
		alert('Press + to add this page to your bookmarks!');
		}
	else if (window.sidebar) 
		{ 
		alert('Press Ctrl+D to add this page to your bookmarks!');
		// Mozilla Firefox Bookmark only opens in sidebar!!!
		// window.sidebar.addPanel(sTitle, sURL, "");
		} 
	else if( window.external ) 
		{ 
		// IE Favorite
		window.external.AddFavorite( sURL, sTitle); 
		}
	else if(window.opera && window.print) 
		{ 
		// Opera Hotlist		
		var elem = document.createElement('a');
		elem.setAttribute('href', sURL);
		elem.setAttribute('title', sTitle);
		elem.setAttribute('rel','sidebar');
		elem.click();
		}
	else
		{
		alert('Press Ctrl+D to add this page to your bookmarks!');
		}
	}

//*****************************************************************************************
function UpdateListCheckBoxes(objMasterBox, idForm)
	{
	var objForm=document.getElementById(idForm);
	
	if(!objForm)
		return;
	
	for(di=0; di<objForm.elements.length; di++)
		{
		var objField=objForm.elements[di];
		
		objField.checked=objMasterBox.checked;
		}
	}

//*****************************************************************************************
String.prototype.leftTrim = function () 
	{
	return (this.replace(/^\s+/,""));
	};
	
//*****************************************************************************************
String.prototype.rightTrim = function () 
	{
	return (this.replace(/\s+$/,""));
	};

//*****************************************************************************************
String.prototype.Trim = function () 
	{
	return (this.replace(/\s+$/,"").replace(/^\s+/,""));
	};

//*****************************************************************************************
function IsBattery(sSN)
	{
	for(var i=0; i<Batteries.length; i++)
		{
		if(sSN==Batteries[i])
			return(true);
		}
		
	return(false);
	}

//*****************************************************************************************
function InsertGaugeTransfer(sTransfer, sMaxTransfer, sThreshold, sSize, idSpan)
	{
	var fTransfer=parseFloatLocal(sTransfer);
	var fMaxTransfer=parseFloatLocal(sMaxTransfer);
	var fThreshold=parseFloatLocal(sThreshold);
	
	if(fMaxTransfer<=0)
		sGauge="<img src='sim_volume_5"+sSize+".gif' onMouseOver=toolTip('"+sTransfer.Trim()+"KB/off')>";
	else
		{
		var fWarnTransfer=fMaxTransfer*fThreshold/100/0.8;
		var fValue=(fWarnTransfer - fTransfer) / fWarnTransfer * 100;
	
		if     ( fValue>=80)	sGauge="<img src='sim_volume_5"+sSize+".gif' onMouseOver=toolTip('"+sTransfer.Trim()+"KB/"+sMaxTransfer.Trim()+"KB')>";
		else if( fValue>=60)	sGauge="<img src='sim_volume_4"+sSize+".gif' onMouseOver=toolTip('"+sTransfer.Trim()+"KB/"+sMaxTransfer.Trim()+"KB')>";
		else if( fValue>=40)	sGauge="<img src='sim_volume_3"+sSize+".gif' onMouseOver=toolTip('"+sTransfer.Trim()+"KB/"+sMaxTransfer.Trim()+"KB')>";
		else if( fValue>=20)	sGauge="<img src='sim_volume_2"+sSize+".gif' onMouseOver=toolTip('"+sTransfer.Trim()+"KB/"+sMaxTransfer.Trim()+"KB')>";
		else if( fValue> 0)  sGauge="<img src='sim_volume_1"+sSize+".gif' onMouseOver=toolTip('"+sTransfer.Trim()+"KB/"+sMaxTransfer.Trim()+"KB')>";
		else						sGauge="<img src='sim_volume_0"+sSize+".gif' onMouseOver=toolTip('"+sTransfer.Trim()+"KB/"+sMaxTransfer.Trim()+"KB')>";
		}
	
	if(idSpan)
		{
		var objSpan=document.getElementById(idSpan);
		
		if(objSpan)
			{
			objSpan.innerHTML=sGauge;
			RefreshRelativeTags();
			}
		}
	else
		document.write(sGauge);
	}

//*****************************************************************************************
function InsertGaugeBattery(idInstrument, sSN, sValue, sColor, idSpan, sToolTip)
	{
	if(IsBattery(sSN))
		return;
	
	var fValue=parseFloatLocal(sValue);
	var sGauge="";
	
	if(idInstrument!='0000000000000000')
		sGauge="<a href='javascript:ajaxLoadWindow(\"id_tracking\", \"change log\", \"include/ajax_tracking.htm?sid=<%data sys.sessionid%>&accu=1&id0="+idInstrument+"\");'>";
	
	if     ( fValue>82)	sGauge+="<img src='battery_green_5"+sColor+".gif'";
	else if( fValue>72)	sGauge+="<img src='battery_green_4"+sColor+".gif'";
	else if( fValue>65)	sGauge+="<img src='battery_green_3"+sColor+".gif'";
	else if( fValue>61)	sGauge+="<img src='battery_green_2"+sColor+".gif'";
	else if( fValue> 0)	sGauge+="<img src='battery_red"+sColor+".gif'";
	else                 sGauge+="<img src='battery"+sColor+".gif'";
	
	if(sToolTip && sToolTip!='')
		sGauge+=' onMouseOver="toolTip(\''+sToolTip+'\')"';
		
	sGauge+=' border=0>';

	if(idInstrument!='0000000000000000')
		sGauge+='</a>';
		
	if(idSpan)
		{
		var objSpan=document.getElementById(idSpan);
		
		if(objSpan)
			{
			objSpan.innerHTML=sGauge;
			RefreshRelativeTags();
			}
		}
	else
		document.write(sGauge);
	}

//*****************************************************************************************
function InsertGaugeGSM(sValue, sColor, idSpan, sidInstrument, sTag)
	{
	var fValue=parseFloatLocal(sValue);
	var sGauge="";
	
	var sonClick="";
	var sStyle="";
	
	if(sidInstrument)
		{
	   sonClick="onClick=\"ajaxLoadWindow('gsm_window', 'Cells', 'include/ajax_gsm_data.htm?sid=<%data sys.sessionid%>&id="+sidInstrument+"&tag="+sTag+"')\"";
	   sStyle="cursor:pointer;";
	   }
	
	if(      fValue== 0)		sGauge="<img src=GSM_Level"+sColor+".gif   border=0 onMouseOver=\"toolTip('NO&nbsp;DATA')\" "+sonClick+" style=\""+sStyle+"\">";
	else if( fValue>-64)		sGauge="<img src=GSM_Level_5"+sColor+".gif border=0 onMouseOver=\"toolTip('"+sValue.Trim()+"dB')\" "+sonClick+" style=\""+sStyle+"\">";
	else if( fValue>-74)		sGauge="<img src=GSM_Level_4"+sColor+".gif border=0 onMouseOver=\"toolTip('"+sValue.Trim()+"dB')\" "+sonClick+" style=\""+sStyle+"\">";
	else if( fValue>-84)		sGauge="<img src=GSM_Level_3"+sColor+".gif border=0 onMouseOver=\"toolTip('"+sValue.Trim()+"dB')\" "+sonClick+" style=\""+sStyle+"\">";
	else if( fValue>-94)		sGauge="<img src=GSM_Level_2"+sColor+".gif border=0 onMouseOver=\"toolTip('"+sValue.Trim()+"dB')\" "+sonClick+" style=\""+sStyle+"\">";
	else if( fValue>-108)	sGauge="<img src=GSM_Level_1"+sColor+".gif border=0 onMouseOver=\"toolTip('"+sValue.Trim()+"dB')\" "+sonClick+" style=\""+sStyle+"\">";
	else							sGauge="<img src=GSM_Level"+sColor+".gif   border=0 onMouseOver=\"toolTip('"+sValue.Trim()+"dB')\" "+sonClick+" style=\""+sStyle+"\">";
	
	if(idSpan)
		{
		var objSpan=document.getElementById(idSpan);
		
		if(objSpan)
			{
			objSpan.innerHTML=sGauge;
			RefreshRelativeTags();
			}
		}
	else
		document.write(sGauge);
	}
	
//*****************************************************************************************
function InsertCountdown(fLastCon, sInterval, idSpan)
	{
	var fInterval=parseFloatLocal(sInterval);

	if(isNaN(fInterval))
		{
		setHTML(idSpan, "");
		return;
		}

	var fNextCon=fInterval/1440.0 - fLastCon;
	
	if(fNextCon<0)
		{
		setHTML(idSpan, "");
		return;
		}

//	var iDays		=parseInt( fNextCon	 								 		  );
	var iHours	   =parseInt((fNextCon                	           ) *    24);
	var iMinutes	=parseInt((fNextCon - iHours/24  	           ) *  1440);
//	var iSeconds	=parseInt((fNextCon - iHours/24 - iMinutes/1440) * 86400);

	setHTML(idSpan, iHours+':'+StringLeadingZeros(iMinutes,2));
	}

//*****************************************************************************************
function InsertTimer(sLastDisc, idSpan)
	{
	var objSpan=document.getElementById(idSpan);
	var sText;
		
	if(!objSpan)
		{
		alert('InsertTimer: Span with id='+idSpan+' not found!');
		return;
  		}

	var fLastDisc=parseFloat(sLastDisc);
	
	var iHours	=parseInt((fLastDisc                	         ) *    24);
	var iMinutes=parseInt((fLastDisc - iHours/24  	            ) *  1440);
	var iSeconds=parseInt((fLastDisc - iHours/24 - iMinutes/1440) * 86400);

	sText=iHours+':'+StringLeadingZeros(iMinutes,2)+':'+StringLeadingZeros(iSeconds,2);

	var bIsInList=false;
	
	//wenn timer bereits vorhanden: aktualisiere lastDisconnect
	for(var i=0; i<Timers.length; i++)
		{
		if(Timers[i][0]==idSpan)
			{
			bIsInList=true;
			Timers[i][1]=fLastDisc;
			}
		}
	
	if(!bIsInList)
 		Timers.push(new Array(idSpan, fLastDisc));

	objSpan.innerHTML=sText;
	RefreshRelativeTags();
	}
	
//*****************************************************************************************
function Timer_1000()
	{
	RefreshSpans();
	RefreshTimers();
	RefreshGraphics();
	}

//*****************************************************************************************
function Timer_100()
	{
	if(sNewURL!='')
		{
		window.location.replace(sNewURL);
		sNewURL='';
		}
	}

//*****************************************************************************************
function RefreshRelativeTags()
	{
	// Only for IE required, IE hides sometimes relative positioned div elements if innerHTML is changed anywhere!
	
	if(!bIE)
		return;
	
	var divs=document.getElementsByTagName("div");
	
	for(var i=0; i<divs.length; i++)
		{
		var objDiv=divs[i];
		
		var position=getStyle(objDiv, 'position');
		
		if(position!='relative')
			continue;

		var oldLeft=getStyle(objDiv, 'left');
									
		objDiv.style.left=10;
		objDiv.style.left=oldLeft;
		}
	}
			
//*****************************************************************************************
function RefreshTimers()
	{
	if(!bActivateAutoReloads__)
		return;
	
	for(var i=0; i<Timers.length; i++)
		{
		var objSpan=document.getElementById(Timers[i][0]);
		
		Timers[i][1]+=1.0/86400;
		
		var iHours		=parseInt((Timers[i][1]                            ) *    24);
		var iMinutes	=parseInt((Timers[i][1] - iHours/24                ) *  1440);
		var iSeconds	=parseInt((Timers[i][1] - iHours/24 - iMinutes/1440) * 86400);
		
		objSpan.innerHTML=iHours+':'+StringLeadingZeros(iMinutes,2)+':'+StringLeadingZeros(iSeconds,2);
		RefreshRelativeTags();
		}
	}

//*****************************************************************************************
function ajaxSubmit(sSessionId, idForm, idWindow)
	{
	var objForm=document.getElementById(idForm);

	if(!objForm)
		{
		alert("ajaxSubmit can`t find form with id="+idForm);
		return(false);
		}

//	Log('ajaxSubmit('+sSessionId+','+idForm+','+idWindow+')');

	// Build params with all field values
	var asParams="";

	for(var i=0; i<objForm.elements.length; i++)
		{
		asParams+="&"+objForm.elements[i].name+"="+objForm.elements[i].value;
		}
		
	// make the request
	var http_request = ajaxGetRequestObject();

	// setup callback
	http_request.onreadystatechange = function()
		{
		if(ajaxHasLoaded(http_request))	// request has finished
			{
			http_request=false;
			closeWindow(idWindow);
   		}
		};
		
	// start request
	if(bNetscape)
		{	// Firefox don`t sends URL encoded POSTs, so use GET
		http_request.open('GET', "save.htm?sid="+sSessionId+"&action=save"+asParams, true);
		http_request.send(asParams);
		}
	else
		{	// IE has a limit of URL length, so use a POST
		http_request.open('POST', "save.htm?sid="+sSessionId+"&action=save", true);
		http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		http_request.send(asParams);
		}
		
	return(false);
	}

//*****************************************************************************************
function ajaxGetRequestObject()
	{
	var http_request = false;
	
	if(window.XMLHttpRequest) 			// Mozilla, Safari,...
		{ 
		http_request = new XMLHttpRequest();
		
		if (http_request.overrideMimeType) 
			http_request.overrideMimeType('text/xml;');
		} 
	else if (window.ActiveXObject) 	// IE
		{ 
		try 
			{
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
			} 
		catch (e)
			{
			try 
				{
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
				} 
			catch (e) 
				{
				}
			}
		}

	if (!http_request) 
		alert('AJAX Problem: Can`t create instance of XMLHTTP!');

	return(http_request);
	}

//*****************************************************************************************
function ajaxHasLoaded(http_request)
	{
	if (http_request.readyState != 4) 
		return(false);
		
	if (http_request.status == 200)
		{
		// check if we got a login page due to session time out
		if(http_request.responseText.substr(0, 18)=='<!-- begin of page')
			{
			gotoUrl(document.location.href);
			return(false);
			}
			
		if(http_request.responseText.substr(0, 27)=='<!-- UPDATE IN PROGRESS -->')
			{
			gotoUrl(document.location.href);
			return(false);
			}
		}
	else 
		{
		if(http_request.status)	// if page is cancled status will be 0
			{
			gotoUrl(document.location.href);
			return(false);
			}
		}
		
	return(true);
	}
	
//*****************************************************************************************
function onSubmitSummary(objForm)
	{
	/*
	var sStart=objForm.start.value;
	
	if(sStart=="")
		{
		alert("First enter the start date!");
		return(false);
		}
	*/	
	return(true);
	}
			
//*****************************************************************************************
function RefreshSummary(sId, sURL)
	{
	var objSpan=document.getElementById("summary_span_"+sId);
	var objForm=document.getElementById("summary_form_"+sId);
	
	// validate input fields
	if(!onSubmitSummary(objForm))
		return;
	
	// view busy image
	objSpan.innerHTML="<table cellspacing=0 cellpadding=0 width=100%><tr height=30><td></td></tr><tr><td align=center><img src=loading.gif></td></tr><tr height=30><td></td></tr></table>";
	RefreshRelativeTags();

	// append form fields on request url
	sURL+="&start="+objForm.start.value;
	sURL+="&periods="+objForm.periods.value;
	sURL+="&period="+objForm.period.value;
	sURL+="&format=http";
	
	// make the request
	var http_request = ajaxGetRequestObject();

	// setup callback
	http_request.onreadystatechange = function()
		{
		if(ajaxHasLoaded(http_request))	// request has finished
			{
			objSpan.innerHTML=http_request.responseText;
			RefreshRelativeTags();
			}
		};
		
	// start request
	http_request.open('GET', sURL, true);
	http_request.send(null);
	}

//*****************************************************************************************
function ReloadSpan(aSpan)
	{
		
	var objSpan=document.getElementById(aSpan[0]);
	
	if(!objSpan)
		return;
	
//	Log('ReloadSpan('+aSpan[0]+','+aSpan[1]+')');
	
	// get the request
	var http_request = aSpan[4];

	http_request.abort();	// required for IE, otherwise recurring requests are not processed
	
	// setup callback
	http_request.onreadystatechange = function()
		{
		if(ajaxHasLoaded(http_request))	// request has finished
			{
				//alert(objSpan.id + "=" + (objSpan.LastLoadedContent_ != http_request.responseText));
			if(objSpan.LastLoadedContent_ != http_request.responseText)	// update only if something has changed
				{
				objSpan.LastLoadedContent_=http_request.responseText;
				objSpan.innerHTML=http_request.responseText;
				http_request=false;

				// execute all javascript tags..
				var scripts = objSpan.getElementsByTagName("script"); 
			
	   		for(var i=0;i<scripts.length;i++)
	   			{
   	    		eval(scripts[i].text);
   	    		}
   	    		
				RefreshRelativeTags();   	    	
       		}
       		
     		// restart reload timer
       	aSpan[3]=0;	
   		}
		};
		
	// start request
	http_request.open('GET', aSpan[1], true);
	http_request.send(null);
	}
	
//*****************************************************************************************
function AutoReloadSpan(sId, sURL, diSeconds)
	{
//	Log('AutoReloadSpan('+sId+','+sURL+','+diSeconds+')');
	
	// add span to list of auto refresh spans
	AutoReloadSpans.push(new Array(sId, sURL, diSeconds, 0, ajaxGetRequestObject()));
	// initial load of new span
	ReloadSpan(AutoReloadSpans[AutoReloadSpans.length-1]);
	}

//*****************************************************************************************
function RefreshSpans()
	{
	if(!bActivateAutoReloads__)
		return;
	
	// increment reload timer of each span (seconds)
	for(var i=0; i<AutoReloadSpans.length; i++)
		{
		AutoReloadSpans[i][3]++;
	
		// don`t reload if second counter is not equal to reload time	
		if(AutoReloadSpans[i][3] != AutoReloadSpans[i][2])
			continue;

		ReloadSpan(AutoReloadSpans[i]);
		}
	}

//*****************************************************************************************
function ReloadGraphic(aGraphic)
	{
	var objGraphic=document.getElementById(aGraphic[0]);
	
	if(!objGraphic)
		return;
	
	// not yet loaded, try later
	if(!objGraphic.complete)
		{
		aGraphic[3]--;
		Log('ReloadGraphic not yet completed');
		return;
		}
	
//	Log('ReloadGraphic('+aGraphic[1]+')');
	
	var Jetzt = new Date();
	objGraphic.src=aGraphic[1]+"&dummy="+Jetzt.getHours()*3600+Jetzt.getMinutes()*60+Jetzt.getSeconds();	// to be sure browser gets new image from server
	
	// reset reload timer	
	aGraphic[3]=0;
	}
	
//*****************************************************************************************
function ClearAutoGraphicReloads()
	{
	AutoReloadGraphics=new Array();
	}
	
//*****************************************************************************************
function AutoReloadGraphic(sId, sURL, diSeconds)
	{
	// add span to list of auto refresh spans
	AutoReloadGraphics.push(new Array(sId, sURL, diSeconds, 0));
	
	// initial load of new span
	ReloadGraphic(AutoReloadGraphics[AutoReloadGraphics.length-1]);
	}

//*****************************************************************************************
function RefreshGraphics()
	{
	if(!bActivateAutoReloads__)
		return;
		
	// increment reload timer of each graphic (seconds)
	for(var i=0; i<AutoReloadGraphics.length; i++)
		{
		AutoReloadGraphics[i][3]++;
	
		// don`t reload if second counter is not equal to reload time	
		if(AutoReloadGraphics[i][3] != AutoReloadGraphics[i][2])
			continue;

		ReloadGraphic(AutoReloadGraphics[i]);
		}
	}

//*****************************************************************************************
function closeWindow(idDiv)
	{
	var objDiv=document.getElementById(idDiv);
	
	if(!objDiv)
		return;
	
	objDiv.innerHTML="";
	}
	
//*****************************************************************************************
function hideWindow(idDiv, bHide)
	{
	var objDiv=document.getElementById(idDiv);
	
	if(!objDiv)
		return;

	if(bHide)	objDiv.style.display="none";
	else			objDiv.style.display="";
	}
	
//*****************************************************************************************
function setWindowTitle(idDiv, sTitle)
	{
	var objTitle=document.getElementById(idDiv+"_title");
	
	if(!objTitle)
		{
		alert("setWindowTitle can`t find id="+idDiv);
		return;
		}

	objTitle.innerHTML=sTitle;
	}
	
//*****************************************************************************************
function moveWindow(idWindow, idRef, offset_x, offset_y)
	{
	var objDiv=document.getElementById(idWindow);
	var objRef=document.getElementById(idRef);
	
	if(!objDiv)
		{
		alert("moveWindow: Can`t find id="+idWindow);
		return;
		}

	if(!objRef)
		{
		alert("moveWindow: Can`t find id="+idRef);
		return;
		}
		
	objDiv.fixedPos_=true;
	setPos(objDiv, getLeft(objRef)+offset_x, getTop(objRef)+offset_y);
	}
	
//*****************************************************************************************
function makeWindow(objDiv, sHTML_Title, sHTML_Content)
	{
	var sHTML="";
	var cFrameClass="window_frame";
	
	if(sHTML_Title=="*thin*")
		{
		sHTML_Title="";
		cFrameClass="window_frame_thin";
		}
		
	
	sHTML+="<table cellspacing=0 cellpadding=0><tr class='"+cFrameClass+"'><td colspan=3 class='"+cFrameClass+"'><img src=spacer.gif width=0 height=0></td></tr>";
	
	if(sHTML_Title!="")
		{
		sHTML+="<tr onSelectStart='return false' onMouseDown='return false' style='cursor:default;'><td class='"+cFrameClass+"'></td>";
		sHTML+="<td><table cellspacing=0 cellpadding=0 width=100%><tr><td class=window_title onMouseDown=DragWindow(document.getElementById('"+objDiv.id+"'))><span id="+objDiv.id+"_title>"+sHTML_Title+"</span></td><td align=right class=window_title><a href='javascript:hideWindow(\""+objDiv.id+"\", true);'><img src=close.gif border=0></a></td></tr></table></td>";
		sHTML+="<td class='"+cFrameClass+"'></td></tr>"
		sHTML+="<tr><td colspan=3 class='"+cFrameClass+"'></td></tr>";
		}
		
	sHTML+="<tr><td class='"+cFrameClass+"'></td><td class=lists>";
	sHTML+=sHTML_Content;
	sHTML+="</td><td class='"+cFrameClass+"'></td></tr>";
	
	sHTML+="<tr><td class='"+cFrameClass+"' colspan=3><img src=spacer.gif width=0 height=0></td></tr></table>";
	
	objDiv.innerHTML=sHTML;
	}
	
//*****************************************************************************************
function viewBusyWindow(objDiv)
	{
	makeWindow(objDiv, "loading...", "<table cellspacing=0 cellpadding=0 style='background-color:#FFFFFF;' width=100><tr height=30><td></td></tr><tr><td align=center><img src=loading.gif></td></tr><tr height=30><td></td></tr></table>");
	}
	
//*****************************************************************************************
function setPos(objDiv, posX, posY)
	{
	if(bNetscape)
		{
		if(posY!=-999999)
			objDiv.style.top =posY;
			
		if(posX!=-999999)
			objDiv.style.left=posX;
		}
	else
		{
		if(posY!=-999999)
			objDiv.style.pixelTop =posY;
			
		if(posX!=-999999)
			objDiv.style.pixelLeft=posX;
		}
	}
	
//*****************************************************************************************
function getPosX(objDiv)
	{
	if(bNetscape)
		{
		if(objDiv.style.left=='')
			return(0);
		else
			return(parseInt(objDiv.style.left));
		}
	else
		{
		if(objDiv.style.pixelLeft=='')
			return(0);
		else
			return(parseInt(objDiv.style.pixelLeft));
		}
	}
	
//*****************************************************************************************
function getPosY(objDiv)
	{
	if(bNetscape)
		{
		if(objDiv.style.top=='')
			return(0);
		else
			return(parseInt("0"+objDiv.style.top));
		}
	else
		{
		if(objDiv.style.pixelTop=='')
			return(0);
		else
			return(parseInt("0"+objDiv.style.pixelTop));
		}
	}
	
//*****************************************************************************************
function centerWindow(idDiv)
	{
	var objDiv=document.getElementById(idDiv);
	
	if(!objDiv)
		return;
	
	var pageSize = getPageSize();
	var pageScroll = getPageScroll();

	var left=(pageSize[2]-objDiv.clientWidth )/2 + pageScroll[0]
	var top =(pageSize[3]-objDiv.clientHeight)/2 + pageScroll[1];
	
	if(top<20)
		top=20;
		
	if(left<0)
		left=0;

	objDiv.style.left=left-getLeft(objDiv.offsetParent);
	objDiv.style.top= top -getTop(objDiv.offsetParent);
	}
	
//*****************************************************************************************
function ajaxShowWindow(idDiv, sTitle, sURL)
	{
	var objDiv=document.getElementById(idDiv);
	
	if(!objDiv || objDiv.innerHTML=='')
		{
		ajaxLoadWindow(idDiv, sTitle, sURL);
		return;
		}

	hideWindow(idDiv, false);
	}
	
//*****************************************************************************************
function ajaxLoadWindow(idDiv, sTitle, sURL)
	{
	var objDiv=document.getElementById(idDiv);

//	Log('ajaxLoadWindow('+idDiv+','+sTitle+','+sURL+')');

	if(!objDiv)
		{
		var body = document.getElementsByTagName ('BODY')[0];
		
		objDiv=document.createElement("div");
		objDiv.setAttribute('id', idDiv);
		body.appendChild(objDiv);
		}

	objDiv.style.position='absolute';
	objDiv.style.zIndex=102;
	objDiv.style.display="";
		
	viewBusyWindow(objDiv);
	
	if(!objDiv.fixedPos_)
		centerWindow(idDiv);
	
	// make the request
	var http_request = ajaxGetRequestObject();

	// setup callback
	http_request.onreadystatechange = function()
		{
		if(ajaxHasLoaded(http_request))	// request has finished
			{
			makeWindow(objDiv, sTitle, http_request.responseText);

			// execute all javascript tags..
			var scripts = objDiv.getElementsByTagName("script"); 
			
   		for(var i=0;i<scripts.length;i++)
       		eval(scripts[i].text);
       		
			if(!objDiv.fixedPos_)
      	 	centerWindow(idDiv);
   		}
		};
		
	// start request
	http_request.open('GET', sURL, true);
	http_request.send(null);
	}

//*****************************************************************************************
function ajaxLoadSpan(idSpan, sURL)
	{
	var objSpan=document.getElementById(idSpan);

	if(!objSpan)
		{
		alert("ajaxLoadSpan: Can`t find id="+idSpan);
		return;
		}

//	Log('ajaxLoadSpan('+idSpan+','+sURL+')');

	objSpan.LastURL_=sURL;
			
	// make the request
	var http_request = ajaxGetRequestObject();

	// setup callback
	http_request.onreadystatechange = function()
		{
		if(ajaxHasLoaded(http_request))	// request has finished
			{
			objSpan.innerHTML=http_request.responseText;

			// execute all javascript tags..
			var scripts = objSpan.getElementsByTagName("script"); 
			
   		for(var i=0;i<scripts.length;i++)
       		eval(scripts[i].text);
       		
       	RefreshRelativeTags();
       	
			objSpan.has2load_=false;
   		}
		};
		
	// start request
	http_request.open('GET', sURL, true);
	http_request.send(null);
	}

//*****************************************************************************************
function ajaxGetValue(asFieldName)
	{
	// make the request
	var http_request = ajaxGetRequestObject();
	var sURL="include/ajax_GetValue.htm?sid=<%data sys.sessionid%>&autoreload=1&field="+asFieldName;
						
	Log('ajaxGetValue('+asFieldName+') open...');
	
	// start request
	if(!bIE6)
		http_request.multipart	= false;
		
	http_request.open('GET', sURL, false);
	http_request.send(null);

	var asValue="";
	var diIdx=http_request.responseText.indexOf("value:");
	
	if(diIdx>-1)
		asValue=http_request.responseText.substr(diIdx+6);

	Log('ajaxGetValue('+asFieldName+') ok ('+http_request.responseText+') ['+asValue+']');
		
	return(asValue);
	}
	
//*****************************************************************************************
function ajaxExecuteScript(sURL)
	{
	// make the request
	var http_request = ajaxGetRequestObject();
						
	Log('ajaxExecuteScript('+sURL+') open...');
	
	// start request
	if(!bIE6)
		http_request.multipart	= false;
		
	http_request.open('GET', sURL+'&autoreload=1', false);
	http_request.send(null);

	var objSpan = document.getElementById('ajaxExecuteScriptSpan');
	objSpan.innerHTML=http_request.responseText;

	// execute all javascript tags..
	var scripts = objSpan.getElementsByTagName("script"); 
			
	for(var i=0;i<scripts.length;i++)
		eval(scripts[i].text);
	}
	
//*****************************************************************************************
function ajaxQueryXML(sURL)
	{
	// make the request
	var http_request = ajaxGetRequestObject();
						
	Log('ajaxQueryXML('+sURL+') open...');
	
	// start request
	http_request.multipart	= false;
	http_request.open('GET', sURL, false);
	http_request.send(null);

//	alert(http_request.responseText);

	if(bIE)
		http_request.responseXML.loadXML(http_request.responseText);

	return(http_request.responseXML);
	}
	
//*****************************************************************************************
function ajaxQueryXMLSum(idSpan, sURL)
	{
	var objSpan=document.getElementById(idSpan);

	if(!objSpan)
		return;
		
//	Log('ajaxLoadSpan('+idSpan+','+sURL+')');

	// make the request
	var http_request = ajaxGetRequestObject();

	// setup callback
	http_request.onreadystatechange = function()
		{
		if(ajaxHasLoaded(http_request))	// request has finished
			{
			if(bIE)
				http_request.responseXML.loadXML(http_request.responseText);
			
			if(!http_request.responseXML.getElementsByTagName('sum').length)
				objSpan.innerHTML=http_request.responseText;
			else
				objSpan.innerHTML = http_request.responseXML.getElementsByTagName('sum')[0].childNodes[0].nodeValue;
   		}
		};
		
	// start request
	http_request.open('GET', sURL, true);
	http_request.send(null);
	}
	
//*****************************************************************************************
function ajaxSQL(sFile, sCmd)
	{
	// make the request
	var http_request = ajaxGetRequestObject();
	var sURL="include/ajax_SQL.htm?sid=<%data sys.sessionid%>&autoreload=1&file="+sFile+"&cmd="+sCmd;
						
	Log('ajaxSQL('+sFile+', '+sCmd+') open...');
	
	// start request
	if(!bIE6)
		http_request.multipart	= false;
		
	http_request.open('GET', sURL, false);
	http_request.send(null);

	Log('ajaxSQL('+sFile+', '+sCmd+') OK');
	}
	
//*****************************************************************************************
function ajaxSendGet(sURLParams)
	{
	// make the request
	var http_request = ajaxGetRequestObject();
	var sURL="include/ajax_dummy.htm?sid=<%data sys.sessionid%>&autoreload=1&"+sURLParams;
						
	Log('ajaxSendGet('+sURLParams+') open...');
	
	// start request
	if(!bIE6)
		http_request.multipart	= false;
		
	http_request.open('GET', sURL, false);
	http_request.send(null);

	Log('ajaxSendGet('+sURLParams+') OK');
	}
	
//*****************************************************************************************
function ajaxSendGetURL(sURL)
	{
	// make the request
	var http_request = ajaxGetRequestObject();
						
	Log('ajaxSendGetURL('+sURL+') open...');
	
	// start request
	if(!bIE6)
		http_request.multipart	= false;
		
	http_request.open('GET', sURL, false);
	http_request.send(null);

	Log('ajaxSendGetURL('+sURL+') OK');
	}
	
//*****************************************************************************************
function reloadIfServerIsResponding()
	{
	// make the request
	var http_request = ajaxGetRequestObject();

	// setup callback
	http_request.onreadystatechange = function()
		{
		if(http_request.readyState == 4)
			{
			if(!http_request.status)
				gotoUrl(document.location.href);		// else refresh page
   		}
		};
		
	// start request
	http_request.open('GET', document.location.href, true);
	http_request.send(null);
	}

//*****************************************************************************************
function ajaxReloadSpan(idSpan)
	{
	var objSpan=document.getElementById(idSpan);

	if(!objSpan)
		{
		alert("ajaxLoadSpan: Can`t find id="+idSpan);
		return;
		}

//	Log('ajaxReloadSpan('+idSpan+')');

	if(!objSpan.LastURL_)
		return;

	ajaxLoadSpan(idSpan, objSpan.LastURL_);
	}
	
//*****************************************************************************************
function ajaxLoadMsgBox(idSpan, sURL)
	{
	var objSpan=document.getElementById(idSpan);

	if(!objSpan)
		{
		alert("ajaxLoadMsgBox: Can`t find id="+idSpan);
		return;
		}

//	Log('ajaxLoadMsgBox('+idSpan+','+sURL+')');

	var msgBox = new MsgBox('<center><img src=loading.gif></center>', [], {});
	msgBox.display();
		
	// make the request
	var http_request = ajaxGetRequestObject();

	// setup callback
	http_request.onreadystatechange = function()
		{
		if(ajaxHasLoaded(http_request))	// request has finished
			{
			msgBox.close(true);
			objSpan.innerHTML=http_request.responseText;

			// execute all javascript tags..
			var scripts = objSpan.getElementsByTagName("script"); 
			
   		for(var i=0;i<scripts.length;i++)
       		eval(scripts[i].text);
       		
       	RefreshRelativeTags();
   		}
		};
		
	// start request
	http_request.open('GET', sURL, true);
	http_request.send(null);
	}

//*****************************************************************************************
var sLogLines="";

function pushLogLine(asStamp, asEvent, asParam)
	{
	var sHelp='';
	
	asEvent=removeThousandSeparaterLocal(asEvent);
	asParam=removeThousandSeparaterLocal(asParam);
	
	if(asEvent.charAt(0)=='-')
		asEvent=asEvent.substr(1, asEvent.length-1);
	
	
	for(i=0; i<InstrumentLogEntries.length; i++)
		{
		if(InstrumentLogEntries[i][0]==asEvent && (InstrumentLogEntries[i][1]=='' || InstrumentLogEntries[i][1]==asParam))
			{
			if(InstrumentLogEntries[i][5]!='')
				sHelp='onMouseOver="toolTip(\''+InstrumentLogEntries[i][5]+'\')"';
			else
				sHelp='';
			
			if(InstrumentLogEntries[i][4]=='')
				sLogLines+="<tr "+sHelp+"><td class=small width=125>"+asStamp+"</td>";
			else
				sLogLines+="<tr "+sHelp+" style='background-color:"+InstrumentLogEntries[i][4]+";'><td class=small width=125>"+asStamp+"</td>";
			
			if(InstrumentLogEntries[i][1]=='')
				sLogLines+="<td class=small width=200>"+InstrumentLogEntries[i][2]+"</td><td class=small width=150>"+asParam+"</td>";
			else
				sLogLines+="<td class=small width=200>"+InstrumentLogEntries[i][2]+"</td><td class=small width=150>"+InstrumentLogEntries[i][3]+"</td>";
						
			break;
			}
		}
		
	if(i==InstrumentLogEntries.length)
		{
		sLogLines+="<tr><td class=small width=125>"+asStamp+"</td>";
		sLogLines+="<td class=small width=200>"+asEvent+"</td><td class=small width=150>"+asParam+"</td>";
		}
		
	
	sLogLines+="</tr>";
	}

//*****************************************************************************************
function toggleLogVerbose(bChecked)
	{
	var objTable=document.getElementById('table_log_lines');
	
	for(var c=0; c<objTable.rows.length; c++)
		{
		var objRow=objTable.rows[c];
	
		if(bChecked)
			objRow.style.display='';
		else
			{
			if(objRow.style.backgroundColor=='')
				objRow.style.display='none';
			}
		}
	}

//*****************************************************************************************
function scrollToBottom(idDiv)
	{
	var objDiv=document.getElementById(idDiv);
	
	if(!objDiv)
		return;
	
	objDiv.scrollTop = objDiv.scrollHeight;
	}
	
//*****************************************************************************************
function insertLogLines(idDiv)
	{
	var sText;
	
	sText ="<table id=table_log_lines border=1 cellspacing=0 class=lists>";
	
	if(sLogLines!="")
		{
		sText+=sLogLines;
		sLogLines="";
		}
	else
		{
		sText+="<td class=small colspan=3 align=center>NO DATA</td>";
		}
		
	sText+="</table>";
		
	setHTML(idDiv, sText);
	toggleLogVerbose(false);
	scrollToBottom(idDiv);
	}

//*****************************************************************************************
function insertAlohaChannel(idSpan, sTitle, sValue, sUnits)
	{
	var sText;
		
	// is channel in use? '§chx§' or '?ch?' on Safari
	if(sValue=="" || sValue.substr(0, 5)=='&#xa7' || sValue.charAt(0)=='?')
		return;

	sText ="<table cellspacing=0 cellpadding=0 width=100%>";
	sText+="<tr><td nowrap class=small align=center>"+sTitle+"</td></tr>";
	sText+="<tr><td nowrap align=center><b>"+sValue+"&nbsp;"+sUnits+"</b></td></tr>";
	sText+="</table>";

	setHTML(idSpan, sText);
	}
	
//*****************************************************************************************
function insertTariffName(diTariff, idSpan)
	{
	var sName;
	
	switch(diTariff)
		{
		case   0: sName="CUST";			break;
		case 105: sName="AT";			break;
		
		case 215: sName="EU/US XL";	break;
		case 214: sName="EU/US L";		break;
		case 213: sName="EU/US M";		break;
		case 212: sName="EU/US S";		break;
		case 211: sName="EU/US XS";	break;
		
		case 205: sName="GLOBAL XL";	break;
		case 204: sName="GLOBAL L";	break;
		case 203: sName="GLOBAL M";	break;
		case 202: sName="GLOBAL S";	break;
		case 201: sName="GLOBAL XS";	break;
		
		case 225: sName="TMA XL";		break;
		case 224: sName="TMA L";		break;
		case 223: sName="TMA M";		break;
		case 222: sName="TMA S";		break;
		case 221: sName="TMA XS";		break;
		case 220: sName="TMA";			break;
		default : sName="("+diTariff+")";
		}
		
	if(idSpan)	setHTML(idSpan, sName);
	else			document.write(sName);
	}
	
//*****************************************************************************************
function insertInstrumentName(sClass, iFlags, idSpan)
	{
	var sName;
	
	if		 (sClass=='2000')	sName='H2S-Gasmonitor';
	else if(sClass=='2100')	
		{
		if     (iFlags & 0x0008)	sName='myDatalog8PCK';
		else if(iFlags & 0x0010)	sName='myDatalog8PCV';
		else								sName='myDatalog8PC';
		}
	else if(sClass=='2200')	sName='myDatalog8';
	else if(sClass=='2300')
		{
		if(iFlags & 0x0010)
			{
			if(iFlags & 0x0008)	sName='RTQ 1000-LT';
			else						sName='RTQ 500-LT';
			}
		else
			{
			if(iFlags & 0x0008)	sName='RTQ 1000';
			else						sName='RTQ 500';
			}
		}
	else if(sClass=='2400')	sName='RTQ 500F';
	else if(sClass=='2500')	sName='myDatalog16';
	else if(sClass=='2600')
		{
		if(iFlags & 0x0008)	sName='myDatasensH2Sx';
		else						sName='myDatasensH2S';
		}
	else if(sClass=='2700')	sName='myDatalog4';
	else if(sClass=='2800')	sName='myDatalogMINI';
	else if(sClass=='4000')	sName='UT Base';
	else if(sClass=='4100')	sName='UT IWC-777';
	else if(sClass=='3800')	sName='myDatalogMINImbs';
	else if(sClass=='3500')	sName='myDatalogMINIpck';
	else if(sClass=='3600')	sName='Gasanalyser H2S';
	else if(sClass=='3100')	sName='myDatalogEasy';
	else if(sClass=='3A00')	sName='myDatalogEasyGPS';
	else if(sClass=='3900')	sName='bioxx1';
	else if(sClass=='2900')	sName='myDatalogMICRO';
	else if(sClass=='2A00')	sName='myDatasens rH';
	
	else if(sClass=='3400')	
		{
		if(iFlags & 0x0008)	sName='myDatalogQi';
		else						sName='myDatalogQ';
		}
	
	else if(sClass=='3700')	sName='myDatalog2V';
	else if(sClass=='2B00')	sName='myDatalog2Ex';
	else if(sClass=='2C00')	sName='myDatalogMINIwv';
	else if(sClass=='2D00')	sName='myDatalog232';
	else if(sClass=='3C00')	sName='myDatalogPCM';
	else if(sClass=='2E00')	sName='myDatalogMICROmbs';
	else if(sClass=='2F00')	sName='myDatasensPID';
	else if(sClass=='3000')	sName='myDataTest';
	else if(sClass=='3200')	sName='myDatasensH2S LR';
	else if(sClass=='3300')	sName='HT-Hydrotechnik';
	else if(sClass=='3B00')	sName='Gealog SG DCP';
	else							sName='Unknown';
	
	if(idSpan)	setHTML(idSpan, sName);
	else			document.write(sName);
	}
	
//*****************************************************************************************
//possible values for action are 'hidden' and 'visible'
function hideSelects(bHide) 
	{
	var action='';
	
	if(bHide)	action='hidden';
	else			action='visible';
		
	if (navigator.appName.indexOf("Microsoft")!=-1) 
		{
		for (var S = 0; S < document.forms.length; S++)
			{
			for (var R = 0; R < document.forms[S].length; R++) 
				{
				if (document.forms[S].elements[R].options) 
					{
					if(bHide)
						{
						document.forms[S].elements[R].oldVisibility = document.forms[S].elements[R].style.visibility;
						document.forms[S].elements[R].style.visibility = action;
						}
					else
						{
						document.forms[S].elements[R].style.visibility = document.forms[S].elements[R].oldVisibility;
						}
					}
				}
			}
		}
	}

//*****************************************************************************************
function makeMapURL2(sLat, sLong)
	{
	var fLatS =parseFloatLocal(sLat);
	var fLongS=parseFloatLocal(sLong);
				
	if(fLatS==0 && fLongS==0)
		sMapURL2="";
	else
		{
		if(!bMarker)
			sMapURL2="&markers=";
		else
			sMapURL2+="|";
					
		sMapURL2+=fLatS+","+fLongS+",red";
		}
	}

//*****************************************************************************************
function mapChangeZoom(bPlus)
	{
	var objMapImage=document.getElementById('map_image');

	if(!objMapImage)
		{
		alert("mapChangeZoom can`t find id=map_image");
		return;
		}
		
	if(bPlus)
		{
		if(iMapZoom>=17)
			return;
			
		iMapZoom+=2;
		}
	else
		{
		if(iMapZoom<=3)
			return;
			
		iMapZoom-=2;
		}
		
	document.getElementById("id_loading").style.visibility="visible";
	objMapImage.src=sMapURL1+sMapURL2+sMapURL3+"&zoom="+iMapZoom;
	}

//*****************************************************************************************
function saveAlarmRadius(asURL, asSiteTag, asSiteId, asLat, asLong)
	{
	var objRadius=document.getElementById('loc_alarm_rad');
	var obj_loc_site_lat =document.getElementById('loc_site_lat');
	var obj_loc_site_long=document.getElementById('loc_site_long');
	
	var fLatS =parseFloatLocal(obj_loc_site_lat.value);
	var fLongS=parseFloatLocal(obj_loc_site_long.value);
	
	if(fLatS==0 && fLongS==0 && objRadius.value!=0)
		{
		asURL+="&"+asSiteTag+"_"+asSiteId+"_loc_site_lat="+asLat;
		asURL+="&"+asSiteTag+"_"+asSiteId+"_loc_site_long="+asLong;
		}
	else
		{
		asURL+="&"+asSiteTag+"_"+asSiteId+"_loc_site_lat=" +obj_loc_site_lat.value;
		asURL+="&"+asSiteTag+"_"+asSiteId+"_loc_site_long="+obj_loc_site_long.value;
		}
		
	asURL+="&"+asSiteTag+"_"+asSiteId+"_loc_alarm_rad="+objRadius.value;
			
	document.location.href=asURL;
	}

//*****************************************************************************************
function inheritSitePosition(asLat, asLong)
	{
	var obj_loc_site_lat =document.getElementById('loc_site_lat');
	var obj_loc_site_long=document.getElementById('loc_site_long');
	
	obj_loc_site_lat.value=asLat;
	obj_loc_site_long.value=asLong;
	
	refreshSiteMarker();
	}
	
//*****************************************************************************************
function refreshSiteMarker()
	{
	var obj_loc_site_lat =document.getElementById('loc_site_lat');
	var obj_loc_site_long=document.getElementById('loc_site_long');
	
	var sMapURL2old=sMapURL2;
	
	makeMapURL2(obj_loc_site_lat.value, obj_loc_site_long.value);
	
	if(sMapURL2!=sMapURL2old)
		{
		var objMapImage=document.getElementById('map_image');
	
		document.getElementById("id_loading").style.visibility="visible";
		objMapImage.src=sMapURL1+sMapURL2+sMapURL3+"&zoom="+iMapZoom;
		}
	}

//*****************************************************************************************
function gpsAddDistance(fLat, fLong, fAngle, fDistance)
	{
	with (Math) 
		{
		var pi=3.1415926535897932385;
		var pk=180/pi;
		var fNewLat, fNewLong;
		
		fAngle    = 360-fAngle;
		fAngle 	/= pk;
		fLat   	/= pk;
		fLong  	/= pk;
		fDistance/= 6366;
			
		fNewLat=asin( sin(fLat) * cos(fDistance) + cos(fLat) * sin(fDistance) * cos(fAngle) )
		
		if(cos(fLat)==0)
			fNewLong=fLong;
		else
			fNewLong=(fLong - asin( sin(fAngle) * sin(fDistance) / cos(fNewLat) )+pi) % (2*pi) -pi;
			
		fNewLat *=pk;
		fNewLong*=pk;
		}
		
	return(new Array(fNewLat, fNewLong));
	}
	
//*****************************************************************************************
function googleRadius2pathPoints(fLat, fLong, fRadius)
	{
	var sPath="";
	
	for(a=0; a<=360; a+=9)
		{
		point=gpsAddDistance(fLat, fLong, a, fRadius);
		sPath+="|"+point[0]+","+point[1];
		}
	
	return(sPath);
	}

//*****************************************************************************************
function PreloadImages() 
	{
	var d=document; 
	
	if(!d.images)
		return;
		
	if(!d.MM_p) 
		d.MM_p=new Array(); 
			
	var i,j=d.MM_p.length,a=PreloadImages.arguments; 
		
	for(i=0; i<a.length; i++) 
		{
		if (a[i].indexOf("#")!=0)
			{ 
			d.MM_p[j]=new Image; 
			d.MM_p[j++].src=a[i];
			}
		}
	}

//*****************************************************************************************
function valueOf(idField) 
	{
	var objField=document.getElementById(idField);	
	
	if(!objField)
		return('');
		
	if(objField.options)
		return(objField.options[objField.options.selectedIndex].value);
						
	return(objField.value);
	}
	
//*****************************************************************************************
function textOf(idField) 
	{
	var objField=document.getElementById(idField);	
	
	if(!objField)
		return('');
		
	if(objField.options)
		return(objField.options[objField.options.selectedIndex].text);
						
	return(objField.value);
	}
	
//*****************************************************************************************
function openColorPicker(sSessionId, idColor, sAutoValue) 
	{
	ajaxLoadWindow('idColorPicker', '*thin*', 'include/colorPicker.htm?sid='+sSessionId+'&id='+idColor+'&auto='+sAutoValue);
	moveWindow('idColorPicker', idColor, -4, 17);
	}

//*****************************************************************************************
function pickColor(idColor, sColor) 
	{
	var objColor=document.getElementById(idColor);
	
	if(sColor=='*AUTO*')
		{
		objColor.style.backgroundColor='#FFFFFF';
		objColor.innerHTML='auto';
		}
	else
		{
		objColor.style.backgroundColor=sColor;
		objColor.innerHTML='';
		}
	
	var objColorHidden=document.getElementById(idColor+'_hidden');
	objColorHidden.value=sColor;

	closeWindow('idColorPicker');
	}

//*****************************************************************************************
function submitTo(sURL, sExtraParam) 
	{
	var objForm=document.getElementById('idUtoForm');

	if(!objForm)
		{
		alert("submitTo can`t find form with id=idUtoForm");
		return;
		}

	var sParts=objForm.action.split('?');
		
	objForm.action=sURL+"?"+sParts[1];
	
	if(sExtraParam)
		objForm.action+="&"+sExtraParam;
		
	objForm.submit();
	}
	
//*****************************************************************************************
function moveFieldsUpDown(bUp, iIdx, sUrlSelf, sFields) 
	{
	var sExtraParam="ud_index="+iIdx+"&ud_fields="+sFields;
	
	if(bUp)	sExtraParam+="&subaction=fields_up";
	else  	sExtraParam+="&subaction=fields_down";

	submitTo(sUrlSelf, sExtraParam);
	}
	

//*****************************************************************************************
function toggleCheckBox(sId)
	{
	var objCheckBox=document.getElementById(sId);

	objCheckBox.checked=!objCheckBox.checked;
	}

//*****************************************************************************************
function sgViewPanelDetails(sId, objGraphic, bView)
	{
	for(var f=0; f<10; f++)
		{
		var objPanelValues=document.getElementById("graphic_panel_values_"+sId+"_"+f);
		
		if(!objPanelValues)
			continue;
			
		if(bView)
			objPanelValues.style.display='block';
		else								
			objPanelValues.style.display='none';
		}
		
	objGraphic.panelDetails__=bView;
	}
	
//*****************************************************************************************
function sgDetailedToggle(sId, objGraphic)
	{
	if(objGraphic.cursor_ || objGraphic.viewPanelValues__==1 || (objGraphic.viewPanelValues__==2 && objGraphic.detailed_))
		sgViewPanelDetails(sId, objGraphic, true);
	else
		sgViewPanelDetails(sId, objGraphic, false);
	}
	
//*****************************************************************************************
function sgRefreshPanels(sID, objGraphic)
	{
	// update values in panels
	for(var l=0; l<10; l++)
		{
		var idPanelValue="graphic_panel_values_"+sID+"_"+l;
		var objPanelValues=document.getElementById(idPanelValue);
		
		if(!objPanelValues)
			continue;
			
		ajaxLoadSpan(idPanelValue, "include/ajax_graphicPanelValues.htm?sid=<%data sys.sessionid%>&autoreload=1&graphic_id="+sID+"&nr="+l+"&cursor="+objGraphic.cursor_+"&cursorpos1="+objGraphic.cursorPos1_+"&cursorpos2="+objGraphic.cursorPos2_);
		}
	
	// update start and period fields
	var idDateTimePickerRefresh="graphic_DateTimePickerRefresh_"+sID;
	ajaxLoadSpan(idDateTimePickerRefresh, "include/ajax_graphicDateTimePicker.htm?sid=<%data sys.sessionid%>&autoreload=1&graphic_id="+sID);
	}

//*****************************************************************************************
function sgGraphicMove2(id, objGraphic, asStart)
	{
	var objForm   =document.getElementById("form_"+id);
	objForm.startdate.value=asStart;
	sgUpdateGraphic(id, objGraphic);
	}

//*****************************************************************************************
function sgOnPeriodChanged(id, objGraphic)
	{
	var objForm  =document.getElementById("form_"+id);
	var objPeriod=objForm.periode;

	// ignor onChanged if value is unchanged (Iron/Chrome bug)
	if(objForm.periode.value == objForm.periode.oldValue_)
		return;
		
	objForm.periode.oldValue_=objForm.periode.value;
		
	if(objPeriod.customOption_)
		{
		objPeriod.remove(objPeriod.options.length-1);
		objPeriod.customOption_=null;
		}
			
	sgUpdateGraphic(id, objGraphic);
	}
																		
//*****************************************************************************************
function sgUpdateGraphic(id, objGraphic, bForce)
	{
	var objForm   =document.getElementById("form_"+id);
	var objLines  =document.getElementById("linestates_"+id);

	objGraphic.insertType=objGraphic.insertType_;

	objGraphic.visible0=(objLines.state0 && objLines.state0.checked);
	objGraphic.visible1=(objLines.state1 && objLines.state1.checked);
	objGraphic.visible2=(objLines.state2 && objLines.state2.checked);
	objGraphic.visible3=(objLines.state3 && objLines.state3.checked);
	objGraphic.visible4=(objLines.state4 && objLines.state4.checked);
	objGraphic.visible5=(objLines.state5 && objLines.state5.checked);
	objGraphic.visible6=(objLines.state6 && objLines.state6.checked);
	objGraphic.visible7=(objLines.state7 && objLines.state7.checked);
	objGraphic.visible8=(objLines.state8 && objLines.state8.checked);
	objGraphic.visible9=(objLines.state9 && objLines.state9.checked);

	objGraphic.start	=objForm.startdate.value;
	objGraphic.periode=objForm.periode.value;

	objGraphic.Update(bForce);
	}
	
//*****************************************************************************************
function sgUpdateDownload(id)
	{
	var objDownload=document.getElementById("gdownload_"+id);
	var objForm    =document.getElementById("form_"+id);
	var objLines   =document.getElementById("linestates_"+id);

	if(!objDownload)
		return;

	newSrc="download"+objDownload.fileExtension_+"?sid=<%data sys.sessionid%>&start="+objForm.startdate.value;
	newSrc+="&periode="+objForm.periode.value;
	newSrc+=objDownload.extraParameter_;
	
	for(i=0; i<DownloadParams.length; i++)
		{
		if( (DownloadParams[i])[0]!=id )
			continue;

		if(objLines.state0 && objLines.state0.checked && (DownloadParams[i])[1]==0)	newSrc+=(DownloadParams[i])[2];
		if(objLines.state1 && objLines.state1.checked && (DownloadParams[i])[1]==1)	newSrc+=(DownloadParams[i])[2];
		if(objLines.state2 && objLines.state2.checked && (DownloadParams[i])[1]==2)	newSrc+=(DownloadParams[i])[2];
		if(objLines.state3 && objLines.state3.checked && (DownloadParams[i])[1]==3)	newSrc+=(DownloadParams[i])[2];
		if(objLines.state4 && objLines.state4.checked && (DownloadParams[i])[1]==4)	newSrc+=(DownloadParams[i])[2];
		if(objLines.state5 && objLines.state5.checked && (DownloadParams[i])[1]==5)	newSrc+=(DownloadParams[i])[2];
		if(objLines.state6 && objLines.state6.checked && (DownloadParams[i])[1]==6)	newSrc+=(DownloadParams[i])[2];
		if(objLines.state7 && objLines.state7.checked && (DownloadParams[i])[1]==7)	newSrc+=(DownloadParams[i])[2];
		if(objLines.state8 && objLines.state8.checked && (DownloadParams[i])[1]==8)	newSrc+=(DownloadParams[i])[2];
		if(objLines.state9 && objLines.state9.checked && (DownloadParams[i])[1]==9)	newSrc+=(DownloadParams[i])[2];
		}

	objDownload.href=newSrc;
	}

//*****************************************************************************************
function sgToggleZoom(objGraphic)
	{
	if(objGraphic.bZoomMode)
		objGraphic.zoomMode(false);
	else
		objGraphic.zoomMode(true);
	}

//*****************************************************************************************
function AddScaledField(idField)
	{
	var objField =document.getElementById(idField+"_scaled");
	var objHidden=document.getElementById(idField);
	
	objField.value=objHidden.value;

	ScaledFields.push(new Array(idField, objField, objHidden, 1.0, 0.0));
	}

//*****************************************************************************************
function CalcScaledFieldBack(sId, objField, objHidden, fScale, fOffset)
	{
	var fScaled=parseFloatLocal(objField.value);

	if(isNaN(fScaled))
		{
		objHidden.value='';
		return;
		}

	var fValue=(fScaled-fOffset)/fScale;

	objHidden.value=StringLocal(fValue);
	}

//*****************************************************************************************
function CalcScaledField(sId, objField, objHidden, fScale, fOffset)
	{
	var fValue=parseFloatLocal(objHidden.value);

	if(isNaN(fValue))
		{
		objField.value='';
		return;
		}

	var fScaled=fValue*fScale+fOffset;

	objField.value=StringLocal(fScaled);
	}

//*****************************************************************************************
function ConvertScaledFields()
	{
	for(var i=0; i<ScaledFields.length; i++)
		{
		CalcScaledFieldBack((ScaledFields[i])[0], (ScaledFields[i])[1], (ScaledFields[i])[2], (ScaledFields[i])[3], (ScaledFields[i])[4]);
		}
	}

//*****************************************************************************************
function colorFade2White(sColor, iFade)
	{
	var iRed  =parseInt(sColor.substr(0, 2), 16);
	var iGreen=parseInt(sColor.substr(2, 2), 16);
	var iBlue =parseInt(sColor.substr(4, 2), 16);
	
	iFade=iFade/255;
	
	iRed  =iRed  *(1.0-iFade) + 0xFF*iFade;
	iGreen=iGreen*(1.0-iFade) + 0xFF*iFade;
	iBlue =iBlue *(1.0-iFade) + 0xFF*iFade;

	if(iRed>255)	iRed=255;
	if(iGreen>255)	iGreen=255;
	if(iBlue>255)	iBlue=255;
	
	var sResult=toHex(iRed, 2)+toHex(iGreen, 2)+toHex(iBlue, 2);
			
	return(sResult);
	}

//*****************************************************************************************
function drawAccent(idDiv, diNr, sColor, diType, diLevelPos, sLevel, sColorRef, diTypeRef)
	{
	var objDiv=document.getElementById(idDiv);
	var objColor=document.getElementById('color'+diNr+'d_hidden');

//Log('drawAccent sColor='+sColor+' diType='+diType+' sColorRef='+sColorRef+' diTypeRef='+diTypeRef);

	if(sColor=='*AUTO*' && diType==0 && diTypeRef==0)
		{
		objDiv.innerHTML="off";
		return;
		}
		
	if(diLevelPos>0 && sLevel=='')
		{
		objDiv.innerHTML="off";
		return;
		}
		
	if(sColor=='*AUTO*')
		sColor=objColor.value;
		
	if(sColorRef=='*AUTO*')
		sColorRef=objColor.value;
		
	var diLineHeight=2;
	
	if(diType==1)	diLineHeight=3;
	if(diType==2)	diLineHeight=4;
	
	
	var sHTML='<div style="position:relative; width:100%; height:100%;">';
	
	// accentuation visualization
	sHTML+=   '<div style="position:absolute; left:0; top:0; width:100%; height:100%;">';
	sHTML+=   '<table cellspacing=0 cellpadding=0 width=100% height=100%>';
	
	sHTML+=   '<tr><td><img src="spacer.gif" height=2 border=0></td></tr>';
	
	if(diLevelPos==1)
		sHTML+=   '<tr><td class="graphic_acc_button_text" style="">'+sLevel+'</td></tr>';
	
	sHTML+=   '<tr style="height:'+diLineHeight+'; background:#'+sColor+'"><td><img src="spacer.gif" height='+diLineHeight+' border=0></td></tr>';
	
	if(diLevelPos==2)
		sHTML+=   '<tr><td class="graphic_acc_button_text">'+sLevel+'</td></tr>';
		
	sHTML+=   '<tr><td><img src="spacer.gif" height=2 border=0></td></tr>';
		
	sHTML+=   '</table>';
	sHTML+=   '</div>';
	
	var sHTMLTopTr;
	
	if(diLevelPos==1)	sHTMLTopTr='<tr style="height:3"><td></td></tr>';
	else					sHTMLTopTr='<tr style="height:15"><td><img src="spacer.gif" height=15 width=1></td></tr>';
		
	// refline visualization
	switch(diTypeRef)
		{
		case 0:	// off
			sHTML+=   '<table cellspacing=0 cellpadding=0 width=100% height=100% style="background:#FFFFFF">';
			sHTML+=   '<tr><td></td></tr>';
			sHTML+=   '</table>';
			break;
			
		case 101:	// line solid
			sHTML+=   '<table cellspacing=0 cellpadding=0 width=100% height=100% style="background:#FFFFFF">';
			sHTML+=   sHTMLTopTr;
			sHTML+=   '<tr style="height:1; background:#'+sColorRef+'"><td><img src="spacer.gif" height=1 border=0</td></tr>';
			sHTML+=   '<tr><td></td></tr>';
			sHTML+=   '</table>';
			break;
		
		case 102:	// line dash
			sHTML+=   '<table cellspacing=0 cellpadding=0 width=100% height=100% style="background:#FFFFFF">';
			sHTML+=   sHTMLTopTr;
			sHTML+=   '<tr style="height:1;">';
			
			for(var i=0; i<5; i++)
				{
				sHTML+=   '<td style="width:8%; background:#'+sColorRef+'"><img src="spacer.gif" height=1 border=0</td>';
				sHTML+=   '<td style="width:3%; background:#FFFFFF"><img src="spacer.gif" height=1 border=0</td>';
				}
			
			sHTML+=   '</tr>';
			sHTML+=   '<tr><td></td></tr>';
			sHTML+=   '</table>';
			break;
		
		case 103:	// line dot
			sHTML+=   '<table cellspacing=0 cellpadding=0 width=100% height=100% style="background:#FFFFFF">';
			sHTML+=   sHTMLTopTr;
			sHTML+=   '<tr style="height:1;">';
			
			for(var i=0; i<15; i++)
				{
				sHTML+=   '<td style="width:3%; background:#'+sColorRef+'"><img src="spacer.gif" height=1 border=0</td>';
				sHTML+=   '<td style="width:3%; background:#FFFFFF"><img src="spacer.gif" height=1 border=0</td>';
				}
			
			sHTML+=   '</tr>';
			sHTML+=   '<tr><td></td></tr>';
			sHTML+=   '</table>';
			break;
		
		case 104:	// line dash dot
			sHTML+=   '<table cellspacing=0 cellpadding=0 width=100% height=100% style="background:#FFFFFF">';
			sHTML+=   sHTMLTopTr;
			sHTML+=   '<tr style="height:1;">';
			
			for(var i=0; i<3; i++)
				{
				sHTML+=   '<td style="width:8%; background:#'+sColorRef+'"><img src="spacer.gif" height=1 border=0</td>';
				sHTML+=   '<td style="width:2%; background:#FFFFFF"><img src="spacer.gif" height=1 border=0</td>';
				sHTML+=   '<td style="width:1%; background:#'+sColorRef+'"><img src="spacer.gif" height=1 border=0</td>';
				sHTML+=   '<td style="width:2%; background:#FFFFFF"><img src="spacer.gif" height=1 border=0</td>';
				}
			
			sHTML+=   '</tr>';
			sHTML+=   '<tr><td></td></tr>';
			sHTML+=   '</table>';
			break;
		
		case 105:	// line dash dot dot
			sHTML+=   '<table cellspacing=0 cellpadding=0 width=100% height=100% style="background:#FFFFFF">';
			sHTML+=   sHTMLTopTr;
			sHTML+=   '<tr style="height:1;">';
			
			for(var i=0; i<2; i++)
				{
				sHTML+=   '<td style="width:8%; background:#'+sColorRef+'"><img src="spacer.gif" height=1 border=0</td>';
				sHTML+=   '<td style="width:2%; background:#FFFFFF"><img src="spacer.gif" height=1 border=0</td>';
				sHTML+=   '<td style="width:1%; background:#'+sColorRef+'"><img src="spacer.gif" height=1 border=0</td>';
				sHTML+=   '<td style="width:2%; background:#FFFFFF"><img src="spacer.gif" height=1 border=0</td>';
				sHTML+=   '<td style="width:1%; background:#'+sColorRef+'"><img src="spacer.gif" height=1 border=0</td>';
				sHTML+=   '<td style="width:2%; background:#FFFFFF"><img src="spacer.gif" height=1 border=0</td>';
				}
			
			sHTML+=   '</tr>';
			sHTML+=   '<tr><td></td></tr>';
			sHTML+=   '</table>';
			break;
		
		case 106:	// solid
			sHTML+=   '<table cellspacing=0 cellpadding=0 width=100% height=100% style="background:#'+colorFade2White(sColorRef, 0xAA)+'">';
			sHTML+=   '<tr><td></td></tr>';
			sHTML+=   '</table>';
			break;
			
		case 107:	// range
			sHTML+=   '<table cellspacing=0 cellpadding=0 width=100% height=100% style="background:#888888">';
			
			for(var i=256; i>=128; i-=16)
				sHTML+='  <tr style="background:#'+colorFade2White(sColorRef, i)+'"><td><img src="spacer.gif" width=1 height=1></td></tr>';
			
			sHTML+=   '</table>';
			break;
		}
		
	sHTML+=   '</div>';
	
	objDiv.innerHTML=sHTML;
	}

//*****************************************************************************************
function updateAccent(sType, diNr)
	{
	var sAccColor=valueOf('accent_'+sType+'_color'+diNr+'_hidden');
	var diAccType =parseInt(valueOf('accent_'+sType+'_type'+diNr));
	var sRefColor=valueOf('refline_'+sType+'_color'+diNr+'_hidden');
	var diRefType =parseInt(valueOf('refline_'+sType+'_type'+diNr));
	
	if(sAccColor=="")	sAccColor="*AUTO*";
	
	if(sType.substring(0, 7)=="manual_")
		{
		var sLevel =valueOf('accent_'+sType+'_level'+diNr);
		
		if(sType=='manual_low')
			drawAccent('div_acc_'+sType+'_'+diNr, diNr, sAccColor, diAccType, 1, sLevel, sRefColor, diRefType);
		else
			drawAccent('div_acc_'+sType+'_'+diNr, diNr, sAccColor, diAccType, 2, sLevel, sRefColor, diRefType);
		}
	else
		drawAccent('div_acc_'+sType+'_'+diNr, diNr, sAccColor, diAccType, 0, '', sRefColor, diRefType);
	}

//*****************************************************************************************
function isDefined(asNameOfVar)
	{
	return (typeof(window[asNameOfVar]) == "undefined") ? false: true;
	}

//*****************************************************************************************
function calcTransferAlertTip()
	{
	var diTransferAlerts=parseInt(valueOf('transfer_alerts'));
	var sTransferInterval=valueOf('transfer_interval');
	
	// convert hh:mm -> minutes	
	var parts=sTransferInterval.split(':');
	
	var diMinutes;
	
	if(parts.length==2)
		{
		diMinutes=parseInt(parts[0])*60;
		diMinutes+=parseInt(parts[1]);
		}
	else
		diMinutes=parseInt(parts[0]);

	var diAlarmInterval;

	// calc alarm interval
	switch(diTransferAlerts)
		{
		case 0:	diAlarmInterval=0;					break;
		case 2:	diAlarmInterval=diMinutes *  1;	break;
		case 1:	diAlarmInterval=diMinutes *  2;	break;
		case 3:	diAlarmInterval=diMinutes *  5;	break;
		case 4:	diAlarmInterval=diMinutes * 10;	break;
		case 5:	diAlarmInterval=diMinutes * 20;	break;
		}
		
	if(diAlarmInterval)
		{
		var diAlarmHours=Math.floor(diAlarmInterval/60);
		diAlarmInterval-=diAlarmHours*60;
	
		var sInterval;
	
		if(diAlarmHours<10)	sInterval="0"+diAlarmHours;
		else						sInterval=diAlarmHours;
	
		sInterval+=':';
	
		if(diAlarmInterval<10)	sInterval+="0"+diAlarmInterval;
		else							sInterval+=diAlarmInterval;
	
		setHTML('transfer_alerts_div', '(alarm after  >'+sInterval+' [hh:mm])');
		}
	}

//*****************************************************************************************
function calcMeasureIntervalFactorTip(div, field, bMulti)
	{
	var diFactor=parseInt(valueOf(field));
	var sMeasureInterval=valueOf('measure_interval');

	var fMinutes=parseFloatLocal(sMeasureInterval);
	
	if(isNaN(fMinutes) || isNaN(diFactor))
		{
		setHTML(div, '');
		return;
		}
		
	if(bMulti)
		var fInterval = fMinutes * diFactor;
	else
		var fInterval = fMinutes / diFactor;

	var diIntervalMinutes=Math.floor(fInterval);
	fInterval-=diIntervalMinutes;
	fInterval=Math.floor(fInterval*60);
	
	var sInterval;
	
	if(diIntervalMinutes<10)	sInterval="0"+diIntervalMinutes;
	else								sInterval=diIntervalMinutes;
	
	sInterval+=':';
	
	if(fInterval<10)	sInterval+="0"+fInterval;
	else			  		sInterval+=fInterval;

	setHTML(div, '('+sInterval+' [mm:ss])');
	}

//*****************************************************************************************
function makeViewCommentEditable(sId)
	{
	var objComm=document.getElementById('view_comment_'+sId);
	var objEdit=document.getElementById('view_comment_edit_'+sId);
	
	objComm.style.display="none";
	objEdit.style.display="";
	}

//*****************************************************************************************
function wakeupInstrument(idCustomer, idSite, idInstrument)
	{
	sTelNr='';
	ajaxExecuteScript('include/ajax_query_phone_number.htm?sid=<%data sys.sessionid%>&id='+idInstrument);
	
	if(sTelNr=='')
		{
		var btnOk     = new MsgBoxButton('Ok', function(){}, {} );
	  
		var msgBox = new MsgBox('Please configure the instruments phone number first!', [btnOk], {defaultButton:btnOk, icon:'msgbox_warning.gif'});
	
		msgBox.display();
		return;
		}
	
	var btnCancel = new MsgBoxButton('cancel', function(){}, {} );
	var btnOk     = new MsgBoxButton('Ok', function(){wakeupInstrumentDo(idCustomer, idSite, idInstrument);}, {} );
  
	var msgBox = new MsgBox('Connect to instrument now?', [btnCancel, btnOk], {defaultButton:btnCancel, icon:'msgbox_question.gif'});

	msgBox.display();
	}

//*****************************************************************************************
function wakeupInstrumentDo(idCustomer, idSite, idInstrument)
	{
	ajaxSendGet("action=sms&customer_id="+idCustomer+"&instrument_id="+idInstrument+"&site_id="+idSite+"&command=WAKEUP");
	}
	
//*****************************************************************************************
function stopAloha(sSN)
	{
	var btnCancel = new MsgBoxButton('cancel', function(){}, {} );
	var btnOk     = new MsgBoxButton('Ok', function(){stopAlohaDo(sSN);}, {} );
  
	var msgBox = new MsgBox('Stop Aloha mode?', [btnCancel, btnOk], {defaultButton:btnCancel, icon:'msgbox_question.gif'});

	msgBox.display();
	}

//*****************************************************************************************
function stopAlohaDo(sSN)
	{
	ajaxSendGet("action=insync&sn="+sSN+"&command=STOP_ALOHA");
	}
	
//*****************************************************************************************
function smsCalcStat(sGateway, sUserId, sMonth, idDiv, diTariff, idRef2)
	{
	ajaxQueryXMLSum(idDiv, "0FFF0002[SELECT COUNT(*) AS Sum FROM sms WHERE confirmed_month='"+sMonth+"' and tariff="+diTariff+"]?user_id="+sUserId+"&forward2host="+sGateway+":8080&ssl=1");
	}
