function toggleMenu(objectID)
{
	if (isID)
	{
		var c = getCookie('_menustate');
		var n = '_' + objectID;
		var domStyle = findDOM(objectID,1);
		var olddisplay = domStyle.display;
		if (domStyle.display == 'none')
		{
			domStyle.display='';
			var pos = c.indexOf(n);
			if (pos != -1)
			{
				c = c.substring(0,pos) + c.substring(pos + n.length);
			}
		}
		else
		{
			domStyle.display='none';
			if (c.indexOf(n) == -1)
			{
				c = c + n;
			}
		}
		setCookie('_menustate', c);
	}
	else if (isALL)
	{
		var c = getCookie('_menustate');
		var n = '_' + objectID;
		var domStyle = findDOM(objectID,1);
		var olddisplay = domStyle.display;
		if (domStyle.display == 'none')
		{
			domStyle.display='block';
			var pos = c.indexOf(n);
			if (pos != -1)
			{
				c = c.substring(0,pos) + c.substring(pos + n.length);
			}
		}
		else
		{
			domStyle.display='none';
			if (c.indexOf(n) == -1)
			{
				c = c + n;
			}
		}
		setCookie('_menustate', c);
	}
}

function setMenuState(objectID, state)
{
	if (isALL || isID)
	{
		var c = getCookie('_menustate');
		var n = '_' + objectID;
		var domStyle = findDOM(objectID,1);
		if (state == 'none')
		{
			if (c.indexOf(n) == -1)
			{
				c = c + n;
			}
		}
		else
		{
			var pos = c.indexOf(n);
			if (pos != -1)
			{
				c = c.substring(0,pos) + c.substring(pos + n.length);
			}
		}
		domStyle.display = state;
		setCookie('_menustate', c);
	}
}

function getMenuState(objectID)
{
	var state = '';
	if (isALL)
	{
		state = 'block';
	}

	if (isALL || isID)
	{
		var c = getCookie('_menustate');
		var n = '_' + objectID;
		if (c.indexOf(n) != -1)
		{
			state = 'none';
		}
	}
	return (state);
}

function hideObject(objectID)
{
	setObjectState(objectID, 'none');
}

function showObject(objectID)
{
	setObjectState(objectID, 'block');
}

function setObjectState(objectID, state)
{
	if (isALL || isID)
	{
		var domStyle = findDOM(objectID,1);
		domStyle.display = state;
	}
}

function isObjectHidden(objectID)
{
	var state = getObjectState(objectID);
	if (state == 'none')
	{
		return (true);
	}
	else
	{
		return (false);
	}
}

function getObjectState(objectID)
{
	var state = '';
	if (isALL)
	{
		state = 'block';
	}

	if (isALL || isID)
	{
		var domStyle = findDOM(objectID,1);
		state = domStyle.display;
	}

	return (state);
}

function getCookie(name)
{
	var dc = document.cookie;
	var prefix = name + "=";
	var begin = dc.indexOf("; " + prefix);
	if (begin == -1)
	{
		begin = dc.indexOf(prefix);
		if (begin != 0)
		{
			return "";
		}
	}
	else
	{
		begin += 2;
	}

	var end = document.cookie.indexOf(";", begin);
	if (end == -1)
	{
		end = dc.length;
	}

	return unescape(dc.substring(begin + prefix.length, end));
}

function setCookie (name, value)
{
	setCookie(name, value, null, null, null, null);
}

function setPermCookie (name, value)
{
	var nextYear = new Date();
	nextYear.setFullYear(nextYear.getFullYear() + 1);
	setCookie(name, value, null, nextYear, null, null);
}

function setCookie (name, value, path, expires, domain, secure)
{
	document.cookie = name + "=" + escape (value) +
    ((expires) ? "; expires=" + expires.toGMTString() : "") +
    ((path) ? "; path=" + path : "") +
    ((domain) ? "; domain=" + domain : "") +
    ((secure) ? "; secure" : "");
}

function deleteCookie (name, path, domain)
{
	document.cookie = name + "=" +
      ((path) ? "; path=" + path : "") +
      ((domain) ? "; domain=" + domain : "") +
      "; expires=Thu, 01-Jan-70 00:00:01 GMT";
}

