//J FLINT'S XBROWSER JAVASCRIPT TOOLS//
function XBrowserSession()
{
	this.ScreenWidth = FindScreenWidth;
	this.ScreenHeight = FindScreenHeight;
	this.ClientWidth = FindClientWidth;
	this.ClientHeight = FindClientHeight;
	this.WidthOffset = GetWidthOffset;
	this.HeightOffset = GetHeightOffset;
	this.Forms = document.forms;
	this.BrowserVersion = DetectBrowser;
}

function DetectBrowser()
{
	var sTmp = "OTHER";
	if (document.layers)
	{
		sTmp = "NS4";
	}
	if (document.all)
	{
		sTmp = "IE4";
	}
	if (document.getElementById)
	{
		sTmp = "IE5+";
	}
	if (document.getElementById & !document.all)
	{
		sTmp = "NS6";
	}
	if(navigator.userAgent.indexOf("Firefox") != -1)
	{
   		sTmp = "FIREFOX";
	}
	return sTmp;
}
function FindScreenWidth()
{
	var iTmp = new Number();
	if (document.all) 
    { 
    	iTmp = screen.availWidth;
   	} 
	else if (document.layers || document.getElementById) 
   	{ 
   		 iTmp = top.screen.availWidth;
   	}
	return iTmp;
}
function FindScreenHeight()
{
	var iTmp = new Number();
	if (document.all) 
    { 
    	iTmp = screen.availHeight;
   	} 
	else if (document.layers || document.getElementById) 
   	{ 
   		 iTmp = top.screen.availHeight;
   	}
	return iTmp;
}
function FindClientWidth()
{
	var iTmp = new Number();
	if (document.layers)
	{
		iTmp = window.innerWidth;
	}
	else
	{
		iTmp = document.body.clientWidth;
	}
	return iTmp;
}

function FindClientHeight()
{
	var iTmp = new Number();
	if (document.layers)
	{
		iTmp = window.innerHeight;
	}
	else
	{
		iTmp = document.body.clientHeight;
	}
	return iTmp;
}

function GetWidthOffset()
{
	var val1 = FindScreenWidth();
	var val2 = FindClientWidth();
	return val1 - val2;
}
function GetHeightOffset()
{
	var val1 = FindScreenHeight();
	var val2 = FindClientHeight();
	return val1 - val2;
}


function GetObj(name)
{
	if (document.all)
    {
    	for (i=0;i < document.all.length; i++)
        {
        	if (document.all.item(i).name == name)
            {
            	return(document.all.item(i));
            }
        	if (document.all.item(i).id == name)
            {
            	return(document.all.item(i));
            }
        }
    }
    else if (document.layers)
    {
    	if (document.layers[name])
        {
        	return(document.layers[name]);
        }
    }
    else if (document.getElementById)
    {
    	if (document.getElementById(name))
        {
        	return(document.getElementById(name));
        }
    }
    else
    {
    	return false;
    }
}

function SetVisible(obj,bVal)
{
	if (!obj)
	{
		return false;
	}
	if (obj.visibility) //If Netscape 4.0 and simular browsers
	{
    	if (bVal)
        {
        	obj.visibility = "show";
        }
      	else
        {
         	obj.visibility = "hide";
        }	
	}
	else if (obj.style)
	{
		if (obj.style.visibility)  //Modern Browser Compatibility
		{
       		if (bVal)
       		{
       			obj.style.visibility = "visible";
        	}
       		else
        	{
       			obj.style.visibility = "hidden";
        	}
		}
	}
}

function MoveLayer(obj, x, y)
{		
 	if (!obj)
 	{
 		return false;
 	}
 	if (document.layers)
     {
		obj.moveTo(x, y);
 	 }
     else
     {
 		obj.style.left = x + 'px';
 	  	obj.style.top  = y + 'px';
 	 }
}

function clipLayer(obj, clipleft, cliptop, clipright, clipbottom)
   {		
   if(!obj)
   {
   		return false;
   }
   if (document.layers)
      {
	  obj.clip.left = clipleft;
	  obj.clip.top = cliptop;
	  obj.clip.right  = clipright;
	  obj.clip.bottom = clipbottom;
	  }
   else
      {
	  var newWidth = clipright - clipleft;
	  var newHeight = clipbottom - cliptop;
	  obj.style.height = newHeight;
	  obj.style.width = newWidth;
	  obj.style.top	= cliptop + "px";
	  obj.style.left = clipleft + "px";
	  }
   }


function Nothing()
{
   return false;
}

function ToBool(sInput)
{
	var sTemp = new String(sInput);
	switch(sInput.toLowerCase())
	{
		case 'true':
			return true;
			break;
		case 'false':
			return false;
			break;
		case 'y':
			return true;
			break;
		case 'n':
			return false;
			break;
		case '1':
			return true;
			break;
		case '0':
			return true;
			break;
		default:
			return false;
			break;
	}
}

