/* 
 * common.js $Revision: 1.30 $
 * For use at www.applion.de
 *
 * Copyright © 2006 hin&web GbR, Nils Bandener, nils@applion.de
 *
 * Not redistributable
 *
 * $Id: common.js,v 1.30 2006/07/22 11:22:54 nils Exp $
 */

function toggleDisplay(element)
{
   if (element.style.display == 'none')
   {
      element.style.display = 'block';
   }
   else
   {
      element.style.display = 'none';
   }
} 
 
var menuShowing = null;

function showMenu(menuId, menuTitleId)
{
   var menu = document.getElementById(menuId);
   var menuTitle = document.getElementById(menuTitleId);

   if (menuShowing != null && menuShowing.id != menuId)
   {
      hideMenu();
   }
   
   if (!menu || !menu.childNodes || menu.childNodes.length == 0)
   {
      return;
   }
   
   if (menu.style.visibility != "visible")
   {
      if (checkForFactoryMenu(menu))
      {
         deferMenu(menuId, menuTitleId);
         return;
      }      
      
      menu.style.left = (getElementLeft(menuTitle) - 5) + "px";
      menu.style.top = (getElementTop(menuTitle) + getElementHeight(menuTitle) - 1 + 1) + "px";
      menu.style.width = Math.max(getElementWidth(menu), getElementWidth(menuTitle) + 8) + "px";                  
      menu.style.visibility = "visible";
      
      menuShowing = menu;
   }

   keepMenu();
}

var deferedMenuId;
var deferedMenuTitleId;

function deferMenu(menuId, menuTitleId)
{
   deferedMenuId = menuId;
   deferedMenuTitleId = menuTitleId;
}

function resumeDeferedMenu()
{
   if (deferedMenuId && deferedMenuTitleId && !menuShowing)
   {
      showMenu(deferedMenuId, deferedMenuTitleId);
      deferedMenuId = null;
      deferedMenuTitleId = null;
   }
}

var loadedFactoryMenus = new Object();

function checkForFactoryMenu(menu)
{
   if (loadedFactoryMenus[menu.id])
   {
      return false;
   }
   
   childNodes = menu.childNodes;
   childNodesLength = childNodes.length;
   
   for (var i = 0; i < childNodesLength; i++)
   {
      if (childNodes[i].className == 'factoryMenuItem')
      {
         menuFactory.getMenu(childNodes[i].id.slice(4), updateFactoryMenu);
         return true;
      }
   }
   return false;
}

function updateFactoryMenu(menu)
{
   if (factoryMenu = document.getElementById('menu' + menu.key))
   {
      factoryMenu.innerHTML = menu.html;
      loadedFactoryMenus[factoryMenu.parentNode.id] = true;
   }
   
   resumeDeferedMenu();
}

var keepMenuV = false;

function maybeHideMenu()
{
   keepMenuV = false;
   setTimeout(maybeHideMenuT, 1000);
}

function keepMenu()
{
   keepMenuV = true;
}

function maybeHideMenuT()
{
   if (!keepMenuV)
   {
      hideMenu();
   }
}

function hideMenu()
{
   if (menuShowing != null)
   {
      menuShowing.style.visibility = "hidden";
      menuShowing = null;
   }
}

function getElementLeft(element)
{
   if (document.defaultView && document.defaultView.getComputedStyle)
   {
      pos = 0;
      
      do
      {
         pos += element.offsetLeft;
         element = element.offsetParent;
      }
      while (element);
      
      return pos;
   }
   else if (document.all)
   {
      pos = 0;
      
      do
      {
         pos += element.offsetLeft;
         element = element.offsetParent;
      }
      while (element);
      
      return pos;
   }
}

function getElementTop(element)
{
   if (document.defaultView && document.defaultView.getComputedStyle)
   {  
      pos = 0;
      
      do
      {
         pos += element.offsetTop;
         element = element.offsetParent;
      }
      while (element);
      
      return pos;
   }
   else if (document.all)
   {
      pos = 0;
      
      do
      {
         pos += element.offsetTop;
         element = element.offsetParent;
      }
      while (element);
      
      return pos;
   }
}

function getElementWidth(element)
{
   if (document.defaultView && document.defaultView.getComputedStyle)
   {  
      
      return element.offsetWidth;
   }
   else if (document.all)
   {
      return element.offsetWidth;
   }
}


function getElementHeight(element)
{
   if (document.defaultView && document.defaultView.getComputedStyle)
   {  
      return element.offsetHeight;
   }
   else if (document.all)
   {
      return element.offsetHeight;
   }
}

function updateWindowSize()
{
   if (!document.all) 
   {
      window.sizeToContent();
      setTimeout('window.sizeToContent();window.sizeToContent();', 100);
   }
   else
   {
      var popupContent = document.getElementById("popup");
      window.resizeTo(popupContent.offsetWidth + 30, popupContent.offsetHeight + 30);
      window.resizeTo(popupContent.offsetWidth + (popupContent.offsetWidth - document.body.offsetWidth) + 80, popupContent.offsetHeight + (popupContent.offsetHeight - document.body.offsetHeight) + 80);
   }
}

function setCheckboxes(element, checked)
{
   for (i = 0; i < element.length; i++)
   {
      element[i].checked = checked;
   }
}

function getRadioButtonGroupValue(radioButton) 
{
	for(var i = 0; i < radioButton.length; i++) 
   {
		if(radioButton[i].checked) 
      {
			return radioButton[i].value;
		}
	}
	return null;
}



