/**
 *
 * The API performs tasks such as moving and hiding page elements 
 * (DIVs, layers or images) as well as getting and setting 
 * their attributes (such as size/position).
 *
 */

 
 
/**
 * Browser Sniffer
 *
 */
var ns4 = document.layers;
var op5 = (navigator.userAgent.indexOf("Opera 5")!=-1) ||(navigator.userAgent.indexOf("Opera/5")!=-1);
var op6 = (navigator.userAgent.indexOf("Opera 6")!=-1) ||(navigator.userAgent.indexOf("Opera/6")!=-1);
var agt = navigator.userAgent.toLowerCase();
var mac = (agt.indexOf("mac")!=-1);
var ie = (agt.indexOf("msie") != -1); 
var mac_ie = mac && ie;


var bFixIEPopup = navigator.appName.indexOf('Microsoft') != -1 && (navigator.appVersion.indexOf('MSIE 5') != -1 || navigator.appVersion.indexOf('MSIE 6') != -1);

iframeObj = null;   

function resizeFixMSIE(divId)
{
    if(bFixIEPopup && document.getElementById(divId))
    {   
        var pPopup = document.getElementById(divId);
        var iframeObj = document.createElement('IFRAME');
		
		iframeObj.id = divId + 'FixMSIE';
		iframeObj.style.position = 'absolute';
		iframeObj.style.display = 'none';
		iframeObj.style.zIndex = 1;
		iframeObj.border = '0px';
		iframeObj.src = 'about:blank';
		iframeObj.style.border = '0px';   
		document.body.appendChild(iframeObj);       
		     
		iframeObj.style.left = parseInt(pPopup.style.left) + 2;       
        iframeObj.style.top =  parseInt(pPopup.style.top) + 2;
            
	    iframeObj.style.width = (pPopup.offsetWidth - 4) + 'px'; 
	    iframeObj.style.height = (pPopup.offsetHeight - 4) + 'px' ;	 
        
        iframeObj.style.display = 'block';
        
        iframeObj.style.zIndex = 1;
        pPopup.style.zIndex = 2;      
    }
}

function hideFixMSIE(divId)
{
	if(bFixIEPopup && document.getElementById(divId + 'FixMSIE'))
    {
		document.body.removeChild(document.getElementById(divId + 'FixMSIE'));
	}	
}

/**
 * Get Object By ID
 *
 */
function getObject(objectId) 
{
  if(document.getElementById && document.getElementById(objectId)) 
  {
    return document.getElementById(objectId);
  } 
  else if (document.all && document.all(objectId)) 
  {
    return document.all(objectId);
  } 
  else if (document.layers && document.layers[objectId]) 
  {
    return getObjNN4(document,objectId);
  } 
  else 
  {
    return false;
  }
} 
 
/**
 * Get Style Object 
 *
 */
  
function getStyleObject(objectId) 
{
  if(document.getElementById && document.getElementById(objectId)) 
  {
    return document.getElementById(objectId).style;
  } 
  else if (document.all && document.all(objectId)) 
  {
    return document.all(objectId).style;
  } 
  else if (document.layers && document.layers[objectId]) 
  {
    return getObjNN4(document,objectId);
  } 
  else 
  {
    return false;
  }
}


/**
 * Find object (NS4 only) 
 *
 */
 
function getObjNN4(obj,name)
{
  var x = obj.layers;
  var foundLayer;
  for (var i=0;i<x.length;i++)
  {
    if (x[i].id == name)
		{
      foundLayer = x[i];
		}
    else if (x[i].layers.length)
		{
      var tmp = getObjNN4(x[i],name);
		}
    if (tmp) 
		{
  		foundLayer = tmp;
		}
  }
  return foundLayer;
}


/**
 * Get Element Height 
 *
 */
 
function getElementHeight(Elem) 
{
  if (ns4) 
  {
    var elem = getObjNN4(document, Elem);
    return elem.clip.height;
  } 
  else 
  {
    if(document.getElementById) 
    {
      var elem = document.getElementById(Elem);
    } 
  	else if (document.all)
    {
      var elem = document.all[Elem];
    }
    if (op5) 
    { 
      xPos = elem.style.pixelHeight;
    } 
    else 
    {
      xPos = elem.offsetHeight;
    }
    return xPos;
  } 
}


/**
 * Get Element Width
 *
 */
 
function getElementWidth(Elem) 
{
  if (ns4) 
  {
    var elem = getObjNN4(document, Elem);
    return elem.clip.width;
  } 
  else 
  {
    if(document.getElementById) 
    {
      var elem = document.getElementById(Elem);
    } 
    else if (document.all)
    {
      var elem = document.all[Elem];
    }
    if (op5) 
    {
      xPos = elem.style.pixelWidth;
    } 
    else 
    {
      xPos = elem.offsetWidth;
    }
    return xPos;
  }
}

