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='';
			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);
			}
			state = '';
		}
		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, '');
}

function setObjectState(objectID, state)
{
	if (isALL || isID)
	{
		var domStyle = findDOM(objectID,1);
		if (state == 'block')
		{
			state = '';
		}
		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;
		if (state == '')
		{
			state = 'block';
		}
	}

	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)
	{
		v = f.value;
		t = f.text;
	}

	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);
}

// ---------------
// Date/Time formating
// ---------------

var MONTH_NAMES=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
var DAY_NAMES=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat');
function LZ(x) {return(x<0||x>9?"":"0")+x}

function isDate(val,format)
{
	var date=getDateFromFormat(val,format);
	if (date==0) { return false; }
	return true;
}

function compareDates(date1,dateformat1,date2,dateformat2)
{
	var d1=getDateFromFormat(date1,dateformat1);
	var d2=getDateFromFormat(date2,dateformat2);
	if (d1==0 || d2==0) {
		return -1;
		}
	else if (d1 > d2) {
		return 1;
		}
	return 0;
}
	
function formatDate(date,format)
{
	format=format+"";
	var result="";
	var i_format=0;
	var c="";
	var token="";
	var y=date.getYear()+"";
	var M=date.getMonth()+1;
	var d=date.getDate();
	var E=date.getDay();
	var H=date.getHours();
	var m=date.getMinutes();
	var s=date.getSeconds();
	var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;
	// Convert real date parts into formatted versions
	var value=new Object();
	if (y.length < 4) {y=""+(y-0+1900);}
	value["y"]=""+y;
	value["yyyy"]=y;
	value["yy"]=y.substring(2,4);
	value["M"]=M;
	value["MM"]=LZ(M);
	value["MMM"]=MONTH_NAMES[M-1];
	value["NNN"]=MONTH_NAMES[M+11];
	value["d"]=d;
	value["dd"]=LZ(d);
	value["E"]=DAY_NAMES[E+7];
	value["EE"]=DAY_NAMES[E];
	value["H"]=H;
	value["HH"]=LZ(H);
	if (H==0){value["h"]=12;}
	else if (H>12){value["h"]=H-12;}
	else {value["h"]=H;}
	value["hh"]=LZ(value["h"]);
	if (H>11){value["K"]=H-12;} else {value["K"]=H;}
	value["k"]=H+1;
	value["KK"]=LZ(value["K"]);
	value["kk"]=LZ(value["k"]);
	if (H > 11) { value["a"]="PM"; }
	else { value["a"]="AM"; }
	value["m"]=m;
	value["mm"]=LZ(m);
	value["s"]=s;
	value["ss"]=LZ(s);
	while (i_format < format.length) {
		c=format.charAt(i_format);
		token="";
		while ((format.charAt(i_format)==c) && (i_format < format.length)) {
			token += format.charAt(i_format++);
			}
		if (value[token] != null) { result=result + value[token]; }
		else { result=result + token; }
		}
	return result;
}
	