//*******************************//
//Cross Browser Event Structure  //
//Created by JLF with the        //
//City of Phoenix, Arizona       //
//jesse.flint@phoenix.gov        // 
//-Created Sometime in 2003      //     
//-Updated 2005 for FireFox      //
//*******************************//
var undefined;
function getFirstNodeOfType(nodeType,parent)
{
	parent = (parent) ? parent : document;
	for(var m = parent.firstChild; m != null; m = m.nextSibling )
	{
		switch (nodeType)
		{
			case Node.ELEMENT_NODE:
				if (m.nodeType == 1) return m;
				break;
			case Node.TEXT_NODE:
				if (m.nodeType == 3) return m;
				break;
		}
	}
	return null;
}

function getFirstElementOfClass(tagName,className,root)
{
    var nodeOfInterest, kids;
    root = (root) ? root : window.document;
    kids = root.getElementsByTagName(tagName);
    for ( var j = 0; j < kids.length; j++ )
    {
        if (kids[j].className.indexOf(className) != -1)
        {
        	nodeOfInterest = kids[j];
        }
    }
    return nodeOfInterest;
}

function getElementsByClassName(tagName,className,root)
{
    var nodesOfInterest, kids;
    root = (root) ? root : window.document;
    nodesOfInterest = new Array();
    kids = root.getElementsByTagName(tagName);
    for (var j = 0; j < kids.length; j++)
    {
        if (kids[j].className.indexOf(className) != -1 )
        {
        	nodesOfInterest[nodesOfInterest.length] = kids[j];
        }
    }
    return nodesOfInterest;
}

function getFirstAncestorOfTagName(n,tagName) {
	//alert('entering recurse');
	if (!n.parentNode) {
		return;
	} else if (n.parentNode.nodeName == tagName.toUpperCase()) {
		return n.parentNode;
	} else {
		getFirstAncestorOfTagName(n.parentNode,tagName);
	}
}

function getFirstChildOfTagName(n,tagName) {
	tagName = tagName.toUpperCase();
	if (n.hasChildNodes()) {
		for ( var i = 0; i < n.childNodes.length; i++ ) {
			if ( n.childNodes[i].nodeName == tagName ) {
				return n.childNodes[i];
			}
		}
	}
	return;
}

function addEventListeners(EventSource,EventType,EventHandler,captures) {
	captures = (captures) ? captures : false;
	if ( document.addEventListener ) {
		EventSource.addEventListener(EventType,EventHandler,captures);
	} else if (document.attachEvent) {
		EventType = "on" + EventType;
		EventSource.attachEvent(EventType,EventHandler);
	} else {
		EventType = "on" + EventType;
		EventSource[EventType] = EventHandler;
	}
}

function removeEventListeners(EventSource,EventType,EventHandler,captures) {
	captures = (captures) ? captures : false;
	if ( document.removeEventListener ) {
		EventSource.removeEventListener(EventType,EventHandler,captures);
	} else if (document.detachEvent) {
		EventType = "on" + EventType;
		EventSource.detachEvent(EventType,EventHandler);
	} else {
		EventType = "on" + EventType;
		EventSource[EventType] = null;
	}
}

function getEvent(evt) {
	return (evt) ? evt : (window.event) ? window.event : null;
}

function getTarget(evt) {
	return (evt.target) ? evt.target : (evt.srcElement) ? evt.srcElement : null;
}

function getCurrentTarget(evt,currentTarget) {
	return  (evt.currentTarget) ? evt.currentTarget : (currentTarget) ? currentTarget : (this != window) ? this : null;
}

function getPos(n,evt) {
	if (n == 'X') {
		return (evt.pageX) ? evt.pageX : (document.documentElement.scrollLeft) ? (document.documentElement.scrollLeft + evt.clientX) : (document.body.scrollLeft) ? (document.body.scrollLeft + evt.clientX) : evt.clientX;
	} else {
		return (evt.pageY) ? evt.pageY : (document.documentElement.scrollTop) ? (document.documentElement.scrollTop + evt.clientY) : (document.body.scrollTop) ? (document.body.scrollTop + evt.clientY) : evt.clientY;
	}
}

function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function getInnerDimension(n) {
	if (n == 'W') {
			return (window.innerWidth) ? window.innerWidth : (document.documentElement.clientWidth) ? document.documentElement.clientWidth : (document.body.clientWidth) ? document.body.clientWidth : 0;
	} else {
			return (window.innerHeight) ? window.innerHeight : (document.documentElement.clientHeight) ? document.documentElement.clientHeight : (document.body.clientHeight) ? document.body.clientHeight : 0;	
	}
}

function bubbleCancel(evt) {
	if (!evt) return;
	if (evt.stopPropagation) {
		evt.stopPropagation();
		evt.preventDefault();
	} else if (typeof evt.cancelBubble != undefined) {
		evt.cancelBubble = true;
		evt.returnValue = false;
	} else {
		return false;
		evt = null;
	}
}
