// JavaScript Document

function xNum()
{
  for(var i=0; i<arguments.length; ++i){if(isNaN(arguments[i]) || typeof(arguments[i])!='number') return false;}
  return true;
}

function xStr(s)
{
  for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])!='string') return false;}
  return true;
}

function xDef()
{
  for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])=='undefined') return false;}
  return true;
}

function xCamelize(cssPropStr)
{
  var i, c, a = cssPropStr.split('-');
  var s = a[0];
  for (i=1; i<a.length; ++i) {
    c = a[i].charAt(0);
    s += a[i].replace(c, c.toUpperCase());
  }
  return s;
}

function xGetComputedStyle(e, p, i)
{
  if(!(e=xGetElementById(e))) return null;
  var s, v = 'undefined', dv = document.defaultView;
  if(dv && dv.getComputedStyle){
    s = dv.getComputedStyle(e,'');
    if (s) v = s.getPropertyValue(p);
  }
  else if(e.currentStyle) {
    v = e.currentStyle[xCamelize(p)];
  }
  else return null;
  return i ? (parseInt(v) || 0) : v;
}

function xGetElementById(e)
{
  if(typeof(e)=='string') {
    if(document.getElementById) e=document.getElementById(e);
    else if(document.all) e=document.all[e];
    else e=null;
  }
  return e;
}

function xHeight(e,h)
{
  if(!(e=xGetElementById(e))) return 0;
  if (xNum(h)) {
    if (h<0) h = 0;
    else h=Math.round(h);
  }
  else h=-1;
  var css=xDef(e.style);
  if (e == document || e.tagName.toLowerCase() == 'html' || e.tagName.toLowerCase() == 'body') {
    h = xClientHeight();
  }
  else if(css && xDef(e.offsetHeight) && xStr(e.style.height)) {
    if(h>=0) {
      var pt=0,pb=0,bt=0,bb=0;
      if (document.compatMode=='CSS1Compat') {
        var gcs = xGetComputedStyle;
        pt=gcs(e,'padding-top',1);
        if (pt !== null) {
          pb=gcs(e,'padding-bottom',1);
          bt=gcs(e,'border-top-width',1);
          bb=gcs(e,'border-bottom-width',1);
        }
        // Should we try this as a last resort?
        // At this point getComputedStyle and currentStyle do not exist.
        else if(xDef(e.offsetHeight,e.style.height)){
          e.style.height=h+'px';
          pt=e.offsetHeight-h;
        }
      }
      h-=(pt+pb+bt+bb);
      if(isNaN(h)||h<0) return;
      else e.style.height=h+'px';
    }
    h=e.offsetHeight;
  }
  else if(css && xDef(e.style.pixelHeight)) {
    if(h>=0) e.style.pixelHeight=h;
    h=e.style.pixelHeight;
  }
  return h;
}



function is_child_of(parent, child) {
	if( child != null ) {			
		while( child.parentNode ) {
			if( (child = child.parentNode) == parent ) {
				return true;
			}
		}
	}
	return false;
}
function fixOnMouseOut(element, event, JavaScript_code) {
	var current_mouse_target = null;
	if( event.toElement ) {				
		current_mouse_target 			 = event.toElement;
	} else if( event.relatedTarget ) {				
		current_mouse_target 			 = event.relatedTarget;
	}
	if( !is_child_of(element, current_mouse_target) && element != current_mouse_target ) {
		eval(JavaScript_code);
	}
}

function showImage(sEleId) {
	var ele = xGetElementById(sEleId);
	ele.style.visibility = "visible";
}

function hideImage(sEleId) {
	var ele = xGetElementById(sEleId);
	setTimeout('ele.style.visibility = "hidden"', 500);
}

var tmr = new Array();

function xAnimateMenu(sEleId, targetHeight, speed, num)
{
	var ele = xGetElementById(sEleId);
	var startHeight = xHeight(ele);
	var dispHeight =  targetHeight - startHeight;
	var totalTime = Math.abs(dispHeight / speed * 50);
	var startTime = new Date().getTime();
	if (tmr[num] || !clearInterval(tmr[num]))
	{
		clearInterval(tmr[num]);
	}
	if (num == 2)
	{
		if (xGetElementById('MenuTopicsDateSub').style.height != "0px")
		{
			clearInterval(tmr[3]);
			xGetElementById('MenuTopicsDateSub').style.height = "0px";
			xGetElementById('MenuTopicsTitleSub').style.height = targetHeight + "px";
			return xHeight(ele, targetHeight);
		}
	}
	if (num == 3)
	{
		if (xGetElementById('MenuTopicsTitleSub').style.height != "0px")
		{
			clearInterval(tmr[2]);
			xGetElementById('MenuTopicsTitleSub').style.height = "0px";
			return xHeight(ele, targetHeight);
		}
	}
	var freq = (1 / totalTime);
	tmr[num] = setInterval (
		function () {
			elapsedTime = new Date().getTime() - startTime;
			if (elapsedTime < totalTime) 
			{
				var f = elapsedTime * freq;
				xHeight(ele, Math.round(f * dispHeight + startHeight));
			}
			else 
			{
				clearInterval(tmr[num]);
				xHeight(ele, targetHeight);
				elapsedTime = null;
			}
		}, 10
	);
}