// ------------------------------------------------------------------
// getDateFromFormat( date_string , format_string )
//
// This function takes a date string and a format string. It matches
// If the date string matches the format string, it returns the 
// getTime() of the date. If it does not match, it returns 0.
// ------------------------------------------------------------------
function getDateFromFormat(val,format)
{
	val=val+"";
	format=format+"";
	var i_val=0;
	var i_format=0;
	var c="";
	var token="";
	var token2="";
	var x,y;
	var now=new Date();
	var year=now.getYear();
	var month=now.getMonth()+1;
	var date=1;
	var hh=now.getHours();
	var mm=now.getMinutes();
	var ss=now.getSeconds();
	var ampm="";
	
	while (i_format < format.length) {
		// Get next token from format string
		c=format.charAt(i_format);
		token="";
		while ((format.charAt(i_format)==c) && (i_format < format.length)) {
			token += format.charAt(i_format++);
			}
		// Extract contents of value based on format token
		if (token=="yyyy" || token=="yy" || token=="y") {
			if (token=="yyyy") { x=4;y=4; }
			if (token=="yy")   { x=2;y=2; }
			if (token=="y")    { x=2;y=4; }
			year=_getInt(val,i_val,x,y);
			if (year==null) { return 0; }
			i_val += year.length;
			if (year.length==2) {
				if (year > 70) { year=1900+(year-0); }
				else { year=2000+(year-0); }
				}
			}
		else if (token=="MMM"||token=="NNN"){
			month=0;
			for (var i=0; i<MONTH_NAMES.length; i++) {
				var month_name=MONTH_NAMES[i];
				if (val.substring(i_val,i_val+month_name.length).toLowerCase()==month_name.toLowerCase()) {
					if (token=="MMM"||(token=="NNN"&&i>11)) {
						month=i+1;
						if (month>12) { month -= 12; }
						i_val += month_name.length;
						break;
						}
					}
				}
			if ((month < 1)||(month>12)){return 0;}
			}
		else if (token=="EE"||token=="E"){
			for (var i=0; i<DAY_NAMES.length; i++) {
				var day_name=DAY_NAMES[i];
				if (val.substring(i_val,i_val+day_name.length).toLowerCase()==day_name.toLowerCase()) {
					i_val += day_name.length;
					break;
					}
				}
			}
		else if (token=="MM"||token=="M") {
			month=_getInt(val,i_val,token.length,2);
			if(month==null||(month<1)||(month>12)){return 0;}
			i_val+=month.length;}
		else if (token=="dd"||token=="d") {
			date=_getInt(val,i_val,token.length,2);
			if(date==null||(date<1)||(date>31)){return 0;}
			i_val+=date.length;}
		else if (token=="hh"||token=="h") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<1)||(hh>12)){return 0;}
			i_val+=hh.length;}
		else if (token=="HH"||token=="H") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<0)||(hh>23)){return 0;}
			i_val+=hh.length;}
		else if (token=="KK"||token=="K") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<0)||(hh>11)){return 0;}
			i_val+=hh.length;}
		else if (token=="kk"||token=="k") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<1)||(hh>24)){return 0;}
			i_val+=hh.length;hh--;}
		else if (token=="mm"||token=="m") {
			mm=_getInt(val,i_val,token.length,2);
			if(mm==null||(mm<0)||(mm>59)){return 0;}
			i_val+=mm.length;}
		else if (token=="ss"||token=="s") {
			ss=_getInt(val,i_val,token.length,2);
			if(ss==null||(ss<0)||(ss>59)){return 0;}
			i_val+=ss.length;}
		else if (token=="a") {
			if (val.substring(i_val,i_val+2).toLowerCase()=="am") {ampm="AM";}
			else if (val.substring(i_val,i_val+2).toLowerCase()=="pm") {ampm="PM";}
			else {return 0;}
			i_val+=2;}
		else {
			if (val.substring(i_val,i_val+token.length)!=token) {return 0;}
			else {i_val+=token.length;}
			}
		}
	// If there are any trailing characters left in the value, it doesn't match
	if (i_val != val.length) { return 0; }
	// Is date valid for month?
	if (month==2) {
		// Check for leap year
		if ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ) { // leap year
			if (date > 29){ return 0; }
			}
		else { if (date > 28) { return 0; } }
		}
	if ((month==4)||(month==6)||(month==9)||(month==11)) {
		if (date > 30) { return 0; }
		}
	// Correct hours value
	if (hh<12 && ampm=="PM") { hh=hh-0+12; }
	else if (hh>11 && ampm=="AM") { hh-=12; }
	var newdate=new Date(year,month-1,date,hh,mm,ss);
	return newdate.getTime();
}

// ------------------------------------------------------------------
// parseDate( date_string [, prefer_euro_format] )
//
// This function takes a date string and tries to match it to a
// number of possible date formats to get the value. It will try to
// match against the following international formats, in this order:
// y-M-d   MMM d, y   MMM d,y   y-MMM-d   d-MMM-y  MMM d
// M/d/y   M-d-y      M.d.y     MMM-d     M/d      M-d
// d/M/y   d-M-y      d.M.y     d-MMM     d/M      d-M
// A second argument may be passed to instruct the method to search
// for formats like d/M/y (european format) before M/d/y (American).
// Returns a Date object or null if no patterns match.
// ------------------------------------------------------------------
function parseDate(val)
{
	var preferEuro=(arguments.length==2)?arguments[1]:false;
	generalFormats=new Array('y-M-d','MMM d, y','MMM d,y','y-MMM-d','d-MMM-y','MMM d');
	monthFirst=new Array('M/d/y','M-d-y','M.d.y','MMM-d','M/d','M-d');
	dateFirst =new Array('d/M/y','d-M-y','d.M.y','d-MMM','d/M','d-M');
	var checkList=new Array('generalFormats',preferEuro?'dateFirst':'monthFirst',preferEuro?'monthFirst':'dateFirst');
	var d=null;
	for (var i=0; i<checkList.length; i++) {
		var l=window[checkList[i]];
		for (var j=0; j<l.length; j++) {
			d=getDateFromFormat(val,l[j]);
			if (d!=0) { return new Date(d); }
			}
		}
	return null;
}
	
// ------------------------------------------------------------------
// Utility functions for parsing in getDateFromFormat()
// ------------------------------------------------------------------
function _isInteger(val)
{
	var digits="1234567890";
	for (var i=0; i < val.length; i++) {
		if (digits.indexOf(val.charAt(i))==-1) { return false; }
		}
	return true;
}
function _getInt(str,i,minlength,maxlength)
{
	for (var x=maxlength; x>=minlength; x--) {
		var token=str.substring(i,i+x);
		if (token.length < minlength) { return null; }
		if (_isInteger(token)) { return token; }
		}
	return null;
}