function addToSelect(l, f, t, v, unique)
{
	if (f != null)
	{
		t = f.value;
		v = t;
	}

	if (t == null || t.length == 0)
	{
		return;
	}
	t = trim(t);
	v = trim(v);

	for (var i=0; i<t.length; i++)
	{
		if (t[i] == ',' || t[i] > 127)
		{
			alert("Invalid characters in " + t);
			return;
		}
	}
	for (var i=0; i<v.length; i++)
	{
		if (v[i] == ',' || v[i] > 127)
		{
			alert("Invalid characters in " + v);
			return;
		}
	}

	var len = l.options.length;
	var index = len;
	if (unique == null || unique == true)
	{
		for (index=0; index<len; index++)
		{
			if (l.options[index].text == t)
			{
				return;
			}
		}
	}
	l.options.length++;
	l.options[index] = new Option(t, v);
	l.selectedIndex = index;
}

function editSelect(l, f, t, v, index)
{
	if (index != null)
	{
		index = l.selectedIndex;
	}
	if (index == -1)
	{
		return;
	}

	if (f != null)
	{
		t = f.value;
		v = f.value;
	}

	if (t == null || t.length == 0)
	{
		return;
	}
	t = trim(t);
	v = trim(v);

	for (var i=0; i<t.length; i++)
	{
		if (t[i] == ',' || t[i] > 127)
		{
			alert("Invalid characters in " + t);
			return;
		}
	}
	for (var i=0; i<v.length; i++)
	{
		if (v[i] == ',' || v[i] > 127)
		{
			alert("Invalid characters in " + v);
			return;
		}
	}

	l.options[index].text = t;
	l.options[index].value = v;
	l.selectedIndex = index;
}

function removeFromSelect(l, selIndex)
{
	if (selIndex == null)
	{
		selIndex = l.selectedIndex;
	}
	if (selIndex == -1 || selIndex > l.options.length)
	{
		return;
	}

	l.options[selIndex] = null;
	if (selIndex < l.options.length)
	{
		l.selectedIndex = selIndex;
	}
	else
	{
		l.selectedIndex = selIndex - 1;
	}
}

function trim(s)
{
	if (s == null || s.length == 0)
	{
		return (s);
	}
	while (s.substring(0,1) == ' ') s = s.substring(1);
	while (s.substring(s.length-1,s.length) == ' ') s = s.substring(0,s.length-1);
	return s
}

function getDateFromValue(v, format)
{
	var d = null;

	if (format == null || format.length == 0)
	{
		format = "DD/MM/YYYY";
	}
	format = format.toUpperCase();

	var dd = "";
	var mm = "";
	var yy = "";
	if (v.length != 0)
	{
		var pos = 0;
		var vpos = 0;
		while (pos < format.length)
		{
			if (format.charAt(pos) == 'D')
			{
				while (pos < format.length && format.charAt(pos) == 'D')
				{
					pos++;
				}
				var endc;
				if (pos >= format.length)
				{
					endc = '\n';
				}
				else
				{
					endc = format.charAt(pos);
				}

				while (vpos < v.length && v.charAt(vpos) != endc)
				{
					dd += v.charAt(vpos);
					vpos++;
				}
			}
			else if (format.charAt(pos) == 'M')
			{
				while (pos < format.length && format.charAt(pos) == 'M')
				{
					pos++;
				}
				var endc;
				if (pos >= format.length)
				{
					endc = '\n';
				}
				else
				{
					endc = format.charAt(pos);
				}

				while (vpos < v.length && v.charAt(vpos) != endc)
				{
					mm += v.charAt(vpos);
					vpos++;
				}
			}
			else if (format.charAt(pos) == 'Y')
			{
				while (pos < format.length && format.charAt(pos) == 'Y')
				{
					pos++;
				}
				var endc;
				if (pos >= format.length)
				{
					endc = '\n';
				}
				else
				{
					endc = format.charAt(pos);
				}

				while (vpos < v.length && v.charAt(vpos) != endc)
				{
					yy += v.charAt(vpos);
					vpos++;
				}
			}
			else
			{
				pos++;
				vpos++;
			}
		}
		if (yy < 100)
		{
			if (yy >= 49)
			{
				yy = "19" + yy;
			}
			else
			{
				yy = "20" + yy;
			}
		}
		d = new Date(yy, mm-1, dd);
	}

	return (d);
}

function GetAbsolutePosition (image)
{

  var rd = { x:0, y:0 };

  if (document.layers)
  {
    // Netscape we can just read the attributes directly
    rd.x = image.x;
    rd.y = image.y - 12;  // for some reason we need to subtract 12 fromthe actual
                          // value to get the text aligned correctly
  }
  else
  {
    // start with the image's coordinates and walk through it's ancestory of
    // elements (tables, div's, spans, etc...) until we're at the top. Along
    // the way we add in each element's coordinates to get the final answer
    do
    {
      rd.x += image.offsetLeft;
      rd.y += image.offsetTop;
      image = image.offsetParent;
    }  while( image );
  }

  return (rd);
}
