//$Id: ZDBUtil.js,v 1.1 2008/11/25 16:25:50 sathyav Exp $

var ZDBUtil = new function()
{
	
this.getParentWithAttr = function(childNode,parentAttrName)
		{
				var parNode = childNode.parentNode;
				while((parNode != null) && (parNode.getAttribute != null))
				{
				if(parNode.getAttribute(parentAttrName) != null)
				{
				return parNode;
				}
				parNode = parNode.parentNode;
				}
				return null;
		}

this.stopEventBubble = function(event)
    {
        if(event && event.stopPropagation)
        {
            event.preventDefault();
            event.stopPropagation();
        }
        if(window.event) 
        {
            window.event.cancelBubble = true;
            window.event.returnValue = false;
        }
    }

this.setNamedChildEls = function(parentEl,objToSetOn,attributeName)
		{
				if(attributeName == null){attributeName = "elname";}
				if(objToSetOn[attributeName + "Set"] == true)
				{
					return;
				}
				var els = parentEl.getElementsByTagName("*");
				for(var i=0, j = els.length; i < j; i++)
				{
					var name = els[i].getAttribute(attributeName);
					if(name != null){ objToSetOn[name] = els[i];}
				}
				objToSetOn[attributeName + "Set"] = true;
		}


/*this.addIframe = function(el)
{
	if(((el.iframe)!=null)){return;}
	if( (BROWSER.NETSCAPE) || (BROWSER.FIREFOX) )
	{
		var dummyIframe = document.createElement("div");
		dummyIframe.style.overflow = "auto";
		iframe = dummyIframe;
	}
	else
	{
	var iframe = document.createElement("iframe");
		if(window["CONTEXT_PATH"] != null)
		{
			iframe.src= "about:blank";
		}
	}
	iframe.style.width=el.offsetWidth-4;
	iframe.style.height=el.offsetHeight-4;
	iframe.scrolling = "no";
	iframe.frameBorder = 0;
	iframe.className = "alpha0";
	iframe.style.background = "none";
	iframe.style.border = "none";
	iframe.style.position="absolute";
	iframe.style.left = ZDBUtil.getObjLeft(el);
	iframe.style.top = ZDBUtil.getObjTop(el);
	
	document.body.appendChild(iframe);
	el.iframe = iframe;
}*/

this.removeIframe = function(el)
{
	if((el.iframe)!=null)
	{
	 document.body.removeChild(el.iframe);
	 el.iframe=null;
	}
}

this.addShadow = function(el)
{
  if(el.shadowAdded)
  {
  return;
  }
  ZDBUtil.removeNonElements(el);
  var shadow = (BROWSER.IE)?document.getElementById("shadowIE"):document.getElementById("shadow");
  var shadowTBL = shadow.cloneNode(true);
  shadowTBL.id="";
  ZDBUtil.setNamedChildEls(shadowTBL,shadowTBL);
  ZDBUtil.removeNonElements(shadowTBL.content);
  var oldVisibility = "visible";
  var oldDisplay = "";
 
  if(el.style.visibility!=null)
  {
    oldVisibility = el.style.visibility;
  }
 
  if(el.style.display!=null)
  {
    oldDisplay = el.style.display;
  }
 
  el.style.visibility="hidden";
  el.style.display="block";
  if(BROWSER.IE)
  {
    if(el.offsetHeight == 0)
    {
      var nextSib = el.nextSibling;
      var parNode = el.parentNode;
      var reattach = true;
      document.body.appendChild(el);
    }
    var elHeight = parseInt(el.offsetHeight);
    var elWidth = parseInt(el.offsetWidth);
    shadowTBL.shadowWidth.style.width= (elWidth - 10) + "px";
    shadowTBL.shadowHeight.style.height= (elHeight - 16) +"px";
    if(reattach)
    {
      if(parNode != null)
      { 
        if(nextSib != null)
        {
          parNode.insertBefore(el,nextSib);
        }
        else
        {
          parNode.appendChild(el);  
        }
      }
      else
      {
        document.body.removeChild(el);
      }
    }
  }
  shadowTBL.style.display="";
  shadowTBL.content.appendChild(el.childNodes[0]);
  el.appendChild(shadowTBL);
  el.style.visibility=oldVisibility;
  //el.style.display = oldDisplay;
  el.shadowAdded = true;
}

this.removeNonElements = function(el)
    {
      if(el && !el.elTrimmed)
      {
        var childEls = el.childNodes;
        for(var i=childEls.length -1;i > -1; i--)
        {
          if(!childEls[i].getElementsByTagName)
          {
            el.removeChild(childEls[i]);
          }
        }
        el.elTrimmed = true;
      }
      
}

this.addIframe = function(el)
{
	if(((el.iframe)!=null)){return;}
	if( (BROWSER.NETSCAPE) || (BROWSER.FIREFOX) )
	{
		var dummyIframe = document.createElement("div");
		dummyIframe.style.overflow = "auto";
		iframe = dummyIframe;
	}
	else
	{
	var iframe = document.createElement("iframe");
		if(window["CONTEXT_PATH"] != null)
		{
			iframe.src= "about:blank";
		}
	}
	iframe.style.width=el.offsetWidth-4;
	iframe.style.height=el.offsetHeight-4;
	iframe.scrolling = "no";
	iframe.frameBorder = 0;
	iframe.className = "alpha0";
	iframe.style.background = "none";
	iframe.style.border = "none";
	iframe.style.position="absolute";
	iframe.style.left = ZDBUtil.getObjLeft(el);
	iframe.style.top = ZDBUtil.getObjTop(el);
	
	document.body.appendChild(iframe);
	el.iframe = iframe;
}

this.getObjTop = function(obj)
    {
    	if(!obj)
    	{
            throw new Error("NULL Object. findObjTop returns null");
            return null;
        }
        
        var curtop = 0;
    	if (document.getElementById || document.all)
        {
          while (obj.offsetParent)
          {
            curtop += obj.offsetTop - obj.scrollTop;
            obj = obj.offsetParent;
          }
    	}
        else if (document.layers)
        {
          curtop += obj.y - obj.scrollTop;
    	}
    	return curtop;
    }
    
this.getObjLeft = function(obj)
    {
      if(!obj)
      {
        throw new Error("NULL Object. getObjLeft returns null");
        return null;
      }
      var curleft = 0;
      if (document.getElementById || document.all)
      {
        while (obj.offsetParent)
        {
          curleft += obj.offsetLeft - obj.scrollLeft;
          obj = obj.offsetParent;
        }
      }
      else if (document.layers)
      {
        curleft += obj.x - obj.scrollLeft;
      }
      return curleft;
    }

}


//general function

function findPosX(obj) 
{
	var curleft = 0;
	if (document.getElementById || document.all) 
	{
		while (obj.offsetParent) 
	{
	curleft += obj.offsetLeft
	obj = obj.offsetParent;
	}
	} else if (document.layers) 
	{
		curleft += obj.x;
	}
	return curleft;
	}
	function findPosY(obj) 
	{
	var curtop = 0;
	if (document.getElementById || document.all) 
	{
	while (obj.offsetParent) 
	{
		curtop += obj.offsetTop
		obj = obj.offsetParent;
	}
	} else if (document.layers) 
	{
		curtop += obj.y;
	}
	return curtop;
}