// ---------------



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);
}

function openChildWindow(url, loc, options)
{
	if (loc == null)
	{
		loc = "";
	}
	if (options == null)
	{
		options = "dependent=yes,menubar=no,toolbar=no,location=no,resizable=yes,scrollbars=yes,width=780,height=400";
	}
	return window.open(url, loc, options);
}

function browserWidthHeight()
{
	var myWidth = 0, myHeight = 0;
	if( typeof( window.innerWidth ) == 'number' )
	{
		//Non-IE
		myWidth = window.innerWidth;
		myHeight = window.innerHeight;
	}
	else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )
	{
		//IE 6+ in 'standards compliant mode'
		myWidth = document.documentElement.clientWidth;
		myHeight = document.documentElement.clientHeight;

	}
	else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) )
	{
		//IE 4 compatible
		myWidth = document.body.clientWidth;
		myHeight = document.body.clientHeight;
	}
	return [ myWidth, myHeight ];
}

function addEvent(obj, evType, fn)
{ 
	if (obj.addEventListener)
	{ 
		obj.addEventListener(evType, fn, false); 
		return true; 
	}
	else if (obj.attachEvent)
	{ 
		var r = obj.attachEvent("on"+evType, fn); 
		return r; 
	}
	else
	{ 
		return false; 
	} 
}

function swapNodes(a, b)
{
	// if IE just use swapNode
	if (a.swapNode)
	{
		a.swapNode(b);
	}
	else
	{
		var n = a.nextSibling;
		var p = a.parentNode;
		b.parentNode.replaceChild(a, b);
		p.insertBefore(b, n);
	}
}


var agt=navigator.userAgent.toLowerCase();

var is_major = parseInt(navigator.appVersion);
var is_minor = parseFloat(navigator.appVersion);

var is_nav  = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1)
			&& (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1)
			&& (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1));
var is_nav2 = (is_nav && (is_major == 2));
var is_nav3 = (is_nav && (is_major == 3));
var is_nav4 = (is_nav && (is_major == 4));
var is_nav4up = (is_nav && (is_major >= 4));
var is_navonly      = (is_nav && ((agt.indexOf(";nav") != -1) ||
					  (agt.indexOf("; nav") != -1)) );
var is_nav6 = (is_nav && (is_major == 5));
var is_nav6up = (is_nav && (is_major >= 5));
var is_gecko = (agt.indexOf('gecko') != -1);

var is_ie     = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
var is_ie3    = (is_ie && (is_major < 4));
var is_ie4    = (is_ie && (is_major == 4) && (agt.indexOf("msie 4")!=-1) );
var is_ie4up  = (is_ie && (is_major >= 4));
var is_ie5    = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.0")!=-1) );
var is_ie5_5  = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.5") !=-1));
var is_ie5up  = (is_ie && !is_ie3 && !is_ie4);
var is_ie5_5up =(is_ie && !is_ie3 && !is_ie4 && !is_ie5);
var is_ie6    = (is_ie && (is_major == 4) && (agt.indexOf("msie 6.")!=-1) );
var is_ie6up  = (is_ie && !is_ie3 && !is_ie4 && !is_ie5 && !is_ie5_5);

var is_aol   = (agt.indexOf("aol") != -1);
var is_aol3  = (is_aol && is_ie3);
var is_aol4  = (is_aol && is_ie4);
var is_aol5  = (agt.indexOf("aol 5") != -1);
var is_aol6  = (agt.indexOf("aol 6") != -1);

var is_safari = (agt.indexOf("safari") != -1);

var is_opera = (agt.indexOf("opera") != -1);
var is_opera2 = (agt.indexOf("opera 2") != -1 || agt.indexOf("opera/2") != -1);
var is_opera3 = (agt.indexOf("opera 3") != -1 || agt.indexOf("opera/3") != -1);
var is_opera4 = (agt.indexOf("opera 4") != -1 || agt.indexOf("opera/4") != -1);
var is_opera5 = (agt.indexOf("opera 5") != -1 || agt.indexOf("opera/5") != -1);
var is_opera5up = (is_opera && !is_opera2 && !is_opera3 && !is_opera4);

var is_webtv = (agt.indexOf("webtv") != -1);

var is_TVNavigator = ((agt.indexOf("navio") != -1) || (agt.indexOf("navio_aoltv") != -1));
var is_AOLTV = is_TVNavigator;

var is_hotjava = (agt.indexOf("hotjava") != -1);
var is_hotjava3 = (is_hotjava && (is_major == 3));
var is_hotjava3up = (is_hotjava && (is_major >= 3));