function getTopLeft(sID, bAbsolute)
{
    var o=document.getElementById(sID);
    if(o==null)
    {
        return [0,0];
    }
    
    var top=o.offsetTop, left=o.offsetLeft;
    o=o.offsetParent;
    while(o)
    {
        if(document.all)
        {
            if(o.offsetParent)
            {
                if(o.scrollTop)top-=o.scrollTop;
                if(o.scrollLeft)left-=o.scrollLeft;
            }
        }
        else
        {
            if(o.scrollTop)top-=o.scrollTop;
            if(o.scrollLeft)left-=o.scrollLeft;
            // Mozilla bug
            if((o.tagName=='DIV')||(o.tagName=='TABLE'&&navigator.vendor=='Netscape'))
            top+=getAttrPixValue(o,'border-top-width')|0,left+=getAttrPixValue(o,'border-left-width')|0;
        }
        if(bAbsolute)
        {
            if(getStyle(o,'position') == 'absolute')
            {
                break;
            }
        }
        top+=o.offsetTop;
        left+=o.offsetLeft;
        o=o.offsetParent;
    }
    if(navigator.userAgent.indexOf('Mac')!=-1 && typeof(document.body.leftMargin)!='undefined')
    {
        left+=document.body.leftMargin,top+=document.body.topMargin;   // working?
    }
    return [top,left];
}


function getAttrPixValue(e,a)
{
    var px=0;
    if(window.getComputedStyle)
    {
        var css,sty=window.getComputedStyle(e,'');
        if(sty&&sty.getPropertyCSSValue)
        {
            css=sty.getPropertyCSSValue(a);
            if((css)&&css.primitiveType<=18){try{px=css.getFloatValue(5)|0;}catch(e){};}
        }
    }
    return px;
}

function getStyle(el,styleProp)
{
    if (el.currentStyle)
        var y = el.currentStyle[styleProp];
    else if (window.getComputedStyle)
        var y = document.defaultView.getComputedStyle(el,null).getPropertyValue(styleProp);
    return y;
}


/**
 * Get Image Width
 *
 */

function getImageWidth(myImage) 
{
  var x, obj;
  if (document.layers) 
  {
    var img = getImage(myImage);
    return img.width;
  } 
  else 
  {
    return getElementWidth(myImage);
  }
  return -1;
}


/**
 * Get Image Height 
 *
 */

function getImageHeight(myImage) 
{
  var y, obj;
  if (document.layers) 
  {
    var img = getImage(myImage);
    return img.height;
  } 
  else 
  {
    return getElementHeight(myImage);
  }
  return -1;
}


/**
 * Get Image Top  
 *
 */

function getImageTop(myImage) 
{
  var y, obj;
  if (document.layers) 
  {
    var img = getImage(myImage);
    if (img.container != null)
  	{
      return img.container.pageY + img.y;
  	}
    else
  	{
      return img.y;
  	}
  } 
  else 
  {
    return getElementTop(myImage);
  }
  return -1;
}


/**
 * Get Image Left
 *
 */

function getImageLeft(myImage) 
{
  var x, obj;
  if (document.layers) 
  {
    var img = getImage(myImage);
    if (img.container != null)
    {
      return img.container.pageX + img.x;
    }
    else
    {
      return img.x;
    }
  } 
  else 
  {
    return getElementLeft(myImage);
  }
  return -1;
}


/**
 * Move Page Element
 *
 */

function moveXY(myObject, x, y) 
{
  obj = getStyleObject(myObject);
  if (ns4) 
  {
    obj.top = y;
    obj.left = x;
  } 
  else 
  {
    if (op5) 
    {
      obj.pixelTop = y;
      obj.pixelLeft = x;
    } 
    else 
    {
      obj.top = y + 'px';
      obj.left = x + 'px';
    }	
  }
}


function getScrollY() 
{
    var scrOfY = 0;
    if( typeof( window.pageYOffset ) == 'number' ) 
    {
        // Netscape compliant
        scrOfY = window.pageYOffset;
    } 
    else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) 
    {
        // DOM compliant
        scrOfY = document.body.scrollTop;
    } 
    else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) 
    {
        // IE6 standards compliant mode
        scrOfY = document.documentElement.scrollTop;
    }
    return scrOfY;
}

function getScrollX() 
{
    var scrOfX = 0;
    if( typeof( window.pageYOffset ) == 'number' ) 
    {
        // Netscape compliant
        scrOfX = window.pageXOffset;
    } 
    else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) 
    {
        // DOM compliant
        scrOfX = document.body.scrollLeft;
    } 
    else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) 
    {
        // IE6 standards compliant mode
        scrOfX = document.documentElement.scrollLeft;
    }
    return scrOfX;
}

function getFrameWidth()
{
    var frameWidth = 0;
    if (self.innerWidth)
    {
        frameWidth = self.innerWidth;
    }
    else if (document.documentElement && document.documentElement.clientWidth)
    {
        frameWidth = document.documentElement.clientWidth;
    }
    else if (document.body)
    {
        frameWidth = document.body.clientWidth;
    }
    return frameWidth;
}

function getFrameHeight()
{
    var frameHeight = 0;
    if (self.innerHeight)
    {
        frameHeight = self.innerHeight;
    }
    else if (document.documentElement && document.documentElement.clientHeight)
    {
        frameHeight = document.documentElement.clientHeight;
    }
    else if (document.body)
    {
        frameHeight = document.body.clientHeight;
    }
    return frameHeight;
}
