/******************************************************************************************
* JAVASCRIPT GLOBALS FUNCTIONS
******************************************************************************************/
function getObj(id, framename)
{
 if (framename && top[framename]) { myDocument = top[framename].document; } else { myDocument = document; }
 
 if (myDocument.getElementById)
 {
  myObj = myDocument.getElementById(id);
 }
 else if (myDocument.all)
 {
  myObj = myDocument.all[id];
 }
 else if (myDocument.layers)
 {
  myObj = myDocument.layers[id];
  myObj.style = myDocument.layers[id];
 }
 return myObj;
}

function getObjValue(id, framename)
{
 if (myObj = getObj(id, framename))
 {  
  if (myObj.value) { return myObj.value; } // Input type
  if (myObj.options) { return myObj.options[myObj.selectedIndex].value; } // Select type
  if (myObj.innerHTML) { return myObj.innerHTML } // All other types (DIV/SPANs/etc)
 }
 else
 {
  return false;
 }
}

function getFrame(framename)
{
 if (framename && top[framename])
 {
  return top[framename];
 }
 else
 {
  return false;
 }
}

function getTop(myObj)
{
 var top=0;
 while (myObj != document.body)
 {
  top += myObj.offsetTop;
  myObj = myObj.offsetParent;
 } 
 return top;
}

function getLeft(myObj)
{
 var left=0;
 while (myObj != document.body)
 {
  left += myObj.offsetLeft;
  myObj = myObj.offsetParent;
 } 
 return left;
}

function getPageDimension()
{
 var dimension = new Array(2);
 if(typeof(window.innerWidth)=='number')
 {
  //Non-IE
  dimension['width'] = window.innerWidth;
  dimension['height'] = window.innerHeight;
 }
 else if( document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight))
 {
  //IE 6+ in 'standards compliant mode'
  dimension['width'] = document.documentElement.clientWidth;
  dimension['height'] = document.documentElement.clientHeight;
 }
 else if(document.body && ( document.body.clientWidth || document.body.clientHeight))
 {
  //IE 4 compatible
  dimension['width'] = document.body.clientWidth;
  dimension['height'] = document.body.clientHeight;
 }
 return dimension;
}

function showAttributes(myObj, pattern)
{
 var output;
	output = '';
 for (var key in myObj)
 {
		value = String(myObj[key]);
		if (pattern)
		{
			if ((key.match(pattern) || value.match(pattern)) && key != 'undefined')
			{
				output += key + '=>' + myObj[key] + '\n';
			}
		}
		else
		{
   output += key + '=>' + myObj[key] + '\n';
  }
 }
 alert(output);
}

function mouseCoords(e)
{
 if(e.pageX || e.pageY){
  return {x:e.pageX, y:e.pageY};
 }
 return {
  x:e.clientX + document.body.scrollLeft - document.body.clientLeft,
  y:e.clientY + document.body.scrollTop  - document.body.clientTop
 };
}

/******************************************************************************************
* PANELS
******************************************************************************************/
function loadPanel(panel, url, functionname, fade) // Loads content into panel on main frame
{
 var myPanel = new Object();
 
 if (myPanel=getObj(panel,targetframe))
 {
  if (!url)
  {
   loaderBar('hide');  
   wipeUp(panel);  
   return;
  }
 }
 else
 {
  return false;
 }

 loaderBar('show');
 var ajaxObj = new Ajax();
 ajaxObj.onreadystatechange = function()
 {
  if (ajaxObj.readyState==4 && ajaxObj.status==200)
  {
   var myPanel = new Object();
   if (myPanel = getObj(panel,targetframe))
   {
    myPanel.style.filter = "Alpha(opacity=0)";
    myPanel.style.display = ''; 
    fadeIn(panel);  
    
    myPanel.innerHTML = ajaxObj.responseText;
    if (functionname)
    {
     functionname();
    }
    loaderBar('hide');   
   }
  }
 }

 ajaxObj.open("GET",url+"&nocache="+Math.random(),true); 
 ajaxObj.send(null); 
 return true;
}

function closePanel(panel, frame)
{
 if (!frame) { frame=targetframe; }
 var myPanel = new Object();
 if (myPanel=getObj(panel,frame))
 {
  loaderBar('hide');  
  myPanel.style.display = 'none';
  return;
 }
}

function goUrl(url)
{
	if (url)
	{
	 window.location = url;
	}
}

/******************************************************************************************
* MENU
******************************************************************************************/
function showSubmenu(tag, direction)
{
	var menu = getObj('menu');
 var menubutton = getObj(tag);
 var submenu = getObj('submenu['+tag+']');
	var leftoffset = 0;
	
	if (direction=='right')
	{
		leftoffset = menubutton.offsetWidth - 180;
	}
	
	submenu.style.top = (getTop(menu) + menu.clientHeight - 26) + 'px';
	submenu.style.left = (getLeft(menubutton) + leftoffset) + 'px';
	submenu.style.display = '';
	currentSubmenu = tag;
 //showAttributes(menubutton,/(height|^\d+)/i);	
	
	menubutton.onmouseout = submenu.onmouseout = timeoutSubmenu;
	if (typeof(menutimer)!='undefined')
	{
		clearTimeout(menutimer);
	}
}

function closeSubmenu()
{
	if (typeof(currentSubmenu)!='undefined')
	{
	 getObj('submenu['+currentSubmenu+']').style.display = 'none';
	}
	return;
}

function timeoutSubmenu()
{
	menutimer = setTimeout("closeSubmenu()",500);
}

/******************************************************************************************
* SOUNDS
******************************************************************************************/

function playSound(mediafile)
{
 var mySoundAlert = getObj('soundAlert',targetframe)
 if (!mediafile) { var mediafile = 'counteropen'; }
 
 if (mySoundAlert)
 {
  mySoundAlert.src = 'sounds/'+mediafile+'.mid';
 }
}

/******************************************************************************************
* AJAX CLASS
******************************************************************************************/
function Ajax()
{
 var ajaxObj;
 try
 {
  // Firefox, Opera 8.0+, Safari
  ajaxObj=new XMLHttpRequest();
 }
 catch (e)
 {
  // Internet Explorer
  try
  {
   ajaxObj=new ActiveXObject("Msxml2.XMLHTTP");
  }
  catch (e)
  {
   ajaxObj=new ActiveXObject("Microsoft.XMLHTTP");
  }
 }
 return ajaxObj;
}

/******************************************************************************************
* DEBUG
******************************************************************************************/
function debug(message)
{
 var myDate = new Date();
 with (getObj('debugoutput'),targetframe)
 {
  innerHTML = myDate.getTime()+'<br>';
  innerHTML += message; 
 }
}