var agent = navigator.userAgent.toLowerCase();
var isIE = agent.indexOf("msie") != -1 && agent.indexOf("opera") == -1;

function addEvent(element, name, func) 
{
	if (isIE) 
   {
		element.attachEvent("on" + name, func);
	} 
   else 
   {
		element.addEventListener(name, func, false);
	}
}

function isElementOfClass(element, className)
{
   if (element && element.className && className)
   {
      var classes = element.className.split(" ");
      for (var i = 0; i < classes.length; i++)
      {
         if (className == classes[i])
         {
            return true;
         }
      }
   }
   
   return false;
}

function cancelBubble(event)
{
	if (!event) 
   {
      event = window.event;
   }
   
	event.cancelBubble = true;
   
	if (event.stopPropagation)
   {
      event.stopPropagation();
   }
}

function getCookie(name) 
{
   var pos = document.cookie.indexOf(name + "=");
   
   if (pos != -1)
   {
      var end = document.cookie.indexOf(";", pos);
      
      if (end == -1)
      {
         end = document.cookie.length;
      }
      
      return unescape(document.cookie.substring(pos + 1 + name.length, end));
   }
   
   return null;
}

function setCookie(name, value, expires, path) 
{  
   document.cookie = name + "=" + escape(value) + (expires ? ";expires=" + expires.toGMTString() : "") + (path ? ";path=" + path : ""); 
}

function removeClass(element, className) 
{
	if (!element.className) 
   {
		return;
	}
   
	var classes = element.className.split(" ");
   for (var i = 0; i < classes.length; i++)
   {
      if (classes[i] == className)
      {
         classes[i] = '';
      }
   }
   
   element.className = classes.join("");
}

function addClass(element, className) 
{
	element.className += " " + className;
}

/* ----------------- IFrame Popups ----------------------- */

var popup = null;
var popupShowing = false;

function showPopup(url, title)
{
   if (popup)
   {
      closePopup();
   }
   popupShowing = true;
   popup = document.createElement('div');
   popup.id = 'popup';
   popup.className = 'actionBox';
   popup.innerHTML = '<div class="aBox"><div class="aBoxNose">&nbsp;<div class="aBoxNoseC1"></div><div class="aBoxNoseC2"></div></div><div class="aBoxHead">' + title + '</div><iframe id="popupIFrame" scrolling="no" frameborder="0" onload="updatePopupSize();" src="' + url + '" width="600"></iframe></div></div>';
   popup.style.display = 'none';
   document.body.appendChild(popup);
}

function setPopupType(type)
{
   if (popup)
   {
      popup.className = type;
   }
}

function closePopup(delay)
{   
   if (popup)
   {
      var maincontent = getMaincontent();
      if (maincontent)
      {
         removeClass(maincontent, 'halfOpaque');
      }
      if (delay)
      {
         popup.style.display = 'none';
         setTimeout('closePopup(false)', 100);
      }
      else
      {
         popup.parentNode.removeChild(popup);
         popup = null;
      }
   }
}

function getMaincontent()
{
   var maincontent = document.getElementById('maincontent');

   return maincontent;
}

function updatePopupSize(quick)
{
   if (!popup)
   {
      return;
   }
   if (popupShowing)
   {
      popup.style.display = 'block';
      if (!quick)
      {
         var maincontent = getMaincontent();
         if (maincontent)
         {
            maincontent.className = maincontent.className + ' halfOpaque';
         }
      }      
      popupShowing = false;
   }

   var iframe = document.getElementById('popupIFrame');

   if (!iframe.contentWindow)
   {
      setTimeout('updatePopupSize()', 20);
      return;
   }
   
   var popupContent = iframe.contentWindow.document.getElementById('popupContent');
   if (popupContent)
   {  
      popup.style.width = iframe.style.width = (popupContent.offsetWidth) + 'px';
      popup.style.height = iframe.style.height = (popupContent.offsetHeight) + 'px';  
   }
}



/* ----------------- Help Box --------------------- */

var highlight = false;

function showHelpText(text)
{
   var body = document.getElementById('helpTextBody');
   if (body)
   {
      body.parentNode.removeChild(body);
   }
   
   var container = document.getElementById('helpTextContainer');
   body = document.createElement('div');
   body.id = 'helpTextBody';
   body.innerHTML = text;
   container.appendChild(body);

   highlightHelpBox(highlight);
}

function helpTopicSelected(select)
{
   if (select.value)
   {
      highlight = false;
      showHelpText('Hilfe ist im Anmarsch ...');
      helpBox.getHelpText(select.value, showHelpText);
   }
}

function showHelpTopic(topic, pHighlight)
{
   highlight = pHighlight;
   helpBox.getHelpText(topic, showHelpText);
}

function highlightHelpBox(highlight)
{
   var helpBox = document.getElementById('helpBox');
   
   if (helpBox)
   {
      if (highlight)
      {
         helpBox.className = 'helpBox formBox';
      }
      else
      {
         helpBox.className = 'infoBox formBox';
      }
   }
}



var objectIdCounter = 1;

function getObjectId(object)
{   
   if (!object)
   {
     return -1;
   }
   
   if (!object.nbIntObjId)
   {
      object.nbIntObjId = objectIdCounter++;
   }
   
   return object.nbIntObjId;
}



