
/**
@File:    BrowserUtil.js
@Author:  tianke
@Description: Access Browers
example:
var width  =  BrowserUtil.getBrowserWidth();
var height =  BrowserUtil.getBrowserHeight();
var object =  BrowserUtil.getParentByTagName();
void BrowserUtil.addOnLoadHandler(Function());
**/


//------------------------------
//Function:   BrowserUtil()
//Description:   Broswer Base class
//Inputs:   <none>
//Returns:  <Nothing>
//------------------------------
function BrowserUtil() 
{
};
//------------------------------
//Function:  getBrowserWidth()
//Description: Get Brower Width    
//Inputs:    <none>
//Returns:   <Number>       
//------------------------------
BrowserUtil.getBrowserWidth = function() 
{
  var width = window.innerWidth != null ? window.innerWidth : document.documentElement && document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body ? document.body.clientWidth : 0;
  return width;
};
//------------------------------
//Function:   getBrowserHeight()
//Description:   Get Brower Height
//Inputs:   <none>
//Returns:  <Number>
//------------------------------
BrowserUtil.getBrowserHeight = function() 
{
  var height = window.innerHeight != null ? window.innerHeight : document.documentElement && document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body ? document.body.clientHeight : 0;
  return height;
};

//------------------------------
//Function:   getParentByTagName()
//Description: 
//Inputs:    <Element,String> Element  
//Returns:   <Object>  The top parent object returns null or its parent. 
//------------------------------
BrowserUtil.getParentByTagName = function(element, tagName)
{
  var parent = element.parentNode ? element.parentNode : parentElement ;
  var upperCaseTagName = tagName.toUpperCase();
  while(parent != null && (parent.tagName.toUpperCase() != upperCaseTagName ) ) 
  {
    parent = parent.parentNode ? parent.parentNode : parent.parentElement;
  }
  return parent;
};

//------------------------------
//Function:   getElementPosition()
//Description: 
//Inputs:    <Element> Element  
//Returns:   <Object>   Element(x,y,width,height)
//------------------------------

function getElementPosition(element) {
    var result = new Object();
    result.x = 0;
    result.y = 0;
    result.width = 0;
    result.height = 0;
    if (element.offsetParent)
    {
        result.x = (element.offsetLeft + element.clientLeft);
        result.y = (element.offsetTop + element.clientTop);
        var parent = element.offsetParent;
        while (parent)
        {
            result.x += (parent.offsetLeft + parent.clientLeft);
         
            result.y += (parent.offsetTop + parent.clientTop);
            var parentTagName = parent.tagName.toLowerCase();
  
            if (parentTagName != "table" &&
                parentTagName != "body" && 
                parentTagName != "html" && 
                parentTagName != "div" && 
                parent.clientTop && 
                parent.clientLeft) {
                result.x += (parent.clientLeft);
                result.y += (parent.clientTop + parent.clientTop);
            }
            parent = parent.offsetParent;
        }
    }
    else if (element.left && element.top) 
    {
        result.x = element.left + element.clientLeft;
        result.y = element.top + element.clientTop;
    }
    else 
    {
        if (element.x) 
            result.x = element.x + element.clientLeft;
    
        if (element.y) 
            result.y = element.y  + element.clientTop;
       
    }
    if (element.offsetWidth && element.offsetHeight)
    {
        result.width = element.offsetWidth;
        result.height = element.offsetHeight;
    }
    else if (element.style && element.style.pixelWidth && element.style.pixelHeight)
    {
        result.width = element.style.pixelWidth;
        result.height = element.style.pixelHeight;
    }

    return result;
};


//------------------------------
//Function:   getClientPosition()
//Description: 
//Inputs:    <Event> Element  
//Returns:   <Object>   Element(x,y)
//------------------------------

function getClientPosition(event) {
    var result = new Object();
    result.x = 0;
    result.y = 0;
    var current_x = 0;
    var current_y = 0;
    if(document.documentElement.scrollTop || document.documentElement.scrollLeft)
    { 
		current_x = document.documentElement.scrollLeft;
		current_y = document.documentElement.scrollTop;	
	}
	else if (document.body.scrollTop || document.body.scrollLeft)
	{ 
		current_x = document.body.scrollLeft;
		current_y = document.body.scrollTop;
	}
    result.x = event.clientX + current_x;
	result.y = event.clientY + current_y;		
    return result;
};




//------------------------------
//Function: addOnLoadHandler();
//Description:  
//Inputs:   <Function> newHandler The Function to execute on page load
//Returns:   <none>
//------------------------------
BrowserUtil.addOnLoadHandler = function(newHandler){
   if(newHandler){
	  if(window.onload){
		 var oldHandler = window.onload;
		 window.onload = function(){
		   oldHandler();
		   newHandler();
		 }
	  }else{
	     window.onload = newHandler;
	  }     
   }
};



